diff --git a/.deployment b/.deployment index 1e42f16cade..7d94259b916 100644 --- a/.deployment +++ b/.deployment @@ -1,2 +1,2 @@ [config] -command = bash deploy.sh \ No newline at end of file +command = bash bin/azure-deploy.sh diff --git a/.eslintrc.js b/.eslintrc.js index 974a562c7c6..7710aa21263 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,23 +1,35 @@ module.exports = { - "plugins": [ ], - "extends": [ - "eslint:recommended" + 'plugins': [ + 'security' ], - "parser": "babel-eslint", - "env": { - "browser": true, - "commonjs": true, - "es6": true, - "node": true, - "mocha": true, - "jquery": true + 'extends': [ + 'eslint:recommended', + 'plugin:security/recommended' + ], + 'parser': 'babel-eslint', + 'env': { + 'browser': true, + 'commonjs': true, + 'es6': true, + 'node': true, + 'mocha': true, + 'jquery': true }, - "rules": { - "no-unused-vars": [ - "error", + 'rules': { + 'security/detect-object-injection' : 0, + 'no-unused-vars': [ + 'error', { - "varsIgnorePattern": "should|expect" + 'varsIgnorePattern': 'should|expect' } ] - } + }, + 'overrides': [ + { + 'files': ['lib/client/*.js'], + 'rules': { + 'security/detect-object-injection': 0 + } + } + ], }; \ No newline at end of file diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index ab1a7b17096..096ebf0bde8 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -25,6 +25,7 @@ jobs: analyze: name: Analyze runs-on: ubuntu-latest + if: github.ref == 'refs/heads/dev' && github.repository_owner == 'nightscout' strategy: fail-fast: false diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index e661a61ab7b..d867f073f9d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,34 +1,93 @@ -name: CI test +name: CI test and publish Docker image -on: [push, pull_request] +on: + push: + branches: + - master + - dev + pull_request: + branches: + - master + - dev jobs: - build: - - runs-on: ubuntu-16.04 - + test: + name: Run Tests + runs-on: ubuntu-latest strategy: matrix: - node-version: [12.x] + node-version: [12.x, 14.x] + mongodb-version: [4.2, 4.4] + + steps: + - name: Git Checkout + uses: actions/checkout@v2 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + + - name: Start MongoDB ${{ matrix.mongodb-version }} + uses: supercharge/mongodb-github-action@1.3.0 + with: + mongodb-version: ${{ matrix.mongodb-version }} + + - name: Install dependencies + run: npm install + - name: Run Tests + run: npm run-script test-ci + - name: Send Coverage + run: npm run-script coverage + + publish_dev: + name: Publish dev branch to Docker Hub + needs: test + runs-on: ubuntu-latest + if: github.ref == 'refs/heads/dev' && github.repository_owner == 'nightscout' + env: + DOCKER_IMAGE: nightscout/cgm-remote-monitor + steps: + - name: Login to Docker Hub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_USER }} + password: ${{ secrets.DOCKER_PASS }} + - name: Clean git Checkout + if: success() + uses: actions/checkout@v2 + - name: Build, tag and push the dev Docker image + if: success() + run: | + docker build --no-cache=true -t ${{ env.DOCKER_IMAGE }}:dev_${{ github.sha }} . + docker image push ${{ env.DOCKER_IMAGE }}:dev_${{ github.sha }} + docker tag ${{ env.DOCKER_IMAGE }}:dev_${{ github.sha }} ${{ env.DOCKER_IMAGE }}:latest_dev + docker image push ${{ env.DOCKER_IMAGE }}:latest_dev + publish_master: + name: Publish master branch to Docker Hub + needs: test + runs-on: ubuntu-latest + if: github.ref == 'refs/heads/master' && github.repository_owner == 'nightscout' + env: + DOCKER_IMAGE: nightscout/cgm-remote-monitor steps: - - uses: actions/checkout@v1 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node-version }} - - name: Install dependencies - run: npm install - - name: Install MongoDB - run: | - wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add - - echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list - sudo apt-get update - sudo apt-get install -y mongodb-org - sudo apt-get install -y --allow-downgrades mongodb-org=4.4.0 mongodb-org-server=4.4.0 mongodb-org-shell=4.4.0 mongodb-org-mongos=4.4.0 mongodb-org-tools=4.4.0 - - name: Start MongoDB - run: sudo systemctl start mongod - - name: Run Tests - run: npm run-script test-ci - - name: Send Coverage - run: npm run-script coverage + - name: Login to Docker Hub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_USER }} + password: ${{ secrets.DOCKER_PASS }} + - name: Clean git Checkout + if: success() + uses: actions/checkout@v2 + - name: get-npm-version + if: success() + id: package-version + uses: martinbeentjes/npm-get-version-action@master + - name: Build, tag and push the master Docker image + if: success() + run: | + docker build --no-cache=true -t ${{ env.DOCKER_IMAGE }}:${{ steps.package-version.outputs.current-version }} . + docker image push ${{ env.DOCKER_IMAGE }}:${{ steps.package-version.outputs.current-version }} + docker tag ${{ env.DOCKER_IMAGE }}:${{ steps.package-version.outputs.current-version }} ${{ env.DOCKER_IMAGE }}:latest + docker image push ${{ env.DOCKER_IMAGE }}:latest diff --git a/.gitignore b/.gitignore index 1cf7ab06f2f..925a4f2feaa 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ bundle/bundle.out.js *.iml my.env my.*.env +*.pem static/bower_components/ .*.sw? @@ -28,5 +29,4 @@ npm-debug.log /cgm-remote-monitor.njsproj /cgm-remote-monitor.sln /obj/Debug -/bin /*.bat diff --git a/.nvmrc b/.nvmrc index 89da89da65c..19c4c189d36 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -10.16.0 \ No newline at end of file +14.15.3 diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 78b056b8dbc..00000000000 --- a/.travis.yml +++ /dev/null @@ -1,30 +0,0 @@ -sudo: required -dist: xenial - -node_js-steps: &node_js-steps - language: node_js - before_install: - - if [[ `npm --version` != "6.4.1" ]]; then npm install -g npm@latest; npm --version; fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; fi - # https://github.com/Homebrew/homebrew-core/issues/26358 - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew unlink python; fi - # "brew install" can succeed but return 1 if it has "caveats". - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install mongodb || true; fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew services start mongodb; fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install docker || true; fi - script: make travis - after_success: - - nvm version - - if [[ ! -z "$DOCKER_USER" ]]; then docker login -u ${DOCKER_USER} -p ${DOCKER_PASS} && git checkout -- . && git clean -fd . && make docker_release; fi - after_script: make report - services: - - mongodb - - docker -matrix: - allow_failures: - node_js: "node" - include: - - node_js: "10" - <<: *node_js-steps - - node_js: "12" # Latest Node is not supported, and recommend, but we'll test it to know incompatibility issues - <<: *node_js-steps diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7beea2d51a3..ddc20c1620e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -15,7 +15,6 @@ - [List of Contributors](#list-of-contributors) - [Core developers, contributing developers, coordinators and documentation writers](#core-developers-contributing-developers-coordinators-and-documentation-writers) - [Plugin contributors](#plugin-contributors) - - [Translators](#translators) - [List of all contributors](#list-of-all-contributors) @@ -35,6 +34,11 @@ [coverage-url]: https://coveralls.io/r/nightscout/cgm-remote-monitor?branch=master [discord-img]: https://img.shields.io/discord/629952586895851530?label=discord%20chat [discord-url]: https://discord.gg/rTKhrqz +[example-env-template]: docs/example-template.env + +## Translations + +Please visit our [project in Crowdin](https://crowdin.com/project/nightscout) to translate Nigthscout. If you want to add a new language, please get in touch with the dev team in [Discord][discord-url]. ## Installation for development @@ -46,7 +50,7 @@ Nightscout is a Node.js application. The basic installation of the software for dependency installation has to be done using a non-root user - _do not use root_ for development and hosting the software! 3. Get a Mongo database by either installing Mongo locally, or get a free cloud account from mLab or MongoDB Atlas. -4. Configure Nightscout by copying `my.env.template` to `my.env` and run it - see the next chapter in the instructions +4. Configure Nightscout by copying [`docs/example-template.env`][example-env-template] to `my.env` and run it - see the next chapter in the instructions ## Develop on `dev` @@ -54,7 +58,7 @@ We develop on the `dev` branch. All new pull requests should be targeted to `dev You can get the `dev` branch checked out using `git checkout dev`. -Once checked out, install the dependencies using `npm install`, then copy the included `my.env.template`file to `my.env` and edit the file to include your settings (like the Mongo URL). Leave the `NODE_ENV=development` line intact. Once set, run the site using `npm run dev`. This will start Nightscout in the development mode, with different code packaging rules and automatic restarting of the server using nodemon, when you save changed files on disk. The client also hot-reloads new code in, but it's recommended to reload the website after changes due to the way the plugin sandbox works. +Once checked out, install the dependencies using `npm install`, then copy the included [`docs/example-template.env`][example-env-template] to `my.env` file to `my.env` and edit the file to include your settings (like the Mongo URL). Leave the `NODE_ENV=development` line intact. Once set, run the site using `npm run dev`. This will start Nightscout in the development mode, with different code packaging rules and automatic restarting of the server using nodemon, when you save changed files on disk. The client also hot-reloads new code in, but it's recommended to reload the website after changes due to the way the plugin sandbox works. Note the template sets `INSECURE_USE_HTTP` to `true` to enable the site to work over HTTP in local development. @@ -188,8 +192,6 @@ Also if you can't code, it's possible to contribute by improving the documentati | Core developers: | [@jasoncalabrese] [@MilosKozak] [@PieterGit] [@sulkaharo] | | Former Core developers: (not active): | [@bewest] | | Contributing developers: | [@jpcunningh] [@scottleibrand] [@komarserjio] [@jweismann] | -| Release coordination 0.10.x: | [@PieterGit] [@sulkaharo] | -| Release coordination 0.11.x: | [@PieterGit] | | Issue/Pull request coordination: | Please volunteer | | Cleaning up git fork spam: | Please volunteer | | Documentation writers: | [@andrew-warrington] [@unsoluble] [@tynbendad] [@danamlewis] [@rarneson] | @@ -230,41 +232,6 @@ Also if you can't code, it's possible to contribute by improving the documentati | [`upbat` (Uploader Battery)](README.md#upbat-uploader-battery)| [@jpcunningh] | Please volunteer | | [`xdrip-js` (xDrip-js)](README.md#xdrip-js-xdrip-js)| [@jpcunningh] | Please volunteer | -### Translators - -See `/translations` of your Nightscout, to view the current translation coverage and the missing items. -Languages with less than 90% coverage will be removed in a future Nightscout versions. - -| Language | List of translators | Status -| ------------- | -------------------- |-------------------- | -| Български (`bg`) |Please volunteer| OK | -| Čeština (`cs`) |Please volunteer|OK | -| Deutsch (`de`) |[@viderehh] [@herzogmedia] |OK | -| Dansk (`dk`) | [@janrpn] |OK | -| Ελληνικά (`el`)|Please volunteer|Needs attention: 68.5%| -| English (`en`)|Please volunteer|OK| -| Español (`es`) |Please volunteer|OK| -| Suomi (`fi`)|[@sulkaharo] |OK| -| Français (`fr`)|Please volunteer|OK| -| עברית (`he`)| [@jakebloom] |OK| -| Hrvatski (`hr`)|[@OpossumGit]|OK| -| Italiano (`it`)|Please volunteer|OK| -| 日本語 (`ja`)|[@LuminaryXion]|Working on this| -| 한국어 (`ko`)|Please volunteer|Needs attention: 80.6%| -| Norsk (Bokmål) (`nb`)|Please volunteer|OK| -| Nederlands (`nl`)|[@PieterGit]|OK| -| Polski (`pl`)|[@Bartlomiejsz]|OK| -| Português (Brasil) (`pt`)|Please volunteer|OK| -| Română (`ro`)|Please volunteer|OK| -| Русский (`ru`)|[@apanasef]|OK| -| Slovenčina (`sk`)|Please volunteer|OK| -| Svenska (`sv`)|Please volunteer|OK| -| Türkçe (`tr`)|[@diabetlum]|OK| -| 中文(简体) (`zh_cn`) | [@jizhongwen]|OK| -| 中文(繁體) (`zh_tw`) | [@jizhongwen]|Needs attention: 25.0% -| 日本語 (`ja_jp`) | [@LuminaryXion]| - - ### List of all contributors | Contribution area | List of contributors | | ------------------------------------- | -------------------- | diff --git a/Dockerfile.example b/Dockerfile similarity index 65% rename from Dockerfile.example rename to Dockerfile index 89a43f43c15..0c69448193b 100644 --- a/Dockerfile.example +++ b/Dockerfile @@ -1,6 +1,6 @@ -FROM node:10-alpine +FROM node:14.15.3-alpine -MAINTAINER Nightscout Contributors +LABEL maintainer="Nightscout Contributors" RUN mkdir -p /opt/app ADD . /opt/app @@ -15,4 +15,4 @@ RUN npm install && \ EXPOSE 1337 -CMD ["node", "server.js"] +CMD ["node", "lib/server/server.js"] diff --git a/Makefile b/Makefile index 1ca626ab88c..46a3c462131 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ MONGO_SETTINGS=MONGO_CONNECTION=${MONGO_CONNECTION} \ # coverage reporter's ability to instrument the tests correctly. # Hard coding it to the local with our pinned version is bigger for # initial installs, but ensures a consistent environment everywhere. -# On Travis, ./node_modules/.bin and other `nvm` and `npm` bundles are +# On GA, ./node_modules/.bin and other `nvm` and `npm` bundles are # inserted into the default `$PATH` enviroinment, making pointing to # the unwrapped mocha executable necessary. MOCHA=./node_modules/mocha/bin/_mocha @@ -25,7 +25,7 @@ ANALYZED=./coverage/lcov.info # Following token deprecated # export CODACY_REPO_TOKEN=e29ae5cf671f4f918912d9864316207c -DOCKER_IMAGE=nightscout/cgm-remote-monitor-travis +DOCKER_IMAGE=nightscout/cgm-remote-monitor all: test @@ -48,7 +48,7 @@ test_onebyone: test: ${MONGO_SETTINGS} ${MOCHA} --timeout 30000 --exit --bail -R tap ${TESTS} -travis: +ci_tests: python -c 'import os,sys,fcntl; flags = fcntl.fcntl(sys.stdout, fcntl.F_GETFL); fcntl.fcntl(sys.stdout, fcntl.F_SETFL, flags&~os.O_NONBLOCK);' # NODE_ENV=test ${MONGO_SETTINGS} \ # ${ISTANBUL} cover ${MOCHA} --report lcovonly -- --timeout 5000 -R tap ${TESTS} @@ -57,28 +57,25 @@ travis: docker_release: # Get the version from the package.json file $(eval DOCKER_TAG=$(shell cat package.json | jq '.version' | tr -d '"')) - $(eval NODE_VERSION=$(shell cat .nvmrc)) + $(eval BRANCH=$(lastword $(subst /, ,$(GITHUB_REF)))) # - # Create a Dockerfile that contains the correct NodeJS version - cat Dockerfile.example | sed -e "s/^FROM node:.*/FROM node:${NODE_VERSION}/" > Dockerfile # # Rebuild the image. We do this with no-cache so that we have all security upgrades, # since that's more important than fewer layers in the Docker image. docker build --no-cache=true -t $(DOCKER_IMAGE):$(DOCKER_TAG) . - # Push an image to Docker Hub with the version from package.json: - docker push $(DOCKER_IMAGE):$(DOCKER_TAG) # # Push the master branch to Docker hub as 'latest' - if [ "$(TRAVIS_BRANCH)" = "master" ]; then \ + if [ "$(BRANCH)" = "master" ]; then \ docker tag $(DOCKER_IMAGE):$(DOCKER_TAG) $(DOCKER_IMAGE):latest && \ + docker push $(DOCKER_IMAGE):$(DOCKER_TAG) docker push $(DOCKER_IMAGE):latest; \ fi # # Push the dev branch to Docker Hub as 'latest_dev' - if [ "$(TRAVIS_BRANCH)" = "dev" ]; then \ + if [ "$(BRANCH)" = "dev" ]; then \ docker tag $(DOCKER_IMAGE):$(DOCKER_TAG) $(DOCKER_IMAGE):latest_dev && \ + docker push $(DOCKER_IMAGE):$(DOCKER_TAG) docker push $(DOCKER_IMAGE):latest_dev; \ fi - rm -f Dockerfile -.PHONY: all coverage docker_release report test travis +.PHONY: all coverage docker_release report test ci_tests diff --git a/Procfile b/Procfile index 489b2700aca..ac69b0a7601 100644 --- a/Procfile +++ b/Procfile @@ -1 +1 @@ -web: node server.js +web: node lib/server/server.js diff --git a/README.md b/README.md index b6860841242..767d954eeca 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) [discord-url]: https://discord.gg/rTKhrqz [heroku-img]: https://www.herokucdn.com/deploy/button.png [heroku-url]: https://heroku.com/deploy?template=https://github.com/nightscout/cgm-remote-monitor -[update-img]: update.png +[update-img]: docs/update.png [update-fork]: http://nightscout.github.io/pages/update-fork/ [original]: https://github.com/rnpenguin/cgm-remote-monitor @@ -104,6 +104,7 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) - [`bage` (Battery Age)](#bage-battery-age) - [`treatmentnotify` (Treatment Notifications)](#treatmentnotify-treatment-notifications) - [`basal` (Basal Profile)](#basal-basal-profile) + - [`bolus` (Bolus Rendering)](#bolus-bolus-rendering) - [`bridge` (Share2Nightscout bridge)](#bridge-share2nightscout-bridge) - [`mmconnect` (MiniMed Connect bridge)](#mmconnect-minimed-connect-bridge) - [`pump` (Pump Monitoring)](#pump-pump-monitoring) @@ -163,7 +164,7 @@ Some features may not work with devices/browsers on the older end of these requi ## Windows installation software requirements: -- [Node.js](http://nodejs.org/) Latest Node 12 LTS. Node versions that do not have the latest security patches will not work. Use [Install instructions for Node](https://nodejs.org/en/download/package-manager/) or use `setup.sh`) +- [Node.js](http://nodejs.org/) Latest Node 12 LTS. Node versions that do not have the latest security patches will not work. Use [Install instructions for Node](https://nodejs.org/en/download/package-manager/) or use `bin/setup.sh`) - [MongoDB](https://www.mongodb.com/download-center?jmp=nav#community) 3.x or later. MongoDB 2.4 is only supported for Raspberry Pi. As a non-root user clone this repo then install dependencies into the root of the project: @@ -294,6 +295,8 @@ To learn more about the Nightscout API, visit https://YOUR-SITE.com/api-docs/ or ### Predefined values for your browser settings (optional) * `TIME_FORMAT` (`12`)- possible values `12` or `24` + * `DAY_START` (`7.0`) - time for start of day (0.0 - 24.0) for features using day time / night time options + * `DAY_END` (`21.0`) - time for end of day (0.0 - 24.0) for features using day time / night time options * `NIGHT_MODE` (`off`) - possible values `on` or `off` * `SHOW_RAWBG` (`never`) - possible values `always`, `never` or `noise` * `CUSTOM_TITLE` (`Nightscout`) - Title for the main view @@ -311,7 +314,6 @@ To learn more about the Nightscout API, visit https://YOUR-SITE.com/api-docs/ or * The `linear` option has equidistant tick marks; the range used is dynamic so that space at the top of chart isn't wasted. * The `log-dynamic` is similar to the default `log` options, but uses the same dynamic range and the `linear` scale. * `EDIT_MODE` (`on`) - possible values `on` or `off`. Enables the icon allowing for editing of treatments in the main view. - * `BOLUS_RENDER_OVER` (1) - U value over which the bolus values are rendered on the chart if the 'x U and Over' option is selected. This value can be an integer or a float, e.g. 0.3, 1.5, 2, etc... ### Predefined values for your server settings (optional) * `INSECURE_USE_HTTP` (`false`) - Redirect unsafe http traffic to https. Possible values `false`, or `true`. Your site redirects to `https` by default. If you don't want that from Nightscout, but want to implement that with a Nginx or Apache proxy, set `INSECURE_USE_HTTP` to `true`. Note: This will allow (unsafe) http traffic to your Nightscout instance and is not recommended. @@ -468,12 +470,20 @@ To learn more about the Nightscout API, visit https://YOUR-SITE.com/api-docs/ or * `BAGE_URGENT` (`360`) - If time since last `Pump Battery Change` matches `BAGE_URGENT` hours, user will be issued a persistent warning of overdue change (default of 360 hours is 15 days). ##### `treatmentnotify` (Treatment Notifications) - Generates notifications when a treatment has been entered and snoozes alarms minutes after a treatment. Default snooze is 10 minutes, and can be set using the `TREATMENTNOTIFY_SNOOZE_MINS` [extended setting](#extended-settings). + Generates notifications when a treatment has been entered and snoozes alarms minutes after a treatment. + * `TREATMENTNOTIFY_SNOOZE_MINS` (`10`) - Number of minutes to snooze notifications after a treatment is entered + * `TREATMENTNOTIFY_INCLUDE_BOLUSES_OVER` (`0`) - U value over which the bolus will trigger a notification and snooze alarms ##### `basal` (Basal Profile) Adds the Basal pill visualization to display the basal rate for the current time. Also enables the `bwp` plugin to calculate correction temp basal suggestions. Uses the `basal` field from the [treatment profile](#treatment-profile). Also uses the extended setting: * `BASAL_RENDER` (`none`) - Possible values are `none`, `default`, or `icicle` (inverted) +##### `bolus` (Bolus Rendering) + Settings to configure Bolus rendering + * `BOLUS_RENDER_OVER` (`0`) - U value over which the bolus labels use the format defined in `BOLUS_RENDER_FORMAT`. This value can be an integer or a float, e.g. 0.3, 1.5, 2, etc. + * `BOLUS_RENDER_FORMAT` (`default`) - Possible values are `hidden`, `default` (with leading zero and U), `concise` (with U, without leading zero), and `minimal` (without leading zero and U). + * `BOLUS_RENDER_FORMAT_SMALL` (`default`) - Possible values are `hidden`, `default` (with leading zero and U), `concise` (with U, without leading zero), and `minimal` (without leading zero and U). + ##### `bridge` (Share2Nightscout bridge) Glucose reading directly from the Dexcom Share service, uses these extended settings: * `BRIDGE_USER_NAME` - Your username for the Share service. @@ -511,6 +521,7 @@ To learn more about the Nightscout API, visit https://YOUR-SITE.com/api-docs/ or * `PUMP_URGENT_BATT_P` (`20`) - The % of the pump battery remaining, an urgent alarm will be triggered when dropping below this threshold. * `PUMP_WARN_BATT_V` (`1.35`) - The voltage (if percent isn't available) of the pump battery, a warning will be triggered when dropping below this threshold. * `PUMP_URGENT_BATT_V` (`1.30`) - The voltage (if percent isn't available) of the pump battery, an urgent alarm will be triggered when dropping below this threshold. + * `PUMP_WARN_BATT_QUIET_NIGHT` (`false`) - Do not generate battery alarms at night. ##### `openaps` (OpenAPS) Integrated OpenAPS loop monitoring, uses these extended settings: @@ -659,7 +670,7 @@ For remote overrides, the following extended settings must be configured: * `target_high` - Upper target for correction boluses. * `target_low` - Lower target for correction boluses. - Some example profiles are [here](example-profiles.md). + Some example profiles are [here](docs/plugins/example-profiles.md). ## Setting environment variables Easy to emulate on the commandline: @@ -679,13 +690,13 @@ Your hosting provider probably has a way to set these through their GUI. ### Vagrant install Optionally, use [Vagrant](https://www.vagrantup.com/) with the -included `Vagrantfile` and `setup.sh` to install OS and node packages to +included `Vagrantfile` and `bin/setup.sh` to install OS and node packages to a virtual machine. ```bash host$ vagrant up host$ vagrant ssh -vm$ setup.sh +vm$ ./bin/setup.sh ``` The setup script will install OS packages then run `npm install`. diff --git a/assets/fonts/Nightscout Plugin Icons.json b/assets/fonts/Nightscout Plugin Icons.json index 65874c15679..f1ff8306de0 100644 --- a/assets/fonts/Nightscout Plugin Icons.json +++ b/assets/fonts/Nightscout Plugin Icons.json @@ -2,9 +2,11439 @@ "metadata": { "name": "Nightscout Plugin Icons", "lastOpened": 0, - "created": 1580075608590 + "created": 1607277376360 }, "iconSets": [ + { + "selection": [ + { + "ligatures": "home, house", + "name": "home", + "id": 0, + "order": 0 + }, + { + "ligatures": "home2, house2", + "name": "home2", + "id": 1, + "order": 0 + }, + { + "ligatures": "home3, house3", + "name": "home3", + "id": 2, + "order": 0 + }, + { + "ligatures": "office, buildings", + "name": "office", + "id": 3, + "order": 0 + }, + { + "ligatures": "newspaper, news", + "name": "newspaper", + "id": 4, + "order": 0 + }, + { + "ligatures": "pencil, write", + "name": "pencil", + "id": 5, + "order": 0 + }, + { + "ligatures": "pencil2, write2", + "name": "pencil2", + "id": 6, + "order": 0 + }, + { + "ligatures": "quill, feather", + "name": "quill", + "id": 7, + "order": 0 + }, + { + "ligatures": "pen, write3", + "name": "pen", + "id": 8, + "order": 0 + }, + { + "ligatures": "blog, pen2", + "name": "blog", + "id": 9, + "order": 0 + }, + { + "ligatures": "eyedropper, color", + "name": "eyedropper", + "id": 10, + "order": 0 + }, + { + "ligatures": "droplet, color2", + "name": "droplet", + "id": 11, + "order": 0 + }, + { + "ligatures": "paint-format, format", + "name": "paint-format", + "id": 12, + "order": 0 + }, + { + "ligatures": "image, picture", + "name": "image", + "id": 13, + "order": 0 + }, + { + "ligatures": "images, pictures", + "name": "images", + "id": 14, + "order": 0 + }, + { + "ligatures": "camera, photo", + "name": "camera", + "id": 15, + "order": 0 + }, + { + "ligatures": "headphones, headset", + "name": "headphones", + "id": 16, + "order": 0 + }, + { + "ligatures": "music, song", + "name": "music", + "id": 17, + "order": 0 + }, + { + "ligatures": "play, video", + "name": "play", + "id": 18, + "order": 0 + }, + { + "ligatures": "film, video2", + "name": "film", + "id": 19, + "order": 0 + }, + { + "ligatures": "video-camera, video3", + "name": "video-camera", + "id": 20, + "order": 0 + }, + { + "ligatures": "dice, game", + "name": "dice", + "id": 21, + "order": 0 + }, + { + "ligatures": "pacman, game2", + "name": "pacman", + "id": 22, + "order": 0 + }, + { + "ligatures": "spades, cards", + "name": "spades", + "id": 23, + "order": 0 + }, + { + "ligatures": "clubs, cards2", + "name": "clubs", + "id": 24, + "order": 0 + }, + { + "ligatures": "diamonds, cards3", + "name": "diamonds", + "id": 25, + "order": 0 + }, + { + "ligatures": "bullhorn, megaphone", + "name": "bullhorn", + "id": 26, + "order": 3, + "prevSize": 32, + "code": 59674, + "tempChar": "" + }, + { + "ligatures": "connection, wifi", + "name": "connection", + "id": 27, + "order": 0 + }, + { + "ligatures": "podcast, broadcast", + "name": "podcast", + "id": 28, + "order": 0 + }, + { + "ligatures": "feed, wave", + "name": "feed", + "id": 29, + "order": 0 + }, + { + "ligatures": "mic, microphone", + "name": "mic", + "id": 30, + "order": 0 + }, + { + "ligatures": "book, read", + "name": "book", + "id": 31, + "order": 0 + }, + { + "ligatures": "books, library", + "name": "books", + "id": 32, + "order": 0 + }, + { + "ligatures": "library2, bank", + "name": "library", + "id": 33, + "order": 0 + }, + { + "ligatures": "file-text, file", + "name": "file-text", + "id": 34, + "order": 0 + }, + { + "ligatures": "profile, file2", + "name": "profile", + "id": 35, + "order": 0 + }, + { + "ligatures": "file-empty, file3", + "name": "file-empty", + "id": 36, + "order": 0 + }, + { + "ligatures": "files-empty, files", + "name": "files-empty", + "id": 37, + "order": 0 + }, + { + "ligatures": "file-text2, file4", + "name": "file-text2", + "id": 38, + "order": 0 + }, + { + "ligatures": "file-picture, file5", + "name": "file-picture", + "id": 39, + "order": 0 + }, + { + "ligatures": "file-music, file6", + "name": "file-music", + "id": 40, + "order": 0 + }, + { + "ligatures": "file-play, file7", + "name": "file-play", + "id": 41, + "order": 0 + }, + { + "ligatures": "file-video, file8", + "name": "file-video", + "id": 42, + "order": 0 + }, + { + "ligatures": "file-zip, file9", + "name": "file-zip", + "id": 43, + "order": 0 + }, + { + "ligatures": "copy, duplicate", + "name": "copy", + "id": 44, + "order": 0 + }, + { + "ligatures": "paste, clipboard-file", + "name": "paste", + "id": 45, + "order": 0 + }, + { + "ligatures": "stack, layers", + "name": "stack", + "id": 46, + "order": 0 + }, + { + "ligatures": "folder, directory", + "name": "folder", + "id": 47, + "order": 0 + }, + { + "ligatures": "folder-open, directory2", + "name": "folder-open", + "id": 48, + "order": 0 + }, + { + "ligatures": "folder-plus, directory3", + "name": "folder-plus", + "id": 49, + "order": 0 + }, + { + "ligatures": "folder-minus, directory4", + "name": "folder-minus", + "id": 50, + "order": 0 + }, + { + "ligatures": "folder-download, directory5", + "name": "folder-download", + "id": 51, + "order": 0 + }, + { + "ligatures": "folder-upload, directory6", + "name": "folder-upload", + "id": 52, + "order": 0 + }, + { + "ligatures": "price-tag", + "name": "price-tag", + "id": 53, + "order": 0 + }, + { + "ligatures": "price-tags", + "name": "price-tags", + "id": 54, + "order": 0 + }, + { + "ligatures": "barcode", + "name": "barcode", + "id": 55, + "order": 0 + }, + { + "ligatures": "qrcode", + "name": "qrcode", + "id": 56, + "order": 0 + }, + { + "ligatures": "ticket, theater", + "name": "ticket", + "id": 57, + "order": 0 + }, + { + "ligatures": "cart, purchase", + "name": "cart", + "id": 58, + "order": 0 + }, + { + "ligatures": "coin-dollar, money", + "name": "coin-dollar", + "id": 59, + "order": 0 + }, + { + "ligatures": "coin-euro, money2", + "name": "coin-euro", + "id": 60, + "order": 0 + }, + { + "ligatures": "coin-pound, money3", + "name": "coin-pound", + "id": 61, + "order": 0 + }, + { + "ligatures": "coin-yen, money4", + "name": "coin-yen", + "id": 62, + "order": 0 + }, + { + "ligatures": "credit-card, money5", + "name": "credit-card", + "id": 63, + "order": 0 + }, + { + "ligatures": "calculator, compute", + "name": "calculator", + "id": 64, + "order": 0 + }, + { + "ligatures": "lifebuoy, support", + "name": "lifebuoy", + "id": 65, + "order": 0 + }, + { + "ligatures": "phone, telephone", + "name": "phone", + "id": 66, + "order": 0 + }, + { + "ligatures": "phone-hang-up, telephone2", + "name": "phone-hang-up", + "id": 67, + "order": 0 + }, + { + "ligatures": "address-book, contact", + "name": "address-book", + "id": 68, + "order": 0 + }, + { + "ligatures": "envelop, mail", + "name": "envelop", + "id": 69, + "order": 0 + }, + { + "ligatures": "pushpin, pin", + "name": "pushpin", + "id": 70, + "order": 0 + }, + { + "ligatures": "location, map-marker", + "name": "location", + "id": 71, + "order": 0 + }, + { + "ligatures": "location2, map-marker2", + "name": "location2", + "id": 72, + "order": 0 + }, + { + "ligatures": "compass, direction", + "name": "compass", + "id": 73, + "order": 0 + }, + { + "ligatures": "compass2, direction2", + "name": "compass2", + "id": 74, + "order": 0 + }, + { + "ligatures": "map, guide", + "name": "map", + "id": 75, + "order": 0 + }, + { + "ligatures": "map2, guide2", + "name": "map2", + "id": 76, + "order": 0 + }, + { + "ligatures": "history, time", + "name": "history", + "id": 77, + "order": 0 + }, + { + "ligatures": "clock, time2", + "name": "clock", + "id": 78, + "order": 0 + }, + { + "ligatures": "clock2, time3", + "name": "clock2", + "id": 79, + "order": 0 + }, + { + "ligatures": "alarm, time4", + "name": "alarm", + "id": 80, + "order": 0 + }, + { + "ligatures": "bell, alarm2", + "name": "bell", + "id": 81, + "order": 0 + }, + { + "ligatures": "stopwatch, time5", + "name": "stopwatch", + "id": 82, + "order": 0 + }, + { + "ligatures": "calendar, date", + "name": "calendar", + "id": 83, + "order": 0 + }, + { + "ligatures": "printer, print", + "name": "printer", + "id": 84, + "order": 0 + }, + { + "ligatures": "keyboard, typing", + "name": "keyboard", + "id": 85, + "order": 0 + }, + { + "ligatures": "display, screen", + "name": "display", + "id": 86, + "order": 0 + }, + { + "ligatures": "laptop, computer", + "name": "laptop", + "id": 87, + "order": 0 + }, + { + "ligatures": "mobile, cell-phone", + "name": "mobile", + "id": 88, + "order": 0 + }, + { + "ligatures": "mobile2, cell-phone2", + "name": "mobile2", + "id": 89, + "order": 0 + }, + { + "ligatures": "tablet, mobile3", + "name": "tablet", + "id": 90, + "order": 0 + }, + { + "ligatures": "tv, television", + "name": "tv", + "id": 91, + "order": 0 + }, + { + "ligatures": "drawer, box", + "name": "drawer", + "id": 92, + "order": 0 + }, + { + "ligatures": "drawer2, box2", + "name": "drawer2", + "id": 93, + "order": 0 + }, + { + "ligatures": "box-add, box3", + "name": "box-add", + "id": 94, + "order": 0 + }, + { + "ligatures": "box-remove, box4", + "name": "box-remove", + "id": 95, + "order": 0 + }, + { + "ligatures": "download, save", + "name": "download", + "id": 96, + "order": 0 + }, + { + "ligatures": "upload, load", + "name": "upload", + "id": 97, + "order": 0 + }, + { + "ligatures": "floppy-disk, save2", + "name": "floppy-disk", + "id": 98, + "order": 0 + }, + { + "ligatures": "drive, save3", + "name": "drive", + "id": 99, + "order": 0 + }, + { + "ligatures": "database, db", + "name": "database", + "id": 100, + "order": 0 + }, + { + "ligatures": "undo, ccw", + "name": "undo", + "id": 101, + "order": 0 + }, + { + "ligatures": "redo, cw", + "name": "redo", + "id": 102, + "order": 0 + }, + { + "ligatures": "undo2, left", + "name": "undo2", + "id": 103, + "order": 0 + }, + { + "ligatures": "redo2, right", + "name": "redo2", + "id": 104, + "order": 0 + }, + { + "ligatures": "forward, right2", + "name": "forward", + "id": 105, + "order": 0 + }, + { + "ligatures": "reply, left2", + "name": "reply", + "id": 106, + "order": 0 + }, + { + "ligatures": "bubble, comment", + "name": "bubble", + "id": 107, + "order": 0 + }, + { + "ligatures": "bubbles, comments", + "name": "bubbles", + "id": 108, + "order": 0 + }, + { + "ligatures": "bubbles2, comments2", + "name": "bubbles2", + "id": 109, + "order": 0 + }, + { + "ligatures": "bubble2, comment2", + "name": "bubble2", + "id": 110, + "order": 0 + }, + { + "ligatures": "bubbles3, comments3", + "name": "bubbles3", + "id": 111, + "order": 0 + }, + { + "ligatures": "bubbles4, comments4", + "name": "bubbles4", + "id": 112, + "order": 0 + }, + { + "ligatures": "user, profile2", + "name": "user", + "id": 113, + "order": 0 + }, + { + "ligatures": "users, group", + "name": "users", + "id": 114, + "order": 0 + }, + { + "ligatures": "user-plus, user2", + "name": "user-plus", + "id": 115, + "order": 0 + }, + { + "ligatures": "user-minus, user3", + "name": "user-minus", + "id": 116, + "order": 0 + }, + { + "ligatures": "user-check, user4", + "name": "user-check", + "id": 117, + "order": 0 + }, + { + "ligatures": "user-tie, user5", + "name": "user-tie", + "id": 118, + "order": 0 + }, + { + "ligatures": "quotes-left, ldquo", + "name": "quotes-left", + "id": 119, + "order": 0 + }, + { + "ligatures": "quotes-right, rdquo", + "name": "quotes-right", + "id": 120, + "order": 0 + }, + { + "ligatures": "hour-glass, loading", + "name": "hour-glass", + "id": 121, + "order": 0 + }, + { + "ligatures": "spinner, loading2", + "name": "spinner", + "id": 122, + "order": 0 + }, + { + "ligatures": "spinner2, loading3", + "name": "spinner2", + "id": 123, + "order": 0 + }, + { + "ligatures": "spinner3, loading4", + "name": "spinner3", + "id": 124, + "order": 0 + }, + { + "ligatures": "spinner4, loading5", + "name": "spinner4", + "id": 125, + "order": 0 + }, + { + "ligatures": "spinner5, loading6", + "name": "spinner5", + "id": 126, + "order": 0 + }, + { + "ligatures": "spinner6, loading7", + "name": "spinner6", + "id": 127, + "order": 0 + }, + { + "ligatures": "spinner7, loading8", + "name": "spinner7", + "id": 128, + "order": 0 + }, + { + "ligatures": "spinner8, loading9", + "name": "spinner8", + "id": 129, + "order": 0 + }, + { + "ligatures": "spinner9, loading10", + "name": "spinner9", + "id": 130, + "order": 0 + }, + { + "ligatures": "spinner10, loading11", + "name": "spinner10", + "id": 131, + "order": 0 + }, + { + "ligatures": "spinner11, loading12", + "name": "spinner11", + "id": 132, + "order": 0 + }, + { + "ligatures": "binoculars, lookup", + "name": "binoculars", + "id": 133, + "order": 0 + }, + { + "ligatures": "search, magnifier", + "name": "search", + "id": 134, + "order": 0 + }, + { + "ligatures": "zoom-in, magnifier2", + "name": "zoom-in", + "id": 135, + "order": 0 + }, + { + "ligatures": "zoom-out, magnifier3", + "name": "zoom-out", + "id": 136, + "order": 0 + }, + { + "ligatures": "enlarge, expand", + "name": "enlarge", + "id": 137, + "order": 0 + }, + { + "ligatures": "shrink, collapse", + "name": "shrink", + "id": 138, + "order": 0 + }, + { + "ligatures": "enlarge2, expand2", + "name": "enlarge2", + "id": 139, + "order": 0 + }, + { + "ligatures": "shrink2, collapse2", + "name": "shrink2", + "id": 140, + "order": 0 + }, + { + "ligatures": "key, password", + "name": "key", + "id": 141, + "order": 0 + }, + { + "ligatures": "key2, password2", + "name": "key2", + "id": 142, + "order": 0 + }, + { + "ligatures": "lock, secure", + "name": "lock", + "id": 143, + "order": 0 + }, + { + "ligatures": "unlocked, lock-open", + "name": "unlocked", + "id": 144, + "order": 0 + }, + { + "ligatures": "wrench, tool", + "name": "wrench", + "id": 145, + "order": 0 + }, + { + "ligatures": "equalizer, sliders", + "name": "equalizer", + "id": 146, + "order": 0 + }, + { + "ligatures": "equalizer2, sliders2", + "name": "equalizer2", + "id": 147, + "order": 0 + }, + { + "ligatures": "cog, gear", + "name": "cog", + "id": 148, + "order": 0 + }, + { + "ligatures": "cogs, gears", + "name": "cogs", + "id": 149, + "order": 0 + }, + { + "ligatures": "hammer, tool2", + "name": "hammer", + "id": 150, + "order": 0 + }, + { + "ligatures": "magic-wand, wizard", + "name": "magic-wand", + "id": 151, + "order": 0 + }, + { + "ligatures": "aid-kit, health", + "name": "aid-kit", + "id": 152, + "order": 0 + }, + { + "ligatures": "bug, virus", + "name": "bug", + "id": 153, + "order": 0 + }, + { + "ligatures": "pie-chart, stats", + "name": "pie-chart", + "id": 154, + "order": 0 + }, + { + "ligatures": "stats-dots, stats2", + "name": "stats-dots", + "id": 155, + "order": 0 + }, + { + "ligatures": "stats-bars, stats3", + "name": "stats-bars", + "id": 156, + "order": 0 + }, + { + "ligatures": "stats-bars2, stats4", + "name": "stats-bars2", + "id": 157, + "order": 0 + }, + { + "ligatures": "trophy, cup", + "name": "trophy", + "id": 158, + "order": 0 + }, + { + "ligatures": "gift, present", + "name": "gift", + "id": 159, + "order": 0 + }, + { + "ligatures": "glass, drink", + "name": "glass", + "id": 160, + "order": 0 + }, + { + "ligatures": "glass2, drink2", + "name": "glass2", + "id": 161, + "order": 0 + }, + { + "ligatures": "mug, drink3", + "name": "mug", + "id": 162, + "order": 0 + }, + { + "ligatures": "spoon-knife, food", + "name": "spoon-knife", + "id": 163, + "order": 0 + }, + { + "ligatures": "leaf, nature", + "name": "leaf", + "id": 164, + "order": 0 + }, + { + "ligatures": "rocket, jet", + "name": "rocket", + "id": 165, + "order": 0 + }, + { + "ligatures": "meter, gauge", + "name": "meter", + "id": 166, + "order": 0 + }, + { + "ligatures": "meter2, gauge2", + "name": "meter2", + "id": 167, + "order": 0 + }, + { + "ligatures": "hammer2, gavel", + "name": "hammer2", + "id": 168, + "order": 0 + }, + { + "ligatures": "fire, flame", + "name": "fire", + "id": 169, + "order": 0 + }, + { + "ligatures": "lab, beta", + "name": "lab", + "id": 170, + "order": 0 + }, + { + "ligatures": "magnet, attract", + "name": "magnet", + "id": 171, + "order": 0 + }, + { + "ligatures": "bin, trashcan", + "name": "bin", + "id": 172, + "order": 0 + }, + { + "ligatures": "bin2, trashcan2", + "name": "bin2", + "id": 173, + "order": 0 + }, + { + "ligatures": "briefcase, portfolio", + "name": "briefcase", + "id": 174, + "order": 0 + }, + { + "ligatures": "airplane, travel", + "name": "airplane", + "id": 175, + "order": 0 + }, + { + "ligatures": "truck, transit", + "name": "truck", + "id": 176, + "order": 0 + }, + { + "ligatures": "road, asphalt", + "name": "road", + "id": 177, + "order": 0 + }, + { + "ligatures": "accessibility", + "name": "accessibility", + "id": 178, + "order": 0 + }, + { + "ligatures": "target, goal", + "name": "target", + "id": 179, + "order": 0 + }, + { + "ligatures": "shield, security", + "name": "shield", + "id": 180, + "order": 0 + }, + { + "ligatures": "power, lightning", + "name": "power", + "id": 181, + "order": 0 + }, + { + "ligatures": "switch", + "name": "switch", + "id": 182, + "order": 0 + }, + { + "ligatures": "power-cord, plugin", + "name": "power-cord", + "id": 183, + "order": 0 + }, + { + "ligatures": "clipboard, board", + "name": "clipboard", + "id": 184, + "order": 0 + }, + { + "ligatures": "list-numbered, options", + "name": "list-numbered", + "id": 185, + "order": 0 + }, + { + "ligatures": "list, todo", + "name": "list", + "id": 186, + "order": 0 + }, + { + "ligatures": "list2, todo2", + "name": "list2", + "id": 187, + "order": 0 + }, + { + "ligatures": "tree, branches", + "name": "tree", + "id": 188, + "order": 0 + }, + { + "ligatures": "menu, list3", + "name": "menu", + "id": 189, + "order": 0 + }, + { + "ligatures": "menu2, options2", + "name": "menu2", + "id": 190, + "order": 0 + }, + { + "ligatures": "menu3, options3", + "name": "menu3", + "id": 191, + "order": 0 + }, + { + "ligatures": "menu4, options4", + "name": "menu4", + "id": 192, + "order": 0 + }, + { + "ligatures": "cloud, weather", + "name": "cloud", + "id": 193, + "order": 0 + }, + { + "ligatures": "cloud-download, cloud2", + "name": "cloud-download", + "id": 194, + "order": 0 + }, + { + "ligatures": "cloud-upload, cloud3", + "name": "cloud-upload", + "id": 195, + "order": 0 + }, + { + "ligatures": "cloud-check, cloud4", + "name": "cloud-check", + "id": 196, + "order": 0 + }, + { + "ligatures": "download2, save4", + "name": "download2", + "id": 197, + "order": 0 + }, + { + "ligatures": "upload2, load2", + "name": "upload2", + "id": 198, + "order": 0 + }, + { + "ligatures": "download3, save5", + "name": "download3", + "id": 199, + "order": 0 + }, + { + "ligatures": "upload3, load3", + "name": "upload3", + "id": 200, + "order": 0 + }, + { + "ligatures": "sphere, globe", + "name": "sphere", + "id": 201, + "order": 0 + }, + { + "ligatures": "earth, globe2", + "name": "earth", + "id": 202, + "order": 0 + }, + { + "ligatures": "link, chain", + "name": "link", + "id": 203, + "order": 0 + }, + { + "ligatures": "flag, report", + "name": "flag", + "id": 204, + "order": 0 + }, + { + "ligatures": "attachment, paperclip", + "name": "attachment", + "id": 205, + "order": 0 + }, + { + "ligatures": "eye, views", + "name": "eye", + "id": 206, + "order": 0 + }, + { + "ligatures": "eye-plus, views2", + "name": "eye-plus", + "id": 207, + "order": 0 + }, + { + "ligatures": "eye-minus, views3", + "name": "eye-minus", + "id": 208, + "order": 0 + }, + { + "ligatures": "eye-blocked, views4", + "name": "eye-blocked", + "id": 209, + "order": 0 + }, + { + "ligatures": "bookmark, ribbon", + "name": "bookmark", + "id": 210, + "order": 0 + }, + { + "ligatures": "bookmarks, ribbons", + "name": "bookmarks", + "id": 211, + "order": 0 + }, + { + "ligatures": "sun, weather2", + "name": "sun", + "id": 212, + "order": 0 + }, + { + "ligatures": "contrast", + "name": "contrast", + "id": 213, + "order": 0 + }, + { + "ligatures": "brightness-contrast", + "name": "brightness-contrast", + "id": 214, + "order": 0 + }, + { + "ligatures": "star-empty, rate", + "name": "star-empty", + "id": 215, + "order": 0 + }, + { + "ligatures": "star-half, rate2", + "name": "star-half", + "id": 216, + "order": 0 + }, + { + "ligatures": "star-full, rate3", + "name": "star-full", + "id": 217, + "order": 0 + }, + { + "ligatures": "heart, like", + "name": "heart", + "id": 218, + "order": 0 + }, + { + "ligatures": "heart-broken, heart2", + "name": "heart-broken", + "id": 219, + "order": 0 + }, + { + "ligatures": "man, male", + "name": "man", + "id": 220, + "order": 0 + }, + { + "ligatures": "woman, female", + "name": "woman", + "id": 221, + "order": 0 + }, + { + "ligatures": "man-woman, toilet", + "name": "man-woman", + "id": 222, + "order": 0 + }, + { + "ligatures": "happy, emoticon", + "name": "happy", + "id": 223, + "order": 0 + }, + { + "ligatures": "happy2, emoticon2", + "name": "happy2", + "id": 224, + "order": 0 + }, + { + "ligatures": "smile, emoticon3", + "name": "smile", + "id": 225, + "order": 0 + }, + { + "ligatures": "smile2, emoticon4", + "name": "smile2", + "id": 226, + "order": 0 + }, + { + "ligatures": "tongue, emoticon5", + "name": "tongue", + "id": 227, + "order": 0 + }, + { + "ligatures": "tongue2, emoticon6", + "name": "tongue2", + "id": 228, + "order": 0 + }, + { + "ligatures": "sad, emoticon7", + "name": "sad", + "id": 229, + "order": 0 + }, + { + "ligatures": "sad2, emoticon8", + "name": "sad2", + "id": 230, + "order": 0 + }, + { + "ligatures": "wink, emoticon9", + "name": "wink", + "id": 231, + "order": 0 + }, + { + "ligatures": "wink2, emoticon10", + "name": "wink2", + "id": 232, + "order": 0 + }, + { + "ligatures": "grin, emoticon11", + "name": "grin", + "id": 233, + "order": 0 + }, + { + "ligatures": "grin2, emoticon12", + "name": "grin2", + "id": 234, + "order": 0 + }, + { + "ligatures": "cool, emoticon13", + "name": "cool", + "id": 235, + "order": 0 + }, + { + "ligatures": "cool2, emoticon14", + "name": "cool2", + "id": 236, + "order": 0 + }, + { + "ligatures": "angry, emoticon15", + "name": "angry", + "id": 237, + "order": 0 + }, + { + "ligatures": "angry2, emoticon16", + "name": "angry2", + "id": 238, + "order": 0 + }, + { + "ligatures": "evil, emoticon17", + "name": "evil", + "id": 239, + "order": 0 + }, + { + "ligatures": "evil2, emoticon18", + "name": "evil2", + "id": 240, + "order": 0 + }, + { + "ligatures": "shocked, emoticon19", + "name": "shocked", + "id": 241, + "order": 0 + }, + { + "ligatures": "shocked2, emoticon20", + "name": "shocked2", + "id": 242, + "order": 0 + }, + { + "ligatures": "baffled, emoticon21", + "name": "baffled", + "id": 243, + "order": 0 + }, + { + "ligatures": "baffled2, emoticon22", + "name": "baffled2", + "id": 244, + "order": 0 + }, + { + "ligatures": "confused, emoticon23", + "name": "confused", + "id": 245, + "order": 0 + }, + { + "ligatures": "confused2, emoticon24", + "name": "confused2", + "id": 246, + "order": 0 + }, + { + "ligatures": "neutral, emoticon25", + "name": "neutral", + "id": 247, + "order": 0 + }, + { + "ligatures": "neutral2, emoticon26", + "name": "neutral2", + "id": 248, + "order": 0 + }, + { + "ligatures": "hipster, emoticon27", + "name": "hipster", + "id": 249, + "order": 0 + }, + { + "ligatures": "hipster2, emoticon28", + "name": "hipster2", + "id": 250, + "order": 0 + }, + { + "ligatures": "wondering, emoticon29", + "name": "wondering", + "id": 251, + "order": 0 + }, + { + "ligatures": "wondering2, emoticon30", + "name": "wondering2", + "id": 252, + "order": 0 + }, + { + "ligatures": "sleepy, emoticon31", + "name": "sleepy", + "id": 253, + "order": 0 + }, + { + "ligatures": "sleepy2, emoticon32", + "name": "sleepy2", + "id": 254, + "order": 0 + }, + { + "ligatures": "frustrated, emoticon33", + "name": "frustrated", + "id": 255, + "order": 0 + }, + { + "ligatures": "frustrated2, emoticon34", + "name": "frustrated2", + "id": 256, + "order": 0 + }, + { + "ligatures": "crying, emoticon35", + "name": "crying", + "id": 257, + "order": 0 + }, + { + "ligatures": "crying2, emoticon36", + "name": "crying2", + "id": 258, + "order": 0 + }, + { + "ligatures": "point-up, finger", + "name": "point-up", + "id": 259, + "order": 0 + }, + { + "ligatures": "point-right, finger2", + "name": "point-right", + "id": 260, + "order": 0 + }, + { + "ligatures": "point-down, finger3", + "name": "point-down", + "id": 261, + "order": 0 + }, + { + "ligatures": "point-left, finger4", + "name": "point-left", + "id": 262, + "order": 0 + }, + { + "ligatures": "warning, sign", + "name": "warning", + "id": 263, + "order": 0 + }, + { + "ligatures": "notification, warning2", + "name": "notification", + "id": 264, + "order": 0 + }, + { + "ligatures": "question, help", + "name": "question", + "id": 265, + "order": 0 + }, + { + "ligatures": "plus, add", + "name": "plus", + "id": 266, + "order": 0 + }, + { + "ligatures": "minus, subtract", + "name": "minus", + "id": 267, + "order": 0 + }, + { + "ligatures": "info, information", + "name": "info", + "id": 268, + "order": 0 + }, + { + "ligatures": "cancel-circle, close", + "name": "cancel-circle", + "id": 269, + "order": 0 + }, + { + "ligatures": "blocked, forbidden", + "name": "blocked", + "id": 270, + "order": 0 + }, + { + "ligatures": "cross, cancel", + "name": "cross", + "id": 271, + "order": 0 + }, + { + "ligatures": "checkmark, tick", + "name": "checkmark", + "id": 272, + "order": 0 + }, + { + "ligatures": "checkmark2, tick2", + "name": "checkmark2", + "id": 273, + "order": 0 + }, + { + "ligatures": "spell-check, spelling", + "name": "spell-check", + "id": 274, + "order": 0 + }, + { + "ligatures": "enter, signin", + "name": "enter", + "id": 275, + "order": 0 + }, + { + "ligatures": "exit, signout", + "name": "exit", + "id": 276, + "order": 0 + }, + { + "ligatures": "play2, player", + "name": "play2", + "id": 277, + "order": 0 + }, + { + "ligatures": "pause, player2", + "name": "pause", + "id": 278, + "order": 0 + }, + { + "ligatures": "stop, player3", + "name": "stop", + "id": 279, + "order": 0 + }, + { + "ligatures": "previous, player4", + "name": "previous", + "id": 280, + "order": 0 + }, + { + "ligatures": "next, player5", + "name": "next", + "id": 281, + "order": 0 + }, + { + "ligatures": "backward, player6", + "name": "backward", + "id": 282, + "order": 0 + }, + { + "ligatures": "forward2, player7", + "name": "forward2", + "id": 283, + "order": 0 + }, + { + "ligatures": "play3, player8", + "name": "play3", + "id": 284, + "order": 0 + }, + { + "ligatures": "pause2, player9", + "name": "pause2", + "id": 285, + "order": 0 + }, + { + "ligatures": "stop2, player10", + "name": "stop2", + "id": 286, + "order": 0 + }, + { + "ligatures": "backward2, player11", + "name": "backward2", + "id": 287, + "order": 0 + }, + { + "ligatures": "forward3, player12", + "name": "forward3", + "id": 288, + "order": 0 + }, + { + "ligatures": "first, player13", + "name": "first", + "id": 289, + "order": 0 + }, + { + "ligatures": "last, player14", + "name": "last", + "id": 290, + "order": 0 + }, + { + "ligatures": "previous2, player15", + "name": "previous2", + "id": 291, + "order": 0 + }, + { + "ligatures": "next2, player16", + "name": "next2", + "id": 292, + "order": 0 + }, + { + "ligatures": "eject, player17", + "name": "eject", + "id": 293, + "order": 0 + }, + { + "ligatures": "volume-high, volume", + "name": "volume-high", + "id": 294, + "order": 0 + }, + { + "ligatures": "volume-medium, volume2", + "name": "volume-medium", + "id": 295, + "order": 0 + }, + { + "ligatures": "volume-low, volume3", + "name": "volume-low", + "id": 296, + "order": 0 + }, + { + "ligatures": "volume-mute, volume4", + "name": "volume-mute", + "id": 297, + "order": 0 + }, + { + "ligatures": "volume-mute2, volume5", + "name": "volume-mute2", + "id": 298, + "order": 0 + }, + { + "ligatures": "volume-increase, volume6", + "name": "volume-increase", + "id": 299, + "order": 0 + }, + { + "ligatures": "volume-decrease, volume7", + "name": "volume-decrease", + "id": 300, + "order": 0 + }, + { + "ligatures": "loop, repeat", + "name": "loop", + "id": 301, + "order": 0 + }, + { + "ligatures": "loop2, repeat2", + "name": "loop2", + "id": 302, + "order": 0 + }, + { + "ligatures": "infinite", + "name": "infinite", + "id": 303, + "order": 0 + }, + { + "ligatures": "shuffle, random", + "name": "shuffle", + "id": 304, + "order": 0 + }, + { + "ligatures": "arrow-up-left, up-left", + "name": "arrow-up-left", + "id": 305, + "order": 0 + }, + { + "ligatures": "arrow-up, up", + "name": "arrow-up", + "id": 306, + "order": 0 + }, + { + "ligatures": "arrow-up-right, up-right", + "name": "arrow-up-right", + "id": 307, + "order": 0 + }, + { + "ligatures": "arrow-right, right3", + "name": "arrow-right", + "id": 308, + "order": 0 + }, + { + "ligatures": "arrow-down-right, down-right", + "name": "arrow-down-right", + "id": 309, + "order": 0 + }, + { + "ligatures": "arrow-down, down", + "name": "arrow-down", + "id": 310, + "order": 0 + }, + { + "ligatures": "arrow-down-left, down-left", + "name": "arrow-down-left", + "id": 311, + "order": 0 + }, + { + "ligatures": "arrow-left, left3", + "name": "arrow-left", + "id": 312, + "order": 0 + }, + { + "ligatures": "arrow-up-left2, up-left2", + "name": "arrow-up-left2", + "id": 313, + "order": 0 + }, + { + "ligatures": "arrow-up2, up2", + "name": "arrow-up2", + "id": 314, + "order": 0 + }, + { + "ligatures": "arrow-up-right2, up-right2", + "name": "arrow-up-right2", + "id": 315, + "order": 0 + }, + { + "ligatures": "arrow-right2, right4", + "name": "arrow-right2", + "id": 316, + "order": 0 + }, + { + "ligatures": "arrow-down-right2, down-right2", + "name": "arrow-down-right2", + "id": 317, + "order": 0 + }, + { + "ligatures": "arrow-down2, down2", + "name": "arrow-down2", + "id": 318, + "order": 0 + }, + { + "ligatures": "arrow-down-left2, down-left2", + "name": "arrow-down-left2", + "id": 319, + "order": 0 + }, + { + "ligatures": "arrow-left2, left4", + "name": "arrow-left2", + "id": 320, + "order": 0 + }, + { + "ligatures": "circle-up, up3", + "name": "circle-up", + "id": 321, + "order": 0 + }, + { + "ligatures": "circle-right, right5", + "name": "circle-right", + "id": 322, + "order": 0 + }, + { + "ligatures": "circle-down, down3", + "name": "circle-down", + "id": 323, + "order": 0 + }, + { + "ligatures": "circle-left, left5", + "name": "circle-left", + "id": 324, + "order": 0 + }, + { + "ligatures": "tab, arrows", + "name": "tab", + "id": 325, + "order": 0 + }, + { + "ligatures": "move-up, sort", + "name": "move-up", + "id": 326, + "order": 0 + }, + { + "ligatures": "move-down, sort2", + "name": "move-down", + "id": 327, + "order": 0 + }, + { + "ligatures": "sort-alpha-asc, arrange", + "name": "sort-alpha-asc", + "id": 328, + "order": 0 + }, + { + "ligatures": "sort-alpha-desc, arrange2", + "name": "sort-alpha-desc", + "id": 329, + "order": 0 + }, + { + "ligatures": "sort-numeric-asc, arrange3", + "name": "sort-numeric-asc", + "id": 330, + "order": 0 + }, + { + "ligatures": "sort-numberic-desc, arrange4", + "name": "sort-numberic-desc", + "id": 331, + "order": 0 + }, + { + "ligatures": "sort-amount-asc, arrange5", + "name": "sort-amount-asc", + "id": 332, + "order": 0 + }, + { + "ligatures": "sort-amount-desc, arrange6", + "name": "sort-amount-desc", + "id": 333, + "order": 0 + }, + { + "ligatures": "command, cmd", + "name": "command", + "id": 334, + "order": 0 + }, + { + "ligatures": "shift", + "name": "shift", + "id": 335, + "order": 0 + }, + { + "ligatures": "ctrl, control", + "name": "ctrl", + "id": 336, + "order": 0 + }, + { + "ligatures": "opt, option", + "name": "opt", + "id": 337, + "order": 0 + }, + { + "ligatures": "checkbox-checked, checkbox", + "name": "checkbox-checked", + "id": 338, + "order": 0 + }, + { + "ligatures": "checkbox-unchecked, checkbox2", + "name": "checkbox-unchecked", + "id": 339, + "order": 0 + }, + { + "ligatures": "radio-checked, radio-button", + "name": "radio-checked", + "id": 340, + "order": 0 + }, + { + "ligatures": "radio-checked2, radio-button2", + "name": "radio-checked2", + "id": 341, + "order": 0 + }, + { + "ligatures": "radio-unchecked, radio-button3", + "name": "radio-unchecked", + "id": 342, + "order": 0 + }, + { + "ligatures": "crop, resize", + "name": "crop", + "id": 343, + "order": 0 + }, + { + "ligatures": "make-group", + "name": "make-group", + "id": 344, + "order": 0 + }, + { + "ligatures": "ungroup", + "name": "ungroup", + "id": 345, + "order": 0 + }, + { + "ligatures": "scissors, cut", + "name": "scissors", + "id": 346, + "order": 0 + }, + { + "ligatures": "filter, funnel", + "name": "filter", + "id": 347, + "order": 0 + }, + { + "ligatures": "font, typeface", + "name": "font", + "id": 348, + "order": 0 + }, + { + "ligatures": "ligature, typography", + "name": "ligature", + "id": 349, + "order": 0 + }, + { + "ligatures": "ligature2, typography2", + "name": "ligature2", + "id": 350, + "order": 0 + }, + { + "ligatures": "text-height, wysiwyg", + "name": "text-height", + "id": 351, + "order": 0 + }, + { + "ligatures": "text-width, wysiwyg2", + "name": "text-width", + "id": 352, + "order": 0 + }, + { + "ligatures": "font-size, wysiwyg3", + "name": "font-size", + "id": 353, + "order": 0 + }, + { + "ligatures": "bold, wysiwyg4", + "name": "bold", + "id": 354, + "order": 0 + }, + { + "ligatures": "underline, wysiwyg5", + "name": "underline", + "id": 355, + "order": 0 + }, + { + "ligatures": "italic, wysiwyg6", + "name": "italic", + "id": 356, + "order": 0 + }, + { + "ligatures": "strikethrough, wysiwyg7", + "name": "strikethrough", + "id": 357, + "order": 0 + }, + { + "ligatures": "omega, wysiwyg8", + "name": "omega", + "id": 358, + "order": 0 + }, + { + "ligatures": "sigma, wysiwyg9", + "name": "sigma", + "id": 359, + "order": 0 + }, + { + "ligatures": "page-break, wysiwyg10", + "name": "page-break", + "id": 360, + "order": 0 + }, + { + "ligatures": "superscript, wysiwyg11", + "name": "superscript", + "id": 361, + "order": 0 + }, + { + "ligatures": "subscript, wysiwyg12", + "name": "subscript", + "id": 362, + "order": 0 + }, + { + "ligatures": "superscript2, wysiwyg13", + "name": "superscript2", + "id": 363, + "order": 0 + }, + { + "ligatures": "subscript2, wysiwyg14", + "name": "subscript2", + "id": 364, + "order": 0 + }, + { + "ligatures": "text-color, wysiwyg15", + "name": "text-color", + "id": 365, + "order": 0 + }, + { + "ligatures": "pagebreak, wysiwyg16", + "name": "pagebreak", + "id": 366, + "order": 0 + }, + { + "ligatures": "clear-formatting, wysiwyg17", + "name": "clear-formatting", + "id": 367, + "order": 0 + }, + { + "ligatures": "table, wysiwyg18", + "name": "table", + "id": 368, + "order": 0 + }, + { + "ligatures": "table2, wysiwyg19", + "name": "table2", + "id": 369, + "order": 0 + }, + { + "ligatures": "insert-template, wysiwyg20", + "name": "insert-template", + "id": 370, + "order": 0 + }, + { + "ligatures": "pilcrow, wysiwyg21", + "name": "pilcrow", + "id": 371, + "order": 0 + }, + { + "ligatures": "ltr, wysiwyg22", + "name": "ltr", + "id": 372, + "order": 0 + }, + { + "ligatures": "rtl, wysiwyg23", + "name": "rtl", + "id": 373, + "order": 0 + }, + { + "ligatures": "section, wysiwyg24", + "name": "section", + "id": 374, + "order": 0 + }, + { + "ligatures": "paragraph-left, wysiwyg25", + "name": "paragraph-left", + "id": 375, + "order": 0 + }, + { + "ligatures": "paragraph-center, wysiwyg26", + "name": "paragraph-center", + "id": 376, + "order": 0 + }, + { + "ligatures": "paragraph-right, wysiwyg27", + "name": "paragraph-right", + "id": 377, + "order": 0 + }, + { + "ligatures": "paragraph-justify, wysiwyg28", + "name": "paragraph-justify", + "id": 378, + "order": 0 + }, + { + "ligatures": "indent-increase, wysiwyg29", + "name": "indent-increase", + "id": 379, + "order": 0 + }, + { + "ligatures": "indent-decrease, wysiwyg30", + "name": "indent-decrease", + "id": 380, + "order": 0 + }, + { + "ligatures": "share, out", + "name": "share", + "id": 381, + "order": 0 + }, + { + "ligatures": "new-tab, out2", + "name": "new-tab", + "id": 382, + "order": 0 + }, + { + "ligatures": "embed, code", + "name": "embed", + "id": 383, + "order": 0 + }, + { + "ligatures": "embed2, code2", + "name": "embed2", + "id": 384, + "order": 0 + }, + { + "ligatures": "terminal, console", + "name": "terminal", + "id": 385, + "order": 0 + }, + { + "ligatures": "share2, social", + "name": "share2", + "id": 386, + "order": 0 + }, + { + "ligatures": "mail2, contact2", + "name": "mail", + "id": 387, + "order": 0 + }, + { + "ligatures": "mail3, contact3", + "name": "mail2", + "id": 388, + "order": 0 + }, + { + "ligatures": "mail4, contact4", + "name": "mail3", + "id": 389, + "order": 0 + }, + { + "ligatures": "mail5, contact5", + "name": "mail4", + "id": 390, + "order": 0 + }, + { + "name": "amazon", + "ligatures": "amazon, brand", + "id": 391, + "order": 0 + }, + { + "name": "google", + "ligatures": "google, brand2", + "id": 392, + "order": 0 + }, + { + "name": "google2", + "ligatures": "google2, brand3", + "id": 393, + "order": 0 + }, + { + "name": "google3", + "ligatures": "google3, brand4", + "id": 394, + "order": 0 + }, + { + "ligatures": "google-plus, brand5", + "name": "google-plus", + "id": 395, + "order": 0 + }, + { + "ligatures": "google-plus2, brand6", + "name": "google-plus2", + "id": 396, + "order": 0 + }, + { + "ligatures": "google-plus3, brand7", + "name": "google-plus3", + "id": 397, + "order": 0 + }, + { + "name": "hangouts", + "ligatures": "hangouts, brand8", + "id": 398, + "order": 0 + }, + { + "ligatures": "google-drive, brand9", + "name": "google-drive", + "id": 399, + "order": 0 + }, + { + "ligatures": "facebook, brand10", + "name": "facebook", + "id": 400, + "order": 0 + }, + { + "ligatures": "facebook2, brand11", + "name": "facebook2", + "id": 401, + "order": 0 + }, + { + "ligatures": "instagram, brand12", + "name": "instagram", + "id": 402, + "order": 0 + }, + { + "name": "whatsapp", + "ligatures": "whatsapp, brand13", + "id": 403, + "order": 0 + }, + { + "name": "spotify", + "ligatures": "spotify, brand14", + "id": 404, + "order": 0 + }, + { + "name": "telegram", + "ligatures": "telegram, brand15", + "id": 405, + "order": 0 + }, + { + "ligatures": "twitter, brand16", + "name": "twitter", + "id": 406, + "order": 0 + }, + { + "name": "vine", + "ligatures": "vine, brand17", + "id": 407, + "order": 0 + }, + { + "name": "vk", + "ligatures": "vk, brand18", + "id": 408, + "order": 0 + }, + { + "name": "renren", + "ligatures": "renren, brand19", + "id": 409, + "order": 0 + }, + { + "name": "sina-weibo", + "ligatures": "sina-weibo, brand20", + "id": 410, + "order": 0 + }, + { + "ligatures": "feed2, rss", + "name": "rss", + "id": 411, + "order": 0 + }, + { + "ligatures": "feed3, rss2", + "name": "rss2", + "id": 412, + "order": 0 + }, + { + "ligatures": "youtube, brand21", + "name": "youtube", + "id": 413, + "order": 0 + }, + { + "ligatures": "youtube2, brand22", + "name": "youtube2", + "id": 414, + "order": 0 + }, + { + "ligatures": "twitch, brand23", + "name": "twitch", + "id": 415, + "order": 0 + }, + { + "ligatures": "vimeo, brand24", + "name": "vimeo", + "id": 416, + "order": 0 + }, + { + "ligatures": "vimeo2, brand25", + "name": "vimeo2", + "id": 417, + "order": 0 + }, + { + "ligatures": "lanyrd, brand26", + "name": "lanyrd", + "id": 418, + "order": 0 + }, + { + "ligatures": "flickr, brand27", + "name": "flickr", + "id": 419, + "order": 0 + }, + { + "ligatures": "flickr2, brand28", + "name": "flickr2", + "id": 420, + "order": 0 + }, + { + "ligatures": "flickr3, brand29", + "name": "flickr3", + "id": 421, + "order": 0 + }, + { + "ligatures": "flickr4, brand30", + "name": "flickr4", + "id": 422, + "order": 0 + }, + { + "ligatures": "dribbble, brand31", + "name": "dribbble", + "id": 423, + "order": 0 + }, + { + "name": "behance", + "ligatures": "behance, brand32", + "id": 424, + "order": 0 + }, + { + "name": "behance2", + "ligatures": "behance2, brand33", + "id": 425, + "order": 0 + }, + { + "ligatures": "deviantart, brand34", + "name": "deviantart", + "id": 426, + "order": 0 + }, + { + "name": "500px", + "ligatures": "500px, brand35", + "id": 427, + "order": 0 + }, + { + "ligatures": "steam, brand36", + "name": "steam", + "id": 428, + "order": 0 + }, + { + "ligatures": "steam2, brand37", + "name": "steam2", + "id": 429, + "order": 0 + }, + { + "ligatures": "dropbox, brand38", + "name": "dropbox", + "id": 430, + "order": 0 + }, + { + "ligatures": "onedrive, brand39", + "name": "onedrive", + "id": 431, + "order": 0 + }, + { + "ligatures": "github, brand40", + "name": "github", + "id": 432, + "order": 0 + }, + { + "name": "npm", + "ligatures": "npm, brand41", + "id": 433, + "order": 0 + }, + { + "name": "basecamp", + "ligatures": "basecamp, brand42", + "id": 434, + "order": 0 + }, + { + "name": "trello", + "ligatures": "trello, brand43", + "id": 435, + "order": 0 + }, + { + "ligatures": "wordpress, brand44", + "name": "wordpress", + "id": 436, + "order": 0 + }, + { + "ligatures": "joomla, brand45", + "name": "joomla", + "id": 437, + "order": 0 + }, + { + "ligatures": "ello, brand46", + "name": "ello", + "id": 438, + "order": 0 + }, + { + "ligatures": "blogger, brand47", + "name": "blogger", + "id": 439, + "order": 0 + }, + { + "ligatures": "blogger2, brand48", + "name": "blogger2", + "id": 440, + "order": 0 + }, + { + "ligatures": "tumblr, brand49", + "name": "tumblr", + "id": 441, + "order": 0 + }, + { + "ligatures": "tumblr2, brand50", + "name": "tumblr2", + "id": 442, + "order": 0 + }, + { + "ligatures": "yahoo, brand51", + "name": "yahoo", + "id": 443, + "order": 0 + }, + { + "name": "yahoo2", + "ligatures": "yahoo2", + "id": 444, + "order": 0 + }, + { + "ligatures": "tux, brand52", + "name": "tux", + "id": 445, + "order": 0 + }, + { + "ligatures": "apple, brand53", + "name": "appleinc", + "id": 446, + "order": 0 + }, + { + "ligatures": "finder, brand54", + "name": "finder", + "id": 447, + "order": 0 + }, + { + "ligatures": "android, brand55", + "name": "android", + "id": 448, + "order": 0 + }, + { + "ligatures": "windows, brand56", + "name": "windows", + "id": 449, + "order": 0 + }, + { + "ligatures": "windows8, brand57", + "name": "windows8", + "id": 450, + "order": 0 + }, + { + "ligatures": "soundcloud, brand58", + "name": "soundcloud", + "id": 451, + "order": 0 + }, + { + "ligatures": "soundcloud2, brand59", + "name": "soundcloud2", + "id": 452, + "order": 0 + }, + { + "ligatures": "skype, brand60", + "name": "skype", + "id": 453, + "order": 0 + }, + { + "ligatures": "reddit, brand61", + "name": "reddit", + "id": 454, + "order": 0 + }, + { + "name": "hackernews", + "ligatures": "hackernews, brand62", + "id": 455, + "order": 0 + }, + { + "name": "wikipedia", + "ligatures": "wikipedia, brand63", + "id": 456, + "order": 0 + }, + { + "ligatures": "linkedin, brand64", + "name": "linkedin", + "id": 457, + "order": 0 + }, + { + "ligatures": "linkedin2, brand65", + "name": "linkedin2", + "id": 458, + "order": 0 + }, + { + "ligatures": "lastfm, brand66", + "name": "lastfm", + "id": 459, + "order": 0 + }, + { + "ligatures": "lastfm2, brand67", + "name": "lastfm2", + "id": 460, + "order": 0 + }, + { + "ligatures": "delicious, brand68", + "name": "delicious", + "id": 461, + "order": 0 + }, + { + "name": "stumbleupon", + "ligatures": "stumbleupon, brand69", + "id": 462, + "order": 0 + }, + { + "ligatures": "stumbleupon2, brand70", + "name": "stumbleupon2", + "id": 463, + "order": 0 + }, + { + "ligatures": "stackoverflow, brand71", + "name": "stackoverflow", + "id": 464, + "order": 0 + }, + { + "name": "pinterest", + "ligatures": "pinterest, brand72", + "id": 465, + "order": 0 + }, + { + "ligatures": "pinterest2, brand73", + "name": "pinterest2", + "id": 466, + "order": 0 + }, + { + "ligatures": "xing, brand74", + "name": "xing", + "id": 467, + "order": 0 + }, + { + "ligatures": "xing2, brand75", + "name": "xing2", + "codes": [ + 61231 + ], + "id": 468, + "order": 0 + }, + { + "ligatures": "flattr, brand76", + "name": "flattr", + "id": 469, + "order": 0 + }, + { + "ligatures": "foursquare, brand77", + "name": "foursquare", + "id": 470, + "order": 0 + }, + { + "ligatures": "yelp, brand78", + "name": "yelp", + "id": 471, + "order": 0 + }, + { + "ligatures": "paypal, brand79", + "name": "paypal", + "codes": [ + 61234 + ], + "id": 472, + "order": 0 + }, + { + "ligatures": "chrome, browser", + "name": "chrome", + "id": 473, + "order": 0 + }, + { + "ligatures": "firefox, browser2", + "name": "firefox", + "id": 474, + "order": 0 + }, + { + "ligatures": "IE, browser3", + "name": "IE", + "id": 475, + "order": 0 + }, + { + "name": "edge", + "ligatures": "edge, browser4", + "id": 476, + "order": 0 + }, + { + "ligatures": "safari, browser5", + "name": "safari", + "id": 477, + "order": 0 + }, + { + "ligatures": "opera, browser6", + "name": "opera", + "id": 478, + "order": 0 + }, + { + "ligatures": "file-pdf, file10", + "name": "file-pdf", + "id": 479, + "order": 0 + }, + { + "ligatures": "file-openoffice, file11", + "name": "file-openoffice", + "id": 480, + "order": 0 + }, + { + "ligatures": "file-word, file12", + "name": "file-word", + "id": 481, + "order": 0 + }, + { + "ligatures": "file-excel, file13", + "name": "file-excel", + "id": 482, + "order": 0 + }, + { + "ligatures": "libreoffice, file14", + "name": "libreoffice", + "id": 483, + "order": 0 + }, + { + "ligatures": "html-five, w3c", + "name": "html-five", + "id": 484, + "order": 0 + }, + { + "ligatures": "html-five2, w3c2", + "name": "html-five2", + "id": 485, + "order": 0 + }, + { + "ligatures": "css3, w3c3", + "name": "css3", + "id": 486, + "order": 0 + }, + { + "ligatures": "git, brand80", + "name": "git", + "id": 487, + "order": 0 + }, + { + "ligatures": "codepen, brand81", + "name": "codepen", + "id": 488, + "order": 0 + }, + { + "ligatures": "svg", + "name": "svg", + "id": 489, + "order": 0 + }, + { + "ligatures": "IcoMoon, icomoon", + "name": "IcoMoon", + "id": 490, + "order": 0 + } + ], + "id": 3, + "metadata": { + "name": "IcoMoon - Free", + "licenseURL": "https://icomoon.io/#icons-icomoon", + "license": "GPL or CC BY 4.0", + "designerURL": "http://keyamoon.com", + "designer": "Keyamoon", + "url": "https://icomoon.io/#icons-icomoon" + }, + "height": 1024, + "prevSize": 32, + "icons": [ + { + "id": 0, + "paths": [ + "M1024 590.444l-512-397.426-512 397.428v-162.038l512-397.426 512 397.428zM896 576v384h-256v-256h-256v256h-256v-384l384-288z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "home", + "house" + ], + "defaultCode": 59648, + "grid": 16 + }, + { + "id": 1, + "paths": [ + "M512 32l-512 512 96 96 96-96v416h256v-192h128v192h256v-416l96 96 96-96-512-512zM512 448c-35.346 0-64-28.654-64-64s28.654-64 64-64c35.346 0 64 28.654 64 64s-28.654 64-64 64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "home", + "house" + ], + "defaultCode": 59649, + "grid": 16 + }, + { + "id": 2, + "paths": [ + "M1024 608l-192-192v-288h-128v160l-192-192-512 512v32h128v320h320v-192h128v192h320v-320h128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "home", + "house" + ], + "defaultCode": 59650, + "grid": 16 + }, + { + "id": 3, + "paths": [ + "M0 1024h512v-1024h-512v1024zM320 128h128v128h-128v-128zM320 384h128v128h-128v-128zM320 640h128v128h-128v-128zM64 128h128v128h-128v-128zM64 384h128v128h-128v-128zM64 640h128v128h-128v-128zM576 320h448v64h-448zM576 1024h128v-256h192v256h128v-576h-448z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "office", + "buildings", + "work" + ], + "defaultCode": 59651, + "grid": 16 + }, + { + "id": 4, + "paths": [ + "M896 256v-128h-896v704c0 35.346 28.654 64 64 64h864c53.022 0 96-42.978 96-96v-544h-128zM832 832h-768v-640h768v640zM128 320h640v64h-640zM512 448h256v64h-256zM512 576h256v64h-256zM512 704h192v64h-192zM128 448h320v320h-320z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "newspaper", + "news", + "paper" + ], + "defaultCode": 59652, + "grid": 16 + }, + { + "id": 5, + "paths": [ + "M864 0c88.364 0 160 71.634 160 160 0 36.020-11.91 69.258-32 96l-64 64-224-224 64-64c26.742-20.090 59.978-32 96-32zM64 736l-64 288 288-64 592-592-224-224-592 592zM715.578 363.578l-448 448-55.156-55.156 448-448 55.156 55.156z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "pencil", + "write", + "edit" + ], + "defaultCode": 59653, + "grid": 16 + }, + { + "id": 6, + "paths": [ + "M384 640l128-64 448-448-64-64-448 448-64 128zM289.3 867.098c-31.632-66.728-65.666-100.762-132.396-132.394l99.096-272.792 128-77.912 384-384h-192l-384 384-192 640 640-192 384-384v-192l-384 384-77.912 128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "pencil", + "write", + "edit" + ], + "defaultCode": 59654, + "grid": 16 + }, + { + "id": 7, + "paths": [ + "M0 1024c128-384 463-1024 1024-1024-263 211-384 704-576 704s-192 0-192 0l-192 320h-64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "quill", + "feather", + "write", + "edit" + ], + "defaultCode": 59655, + "grid": 16 + }, + { + "id": 8, + "paths": [ + "M1018.17 291.89l-286.058-286.058c-9.334-9.334-21.644-7.234-27.356 4.666l-38.354 79.904 267.198 267.198 79.904-38.354c11.9-5.712 14-18.022 4.666-27.356z", + "M615.384 135.384l-263.384 21.95c-17.5 2.166-32.080 5.898-37.090 28.752-0.006 0.024-0.012 0.042-0.018 0.066-71.422 343.070-314.892 677.848-314.892 677.848l57.374 57.374 271.986-271.99c-5.996-12.53-9.36-26.564-9.36-41.384 0-53.020 42.98-96 96-96s96 42.98 96 96-42.98 96-96 96c-14.82 0-28.852-3.364-41.384-9.36l-271.988 271.986 57.372 57.374c0 0 334.778-243.47 677.848-314.892 0.024-0.006 0.042-0.012 0.066-0.018 22.854-5.010 26.586-19.59 28.752-37.090l21.95-263.384-273.232-273.232z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "pen", + "write", + "edit" + ], + "defaultCode": 59656, + "grid": 16 + }, + { + "id": 9, + "paths": [ + "M384 0v96c73.482 0 144.712 14.37 211.716 42.71 64.768 27.394 122.958 66.632 172.948 116.624s89.228 108.18 116.624 172.948c28.342 67.004 42.712 138.238 42.712 211.718h96c0-353.46-286.54-640-640-640z", + "M384 192v96c94.022 0 182.418 36.614 248.9 103.098 66.486 66.484 103.1 154.878 103.1 248.902h96c0-247.422-200.576-448-448-448z", + "M480 384l-64 64-224 64-192 416 25.374 25.374 232.804-232.804c-1.412-5.286-2.178-10.84-2.178-16.57 0-35.346 28.654-64 64-64s64 28.654 64 64-28.654 64-64 64c-5.732 0-11.282-0.764-16.568-2.178l-232.804 232.804 25.372 25.374 416-192 64-224 64-64-160-160z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "blog", + "pen", + "feed", + "publish", + "broadcast", + "write" + ], + "defaultCode": 59657, + "grid": 16 + }, + { + "id": 10, + "paths": [ + "M986.51 37.49c-49.988-49.986-131.032-49.986-181.020 0l-172.118 172.118-121.372-121.372-135.764 135.764 106.426 106.426-472.118 472.118c-8.048 8.048-11.468 18.958-10.3 29.456h-0.244v160c0 17.674 14.328 32 32 32h160c0 0 2.664 0 4 0 9.212 0 18.426-3.516 25.456-10.544l472.118-472.118 106.426 106.426 135.764-135.764-121.372-121.372 172.118-172.118c49.986-49.988 49.986-131.032 0-181.020zM173.090 960h-109.090v-109.090l469.574-469.572 109.088 109.088-469.572 469.574z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "eyedropper", + "color", + "color-picker", + "sample" + ], + "defaultCode": 59658, + "grid": 16 + }, + { + "id": 11, + "paths": [ + "M864.626 473.162c-65.754-183.44-205.11-348.15-352.626-473.162-147.516 125.012-286.87 289.722-352.626 473.162-40.664 113.436-44.682 236.562 12.584 345.4 65.846 125.14 198.632 205.438 340.042 205.438s274.196-80.298 340.040-205.44c57.27-108.838 53.25-231.962 12.586-345.398zM738.764 758.956c-43.802 83.252-132.812 137.044-226.764 137.044-55.12 0-108.524-18.536-152.112-50.652 13.242 1.724 26.632 2.652 40.112 2.652 117.426 0 228.668-67.214 283.402-171.242 44.878-85.292 40.978-173.848 23.882-244.338 14.558 28.15 26.906 56.198 36.848 83.932 22.606 63.062 40.024 156.34-5.368 242.604z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "droplet", + "color", + "water" + ], + "defaultCode": 59659, + "grid": 16 + }, + { + "id": 12, + "paths": [ + "M1024 576v-384h-192v-64c0-35.2-28.8-64-64-64h-704c-35.2 0-64 28.8-64 64v192c0 35.2 28.8 64 64 64h704c35.2 0 64-28.8 64-64v-64h128v256h-576v128h-32c-17.674 0-32 14.326-32 32v320c0 17.674 14.326 32 32 32h128c17.674 0 32-14.326 32-32v-320c0-17.674-14.326-32-32-32h-32v-64h576zM768 192h-704v-64h704v64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "paint-format", + "format", + "color" + ], + "defaultCode": 59660, + "grid": 16 + }, + { + "id": 13, + "paths": [ + "M959.884 128c0.040 0.034 0.082 0.076 0.116 0.116v767.77c-0.034 0.040-0.076 0.082-0.116 0.116h-895.77c-0.040-0.034-0.082-0.076-0.114-0.116v-767.772c0.034-0.040 0.076-0.082 0.114-0.114h895.77zM960 64h-896c-35.2 0-64 28.8-64 64v768c0 35.2 28.8 64 64 64h896c35.2 0 64-28.8 64-64v-768c0-35.2-28.8-64-64-64v0z", + "M832 288c0 53.020-42.98 96-96 96s-96-42.98-96-96 42.98-96 96-96 96 42.98 96 96z", + "M896 832h-768v-128l224-384 256 320h64l224-192z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "image", + "picture", + "photo", + "graphic" + ], + "defaultCode": 59661, + "grid": 16 + }, + { + "id": 14, + "paths": [ + "M1088 128h-64v-64c0-35.2-28.8-64-64-64h-896c-35.2 0-64 28.8-64 64v768c0 35.2 28.8 64 64 64h64v64c0 35.2 28.8 64 64 64h896c35.2 0 64-28.8 64-64v-768c0-35.2-28.8-64-64-64zM128 192v640h-63.886c-0.040-0.034-0.082-0.076-0.114-0.116v-767.77c0.034-0.040 0.076-0.082 0.114-0.114h895.77c0.040 0.034 0.082 0.076 0.116 0.116v63.884h-768c-35.2 0-64 28.8-64 64v0zM1088 959.884c-0.034 0.040-0.076 0.082-0.116 0.116h-895.77c-0.040-0.034-0.082-0.076-0.114-0.116v-767.77c0.034-0.040 0.076-0.082 0.114-0.114h895.77c0.040 0.034 0.082 0.076 0.116 0.116v767.768z", + "M960 352c0 53.020-42.98 96-96 96s-96-42.98-96-96 42.98-96 96-96 96 42.98 96 96z", + "M1024 896h-768v-128l224-384 256 320h64l224-192z" + ], + "width": 1152, + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "images", + "pictures", + "photos", + "graphics" + ], + "defaultCode": 59662, + "grid": 16 + }, + { + "id": 15, + "paths": [ + "M304 608c0 114.876 93.124 208 208 208s208-93.124 208-208-93.124-208-208-208-208 93.124-208 208zM960 256h-224c-16-64-32-128-96-128h-256c-64 0-80 64-96 128h-224c-35.2 0-64 28.8-64 64v576c0 35.2 28.8 64 64 64h896c35.2 0 64-28.8 64-64v-576c0-35.2-28.8-64-64-64zM512 892c-156.85 0-284-127.148-284-284 0-156.85 127.15-284 284-284 156.852 0 284 127.15 284 284 0 156.852-127.146 284-284 284zM960 448h-128v-64h128v64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "camera", + "photo", + "picture", + "image" + ], + "defaultCode": 59663, + "grid": 16 + }, + { + "id": 16, + "paths": [ + "M288 576h-64v448h64c17.6 0 32-14.4 32-32v-384c0-17.6-14.4-32-32-32z", + "M736 576c-17.602 0-32 14.4-32 32v384c0 17.6 14.398 32 32 32h64v-448h-64z", + "M1024 512c0-282.77-229.23-512-512-512s-512 229.23-512 512c0 61.412 10.83 120.29 30.656 174.848-19.478 33.206-30.656 71.87-30.656 113.152 0 112.846 83.448 206.188 192 221.716v-443.418c-31.914 4.566-61.664 15.842-87.754 32.378-5.392-26.718-8.246-54.364-8.246-82.676 0-229.75 186.25-416 416-416s416 186.25 416 416c0 28.314-2.83 55.968-8.22 82.696-26.1-16.546-55.854-27.848-87.78-32.418v443.44c108.548-15.532 192-108.874 192-221.714 0-41.274-11.178-79.934-30.648-113.138 19.828-54.566 30.648-113.452 30.648-174.866z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "headphones", + "headset", + "music", + "audio" + ], + "defaultCode": 59664, + "grid": 16 + }, + { + "id": 17, + "paths": [ + "M960 0h64v736c0 88.366-100.29 160-224 160s-224-71.634-224-160c0-88.368 100.29-160 224-160 62.684 0 119.342 18.4 160 48.040v-368.040l-512 113.778v494.222c0 88.366-100.288 160-224 160s-224-71.634-224-160c0-88.368 100.288-160 224-160 62.684 0 119.342 18.4 160 48.040v-624.040l576-128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "music", + "song", + "audio", + "sound", + "note" + ], + "defaultCode": 59665, + "grid": 16 + }, + { + "id": 18, + "paths": [ + "M981.188 160.108c-143.632-20.65-302.332-32.108-469.186-32.108-166.86 0-325.556 11.458-469.194 32.108-27.53 107.726-42.808 226.75-42.808 351.892 0 125.14 15.278 244.166 42.808 351.89 143.638 20.652 302.336 32.11 469.194 32.11 166.854 0 325.552-11.458 469.186-32.11 27.532-107.724 42.812-226.75 42.812-351.89 0-125.142-15.28-244.166-42.812-351.892zM384.002 704v-384l320 192-320 192z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "play", + "video", + "movie" + ], + "defaultCode": 59666, + "grid": 16 + }, + { + "id": 19, + "paths": [ + "M0 128v768h1024v-768h-1024zM192 832h-128v-128h128v128zM192 576h-128v-128h128v128zM192 320h-128v-128h128v128zM768 832h-512v-640h512v640zM960 832h-128v-128h128v128zM960 576h-128v-128h128v128zM960 320h-128v-128h128v128zM384 320v384l256-192z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "film", + "video", + "movie", + "tape", + "play" + ], + "defaultCode": 59667, + "grid": 16 + }, + { + "id": 20, + "paths": [ + "M384 288c0-88.366 71.634-160 160-160s160 71.634 160 160c0 88.366-71.634 160-160 160s-160-71.634-160-160zM0 288c0-88.366 71.634-160 160-160s160 71.634 160 160c0 88.366-71.634 160-160 160s-160-71.634-160-160zM768 608v-96c0-35.2-28.8-64-64-64h-640c-35.2 0-64 28.8-64 64v320c0 35.2 28.8 64 64 64h640c35.2 0 64-28.8 64-64v-96l256 160v-448l-256 160zM640 768h-512v-192h512v192z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "video-camera", + "video", + "media", + "film", + "movie" + ], + "defaultCode": 59668, + "grid": 16 + }, + { + "id": 21, + "paths": [ + "M864 192h-512c-88 0-160 72-160 160v512c0 88 72 160 160 160h512c88 0 160-72 160-160v-512c0-88-72-160-160-160zM416 896c-53.020 0-96-42.98-96-96s42.98-96 96-96 96 42.98 96 96-42.98 96-96 96zM416 512c-53.020 0-96-42.98-96-96s42.98-96 96-96 96 42.98 96 96-42.98 96-96 96zM608 704c-53.020 0-96-42.98-96-96s42.98-96 96-96 96 42.98 96 96-42.98 96-96 96zM800 896c-53.020 0-96-42.98-96-96s42.98-96 96-96 96 42.98 96 96-42.98 96-96 96zM800 512c-53.020 0-96-42.98-96-96s42.98-96 96-96 96 42.98 96 96-42.98 96-96 96zM828.76 128c-14.93-72.804-79.71-128-156.76-128h-512c-88 0-160 72-160 160v512c0 77.046 55.196 141.83 128 156.76v-636.76c0-35.2 28.8-64 64-64h636.76z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "dice", + "game", + "chance", + "luck", + "random", + "gample" + ], + "defaultCode": 59669, + "grid": 16 + }, + { + "id": 22, + "paths": [ + "M964.73 178.804c-93.902-109.45-233.21-178.804-388.73-178.804-282.77 0-512 229.23-512 512s229.23 512 512 512c155.52 0 294.828-69.356 388.728-178.804l-324.728-333.196 324.73-333.196zM704 120.602c39.432 0 71.398 31.964 71.398 71.398 0 39.432-31.966 71.398-71.398 71.398s-71.398-31.966-71.398-71.398c0-39.432 31.966-71.398 71.398-71.398z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "pacman", + "game", + "arcade" + ], + "defaultCode": 59670, + "grid": 16 + }, + { + "id": 23, + "paths": [ + "M817.57 348.15c-193.566-143.858-260.266-259.018-305.566-348.148v0c-0.004 0-0.004-0.002-0.004-0.002v0.002c-45.296 89.13-112 204.292-305.566 348.148-330.036 245.286-19.376 587.668 253.758 399.224-17.796 116.93-78.53 202.172-140.208 238.882v37.744h384.032v-37.74c-61.682-36.708-122.41-121.954-140.212-238.884 273.136 188.446 583.8-153.94 253.766-399.226z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "spades", + "cards", + "poker" + ], + "defaultCode": 59671, + "grid": 16 + }, + { + "id": 24, + "paths": [ + "M786.832 392.772c-59.032 0-112.086 24.596-149.852 64.694-15.996 16.984-43.762 37.112-73.8 54.81 14.11-53.868 58.676-121.7 89.628-151.456 39.64-38.17 63.984-91.83 63.984-151.5 0.006-114.894-91.476-208.096-204.788-209.32-113.32 1.222-204.796 94.426-204.796 209.318 0 59.672 24.344 113.33 63.986 151.5 30.954 29.756 75.52 97.588 89.628 151.456-30.042-17.7-57.806-37.826-73.8-54.81-37.768-40.098-90.82-64.694-149.85-64.694-114.386 0-207.080 93.664-207.080 209.328 0 115.638 92.692 209.338 207.080 209.338 59.042 0 112.082-25.356 149.85-65.452 16.804-17.872 46.444-40.138 78.292-58.632-3.002 147.692-73.532 256.168-145.318 298.906v37.742h384.014v-37.74c-71.792-42.736-142.32-151.216-145.32-298.906 31.852 18.494 61.488 40.768 78.292 58.632 37.766 40.094 90.808 65.452 149.852 65.452 114.386 0 207.078-93.7 207.078-209.338-0.002-115.664-92.692-209.328-207.080-209.328z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "clubs", + "cards", + "poker" + ], + "defaultCode": 59672, + "grid": 16 + }, + { + "id": 25, + "paths": [ + "M512 0l-320 512 320 512 320-512z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "diamonds", + "cards", + "poker" + ], + "defaultCode": 59673, + "grid": 16 + }, + { + "id": 26, + "paths": [ + "M1024 429.256c0-200.926-58.792-363.938-131.482-365.226 0.292-0.006 0.578-0.030 0.872-0.030h-82.942c0 0-194.8 146.336-475.23 203.754-8.56 45.292-14.030 99.274-14.030 161.502s5.466 116.208 14.030 161.5c280.428 57.418 475.23 203.756 475.23 203.756h82.942c-0.292 0-0.578-0.024-0.872-0.032 72.696-1.288 131.482-164.298 131.482-365.224zM864.824 739.252c-9.382 0-19.532-9.742-24.746-15.548-12.63-14.064-24.792-35.96-35.188-63.328-23.256-61.232-36.066-143.31-36.066-231.124 0-87.81 12.81-169.89 36.066-231.122 10.394-27.368 22.562-49.266 35.188-63.328 5.214-5.812 15.364-15.552 24.746-15.552 9.38 0 19.536 9.744 24.744 15.552 12.634 14.064 24.796 35.958 35.188 63.328 23.258 61.23 36.068 143.312 36.068 231.122 0 87.804-12.81 169.888-36.068 231.124-10.39 27.368-22.562 49.264-35.188 63.328-5.208 5.806-15.36 15.548-24.744 15.548zM251.812 429.256c0-51.95 3.81-102.43 11.052-149.094-47.372 6.554-88.942 10.324-140.34 10.324-67.058 0-67.058 0-67.058 0l-55.466 94.686v88.17l55.46 94.686c0 0 0 0 67.060 0 51.398 0 92.968 3.774 140.34 10.324-7.236-46.664-11.048-97.146-11.048-149.096zM368.15 642.172l-127.998-24.51 81.842 321.544c4.236 16.634 20.744 25.038 36.686 18.654l118.556-47.452c15.944-6.376 22.328-23.964 14.196-39.084l-123.282-229.152zM864.824 548.73c-3.618 0-7.528-3.754-9.538-5.992-4.87-5.42-9.556-13.86-13.562-24.408-8.962-23.6-13.9-55.234-13.9-89.078s4.938-65.478 13.9-89.078c4.006-10.548 8.696-18.988 13.562-24.408 2.010-2.24 5.92-5.994 9.538-5.994 3.616 0 7.53 3.756 9.538 5.994 4.87 5.42 9.556 13.858 13.56 24.408 8.964 23.598 13.902 55.234 13.902 89.078 0 33.842-4.938 65.478-13.902 89.078-4.004 10.548-8.696 18.988-13.56 24.408-2.008 2.238-5.92 5.992-9.538 5.992z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "bullhorn", + "megaphone", + "announcement", + "advertisement", + "news" + ], + "defaultCode": 59674, + "grid": 16 + }, + { + "id": 27, + "paths": [ + "M640 576c105.87 0 201.87 43.066 271.402 112.598l-90.468 90.468c-46.354-46.356-110.356-75.066-180.934-75.066s-134.578 28.71-180.934 75.066l-90.468-90.468c69.532-69.532 165.532-112.598 271.402-112.598zM187.452 507.452c120.88-120.88 281.598-187.452 452.548-187.452s331.668 66.572 452.55 187.452l-90.51 90.508c-96.706-96.704-225.28-149.96-362.040-149.96-136.762 0-265.334 53.256-362.038 149.962l-90.51-90.51zM988.784 134.438c106.702 45.132 202.516 109.728 284.782 191.996v0l-90.508 90.508c-145.056-145.056-337.92-224.942-543.058-224.942-205.14 0-398 79.886-543.058 224.942l-90.51-90.51c82.268-82.266 178.082-146.862 284.784-191.994 110.504-46.738 227.852-70.438 348.784-70.438s238.278 23.7 348.784 70.438zM576 896c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64z" + ], + "width": 1280, + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "connection", + "wifi", + "wave" + ], + "defaultCode": 59675, + "grid": 16 + }, + { + "id": 28, + "paths": [ + "M1024 512c0-282.77-229.23-512-512-512s-512 229.23-512 512c0 220.054 138.836 407.664 333.686 480.068l-13.686 31.932h384l-13.686-31.932c194.85-72.404 333.686-260.014 333.686-480.068zM486.79 634.826c-22.808-9.788-38.79-32.436-38.79-58.826 0-35.346 28.654-64 64-64s64 28.654 64 64c0 26.39-15.978 49.044-38.786 58.834l-25.214-58.834-25.21 58.826zM538.268 637.292c58.092-12.118 101.732-63.602 101.732-125.292 0-70.694-57.306-128-128-128-70.692 0-128 57.306-128 128 0 61.692 43.662 113.122 101.76 125.228l-74.624 174.122c-91.23-39.15-155.136-129.784-155.136-235.35 0-141.384 114.616-268 256-268s256 126.616 256 268c0 105.566-63.906 196.2-155.136 235.35l-74.596-174.058zM688.448 987.708l-73.924-172.486c126.446-42.738 217.476-162.346 217.476-303.222 0-176.73-143.268-320-320-320-176.73 0-320 143.27-320 320 0 140.876 91.030 260.484 217.476 303.222l-73.924 172.486c-159.594-68.488-271.386-227.034-271.386-411.708 0-247.332 200.502-459.834 447.834-459.834s447.834 212.502 447.834 459.834c0 184.674-111.792 343.22-271.386 411.708z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "podcast", + "broadcast", + "live", + "radio", + "feed" + ], + "defaultCode": 59676, + "grid": 16 + }, + { + "id": 29, + "paths": [ + "M384 512c0-70.692 57.308-128 128-128s128 57.308 128 128c0 70.692-57.308 128-128 128s-128-57.308-128-128zM664.348 230.526c99.852 54.158 167.652 159.898 167.652 281.474s-67.8 227.316-167.652 281.474c44.066-70.126 71.652-170.27 71.652-281.474s-27.586-211.348-71.652-281.474zM288 512c0 111.204 27.584 211.348 71.652 281.474-99.852-54.16-167.652-159.898-167.652-281.474s67.8-227.314 167.652-281.474c-44.068 70.126-71.652 170.27-71.652 281.474zM96 512c0 171.9 54.404 326.184 140.652 431.722-142.302-90.948-236.652-250.314-236.652-431.722s94.35-340.774 236.652-431.722c-86.248 105.538-140.652 259.822-140.652 431.722zM787.352 80.28c142.298 90.946 236.648 250.312 236.648 431.72s-94.35 340.774-236.648 431.72c86.244-105.536 140.648-259.82 140.648-431.72s-54.404-326.184-140.648-431.72z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "feed", + "wave", + "radio", + "live", + "broadcast" + ], + "defaultCode": 59677, + "grid": 16 + }, + { + "id": 30, + "paths": [ + "M480 704c88.366 0 160-71.634 160-160v-384c0-88.366-71.634-160-160-160s-160 71.634-160 160v384c0 88.366 71.636 160 160 160zM704 448v96c0 123.71-100.29 224-224 224-123.712 0-224-100.29-224-224v-96h-64v96c0 148.238 112.004 270.3 256 286.22v129.78h-128v64h320v-64h-128v-129.78c143.994-15.92 256-137.982 256-286.22v-96h-64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "mic", + "microphone", + "voice", + "audio" + ], + "defaultCode": 59678, + "grid": 16 + }, + { + "id": 31, + "paths": [ + "M896 128v832h-672c-53.026 0-96-42.98-96-96s42.974-96 96-96h608v-768h-640c-70.398 0-128 57.6-128 128v768c0 70.4 57.602 128 128 128h768v-896h-64z", + "M224.056 832v0c-0.018 0.002-0.038 0-0.056 0-17.672 0-32 14.326-32 32s14.328 32 32 32c0.018 0 0.038-0.002 0.056-0.002v0.002h607.89v-64h-607.89z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "book", + "read", + "reading" + ], + "defaultCode": 59679, + "grid": 16 + }, + { + "id": 32, + "paths": [ + "M224 128h-192c-17.6 0-32 14.4-32 32v704c0 17.6 14.4 32 32 32h192c17.6 0 32-14.4 32-32v-704c0-17.6-14.4-32-32-32zM192 320h-128v-64h128v64z", + "M544 128h-192c-17.6 0-32 14.4-32 32v704c0 17.6 14.4 32 32 32h192c17.6 0 32-14.4 32-32v-704c0-17.6-14.4-32-32-32zM512 320h-128v-64h128v64z", + "M765.088 177.48l-171.464 86.394c-15.716 7.918-22.096 27.258-14.178 42.976l287.978 571.548c7.918 15.718 27.258 22.098 42.976 14.178l171.464-86.392c15.716-7.92 22.096-27.26 14.178-42.974l-287.978-571.55c-7.92-15.718-27.26-22.1-42.976-14.18z" + ], + "width": 1152, + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "books", + "library", + "archive" + ], + "defaultCode": 59680, + "grid": 16 + }, + { + "id": 33, + "paths": [ + "M1024 960v-64h-64v-384h64v-64h-192v64h64v384h-192v-384h64v-64h-192v64h64v384h-192v-384h64v-64h-192v64h64v384h-192v-384h64v-64h-192v64h64v384h-64v64h-64v64h1088v-64h-64z", + "M512 0h64l512 320v64h-1088v-64l512-320z" + ], + "width": 1088, + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "library", + "bank", + "building" + ], + "defaultCode": 59681, + "grid": 16 + }, + { + "id": 34, + "paths": [ + "M864 0h-768c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h768c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM832 896h-704v-768h704v768zM256 448h448v64h-448zM256 576h448v64h-448zM256 704h448v64h-448zM256 320h448v64h-448z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "file-text", + "file", + "document", + "list", + "paper" + ], + "defaultCode": 59682, + "grid": 16 + }, + { + "id": 35, + "paths": [ + "M864 0h-768c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h768c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM832 896h-704v-768h704v768zM256 576h448v64h-448zM256 704h448v64h-448zM320 288c0-53.019 42.981-96 96-96s96 42.981 96 96c0 53.019-42.981 96-96 96s-96-42.981-96-96zM480 384h-128c-52.8 0-96 28.8-96 64v64h320v-64c0-35.2-43.2-64-96-64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "profile", + "file", + "document", + "page", + "user", + "paper" + ], + "defaultCode": 59683, + "grid": 16 + }, + { + "id": 36, + "paths": [ + "M917.806 229.076c-22.212-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.592-42.194-90.924-42.194h-496c-44.112 0-80 35.888-80 80v864c0 44.112 35.888 80 80 80h736c44.112 0 80-35.888 80-80v-624c0-14.332-4.372-39.35-42.194-90.924zM785.374 174.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.984 17.78 50.678 41.878 81.374 72.572zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16 0 0 495.956-0.002 496 0v224c0 17.672 14.326 32 32 32h224v624z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "file-empty", + "file", + "document", + "paper", + "page", + "new", + "empty", + "blank" + ], + "defaultCode": 59684, + "grid": 16 + }, + { + "id": 37, + "paths": [ + "M917.806 357.076c-22.21-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.592-42.194-90.924-42.194h-368c-44.114 0-80 35.888-80 80v736c0 44.112 35.886 80 80 80h608c44.112 0 80-35.888 80-80v-496c0-14.332-4.372-39.35-42.194-90.924zM785.374 302.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.982 17.78 50.678 41.878 81.374 72.572v0zM896 944c0 8.672-7.328 16-16 16h-608c-8.672 0-16-7.328-16-16v-736c0-8.672 7.328-16 16-16 0 0 367.956-0.002 368 0v224c0 17.672 14.324 32 32 32h224v496z", + "M602.924 42.196c-51.574-37.822-76.592-42.196-90.924-42.196h-368c-44.112 0-80 35.888-80 80v736c0 38.632 27.528 70.958 64 78.39v-814.39c0-8.672 7.328-16 16-16h486.876c-9.646-7.92-19.028-15.26-27.952-21.804z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "files-empty", + "files", + "documents", + "papers", + "pages" + ], + "defaultCode": 59685, + "grid": 16 + }, + { + "id": 38, + "paths": [ + "M917.806 229.076c-22.212-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.592-42.194-90.924-42.194h-496c-44.112 0-80 35.888-80 80v864c0 44.112 35.888 80 80 80h736c44.112 0 80-35.888 80-80v-624c0-14.332-4.372-39.35-42.194-90.924zM785.374 174.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.984 17.78 50.678 41.878 81.374 72.572zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16 0 0 495.956-0.002 496 0v224c0 17.672 14.326 32 32 32h224v624z", + "M736 832h-448c-17.672 0-32-14.326-32-32s14.328-32 32-32h448c17.674 0 32 14.326 32 32s-14.326 32-32 32z", + "M736 704h-448c-17.672 0-32-14.326-32-32s14.328-32 32-32h448c17.674 0 32 14.326 32 32s-14.326 32-32 32z", + "M736 576h-448c-17.672 0-32-14.326-32-32s14.328-32 32-32h448c17.674 0 32 14.326 32 32s-14.326 32-32 32z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "file-text", + "file", + "document", + "list", + "paper", + "page" + ], + "defaultCode": 59686, + "grid": 16 + }, + { + "id": 39, + "paths": [ + "M832 896h-640v-128l192-320 263 320 185-128v256z", + "M832 480c0 53.020-42.98 96-96 96-53.022 0-96-42.98-96-96s42.978-96 96-96c53.020 0 96 42.98 96 96z", + "M917.806 229.076c-22.212-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.592-42.194-90.924-42.194h-496c-44.112 0-80 35.888-80 80v864c0 44.112 35.888 80 80 80h736c44.112 0 80-35.888 80-80v-624c0-14.332-4.372-39.35-42.194-90.924zM785.374 174.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.984 17.78 50.678 41.878 81.374 72.572zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16 0 0 495.956-0.002 496 0v224c0 17.672 14.326 32 32 32h224v624z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "file-picture", + "file", + "document", + "file-image" + ], + "defaultCode": 59687, + "grid": 16 + }, + { + "id": 40, + "paths": [ + "M917.806 229.076c-22.21-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.592-42.194-90.924-42.194h-496c-44.112 0-80 35.888-80 80v864c0 44.112 35.886 80 80 80h736c44.112 0 80-35.888 80-80v-624c0-14.332-4.372-39.35-42.194-90.924v0zM785.374 174.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.982 17.78 50.678 41.878 81.374 72.572v0zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16 0 0 495.956-0.002 496 0v224c0 17.672 14.324 32 32 32h224v624z", + "M756.288 391.252c-7.414-6.080-17.164-8.514-26.562-6.632l-320 64c-14.958 2.994-25.726 16.126-25.726 31.38v236.876c-18.832-8.174-40.678-12.876-64-12.876-70.692 0-128 42.98-128 96s57.308 96 128 96 128-42.98 128-96v-229.766l256-51.202v133.842c-18.832-8.174-40.678-12.876-64-12.876-70.692 0-128 42.98-128 96s57.308 96 128 96 128-42.98 128-96v-319.998c0-9.586-4.298-18.668-11.712-24.748z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "file-music", + "file", + "document", + "file-song", + "file-audio" + ], + "defaultCode": 59688, + "grid": 16 + }, + { + "id": 41, + "paths": [ + "M384 384l320 224-320 224v-448z", + "M917.806 229.076c-22.212-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.592-42.194-90.924-42.194h-496c-44.112 0-80 35.888-80 80v864c0 44.112 35.888 80 80 80h736c44.112 0 80-35.888 80-80v-624c0-14.332-4.372-39.35-42.194-90.924zM785.374 174.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.984 17.78 50.678 41.878 81.374 72.572zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16 0 0 495.956-0.002 496 0v224c0 17.672 14.326 32 32 32h224v624z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "file-play", + "file", + "document", + "file-media", + "file-video" + ], + "defaultCode": 59689, + "grid": 16 + }, + { + "id": 42, + "paths": [ + "M917.806 229.076c-22.208-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.594-42.194-90.924-42.194h-496c-44.112 0-80 35.888-80 80v864c0 44.112 35.882 80 80 80h736c44.112 0 80-35.888 80-80v-624c0-14.332-4.372-39.35-42.194-90.924v0 0zM785.374 174.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.98 17.78 50.678 41.878 81.374 72.572v0 0zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16 0 0 495.956-0.002 496 0v224c0 17.672 14.32 32 32 32h224v624z", + "M256 512h320v320h-320v-320z", + "M576 640l192-128v320l-192-128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "file-video", + "file", + "document", + "file-camera" + ], + "defaultCode": 59690, + "grid": 16 + }, + { + "id": 43, + "paths": [ + "M917.806 229.076c-22.208-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.592-42.194-90.924-42.194h-496c-44.112 0-80 35.888-80 80v864c0 44.112 35.884 80 80 80h736c44.112 0 80-35.888 80-80v-624c0-14.332-4.372-39.35-42.194-90.924v0 0zM785.374 174.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.98 17.78 50.678 41.878 81.374 72.572v0 0zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16 0 0 495.956-0.002 496 0v224c0 17.672 14.322 32 32 32h224v624z", + "M256 64h128v64h-128v-64z", + "M384 128h128v64h-128v-64z", + "M256 192h128v64h-128v-64z", + "M384 256h128v64h-128v-64z", + "M256 320h128v64h-128v-64z", + "M384 384h128v64h-128v-64z", + "M256 448h128v64h-128v-64z", + "M384 512h128v64h-128v-64z", + "M256 848c0 26.4 21.6 48 48 48h160c26.4 0 48-21.6 48-48v-160c0-26.4-21.6-48-48-48h-80v-64h-128v272zM448 768v64h-128v-64h128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "file-zip", + "file", + "document", + "file-compressed", + "file-type", + "file-format" + ], + "defaultCode": 59691, + "grid": 16 + }, + { + "id": 44, + "paths": [ + "M640 256v-256h-448l-192 192v576h384v256h640v-768h-384zM192 90.51v101.49h-101.49l101.49-101.49zM64 704v-448h192v-192h320v192l-192 192v256h-320zM576 346.51v101.49h-101.49l101.49-101.49zM960 960h-512v-448h192v-192h320v640z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "copy", + "duplicate", + "files", + "pages", + "papers", + "documents" + ], + "defaultCode": 59692, + "grid": 16 + }, + { + "id": 45, + "paths": [ + "M704 128h-128v-64c0-35.2-28.8-64-64-64h-128c-35.204 0-64 28.8-64 64v64h-128v128h512v-128zM512 128h-128v-63.886c0.034-0.038 0.072-0.078 0.114-0.114h127.768c0.042 0.036 0.082 0.076 0.118 0.114v63.886zM832 320v-160c0-17.6-14.4-32-32-32h-64v64h32v128h-192l-192 192v256h-256v-576h32v-64h-64c-17.602 0-32 14.4-32 32v640c0 17.6 14.398 32 32 32h288v192h640v-704h-192zM576 410.51v101.49h-101.49l101.49-101.49zM960 960h-512v-384h192v-192h320v576z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "paste", + "clipboard-file" + ], + "defaultCode": 59693, + "grid": 16 + }, + { + "id": 46, + "paths": [ + "M1024 320l-512-256-512 256 512 256 512-256zM512 148.97l342.058 171.030-342.058 171.030-342.058-171.030 342.058-171.030zM921.444 460.722l102.556 51.278-512 256-512-256 102.556-51.278 409.444 204.722zM921.444 652.722l102.556 51.278-512 256-512-256 102.556-51.278 409.444 204.722z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "stack", + "layers" + ], + "defaultCode": 59694, + "grid": 16 + }, + { + "id": 47, + "paths": [ + "M448 128l128 128h448v704h-1024v-832z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "folder", + "directory", + "category", + "browse" + ], + "defaultCode": 59695, + "grid": 16 + }, + { + "id": 48, + "paths": [ + "M832 960l192-512h-832l-192 512zM128 384l-128 576v-832h288l128 128h416v128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "folder-open", + "directory", + "category", + "browse" + ], + "defaultCode": 59696, + "grid": 16 + }, + { + "id": 49, + "paths": [ + "M576 256l-128-128h-448v832h1024v-704h-448zM704 704h-128v128h-128v-128h-128v-128h128v-128h128v128h128v128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "folder-plus", + "directory", + "folder-add" + ], + "defaultCode": 59697, + "grid": 16 + }, + { + "id": 50, + "paths": [ + "M576 256l-128-128h-448v832h1024v-704h-448zM704 704h-384v-128h384v128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "folder-minus", + "directory", + "folder-remove" + ], + "defaultCode": 59698, + "grid": 16 + }, + { + "id": 51, + "paths": [ + "M576 256l-128-128h-448v832h1024v-704h-448zM512 864l-224-224h160v-256h128v256h160l-224 224z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "folder-download", + "directory", + "folder-save" + ], + "defaultCode": 59699, + "grid": 16 + }, + { + "id": 52, + "paths": [ + "M576 256l-128-128h-448v832h1024v-704h-448zM512 480l224 224h-160v256h-128v-256h-160l224-224z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "folder-upload", + "directory", + "folder-load" + ], + "defaultCode": 59700, + "grid": 16 + }, + { + "id": 53, + "paths": [ + "M976 0h-384c-26.4 0-63.274 15.274-81.942 33.942l-476.116 476.116c-18.668 18.668-18.668 49.214 0 67.882l412.118 412.118c18.668 18.668 49.214 18.668 67.882 0l476.118-476.118c18.666-18.666 33.94-55.54 33.94-81.94v-384c0-26.4-21.6-48-48-48zM736 384c-53.020 0-96-42.98-96-96s42.98-96 96-96 96 42.98 96 96-42.98 96-96 96z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "price-tag" + ], + "defaultCode": 59701, + "grid": 16 + }, + { + "id": 54, + "paths": [ + "M1232 0h-384c-26.4 0-63.274 15.274-81.942 33.942l-476.116 476.116c-18.668 18.668-18.668 49.214 0 67.882l412.118 412.118c18.668 18.668 49.214 18.668 67.882 0l476.118-476.118c18.666-18.666 33.94-55.54 33.94-81.94v-384c0-26.4-21.6-48-48-48zM992 384c-53.020 0-96-42.98-96-96s42.98-96 96-96 96 42.98 96 96-42.98 96-96 96z", + "M128 544l544-544h-80c-26.4 0-63.274 15.274-81.942 33.942l-476.116 476.116c-18.668 18.668-18.668 49.214 0 67.882l412.118 412.118c18.668 18.668 49.214 18.668 67.882 0l30.058-30.058-416-416z" + ], + "width": 1280, + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "price-tags" + ], + "defaultCode": 59702, + "grid": 16 + }, + { + "id": 55, + "paths": [ + "M0 128h128v640h-128zM192 128h64v640h-64zM320 128h64v640h-64zM512 128h64v640h-64zM768 128h64v640h-64zM960 128h64v640h-64zM640 128h32v640h-32zM448 128h32v640h-32zM864 128h32v640h-32zM0 832h64v64h-64zM192 832h64v64h-64zM320 832h64v64h-64zM640 832h64v64h-64zM960 832h64v64h-64zM768 832h128v64h-128zM448 832h128v64h-128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "barcode" + ], + "defaultCode": 59703, + "grid": 16 + }, + { + "id": 56, + "paths": [ + "M320 64h-256v256h256v-256zM384 0v0 384h-384v-384h384zM128 128h128v128h-128zM960 64h-256v256h256v-256zM1024 0v0 384h-384v-384h384zM768 128h128v128h-128zM320 704h-256v256h256v-256zM384 640v0 384h-384v-384h384zM128 768h128v128h-128zM448 0h64v64h-64zM512 64h64v64h-64zM448 128h64v64h-64zM512 192h64v64h-64zM448 256h64v64h-64zM512 320h64v64h-64zM448 384h64v64h-64zM448 512h64v64h-64zM512 576h64v64h-64zM448 640h64v64h-64zM512 704h64v64h-64zM448 768h64v64h-64zM512 832h64v64h-64zM448 896h64v64h-64zM512 960h64v64h-64zM960 512h64v64h-64zM64 512h64v64h-64zM128 448h64v64h-64zM0 448h64v64h-64zM256 448h64v64h-64zM320 512h64v64h-64zM384 448h64v64h-64zM576 512h64v64h-64zM640 448h64v64h-64zM704 512h64v64h-64zM768 448h64v64h-64zM832 512h64v64h-64zM896 448h64v64h-64zM960 640h64v64h-64zM576 640h64v64h-64zM640 576h64v64h-64zM704 640h64v64h-64zM832 640h64v64h-64zM896 576h64v64h-64zM960 768h64v64h-64zM576 768h64v64h-64zM640 704h64v64h-64zM768 704h64v64h-64zM832 768h64v64h-64zM896 704h64v64h-64zM960 896h64v64h-64zM640 832h64v64h-64zM704 896h64v64h-64zM768 832h64v64h-64zM832 896h64v64h-64zM640 960h64v64h-64zM768 960h64v64h-64zM896 960h64v64h-64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "qrcode" + ], + "defaultCode": 59704, + "grid": 16 + }, + { + "id": 57, + "paths": [ + "M575.996 320l127.998 127.998-255.994 255.994-127.998-127.998zM1001.526 297.504l-73.516-73.516-32.008 32.008c-16.378 16.38-39.010 26.51-64 26.51-49.988 0-90.514-40.522-90.514-90.51 0-25.002 10.14-47.638 26.534-64.018l31.988-31.986-73.518-73.516c-29.968-29.968-79.008-29.968-108.976 0l-595.040 595.038c-29.966 29.968-29.966 79.010 0 108.976l73.52 73.518 31.962-31.964c16.382-16.406 39.030-26.552 64.044-26.552 49.988 0 90.51 40.524 90.51 90.51 0 25.006-10.14 47.64-26.534 64.022l-31.984 31.986 73.516 73.518c29.966 29.966 79.008 29.966 108.976 0l595.040-595.040c29.964-29.976 29.964-79.016 0-108.984zM448.002 831.996l-256-256 384-384 256 256-384 384z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "ticket", + "theater", + "cinema" + ], + "defaultCode": 59705, + "grid": 16 + }, + { + "id": 58, + "paths": [ + "M384 928c0 53.019-42.981 96-96 96s-96-42.981-96-96c0-53.019 42.981-96 96-96s96 42.981 96 96z", + "M1024 928c0 53.019-42.981 96-96 96s-96-42.981-96-96c0-53.019 42.981-96 96-96s96 42.981 96 96z", + "M1024 512v-384h-768c0-35.346-28.654-64-64-64h-192v64h128l48.074 412.054c-29.294 23.458-48.074 59.5-48.074 99.946 0 70.696 57.308 128 128 128h768v-64h-768c-35.346 0-64-28.654-64-64 0-0.218 0.014-0.436 0.016-0.656l831.984-127.344z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "cart", + "purchase", + "ecommerce", + "shopping" + ], + "defaultCode": 59706, + "grid": 16 + }, + { + "id": 59, + "paths": [ + "M480 64c-265.096 0-480 214.904-480 480 0 265.098 214.904 480 480 480 265.098 0 480-214.902 480-480 0-265.096-214.902-480-480-480zM480 928c-212.078 0-384-171.922-384-384s171.922-384 384-384c212.078 0 384 171.922 384 384s-171.922 384-384 384zM512 512v-128h128v-64h-128v-64h-64v64h-128v256h128v128h-128v64h128v64h64v-64h128.002l-0.002-256h-128zM448 512h-64v-128h64v128zM576.002 704h-64.002v-128h64.002v128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "coin-dollar", + "money", + "cash", + "currency-dollar" + ], + "defaultCode": 59707, + "grid": 16 + }, + { + "id": 60, + "paths": [ + "M480 64c-265.096 0-480 214.904-480 480s214.904 480 480 480c265.098 0 480-214.902 480-480s-214.902-480-480-480zM480 928c-212.078 0-384-171.922-384-384s171.922-384 384-384c212.076 0 384 171.922 384 384s-171.924 384-384 384z", + "M670.824 644.34c-15.27-8.884-34.862-3.708-43.75 11.57-17.256 29.662-49.088 48.090-83.074 48.090h-128c-41.716 0-77.286-26.754-90.496-64h154.496c17.672 0 32-14.326 32-32s-14.328-32-32-32h-160v-64h160c17.672 0 32-14.328 32-32s-14.328-32-32-32h-154.496c13.21-37.246 48.78-64 90.496-64h128c33.986 0 65.818 18.426 83.074 48.090 8.888 15.276 28.478 20.456 43.752 11.568 15.276-8.888 20.456-28.476 11.568-43.752-28.672-49.288-81.702-79.906-138.394-79.906h-128c-77.268 0-141.914 55.056-156.78 128h-35.22c-17.672 0-32 14.328-32 32s14.328 32 32 32h32v64h-32c-17.672 0-32 14.326-32 32s14.328 32 32 32h35.22c14.866 72.944 79.512 128 156.78 128h128c56.692 0 109.72-30.62 138.394-79.91 8.888-15.276 3.708-34.864-11.57-43.75z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "coin-euro", + "money", + "cash", + "currency-euro" + ], + "defaultCode": 59708, + "grid": 16 + }, + { + "id": 61, + "paths": [ + "M480 64c-265.096 0-480 214.904-480 480s214.904 480 480 480c265.098 0 480-214.902 480-480s-214.902-480-480-480zM480 928c-212.078 0-384-171.922-384-384s171.922-384 384-384c212.074 0 384 171.922 384 384s-171.926 384-384 384z", + "M608 704h-224v-128h96c17.672 0 32-14.326 32-32s-14.328-32-32-32h-96v-32c0-52.934 43.066-96 96-96 34.17 0 66.042 18.404 83.18 48.030 8.85 15.298 28.426 20.526 43.722 11.676 15.296-8.848 20.526-28.424 11.676-43.722-28.538-49.336-81.638-79.984-138.578-79.984-88.224 0-160 71.776-160 160v32h-32c-17.672 0-32 14.326-32 32s14.328 32 32 32h32v192h288c17.674 0 32-14.326 32-32s-14.326-32-32-32z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "coin-pound", + "money", + "cash", + "currency-pound" + ], + "defaultCode": 59709, + "grid": 16 + }, + { + "id": 62, + "paths": [ + "M480 64c-265.096 0-480 214.904-480 480s214.904 480 480 480c265.098 0 480-214.902 480-480s-214.902-480-480-480zM480 928c-212.078 0-384-171.922-384-384s171.922-384 384-384c212.076 0 384 171.922 384 384s-171.924 384-384 384z", + "M608 576c17.674 0 32-14.326 32-32s-14.326-32-32-32h-68.208l94.832-142.25c9.804-14.704 5.83-34.572-8.876-44.376-14.704-9.802-34.572-5.83-44.376 8.876l-101.372 152.062-101.374-152.062c-9.804-14.706-29.672-18.68-44.376-8.876-14.706 9.804-18.678 29.672-8.876 44.376l94.834 142.25h-68.208c-17.672 0-32 14.326-32 32s14.328 32 32 32h96v64h-96c-17.672 0-32 14.326-32 32s14.328 32 32 32h96v96c0 17.674 14.328 32 32 32s32-14.326 32-32v-96h96c17.674 0 32-14.326 32-32s-14.326-32-32-32h-96v-64h96z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "coin-yen", + "money", + "cash", + "currency-yen" + ], + "defaultCode": 59710, + "grid": 16 + }, + { + "id": 63, + "paths": [ + "M928 128h-832c-52.8 0-96 43.2-96 96v576c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-576c0-52.8-43.2-96-96-96zM96 192h832c17.346 0 32 14.654 32 32v96h-896v-96c0-17.346 14.654-32 32-32zM928 832h-832c-17.346 0-32-14.654-32-32v-288h896v288c0 17.346-14.654 32-32 32zM128 640h64v128h-64zM256 640h64v128h-64zM384 640h64v128h-64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "credit-card", + "money", + "payment", + "ecommerce" + ], + "defaultCode": 59711, + "grid": 16 + }, + { + "id": 64, + "paths": [ + "M384 64h-320c-35.2 0-64 28.8-64 64v320c0 35.2 28.796 64 64 64h320c35.2 0 64-28.8 64-64v-320c0-35.2-28.8-64-64-64zM384 320h-320v-64h320v64zM896 64h-320c-35.204 0-64 28.8-64 64v832c0 35.2 28.796 64 64 64h320c35.2 0 64-28.8 64-64v-832c0-35.2-28.8-64-64-64zM896 640h-320v-64h320v64zM896 448h-320v-64h320v64zM384 576h-320c-35.2 0-64 28.8-64 64v320c0 35.2 28.796 64 64 64h320c35.2 0 64-28.8 64-64v-320c0-35.2-28.8-64-64-64zM384 832h-128v128h-64v-128h-128v-64h128v-128h64v128h128v64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "calculator", + "compute", + "math", + "arithmetic", + "sum" + ], + "defaultCode": 59712, + "grid": 16 + }, + { + "id": 65, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM320 512c0-106.040 85.96-192 192-192s192 85.96 192 192-85.96 192-192 192-192-85.96-192-192zM925.98 683.476v0l-177.42-73.49c12.518-30.184 19.44-63.276 19.44-97.986s-6.922-67.802-19.44-97.986l177.42-73.49c21.908 52.822 34.020 110.73 34.020 171.476s-12.114 118.654-34.020 171.476v0zM683.478 98.020v0 0l-73.49 177.42c-30.184-12.518-63.276-19.44-97.988-19.44s-67.802 6.922-97.986 19.44l-73.49-177.422c52.822-21.904 110.732-34.018 171.476-34.018 60.746 0 118.654 12.114 171.478 34.020zM98.020 340.524l177.422 73.49c-12.518 30.184-19.442 63.276-19.442 97.986s6.922 67.802 19.44 97.986l-177.42 73.49c-21.906-52.822-34.020-110.73-34.020-171.476s12.114-118.654 34.020-171.476zM340.524 925.98l73.49-177.42c30.184 12.518 63.276 19.44 97.986 19.44s67.802-6.922 97.986-19.44l73.49 177.42c-52.822 21.904-110.73 34.020-171.476 34.020-60.744 0-118.654-12.114-171.476-34.020z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "lifebuoy", + "support", + "help" + ], + "defaultCode": 59713, + "grid": 16 + }, + { + "id": 66, + "paths": [ + "M704 640c-64 64-64 128-128 128s-128-64-192-128-128-128-128-192 64-64 128-128-128-256-192-256-192 192-192 192c0 128 131.5 387.5 256 512s384 256 512 256c0 0 192-128 192-192s-192-256-256-192z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "phone", + "telephone", + "contact", + "support", + "call" + ], + "defaultCode": 59714, + "grid": 16 + }, + { + "id": 67, + "paths": [ + "M1017.378 575.994c8.004 55.482 13.216 131.392-11.664 160.446-41.142 48.044-301.712 48.044-301.712-48.042 0-48.398 42.856-80.134 1.712-128.178-40.472-47.262-113.026-48.030-193.714-48.042-80.686 0.012-153.242 0.78-193.714 48.042-41.142 48.046 1.714 79.78 1.714 128.178 0 96.086-260.57 96.086-301.714 48.044-24.878-29.054-19.668-104.964-11.662-160.446 6.16-37.038 21.724-76.996 71.548-127.994 0-0.002 0.002-0.002 0.002-0.004 74.738-69.742 187.846-126.738 429.826-127.968v-0.030c1.344 0 2.664 0.010 4 0.014 1.338-0.004 2.656-0.014 4-0.014v0.028c241.98 1.23 355.088 58.226 429.826 127.968 0.002 0.002 0.002 0.004 0.002 0.004 49.824 50.996 65.39 90.954 71.55 127.994z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "phone-hang-up", + "telephone", + "contact", + "support", + "call" + ], + "defaultCode": 59715, + "grid": 16 + }, + { + "id": 68, + "paths": [ + "M192 0v1024h768v-1024h-768zM576 256.33c70.51 0 127.67 57.16 127.67 127.67s-57.16 127.67-127.67 127.67-127.67-57.16-127.67-127.67 57.16-127.67 127.67-127.67v0zM768 768h-384v-64c0-70.696 57.306-128 128-128v0h128c70.696 0 128 57.304 128 128v64z", + "M64 64h96v192h-96v-192z", + "M64 320h96v192h-96v-192z", + "M64 576h96v192h-96v-192z", + "M64 832h96v192h-96v-192z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "address-book", + "contact", + "book", + "contacts" + ], + "defaultCode": 59716, + "grid": 16 + }, + { + "id": 69, + "paths": [ + "M928 128h-832c-52.8 0-96 43.2-96 96v640c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-640c0-52.8-43.2-96-96-96zM398.74 550.372l-270.74 210.892v-501.642l270.74 290.75zM176.38 256h671.24l-335.62 252-335.62-252zM409.288 561.698l102.712 110.302 102.71-110.302 210.554 270.302h-626.528l210.552-270.302zM625.26 550.372l270.74-290.75v501.642l-270.74-210.892z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "envelop", + "mail", + "email", + "contact", + "letter" + ], + "defaultCode": 59717, + "grid": 16 + }, + { + "id": 70, + "paths": [ + "M544 0l-96 96 96 96-224 256h-224l176 176-272 360.616v39.384h39.384l360.616-272 176 176v-224l256-224 96 96 96-96-480-480zM448 544l-64-64 224-224 64 64-224 224z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "pushpin", + "pin" + ], + "defaultCode": 59718, + "grid": 16 + }, + { + "id": 71, + "paths": [ + "M512 0c-176.732 0-320 143.268-320 320 0 320 320 704 320 704s320-384 320-704c0-176.732-143.27-320-320-320zM512 512c-106.040 0-192-85.96-192-192s85.96-192 192-192 192 85.96 192 192-85.96 192-192 192z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "location", + "map-marker", + "pin" + ], + "defaultCode": 59719, + "grid": 16 + }, + { + "id": 72, + "paths": [ + "M512 0c-176.732 0-320 143.268-320 320 0 320 320 704 320 704s320-384 320-704c0-176.732-143.27-320-320-320zM512 516c-108.248 0-196-87.752-196-196s87.752-196 196-196 196 87.752 196 196-87.752 196-196 196zM388 320c0-68.483 55.517-124 124-124s124 55.517 124 124c0 68.483-55.517 124-124 124s-124-55.517-124-124z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "location", + "map-marker", + "pin" + ], + "defaultCode": 59720, + "grid": 16 + }, + { + "id": 73, + "paths": [ + "M544.010 1024.004c-2.296 0-4.622-0.25-6.94-0.764-14.648-3.25-25.070-16.238-25.070-31.24v-480h-480c-15.002 0-27.992-10.422-31.24-25.070-3.25-14.646 4.114-29.584 17.708-35.928l960-448c12.196-5.688 26.644-3.144 36.16 6.372 9.516 9.514 12.060 23.966 6.372 36.16l-448 960c-5.342 11.44-16.772 18.47-28.99 18.47zM176.242 448h367.758c17.674 0 32 14.328 32 32v367.758l349.79-749.546-749.548 349.788z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "compass", + "direction", + "location" + ], + "defaultCode": 59721, + "grid": 16 + }, + { + "id": 74, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM96 512c0-229.75 186.25-416 416-416 109.574 0 209.232 42.386 283.534 111.628l-411.534 176.372-176.372 411.534c-69.242-74.302-111.628-173.96-111.628-283.534zM585.166 585.166l-256.082 109.75 109.75-256.082 146.332 146.332zM512 928c-109.574 0-209.234-42.386-283.532-111.628l411.532-176.372 176.372-411.532c69.242 74.298 111.628 173.958 111.628 283.532 0 229.75-186.25 416-416 416z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "compass", + "direction", + "location" + ], + "defaultCode": 59722, + "grid": 16 + }, + { + "id": 75, + "paths": [ + "M0 192l320-128v768l-320 128z", + "M384 32l320 192v736l-320-160z", + "M768 224l256-192v768l-256 192z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "map", + "guide" + ], + "defaultCode": 59723, + "grid": 16 + }, + { + "id": 76, + "paths": [ + "M672 192l-320-128-352 128v768l352-128 320 128 352-128v-768l-352 128zM384 145.73l256 102.4v630.138l-256-102.398v-630.14zM64 236.828l256-93.090v631.8l-256 93.088v-631.798zM960 787.172l-256 93.092v-631.8l256-93.090v631.798z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "map", + "guide" + ], + "defaultCode": 59724, + "grid": 16 + }, + { + "id": 77, + "paths": [ + "M640 64c247.424 0 448 200.576 448 448s-200.576 448-448 448v-96c94.024 0 182.418-36.614 248.902-103.098s103.098-154.878 103.098-248.902c0-94.022-36.614-182.418-103.098-248.902s-154.878-103.098-248.902-103.098c-94.022 0-182.418 36.614-248.902 103.098-51.14 51.138-84.582 115.246-97.306 184.902h186.208l-224 256-224-256h164.57c31.060-217.102 217.738-384 443.43-384zM832 448v128h-256v-320h128v192z" + ], + "width": 1088, + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "history", + "time", + "archive", + "past" + ], + "defaultCode": 59725, + "grid": 16 + }, + { + "id": 78, + "paths": [ + "M658.744 749.256l-210.744-210.746v-282.51h128v229.49l173.256 173.254zM512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 896c-212.078 0-384-171.922-384-384s171.922-384 384-384c212.078 0 384 171.922 384 384s-171.922 384-384 384z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "clock", + "time", + "schedule" + ], + "defaultCode": 59726, + "grid": 16 + }, + { + "id": 79, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM658.744 749.256l-210.744-210.746v-282.51h128v229.49l173.256 173.254-90.512 90.512z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "clock", + "time", + "schedule" + ], + "defaultCode": 59727, + "grid": 16 + }, + { + "id": 80, + "paths": [ + "M512 128c-247.424 0-448 200.576-448 448s200.576 448 448 448 448-200.576 448-448-200.576-448-448-448zM512 936c-198.824 0-360-161.178-360-360 0-198.824 161.176-360 360-360 198.822 0 360 161.176 360 360 0 198.822-161.178 360-360 360zM934.784 287.174c16.042-28.052 25.216-60.542 25.216-95.174 0-106.040-85.96-192-192-192-61.818 0-116.802 29.222-151.92 74.596 131.884 27.236 245.206 105.198 318.704 212.578v0zM407.92 74.596c-35.116-45.374-90.102-74.596-151.92-74.596-106.040 0-192 85.96-192 192 0 34.632 9.174 67.122 25.216 95.174 73.5-107.38 186.822-185.342 318.704-212.578z", + "M512 576v-256h-64v320h256v-64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "alarm", + "time", + "clock" + ], + "defaultCode": 59728, + "grid": 16 + }, + { + "id": 81, + "paths": [ + "M1025.5 800c0-288-256-224-256-448 0-18.56-1.788-34.42-5.048-47.928-16.83-113.018-92.156-203.72-189.772-231.36 0.866-3.948 1.32-8.032 1.32-12.21 0-33.278-28.8-60.502-64-60.502s-64 27.224-64 60.5c0 4.18 0.456 8.264 1.32 12.21-109.47 30.998-190.914 141.298-193.254 273.442-0.040 1.92-0.066 3.864-0.066 5.846 0 224.002-256 160.002-256 448.002 0 76.226 170.59 139.996 398.97 156.080 21.524 40.404 64.056 67.92 113.030 67.92s91.508-27.516 113.030-67.92c228.38-16.084 398.97-79.854 398.97-156.080 0-0.228-0.026-0.456-0.028-0.682l1.528 0.682zM826.246 854.096c-54.23 14.47-118.158 24.876-186.768 30.648-5.704-65.418-60.582-116.744-127.478-116.744s-121.774 51.326-127.478 116.744c-68.608-5.772-132.538-16.178-186.768-30.648-74.63-19.914-110.31-42.19-123.368-54.096 13.058-11.906 48.738-34.182 123.368-54.096 86.772-23.152 198.372-35.904 314.246-35.904s227.474 12.752 314.246 35.904c74.63 19.914 110.31 42.19 123.368 54.096-13.058 11.906-48.738 34.182-123.368 54.096z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "bell", + "alarm", + "notification" + ], + "defaultCode": 59729, + "grid": 16 + }, + { + "id": 82, + "paths": [ + "M512.002 193.212v-65.212h128v-64c0-35.346-28.654-64-64.002-64h-191.998c-35.346 0-64 28.654-64 64v64h128v65.212c-214.798 16.338-384 195.802-384 414.788 0 229.75 186.25 416 416 416s416-186.25 416-416c0-218.984-169.202-398.448-384-414.788zM706.276 834.274c-60.442 60.44-140.798 93.726-226.274 93.726s-165.834-33.286-226.274-93.726c-60.44-60.44-93.726-140.8-93.726-226.274s33.286-165.834 93.726-226.274c58.040-58.038 134.448-91.018 216.114-93.548l-21.678 314.020c-1.86 26.29 12.464 37.802 31.836 37.802s33.698-11.512 31.836-37.802l-21.676-314.022c81.666 2.532 158.076 35.512 216.116 93.55 60.44 60.44 93.726 140.8 93.726 226.274s-33.286 165.834-93.726 226.274z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "stopwatch", + "time", + "speed", + "meter", + "chronometer" + ], + "defaultCode": 59730, + "grid": 16 + }, + { + "id": 83, + "paths": [ + "M320 384h128v128h-128zM512 384h128v128h-128zM704 384h128v128h-128zM128 768h128v128h-128zM320 768h128v128h-128zM512 768h128v128h-128zM320 576h128v128h-128zM512 576h128v128h-128zM704 576h128v128h-128zM128 576h128v128h-128zM832 0v64h-128v-64h-448v64h-128v-64h-128v1024h960v-1024h-128zM896 960h-832v-704h832v704z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "calendar", + "date", + "schedule", + "time", + "day" + ], + "defaultCode": 59731, + "grid": 16 + }, + { + "id": 84, + "paths": [ + "M256 64h512v128h-512v-128z", + "M960 256h-896c-35.2 0-64 28.8-64 64v320c0 35.2 28.794 64 64 64h192v256h512v-256h192c35.2 0 64-28.8 64-64v-320c0-35.2-28.8-64-64-64zM128 448c-35.346 0-64-28.654-64-64s28.654-64 64-64 64 28.654 64 64-28.652 64-64 64zM704 896h-384v-320h384v320z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "printer", + "print" + ], + "defaultCode": 59732, + "grid": 16 + }, + { + "id": 85, + "paths": [ + "M1088 128h-1024c-35.2 0-64 28.8-64 64v640c0 35.2 28.8 64 64 64h1024c35.2 0 64-28.8 64-64v-640c0-35.2-28.8-64-64-64zM640 256h128v128h-128v-128zM832 448v128h-128v-128h128zM448 256h128v128h-128v-128zM640 448v128h-128v-128h128zM256 256h128v128h-128v-128zM448 448v128h-128v-128h128zM128 256h64v128h-64v-128zM128 448h128v128h-128v-128zM192 768h-64v-128h64v128zM768 768h-512v-128h512v128zM1024 768h-192v-128h192v128zM1024 576h-128v-128h128v128zM1024 384h-192v-128h192v128z" + ], + "width": 1152, + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "keyboard", + "typing", + "type" + ], + "defaultCode": 59733, + "grid": 16 + }, + { + "id": 86, + "paths": [ + "M0 64v640h1024v-640h-1024zM960 640h-896v-512h896v512zM672 768h-320l-32 128-64 64h512l-64-64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "display", + "screen", + "monitor", + "computer", + "desktop", + "pc" + ], + "defaultCode": 59734, + "grid": 16 + }, + { + "id": 87, + "paths": [ + "M896 704v-512c0-35.2-28.8-64-64-64h-640c-35.2 0-64 28.8-64 64v512h-128v192h1024v-192h-128zM640 832h-256v-64h256v64zM832 704h-640v-511.886c0.034-0.040 0.076-0.082 0.114-0.114h639.77c0.040 0.034 0.082 0.076 0.116 0.116v511.884z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "laptop", + "computer", + "pc" + ], + "defaultCode": 59735, + "grid": 16 + }, + { + "id": 88, + "paths": [ + "M736 0h-448c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h448c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM384 48h256v32h-256v-32zM512 960c-35.346 0-64-28.654-64-64s28.654-64 64-64 64 28.654 64 64-28.654 64-64 64zM768 768h-512v-640h512v640z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "mobile", + "cell-phone", + "handheld" + ], + "defaultCode": 59736, + "grid": 16 + }, + { + "id": 89, + "paths": [ + "M768 0h-576c-35.2 0-64 28.798-64 64v896c0 35.2 28.798 64 64 64h576c35.2 0 64-28.8 64-64v-896c0-35.202-28.8-64-64-64zM480 977.782c-27.492 0-49.782-22.29-49.782-49.782s22.29-49.782 49.782-49.782 49.782 22.29 49.782 49.782-22.29 49.782-49.782 49.782zM768 832h-576v-704h576v704z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "mobile", + "cell-phone", + "handheld", + "tablet", + "phablet" + ], + "defaultCode": 59737, + "grid": 16 + }, + { + "id": 90, + "paths": [ + "M800 0h-640c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h640c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM480 992c-17.672 0-32-14.326-32-32s14.328-32 32-32 32 14.326 32 32-14.328 32-32 32zM768 896h-576v-768h576v768z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "tablet", + "mobile" + ], + "defaultCode": 59738, + "grid": 16 + }, + { + "id": 91, + "paths": [ + "M981.188 288.108c-88.808-12.768-183.382-22.016-282.076-27.22l164.888-164.888-64-64-224.558 224.556c-21.006-0.368-42.156-0.556-63.442-0.556v0l-256-256-64 64 194.196 194.196c-120.922 4.242-236.338 14.524-343.386 29.912-27.532 107.726-42.81 226.752-42.81 351.892s15.278 244.166 42.804 351.89c143.642 20.652 302.34 32.11 469.196 32.11s325.55-11.458 469.188-32.11c27.534-107.724 42.812-226.75 42.812-351.89s-15.278-244.166-42.812-351.892zM863.892 874.594c-107.73 13.766-226.75 21.406-351.892 21.406s-244.166-7.64-351.892-21.406c-20.648-71.816-32.108-151.166-32.108-234.594 0-83.43 11.458-162.78 32.108-234.596 107.726-13.766 226.75-21.404 351.892-21.404 125.136 0 244.162 7.638 351.886 21.404 20.656 71.816 32.114 151.166 32.114 234.596 0 83.428-11.458 162.778-32.108 234.594z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "tv", + "television", + "show" + ], + "defaultCode": 59739, + "grid": 16 + }, + { + "id": 92, + "paths": [ + "M1016.988 652.010l-256-320c-6.074-7.592-15.266-12.010-24.988-12.010h-448c-9.72 0-18.916 4.418-24.988 12.010l-256 320c-4.538 5.674-7.012 12.724-7.012 19.99v288c0 35.346 28.654 64 64 64h896c35.348 0 64-28.654 64-64v-288c0-7.266-2.472-14.316-7.012-19.99zM960 704h-224l-128 128h-192l-128-128h-224v-20.776l239.38-299.224h417.24l239.38 299.224v20.776z", + "M736 512h-448c-17.672 0-32-14.328-32-32s14.328-32 32-32h448c17.674 0 32 14.328 32 32s-14.326 32-32 32z", + "M800 640h-576c-17.672 0-32-14.326-32-32s14.328-32 32-32h576c17.674 0 32 14.326 32 32s-14.326 32-32 32z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "drawer", + "box", + "inbox", + "archive", + "category" + ], + "defaultCode": 59740, + "grid": 16 + }, + { + "id": 93, + "paths": [ + "M1016.988 652.010l-256-320c-6.074-7.592-15.266-12.010-24.988-12.010h-448c-9.72 0-18.916 4.418-24.988 12.010l-256 320c-4.538 5.674-7.012 12.724-7.012 19.99v288c0 35.346 28.654 64 64 64h896c35.348 0 64-28.654 64-64v-288c0-7.266-2.472-14.316-7.012-19.99zM960 704h-224l-128 128h-192l-128-128h-224v-20.776l239.38-299.224h417.24l239.38 299.224v20.776z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "drawer", + "box", + "inbox", + "archive", + "category" + ], + "defaultCode": 59741, + "grid": 16 + }, + { + "id": 94, + "paths": [ + "M832 64h-640l-192 192v672c0 17.674 14.326 32 32 32h960c17.672 0 32-14.326 32-32v-672l-192-192zM512 832l-320-256h192v-192h256v192h192l-320 256zM154.51 192l64-64h586.978l64 64h-714.978z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "box-add", + "box", + "download", + "storage", + "inbox", + "archive" + ], + "defaultCode": 59742, + "grid": 16 + }, + { + "id": 95, + "paths": [ + "M832 64h-640l-192 192v672c0 17.674 14.326 32 32 32h960c17.672 0 32-14.326 32-32v-672l-192-192zM640 640v192h-256v-192h-192l320-256 320 256h-192zM154.51 192l64-64h586.976l64 64h-714.976z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "box-remove", + "box", + "upload", + "storage", + "outbox", + "archive" + ], + "defaultCode": 59743, + "grid": 16 + }, + { + "id": 96, + "paths": [ + "M512 576l256-256h-192v-256h-128v256h-192zM744.726 471.272l-71.74 71.742 260.080 96.986-421.066 157.018-421.066-157.018 260.080-96.986-71.742-71.742-279.272 104.728v256l512 192 512-192v-256z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "download", + "save", + "store", + "arrow" + ], + "defaultCode": 59744, + "grid": 16 + }, + { + "id": 97, + "paths": [ + "M448 576h128v-256h192l-256-256-256 256h192zM640 432v98.712l293.066 109.288-421.066 157.018-421.066-157.018 293.066-109.288v-98.712l-384 144v256l512 192 512-192v-256z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "upload", + "load", + "arrow" + ], + "defaultCode": 59745, + "grid": 16 + }, + { + "id": 98, + "paths": [ + "M896 0h-896v1024h1024v-896l-128-128zM512 128h128v256h-128v-256zM896 896h-768v-768h64v320h576v-320h74.978l53.022 53.018v714.982z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "floppy-disk", + "save" + ], + "defaultCode": 59746, + "grid": 16 + }, + { + "id": 99, + "paths": [ + "M192 896h640c106.038 0 192-85.96 192-192h-1024c0 106.040 85.962 192 192 192zM832 768h64v64h-64v-64zM960 128h-896l-64 512h1024z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "drive", + "save", + "hdd", + "hard-disk" + ], + "defaultCode": 59747, + "grid": 16 + }, + { + "id": 100, + "paths": [ + "M512 0c-282.77 0-512 71.634-512 160v128c0 88.366 229.23 160 512 160s512-71.634 512-160v-128c0-88.366-229.23-160-512-160z", + "M512 544c-282.77 0-512-71.634-512-160v192c0 88.366 229.23 160 512 160s512-71.634 512-160v-192c0 88.366-229.23 160-512 160z", + "M512 832c-282.77 0-512-71.634-512-160v192c0 88.366 229.23 160 512 160s512-71.634 512-160v-192c0 88.366-229.23 160-512 160z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "database", + "db", + "server", + "host", + "storage", + "save", + "datecenter" + ], + "defaultCode": 59748, + "grid": 16 + }, + { + "id": 101, + "paths": [ + "M512 64c-141.384 0-269.376 57.32-362.032 149.978l-149.968-149.978v384h384l-143.532-143.522c69.496-69.492 165.492-112.478 271.532-112.478 212.068 0 384 171.924 384 384 0 114.696-50.292 217.636-130.018 288l84.666 96c106.302-93.816 173.352-231.076 173.352-384 0-282.77-229.23-512-512-512z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "undo", + "ccw", + "arrow" + ], + "defaultCode": 59749, + "grid": 16 + }, + { + "id": 102, + "paths": [ + "M0 576c0 152.924 67.048 290.184 173.35 384l84.666-96c-79.726-70.364-130.016-173.304-130.016-288 0-212.076 171.93-384 384-384 106.042 0 202.038 42.986 271.53 112.478l-143.53 143.522h384v-384l-149.97 149.978c-92.654-92.658-220.644-149.978-362.030-149.978-282.77 0-512 229.23-512 512z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "redo", + "cw", + "arrow" + ], + "defaultCode": 59750, + "grid": 16 + }, + { + "id": 103, + "paths": [ + "M761.862 1024c113.726-206.032 132.888-520.306-313.862-509.824v253.824l-384-384 384-384v248.372c534.962-13.942 594.57 472.214 313.862 775.628z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "undo", + "left", + "arrow-left" + ], + "defaultCode": 59751, + "grid": 16 + }, + { + "id": 104, + "paths": [ + "M576 248.372v-248.372l384 384-384 384v-253.824c-446.75-10.482-427.588 303.792-313.86 509.824-280.712-303.414-221.1-789.57 313.86-775.628z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "redo", + "right", + "arrow-right" + ], + "defaultCode": 59752, + "grid": 16 + }, + { + "id": 105, + "paths": [ + "M262.14 0c-113.728 206.032-132.89 520.304 313.86 509.824v-253.824l384 384-384 384v-248.372c-534.96 13.942-594.572-472.214-313.86-775.628z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "forward", + "right", + "arrow-right" + ], + "defaultCode": 59753, + "grid": 16 + }, + { + "id": 106, + "paths": [ + "M448 775.628v248.372l-384-384 384-384v253.824c446.75 10.48 427.588-303.792 313.862-509.824 280.71 303.414 221.1 789.57-313.862 775.628z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "reply", + "left", + "arrow-left" + ], + "defaultCode": 59754, + "grid": 16 + }, + { + "id": 107, + "paths": [ + "M512 64c282.77 0 512 186.25 512 416 0 229.752-229.23 416-512 416-27.156 0-53.81-1.734-79.824-5.044-109.978 109.978-241.25 129.7-368.176 132.596v-26.916c68.536-33.578 128-94.74 128-164.636 0-9.754-0.758-19.33-2.164-28.696-115.796-76.264-189.836-192.754-189.836-323.304 0-229.75 229.23-416 512-416z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "bubble", + "comment", + "chat", + "talk" + ], + "defaultCode": 59755, + "grid": 16 + }, + { + "id": 108, + "paths": [ + "M1088 901.166c0 45.5 26.028 84.908 64 104.184v15.938c-10.626 1.454-21.472 2.224-32.5 2.224-68.008 0-129.348-28.528-172.722-74.264-26.222 6.982-54.002 10.752-82.778 10.752-159.058 0-288-114.616-288-256s128.942-256 288-256c159.058 0 288 114.616 288 256 0 55.348-19.764 106.592-53.356 148.466-6.824 14.824-10.644 31.312-10.644 48.7zM512 0c278.458 0 504.992 180.614 511.836 405.52-49.182-21.92-103.586-33.52-159.836-33.52-95.56 0-185.816 33.446-254.138 94.178-70.846 62.972-109.862 147.434-109.862 237.822 0 44.672 9.544 87.888 27.736 127.788-5.228 0.126-10.468 0.212-15.736 0.212-27.156 0-53.81-1.734-79.824-5.044-109.978 109.978-241.25 129.7-368.176 132.596v-26.916c68.536-33.578 128-94.74 128-164.636 0-9.754-0.758-19.33-2.164-28.696-115.796-76.264-189.836-192.754-189.836-323.304 0-229.75 229.23-416 512-416z" + ], + "width": 1152, + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "bubbles", + "comments", + "chat", + "talk" + ], + "defaultCode": 59756, + "grid": 16 + }, + { + "id": 109, + "paths": [ + "M480 0v0c265.096 0 480 173.914 480 388.448s-214.904 388.448-480 388.448c-25.458 0-50.446-1.62-74.834-4.71-103.106 102.694-222.172 121.108-341.166 123.814v-25.134c64.252-31.354 116-88.466 116-153.734 0-9.106-0.712-18.048-2.030-26.794-108.558-71.214-177.97-179.988-177.97-301.89 0-214.534 214.904-388.448 480-388.448zM996 870.686c0 55.942 36.314 104.898 92 131.772v21.542c-103.126-2.318-197.786-18.102-287.142-106.126-21.14 2.65-42.794 4.040-64.858 4.040-95.47 0-183.408-25.758-253.614-69.040 144.674-0.506 281.26-46.854 384.834-130.672 52.208-42.252 93.394-91.826 122.414-147.348 30.766-58.866 46.366-121.582 46.366-186.406 0-10.448-0.45-20.836-1.258-31.168 72.57 59.934 117.258 141.622 117.258 231.676 0 104.488-60.158 197.722-154.24 258.764-1.142 7.496-1.76 15.16-1.76 22.966z" + ], + "width": 1152, + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "bubbles", + "comments", + "chat", + "talk" + ], + "defaultCode": 59757, + "grid": 16 + }, + { + "id": 110, + "paths": [ + "M512 192c-54.932 0-107.988 8.662-157.694 25.742-46.712 16.054-88.306 38.744-123.628 67.444-66.214 53.798-102.678 122.984-102.678 194.814 0 40.298 11.188 79.378 33.252 116.152 22.752 37.92 56.982 72.586 98.988 100.252 30.356 19.992 50.78 51.948 56.176 87.894 1.8 11.984 2.928 24.088 3.37 36.124 7.47-6.194 14.75-12.846 21.88-19.976 24.154-24.152 56.78-37.49 90.502-37.49 5.368 0 10.762 0.336 16.156 1.024 20.974 2.666 42.398 4.020 63.676 4.020 54.934 0 107.988-8.66 157.694-25.742 46.712-16.054 88.306-38.744 123.628-67.444 66.214-53.796 102.678-122.984 102.678-194.814s-36.464-141.016-102.678-194.814c-35.322-28.698-76.916-51.39-123.628-67.444-49.706-17.080-102.76-25.742-157.694-25.742zM512 64v0c282.77 0 512 186.25 512 416 0 229.752-229.23 416-512 416-27.156 0-53.81-1.734-79.824-5.044-109.978 109.978-241.25 129.7-368.176 132.596v-26.916c68.536-33.578 128-94.74 128-164.636 0-9.754-0.758-19.33-2.164-28.696-115.796-76.264-189.836-192.754-189.836-323.304 0-229.75 229.23-416 512-416z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "bubble", + "comment", + "chat", + "talk" + ], + "defaultCode": 59758, + "grid": 16 + }, + { + "id": 111, + "paths": [ + "M1088 901.166c0 45.5 26.028 84.908 64 104.184v15.938c-10.626 1.454-21.472 2.224-32.5 2.224-68.008 0-129.348-28.528-172.722-74.264-26.222 6.982-54.002 10.752-82.778 10.752-159.058 0-288-114.616-288-256s128.942-256 288-256c159.058 0 288 114.616 288 256 0 55.348-19.764 106.592-53.356 148.466-6.824 14.824-10.644 31.312-10.644 48.7zM230.678 221.186c-66.214 53.798-102.678 122.984-102.678 194.814 0 40.298 11.188 79.378 33.252 116.15 22.752 37.92 56.982 72.586 98.988 100.252 30.356 19.992 50.78 51.948 56.176 87.894 1.8 11.984 2.928 24.088 3.37 36.124 7.47-6.194 14.75-12.846 21.88-19.976 24.154-24.152 56.78-37.49 90.502-37.49 5.368 0 10.762 0.336 16.156 1.024 20.948 2.662 42.344 4.016 63.594 4.020v128c-27.128-0.002-53.754-1.738-79.742-5.042-109.978 109.978-241.25 129.7-368.176 132.596v-26.916c68.536-33.578 128-94.74 128-164.636 0-9.754-0.758-19.33-2.164-28.696-115.796-76.264-189.836-192.754-189.836-323.304 0-229.75 229.23-416 512-416 278.458 0 504.992 180.614 511.836 405.52-41.096-18.316-85.84-29.422-132.262-32.578-11.53-56.068-45.402-108.816-98.252-151.756-35.322-28.698-76.916-51.39-123.628-67.444-49.706-17.080-102.76-25.742-157.694-25.742-54.932 0-107.988 8.662-157.694 25.742-46.712 16.054-88.306 38.744-123.628 67.444z" + ], + "width": 1152, + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "bubbles", + "comments", + "chat", + "talk" + ], + "defaultCode": 59759, + "grid": 16 + }, + { + "id": 112, + "paths": [ + "M480 128c-50.666 0-99.582 7.95-145.386 23.628-42.924 14.694-81.114 35.436-113.502 61.646-60.044 48.59-93.112 110.802-93.112 175.174 0 35.99 10.066 70.948 29.92 103.898 20.686 34.34 51.898 65.794 90.26 90.958 30.44 19.968 50.936 51.952 56.362 87.95 0.902 5.99 1.63 12.006 2.18 18.032 2.722-2.52 5.424-5.114 8.114-7.794 24.138-24.040 56.688-37.312 90.322-37.312 5.348 0 10.718 0.336 16.094 1.018 19.36 2.452 39.124 3.696 58.748 3.696 50.666 0 99.58-7.948 145.384-23.628 42.926-14.692 81.116-35.434 113.504-61.644 60.046-48.59 93.112-110.802 93.112-175.174s-33.066-126.582-93.112-175.174c-32.388-26.212-70.578-46.952-113.504-61.646-45.804-15.678-94.718-23.628-145.384-23.628zM480 0v0c265.096 0 480 173.914 480 388.448s-214.904 388.448-480 388.448c-25.458 0-50.446-1.62-74.834-4.71-103.106 102.694-222.172 121.108-341.166 123.814v-25.134c64.252-31.354 116-88.466 116-153.734 0-9.106-0.712-18.048-2.030-26.794-108.558-71.214-177.97-179.988-177.97-301.89 0-214.534 214.904-388.448 480-388.448zM996 870.686c0 55.942 36.314 104.898 92 131.772v21.542c-103.126-2.318-197.786-18.102-287.142-106.126-21.14 2.65-42.794 4.040-64.858 4.040-95.47 0-183.408-25.758-253.614-69.040 144.674-0.506 281.26-46.854 384.834-130.672 52.208-42.252 93.394-91.826 122.414-147.348 30.766-58.866 46.366-121.582 46.366-186.406 0-10.448-0.45-20.836-1.258-31.168 72.57 59.934 117.258 141.622 117.258 231.676 0 104.488-60.158 197.722-154.24 258.764-1.142 7.496-1.76 15.16-1.76 22.966z" + ], + "width": 1152, + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "bubbles", + "comments", + "chat", + "talk" + ], + "defaultCode": 59760, + "grid": 16 + }, + { + "id": 113, + "paths": [ + "M576 706.612v-52.78c70.498-39.728 128-138.772 128-237.832 0-159.058 0-288-192-288s-192 128.942-192 288c0 99.060 57.502 198.104 128 237.832v52.78c-217.102 17.748-384 124.42-384 253.388h896c0-128.968-166.898-235.64-384-253.388z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "user", + "profile", + "avatar", + "person", + "member" + ], + "defaultCode": 59761, + "grid": 16 + }, + { + "id": 114, + "paths": [ + "M768 770.612v-52.78c70.498-39.728 128-138.772 128-237.832 0-159.058 0-288-192-288s-192 128.942-192 288c0 99.060 57.502 198.104 128 237.832v52.78c-217.102 17.748-384 124.42-384 253.388h896c0-128.968-166.898-235.64-384-253.388z", + "M327.196 795.328c55.31-36.15 124.080-63.636 199.788-80.414-15.054-17.784-28.708-37.622-40.492-59.020-30.414-55.234-46.492-116.058-46.492-175.894 0-86.042 0-167.31 30.6-233.762 29.706-64.504 83.128-104.496 159.222-119.488-16.914-76.48-61.94-126.75-181.822-126.75-192 0-192 128.942-192 288 0 99.060 57.502 198.104 128 237.832v52.78c-217.102 17.748-384 124.42-384 253.388h279.006c14.518-12.91 30.596-25.172 48.19-36.672z" + ], + "width": 1152, + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "users", + "group", + "team", + "members", + "community", + "collaborate" + ], + "defaultCode": 59762, + "grid": 16 + }, + { + "id": 115, + "paths": [ + "M384 736c0-151.234 95.874-280.486 230.032-330.2 16.28-36.538 25.968-77.164 25.968-117.8 0-159.058 0-288-192-288s-192 128.942-192 288c0 99.060 57.502 198.104 128 237.832v52.78c-217.102 17.748-384 124.42-384 253.388h397.306c-8.664-30.53-13.306-62.732-13.306-96z", + "M736 448c-159.058 0-288 128.942-288 288s128.942 288 288 288c159.056 0 288-128.942 288-288s-128.942-288-288-288zM896 768h-128v128h-64v-128h-128v-64h128v-128h64v128h128v64z" + ], + "width": 1024, + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "user-plus", + "user", + "user-add", + "profile", + "avatar", + "person", + "member" + ], + "defaultCode": 59763, + "grid": 16 + }, + { + "id": 116, + "paths": [ + "M384 736c0-151.234 95.874-280.486 230.032-330.2 16.28-36.538 25.968-77.164 25.968-117.8 0-159.058 0-288-192-288s-192 128.942-192 288c0 99.060 57.502 198.104 128 237.832v52.78c-217.102 17.748-384 124.42-384 253.388h397.306c-8.664-30.53-13.306-62.732-13.306-96z", + "M736 448c-159.058 0-288 128.942-288 288s128.942 288 288 288c159.056 0 288-128.942 288-288s-128.942-288-288-288zM896 768h-320v-64h320v64z" + ], + "width": 1024, + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "user-minus", + "user", + "user-remove", + "profile", + "avatar", + "person", + "member" + ], + "defaultCode": 59764, + "grid": 16 + }, + { + "id": 117, + "paths": [ + "M960 608l-288 288-96-96-64 64 160 160 352-352z", + "M448 768h320v-115.128c-67.22-39.2-156.308-66.11-256-74.26v-52.78c70.498-39.728 128-138.772 128-237.832 0-159.058 0-288-192-288s-192 128.942-192 288c0 99.060 57.502 198.104 128 237.832v52.78c-217.102 17.748-384 124.42-384 253.388h448v-64z" + ], + "width": 1024, + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "user-check", + "user", + "user-tick", + "profile", + "avatar", + "person", + "member" + ], + "defaultCode": 59765, + "grid": 16 + }, + { + "id": 118, + "paths": [ + "M320 192c0-106.039 85.961-192 192-192s192 85.961 192 192c0 106.039-85.961 192-192 192s-192-85.961-192-192zM768.078 448h-35.424l-199.104 404.244 74.45-372.244-96-96-96 96 74.45 372.244-199.102-404.244h-35.424c-127.924 0-127.924 85.986-127.924 192v320h768v-320c0-106.014 0-192-127.922-192z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "user-tie", + "user", + "user-employee", + "profile", + "avatar", + "person", + "member", + "job", + "official" + ], + "defaultCode": 59766, + "grid": 16 + }, + { + "id": 119, + "paths": [ + "M225 448c123.712 0 224 100.29 224 224 0 123.712-100.288 224-224 224s-224-100.288-224-224l-1-32c0-247.424 200.576-448 448-448v128c-85.474 0-165.834 33.286-226.274 93.726-11.634 11.636-22.252 24.016-31.83 37.020 11.438-1.8 23.16-2.746 35.104-2.746zM801 448c123.71 0 224 100.29 224 224 0 123.712-100.29 224-224 224s-224-100.288-224-224l-1-32c0-247.424 200.576-448 448-448v128c-85.474 0-165.834 33.286-226.274 93.726-11.636 11.636-22.254 24.016-31.832 37.020 11.44-1.8 23.16-2.746 35.106-2.746z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "quotes-left", + "ldquo" + ], + "defaultCode": 59767, + "grid": 16 + }, + { + "id": 120, + "paths": [ + "M800 640c-123.712 0-224-100.29-224-224 0-123.712 100.288-224 224-224s224 100.288 224 224l1 32c0 247.424-200.576 448-448 448v-128c85.474 0 165.834-33.286 226.274-93.726 11.634-11.636 22.252-24.016 31.83-37.020-11.438 1.8-23.16 2.746-35.104 2.746zM224 640c-123.71 0-224-100.29-224-224 0-123.712 100.29-224 224-224s224 100.288 224 224l1 32c0 247.424-200.576 448-448 448v-128c85.474 0 165.834-33.286 226.274-93.726 11.636-11.636 22.254-24.016 31.832-37.020-11.44 1.8-23.16 2.746-35.106 2.746z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "quotes-right", + "rdquo" + ], + "defaultCode": 59768, + "grid": 16 + }, + { + "id": 121, + "paths": [ + "M728.992 512c137.754-87.334 231.008-255.208 231.008-448 0-21.676-1.192-43.034-3.478-64h-889.042c-2.29 20.968-3.48 42.326-3.48 64 0 192.792 93.254 360.666 231.006 448-137.752 87.334-231.006 255.208-231.006 448 0 21.676 1.19 43.034 3.478 64h889.042c2.288-20.966 3.478-42.324 3.478-64 0.002-192.792-93.252-360.666-231.006-448zM160 960c0-186.912 80.162-345.414 224-397.708v-100.586c-143.838-52.29-224-210.792-224-397.706v0h704c0 186.914-80.162 345.416-224 397.706v100.586c143.838 52.294 224 210.796 224 397.708h-704zM619.626 669.594c-71.654-40.644-75.608-93.368-75.626-125.366v-64.228c0-31.994 3.804-84.914 75.744-125.664 38.504-22.364 71.808-56.348 97.048-98.336h-409.582c25.266 42.032 58.612 76.042 97.166 98.406 71.654 40.644 75.606 93.366 75.626 125.366v64.228c0 31.992-3.804 84.914-75.744 125.664-72.622 42.18-126.738 125.684-143.090 226.336h501.67c-16.364-100.708-70.53-184.248-143.212-226.406z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "hour-glass", + "loading", + "busy", + "wait" + ], + "defaultCode": 59769, + "grid": 16 + }, + { + "id": 122, + "paths": [ + "M384 128c0-70.692 57.308-128 128-128s128 57.308 128 128c0 70.692-57.308 128-128 128s-128-57.308-128-128zM655.53 240.47c0-70.692 57.308-128 128-128s128 57.308 128 128c0 70.692-57.308 128-128 128s-128-57.308-128-128zM832 512c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM719.53 783.53c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM448.002 896c0 0 0 0 0 0 0-35.346 28.654-64 64-64s64 28.654 64 64c0 0 0 0 0 0 0 35.346-28.654 64-64 64s-64-28.654-64-64zM176.472 783.53c0 0 0 0 0 0 0-35.346 28.654-64 64-64s64 28.654 64 64c0 0 0 0 0 0 0 35.346-28.654 64-64 64s-64-28.654-64-64zM144.472 240.47c0 0 0 0 0 0 0-53.019 42.981-96 96-96s96 42.981 96 96c0 0 0 0 0 0 0 53.019-42.981 96-96 96s-96-42.981-96-96zM56 512c0-39.765 32.235-72 72-72s72 32.235 72 72c0 39.765-32.235 72-72 72s-72-32.235-72-72z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "spinner", + "loading", + "loading-wheel", + "busy", + "wait" + ], + "defaultCode": 59770, + "grid": 16 + }, + { + "id": 123, + "paths": [ + "M1024 512c-1.278-66.862-15.784-133.516-42.576-194.462-26.704-61-65.462-116.258-113.042-161.92-47.552-45.696-103.944-81.82-164.984-105.652-61.004-23.924-126.596-35.352-191.398-33.966-64.81 1.282-129.332 15.374-188.334 41.356-59.048 25.896-112.542 63.47-156.734 109.576-44.224 46.082-79.16 100.708-102.186 159.798-23.114 59.062-34.128 122.52-32.746 185.27 1.286 62.76 14.964 125.148 40.134 182.206 25.088 57.1 61.476 108.828 106.11 151.548 44.61 42.754 97.472 76.504 154.614 98.72 57.118 22.304 118.446 32.902 179.142 31.526 60.708-1.29 120.962-14.554 176.076-38.914 55.15-24.282 105.116-59.48 146.366-102.644 41.282-43.14 73.844-94.236 95.254-149.43 13.034-33.458 21.88-68.4 26.542-103.798 1.246 0.072 2.498 0.12 3.762 0.12 35.346 0 64-28.652 64-64 0-1.796-0.094-3.572-0.238-5.332h0.238zM922.306 681.948c-23.472 53.202-57.484 101.4-99.178 141.18-41.67 39.81-91 71.186-144.244 91.79-53.228 20.678-110.29 30.452-166.884 29.082-56.604-1.298-112.596-13.736-163.82-36.474-51.25-22.666-97.684-55.49-135.994-95.712-38.338-40.198-68.528-87.764-88.322-139.058-19.87-51.284-29.228-106.214-27.864-160.756 1.302-54.552 13.328-108.412 35.254-157.69 21.858-49.3 53.498-93.97 92.246-130.81 38.73-36.868 84.53-65.87 133.874-84.856 49.338-19.060 102.136-28.006 154.626-26.644 52.5 1.306 104.228 12.918 151.562 34.034 47.352 21.050 90.256 51.502 125.624 88.782 35.396 37.258 63.21 81.294 81.39 128.688 18.248 47.392 26.782 98.058 25.424 148.496h0.238c-0.144 1.76-0.238 3.536-0.238 5.332 0 33.012 24.992 60.174 57.086 63.624-6.224 34.822-16.53 68.818-30.78 100.992z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "spinner", + "loading", + "loading-wheel", + "busy", + "wait" + ], + "defaultCode": 59771, + "grid": 16 + }, + { + "id": 124, + "paths": [ + "M512 303.096c-32.964 0-59.686-26.724-59.686-59.686v-179.060c0-32.964 26.722-59.686 59.686-59.686 32.962 0 59.688 26.722 59.688 59.686v179.060c0 32.964-26.726 59.686-59.688 59.686z", + "M512 996.956c-20.602 0-37.304-16.702-37.304-37.304v-179.060c0-20.602 16.702-37.304 37.304-37.304 20.604 0 37.304 16.704 37.304 37.304v179.060c0 20.602-16.7 37.304-37.304 37.304z", + "M377.756 335.36c-19.34 0-38.146-10.034-48.512-27.988l-89.53-155.070c-15.452-26.764-6.282-60.986 20.482-76.438 26.762-15.45 60.986-6.284 76.438 20.482l89.53 155.072c15.452 26.764 6.282 60.986-20.482 76.438-8.81 5.084-18.432 7.504-27.926 7.504z", + "M735.856 933.256c-11.602 0-22.886-6.022-29.108-16.792l-89.53-155.070c-9.27-16.056-3.77-36.592 12.29-45.864 16.056-9.264 36.59-3.77 45.864 12.292l89.532 155.068c9.27 16.058 3.768 36.592-12.292 45.864-5.286 3.048-11.060 4.502-16.756 4.502z", + "M279.344 429.94c-8.86 0-17.838-2.256-26.064-7.006l-155.072-89.53c-24.978-14.422-33.538-46.362-19.116-71.342 14.42-24.978 46.364-33.538 71.342-19.116l155.070 89.53c24.98 14.422 33.538 46.362 19.116 71.34-9.668 16.756-27.226 26.124-45.276 26.124z", + "M899.648 765.674c-5.064 0-10.196-1.29-14.894-4.004l-155.068-89.53c-14.274-8.24-19.164-26.494-10.924-40.768 8.242-14.276 26.496-19.166 40.766-10.924l155.070 89.532c14.274 8.24 19.164 26.492 10.924 40.766-5.53 9.574-15.562 14.928-25.874 14.928z", + "M243.41 560.496h-179.060c-26.784 0-48.496-21.712-48.496-48.496s21.712-48.496 48.496-48.496h179.060c26.784 0 48.496 21.712 48.496 48.496s-21.712 48.496-48.496 48.496z", + "M959.65 541.844c-0.002 0 0 0 0 0h-179.060c-16.482-0.002-29.844-13.364-29.844-29.844s13.364-29.844 29.844-29.844c0.002 0 0 0 0 0h179.060c16.482 0 29.844 13.362 29.844 29.844 0 16.48-13.364 29.844-29.844 29.844z", + "M124.366 780.598c-15.472 0-30.518-8.028-38.81-22.39-12.362-21.41-5.026-48.79 16.384-61.148l155.072-89.532c21.41-12.368 48.79-5.028 61.15 16.384 12.362 21.412 5.026 48.79-16.384 61.15l-155.072 89.53c-7.050 4.070-14.748 6.006-22.34 6.006z", + "M744.632 407.552c-10.314 0-20.346-5.352-25.874-14.926-8.24-14.274-3.35-32.526 10.924-40.768l155.070-89.528c14.272-8.236 32.526-3.352 40.768 10.922 8.24 14.274 3.35 32.526-10.924 40.768l-155.070 89.528c-4.7 2.714-9.83 4.004-14.894 4.004z", + "M288.136 940.716c-6.962 0-14.016-1.774-20.48-5.504-19.626-11.332-26.35-36.428-15.020-56.054l89.53-155.070c11.33-19.628 36.426-26.352 56.054-15.022 19.626 11.332 26.35 36.43 15.020 56.054l-89.53 155.072c-7.598 13.166-21.392 20.524-35.574 20.524z", + "M646.266 309.242c-5.062 0-10.196-1.29-14.894-4.002-14.274-8.242-19.164-26.494-10.924-40.766l89.534-155.070c8.24-14.274 26.492-19.166 40.766-10.922 14.274 8.242 19.164 26.494 10.924 40.766l-89.532 155.070c-5.53 9.57-15.56 14.924-25.874 14.924z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "spinner", + "loading", + "loading-wheel", + "busy", + "wait" + ], + "defaultCode": 59772, + "grid": 16 + }, + { + "id": 125, + "paths": [ + "M192 512c0-12.18 0.704-24.196 2.030-36.022l-184.98-60.104c-5.916 31.14-9.050 63.264-9.050 96.126 0 147.23 62.166 279.922 161.654 373.324l114.284-157.296c-52.124-56.926-83.938-132.758-83.938-216.028zM832 512c0 83.268-31.812 159.102-83.938 216.028l114.284 157.296c99.488-93.402 161.654-226.094 161.654-373.324 0-32.862-3.132-64.986-9.048-96.126l-184.98 60.104c1.324 11.828 2.028 23.842 2.028 36.022zM576 198.408c91.934 18.662 169.544 76.742 214.45 155.826l184.978-60.102c-73.196-155.42-222.24-268.060-399.428-290.156v194.432zM233.55 354.232c44.906-79.084 122.516-137.164 214.45-155.826v-194.43c-177.188 22.096-326.23 134.736-399.426 290.154l184.976 60.102zM644.556 803.328c-40.39 18.408-85.272 28.672-132.556 28.672s-92.166-10.264-132.554-28.67l-114.292 157.31c73.206 40.366 157.336 63.36 246.846 63.36s173.64-22.994 246.848-63.36l-114.292-157.312z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "spinner", + "loading", + "loading-wheel", + "busy", + "wait" + ], + "defaultCode": 59773, + "grid": 16 + }, + { + "id": 126, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 256c141.384 0 256 114.616 256 256s-114.616 256-256 256-256-114.616-256-256 114.616-256 256-256zM817.47 817.47c-81.594 81.594-190.080 126.53-305.47 126.53-115.392 0-223.876-44.936-305.47-126.53s-126.53-190.078-126.53-305.47c0-115.39 44.936-223.876 126.53-305.47l67.882 67.882c0 0 0 0 0 0-131.006 131.006-131.006 344.17 0 475.176 63.462 63.462 147.838 98.412 237.588 98.412 89.748 0 174.124-34.95 237.588-98.412 131.006-131.006 131.006-344.168 0-475.176l67.882-67.882c81.594 81.594 126.53 190.080 126.53 305.47 0 115.392-44.936 223.876-126.53 305.47z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "spinner", + "loading", + "loading-wheel", + "busy", + "wait" + ], + "defaultCode": 59774, + "grid": 16 + }, + { + "id": 127, + "paths": [ + "M384 128c0-70.692 57.308-128 128-128s128 57.308 128 128c0 70.692-57.308 128-128 128s-128-57.308-128-128zM790.994 512c0 0 0 0 0 0 0-57.993 47.013-105.006 105.006-105.006s105.006 47.013 105.006 105.006c0 0 0 0 0 0 0 57.993-47.013 105.006-105.006 105.006s-105.006-47.013-105.006-105.006zM688.424 783.53c0-52.526 42.58-95.106 95.106-95.106s95.106 42.58 95.106 95.106c0 52.526-42.58 95.106-95.106 95.106s-95.106-42.58-95.106-95.106zM425.862 896c0-47.573 38.565-86.138 86.138-86.138s86.138 38.565 86.138 86.138c0 47.573-38.565 86.138-86.138 86.138s-86.138-38.565-86.138-86.138zM162.454 783.53c0-43.088 34.93-78.018 78.018-78.018s78.018 34.93 78.018 78.018c0 43.088-34.93 78.018-78.018 78.018s-78.018-34.93-78.018-78.018zM57.338 512c0-39.026 31.636-70.662 70.662-70.662s70.662 31.636 70.662 70.662c0 39.026-31.636 70.662-70.662 70.662s-70.662-31.636-70.662-70.662zM176.472 240.472c0 0 0 0 0 0 0-35.346 28.654-64 64-64s64 28.654 64 64c0 0 0 0 0 0 0 35.346-28.654 64-64 64s-64-28.654-64-64zM899.464 240.472c0 64.024-51.906 115.934-115.936 115.934-64.024 0-115.936-51.91-115.936-115.934 0-64.032 51.912-115.934 115.936-115.934 64.030 0 115.936 51.902 115.936 115.934z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "spinner", + "loading", + "loading-wheel", + "busy", + "wait" + ], + "defaultCode": 59775, + "grid": 16 + }, + { + "id": 128, + "paths": [ + "M416 928c0-53.019 42.981-96 96-96s96 42.981 96 96c0 53.019-42.981 96-96 96s-96-42.981-96-96zM0 512c0-53.019 42.981-96 96-96s96 42.981 96 96c0 53.019-42.981 96-96 96s-96-42.981-96-96zM832 512c0-53.019 42.981-96 96-96s96 42.981 96 96c0 53.019-42.981 96-96 96s-96-42.981-96-96zM121.844 217.844c0-53.019 42.981-96 96-96s96 42.981 96 96c0 53.019-42.981 96-96 96s-96-42.981-96-96zM710.156 806.156c0-53.019 42.981-96 96-96s96 42.981 96 96c0 53.019-42.981 96-96 96s-96-42.981-96-96zM121.844 806.156c0-53.019 42.981-96 96-96s96 42.981 96 96c0 53.019-42.981 96-96 96s-96-42.981-96-96zM710.156 217.844c0-53.019 42.981-96 96-96s96 42.981 96 96c0 53.019-42.981 96-96 96s-96-42.981-96-96z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "spinner", + "loading", + "loading-wheel", + "busy", + "wait" + ], + "defaultCode": 59776, + "grid": 16 + }, + { + "id": 129, + "paths": [ + "M512 1024c-136.76 0-265.334-53.258-362.040-149.96-96.702-96.706-149.96-225.28-149.96-362.040 0-96.838 27.182-191.134 78.606-272.692 50-79.296 120.664-143.372 204.356-185.3l43 85.832c-68.038 34.084-125.492 86.186-166.15 150.67-41.746 66.208-63.812 142.798-63.812 221.49 0 229.382 186.618 416 416 416s416-186.618 416-416c0-78.692-22.066-155.282-63.81-221.49-40.66-64.484-98.114-116.584-166.15-150.67l43-85.832c83.692 41.928 154.358 106.004 204.356 185.3 51.422 81.558 78.604 175.854 78.604 272.692 0 136.76-53.258 265.334-149.96 362.040-96.706 96.702-225.28 149.96-362.040 149.96z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "spinner", + "loading", + "loading-wheel", + "busy", + "wait" + ], + "defaultCode": 59777, + "grid": 16 + }, + { + "id": 130, + "paths": [ + "M512 0c-278.748 0-505.458 222.762-511.848 499.974 5.92-241.864 189.832-435.974 415.848-435.974 229.75 0 416 200.576 416 448 0 53.020 42.98 96 96 96s96-42.98 96-96c0-282.77-229.23-512-512-512zM512 1024c278.748 0 505.458-222.762 511.848-499.974-5.92 241.864-189.832 435.974-415.848 435.974-229.75 0-416-200.576-416-448 0-53.020-42.98-96-96-96s-96 42.98-96 96c0 282.77 229.23 512 512 512z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "spinner", + "loading", + "loading-wheel", + "busy", + "wait" + ], + "defaultCode": 59778, + "grid": 16 + }, + { + "id": 131, + "paths": [ + "M0.042 513.618l-0.022 0.004c0 0 0.012 0.090 0.028 0.222 0.11 3.878 0.55 7.676 1.322 11.352 0.204 1.746 0.428 3.66 0.674 5.774 0.222 1.886 0.46 3.914 0.718 6.078 0.374 2.566 0.77 5.292 1.19 8.176 0.856 5.746 1.8 12.124 2.908 18.958 1.348 6.446 2.804 13.414 4.364 20.864 0.71 3.718 1.776 7.504 2.786 11.406 1.024 3.89 2.078 7.894 3.16 12.004 0.566 2.042 1.040 4.132 1.708 6.208 0.656 2.074 1.32 4.176 1.988 6.3 1.348 4.234 2.726 8.566 4.136 12.988 0.352 1.106 0.708 2.21 1.064 3.324 0.408 1.102 0.814 2.208 1.226 3.316 0.826 2.218 1.658 4.458 2.502 6.714 1.696 4.496 3.422 9.078 5.18 13.742 1.968 4.566 3.97 9.214 6.004 13.934 1.018 2.348 2.044 4.714 3.078 7.098 1.048 2.376 2.27 4.704 3.408 7.074 2.322 4.714 4.678 9.496 7.062 14.332 2.47 4.786 5.208 9.512 7.846 14.328 1.336 2.398 2.68 4.808 4.028 7.23 1.368 2.41 2.902 4.75 4.356 7.14 2.95 4.738 5.93 9.524 8.934 14.348 12.64 18.894 26.676 37.566 42.21 55.278 15.712 17.578 32.726 34.25 50.692 49.602 18.18 15.136 37.264 28.902 56.726 41.114 19.604 12.036 39.644 22.312 59.376 31.144 5.004 2.040 9.964 4.062 14.878 6.066 2.462 0.972 4.868 2.032 7.336 2.918 2.47 0.868 4.93 1.734 7.376 2.594 4.898 1.684 9.678 3.468 14.484 4.992 4.832 1.43 9.604 2.844 14.312 4.242 2.356 0.672 4.66 1.426 7.004 2.012 2.346 0.574 4.676 1.14 6.986 1.704 4.606 1.118 9.142 2.214 13.604 3.296 4.5 0.868 8.926 1.722 13.27 2.558 2.166 0.41 4.31 0.82 6.434 1.222 1.062 0.2 2.118 0.398 3.166 0.598 1.060 0.148 2.118 0.292 3.166 0.442 4.192 0.582 8.292 1.152 12.3 1.71 1.998 0.274 3.972 0.546 5.922 0.816 1.946 0.286 3.904 0.378 5.814 0.57 3.822 0.336 7.544 0.664 11.164 0.98 3.616 0.304 7.104 0.688 10.526 0.738 0.23 0.008 0.452 0.016 0.682 0.026 0.614 34.812 29.008 62.846 63.968 62.846 0.542 0 1.080-0.028 1.62-0.042v0.022c0 0 0.090-0.012 0.224-0.028 3.878-0.11 7.674-0.55 11.35-1.322 1.748-0.204 3.662-0.426 5.776-0.672 1.884-0.222 3.912-0.462 6.076-0.718 2.566-0.376 5.292-0.772 8.176-1.192 5.746-0.856 12.124-1.8 18.958-2.908 6.446-1.348 13.414-2.804 20.864-4.362 3.718-0.712 7.504-1.778 11.406-2.786 3.892-1.026 7.894-2.080 12.004-3.162 2.044-0.566 4.132-1.040 6.208-1.708 2.074-0.656 4.174-1.318 6.3-1.988 4.232-1.348 8.564-2.726 12.988-4.134 1.104-0.354 2.21-0.708 3.324-1.066 1.1-0.406 2.206-0.814 3.316-1.226 2.216-0.824 4.456-1.658 6.714-2.5 4.496-1.698 9.078-3.424 13.74-5.182 4.568-1.968 9.216-3.97 13.936-6.004 2.348-1.018 4.714-2.044 7.098-3.078 2.376-1.048 4.702-2.27 7.074-3.408 4.714-2.322 9.494-4.678 14.33-7.062 4.786-2.47 9.512-5.208 14.328-7.846 2.398-1.336 4.808-2.678 7.23-4.028 2.41-1.366 4.75-2.9 7.14-4.354 4.738-2.952 9.524-5.93 14.35-8.936 18.89-12.64 37.564-26.674 55.278-42.21 17.574-15.712 34.248-32.726 49.602-50.69 15.136-18.182 28.902-37.264 41.112-56.728 12.036-19.602 22.314-39.644 31.142-59.376 2.042-5.002 4.062-9.964 6.068-14.878 0.974-2.462 2.032-4.868 2.918-7.334 0.87-2.472 1.732-4.932 2.592-7.376 1.686-4.898 3.468-9.678 4.994-14.484 1.432-4.832 2.846-9.604 4.24-14.31 0.674-2.358 1.43-4.66 2.016-7.004 0.57-2.348 1.138-4.676 1.702-6.988 1.118-4.606 2.216-9.14 3.296-13.602 0.868-4.502 1.72-8.928 2.558-13.272 0.41-2.164 0.818-4.308 1.222-6.434 0.2-1.060 0.398-2.116 0.596-3.164 0.148-1.062 0.296-2.118 0.444-3.168 0.582-4.19 1.152-8.292 1.708-12.3 0.278-1.996 0.55-3.97 0.82-5.922 0.284-1.946 0.376-3.902 0.568-5.812 0.336-3.822 0.664-7.546 0.98-11.164 0.304-3.616 0.686-7.106 0.738-10.528 0.020-0.534 0.040-1.044 0.058-1.574 35.224-0.146 63.732-28.738 63.732-63.992 0-0.542-0.028-1.080-0.042-1.62h0.022c0 0-0.012-0.090-0.028-0.224-0.11-3.878-0.55-7.674-1.322-11.35-0.204-1.748-0.428-3.662-0.674-5.776-0.222-1.886-0.46-3.914-0.718-6.076-0.374-2.566-0.77-5.294-1.19-8.176-0.856-5.746-1.8-12.124-2.908-18.958-1.348-6.444-2.804-13.414-4.364-20.862-0.71-3.72-1.776-7.506-2.786-11.408-1.024-3.892-2.078-7.894-3.16-12.002-0.566-2.044-1.040-4.134-1.708-6.208-0.656-2.076-1.32-4.174-1.988-6.3-1.348-4.234-2.726-8.566-4.136-12.99-0.352-1.102-0.708-2.21-1.064-3.324-0.408-1.1-0.814-2.206-1.226-3.316-0.826-2.216-1.658-4.454-2.502-6.714-1.696-4.498-3.422-9.080-5.18-13.74-1.968-4.57-3.97-9.216-6.004-13.936-1.020-2.348-2.044-4.714-3.078-7.098-1.048-2.376-2.27-4.702-3.408-7.076-2.322-4.714-4.678-9.494-7.062-14.33-2.47-4.786-5.208-9.512-7.846-14.328-1.336-2.398-2.68-4.808-4.028-7.23-1.368-2.41-2.902-4.75-4.356-7.14-2.95-4.74-5.93-9.524-8.934-14.35-12.64-18.892-26.676-37.564-42.21-55.278-15.712-17.576-32.726-34.25-50.692-49.602-18.18-15.136-37.264-28.902-56.726-41.112-19.604-12.036-39.644-22.314-59.376-31.142-5.004-2.040-9.964-4.062-14.878-6.068-2.462-0.974-4.868-2.032-7.336-2.918-2.47-0.87-4.93-1.734-7.376-2.592-4.898-1.684-9.678-3.468-14.484-4.994-4.832-1.432-9.604-2.846-14.312-4.242-2.356-0.672-4.66-1.428-7.004-2.014-2.346-0.572-4.676-1.138-6.986-1.702-4.606-1.118-9.142-2.216-13.604-3.298-4.5-0.868-8.926-1.72-13.27-2.558-2.166-0.412-4.31-0.82-6.434-1.222-1.062-0.2-2.118-0.398-3.166-0.596-1.060-0.148-2.118-0.296-3.166-0.442-4.192-0.584-8.292-1.154-12.3-1.71-1.998-0.276-3.972-0.55-5.922-0.82-1.946-0.284-3.904-0.376-5.814-0.57-3.822-0.336-7.544-0.664-11.164-0.98-3.616-0.304-7.104-0.686-10.526-0.738-0.852-0.032-1.674-0.062-2.512-0.092-0.65-34.78-29.028-62.778-63.966-62.778-0.542 0-1.080 0.028-1.62 0.042l-0.002-0.022c0 0-0.090 0.012-0.222 0.028-3.878 0.11-7.676 0.55-11.352 1.322-1.748 0.204-3.662 0.426-5.776 0.672-1.884 0.222-3.912 0.462-6.076 0.718-2.566 0.376-5.292 0.772-8.176 1.192-5.746 0.856-12.124 1.8-18.958 2.908-6.446 1.348-13.414 2.804-20.864 4.362-3.718 0.712-7.504 1.778-11.406 2.786-3.892 1.026-7.894 2.080-12.004 3.162-2.044 0.566-4.132 1.040-6.208 1.708-2.074 0.656-4.174 1.318-6.3 1.988-4.232 1.348-8.564 2.726-12.988 4.134-1.104 0.354-2.21 0.708-3.324 1.066-1.1 0.406-2.206 0.814-3.316 1.226-2.216 0.824-4.456 1.658-6.714 2.5-4.496 1.698-9.078 3.424-13.74 5.182-4.568 1.968-9.216 3.97-13.936 6.004-2.348 1.018-4.714 2.044-7.098 3.078-2.376 1.048-4.702 2.27-7.074 3.408-4.714 2.322-9.494 4.678-14.33 7.062-4.786 2.47-9.512 5.208-14.328 7.846-2.398 1.336-4.808 2.678-7.23 4.028-2.41 1.366-4.75 2.9-7.14 4.354-4.738 2.952-9.524 5.93-14.35 8.936-18.89 12.64-37.564 26.674-55.278 42.21-17.574 15.712-34.248 32.726-49.602 50.69-15.136 18.182-28.902 37.264-41.112 56.728-12.036 19.602-22.314 39.644-31.142 59.376-2.042 5.002-4.062 9.964-6.068 14.878-0.974 2.462-2.032 4.868-2.918 7.334-0.87 2.472-1.732 4.932-2.592 7.376-1.686 4.898-3.468 9.678-4.994 14.484-1.432 4.832-2.846 9.604-4.24 14.31-0.674 2.358-1.43 4.66-2.016 7.004-0.57 2.348-1.138 4.676-1.702 6.988-1.118 4.606-2.216 9.14-3.296 13.602-0.868 4.502-1.72 8.928-2.558 13.272-0.41 2.164-0.818 4.308-1.222 6.434-0.2 1.060-0.398 2.116-0.596 3.164-0.148 1.062-0.296 2.118-0.444 3.168-0.582 4.19-1.152 8.292-1.708 12.3-0.278 1.996-0.55 3.97-0.82 5.922-0.284 1.946-0.376 3.902-0.568 5.812-0.336 3.822-0.664 7.546-0.98 11.164-0.304 3.616-0.686 7.106-0.738 10.528-0.020 0.548-0.040 1.076-0.058 1.62-34.376 1.112-61.902 29.304-61.902 63.946 0 0.542 0.028 1.078 0.042 1.618zM73.518 448.706c0.042-0.196 0.086-0.384 0.128-0.58 0.644-3.248 1.632-6.542 2.556-9.942 0.934-3.388 1.894-6.876 2.88-10.454 0.516-1.78 0.934-3.602 1.546-5.406 0.596-1.802 1.202-3.628 1.81-5.476 1.218-3.682 2.464-7.45 3.736-11.294 0.316-0.958 0.634-1.924 0.956-2.892 0.37-0.954 0.74-1.914 1.114-2.876 0.746-1.924 1.5-3.868 2.26-5.83 1.52-3.904 3.070-7.882 4.646-11.93 1.768-3.96 3.566-7.99 5.392-12.080 0.908-2.038 1.824-4.090 2.746-6.156 0.932-2.060 2.036-4.072 3.052-6.126 2.070-4.084 4.17-8.222 6.294-12.412 2.202-4.142 4.654-8.224 6.998-12.392 1.184-2.074 2.374-4.16 3.57-6.256 1.21-2.086 2.586-4.102 3.876-6.166 2.616-4.098 5.256-8.232 7.918-12.402 11.234-16.298 23.632-32.398 37.33-47.638 13.874-15.104 28.842-29.404 44.598-42.548 15.974-12.928 32.686-24.65 49.676-35.022 17.13-10.194 34.6-18.838 51.734-26.258 4.35-1.7 8.662-3.382 12.934-5.050 2.136-0.812 4.216-1.71 6.36-2.444 2.146-0.714 4.28-1.428 6.404-2.136 4.25-1.386 8.382-2.888 12.548-4.142 4.184-1.174 8.314-2.332 12.392-3.474 2.038-0.55 4.026-1.19 6.054-1.662 2.030-0.458 4.044-0.914 6.044-1.368 3.978-0.91 7.896-1.806 11.748-2.688 3.888-0.686 7.71-1.36 11.462-2.022 1.868-0.33 3.716-0.658 5.546-0.98 0.914-0.162 1.824-0.324 2.728-0.484 0.916-0.112 1.828-0.222 2.734-0.332 3.612-0.448 7.148-0.882 10.604-1.31 1.72-0.216 3.422-0.432 5.102-0.644 1.674-0.226 3.364-0.266 5.010-0.408 3.292-0.238 6.498-0.472 9.616-0.7 3.11-0.218 6.11-0.524 9.058-0.508 5.848-0.132 11.32-0.256 16.38-0.372 4.664 0.168 8.948 0.324 12.818 0.462 1.914 0.054 3.726 0.108 5.432 0.156 2.122 0.134 4.108 0.26 5.958 0.378 2.13 0.138 4.060 0.266 5.82 0.38 3.256 0.51 6.592 0.782 9.99 0.782 0.466 0 0.93-0.026 1.396-0.036 0.132 0.008 0.224 0.014 0.224 0.014v-0.020c31.14-0.778 56.75-23.784 61.556-53.754 0.542 0.12 1.064 0.236 1.612 0.356 3.246 0.644 6.542 1.632 9.942 2.556 3.386 0.934 6.876 1.894 10.454 2.88 1.778 0.516 3.602 0.934 5.404 1.546 1.802 0.596 3.63 1.202 5.478 1.812 3.68 1.218 7.448 2.464 11.292 3.736 0.96 0.316 1.924 0.634 2.892 0.956 0.956 0.37 1.914 0.74 2.876 1.112 1.926 0.746 3.868 1.5 5.83 2.26 3.904 1.52 7.884 3.070 11.932 4.646 3.96 1.768 7.988 3.566 12.080 5.392 2.038 0.908 4.088 1.824 6.156 2.746 2.060 0.932 4.072 2.036 6.126 3.054 4.082 2.070 8.222 4.17 12.41 6.294 4.144 2.202 8.226 4.654 12.394 6.998 2.074 1.184 4.16 2.374 6.256 3.572 2.086 1.21 4.102 2.586 6.166 3.876 4.098 2.616 8.23 5.256 12.402 7.918 16.296 11.234 32.398 23.632 47.636 37.33 15.104 13.874 29.406 28.842 42.55 44.598 12.928 15.974 24.648 32.686 35.020 49.676 10.196 17.13 18.84 34.6 26.26 51.736 1.698 4.348 3.382 8.662 5.050 12.932 0.812 2.136 1.71 4.216 2.444 6.36 0.714 2.146 1.428 4.28 2.136 6.404 1.386 4.25 2.888 8.384 4.142 12.548 1.174 4.184 2.33 8.316 3.474 12.392 0.55 2.038 1.19 4.026 1.66 6.054 0.46 2.030 0.916 4.046 1.368 6.046 0.91 3.978 1.808 7.896 2.688 11.748 0.688 3.888 1.362 7.71 2.024 11.462 0.33 1.868 0.656 3.716 0.98 5.548 0.162 0.914 0.324 1.824 0.484 2.728 0.11 0.916 0.222 1.828 0.332 2.734 0.446 3.612 0.882 7.148 1.31 10.604 0.216 1.72 0.432 3.42 0.642 5.1 0.226 1.674 0.268 3.364 0.41 5.010 0.238 3.292 0.472 6.498 0.7 9.616 0.218 3.11 0.524 6.11 0.508 9.058 0.132 5.848 0.256 11.32 0.372 16.38-0.168 4.664-0.324 8.948-0.462 12.818-0.054 1.914-0.108 3.726-0.156 5.432-0.134 2.122-0.26 4.108-0.378 5.958-0.138 2.13-0.266 4.060-0.38 5.82-0.498 3.256-0.768 6.592-0.768 9.99 0 0.468 0.026 0.93 0.036 1.396-0.008 0.132-0.016 0.224-0.016 0.224h0.022c0.768 30.766 23.236 56.128 52.682 61.37-0.066 0.296-0.13 0.584-0.198 0.884-0.644 3.248-1.632 6.542-2.556 9.942-0.934 3.388-1.894 6.876-2.88 10.454-0.516 1.78-0.934 3.602-1.546 5.406-0.596 1.802-1.202 3.628-1.81 5.476-1.218 3.682-2.464 7.45-3.736 11.294-0.316 0.958-0.634 1.924-0.956 2.892-0.37 0.954-0.74 1.914-1.114 2.876-0.746 1.924-1.5 3.868-2.26 5.83-1.52 3.904-3.070 7.882-4.646 11.93-1.768 3.96-3.566 7.99-5.392 12.080-0.908 2.038-1.824 4.090-2.746 6.156-0.932 2.060-2.036 4.072-3.052 6.126-2.070 4.084-4.17 8.222-6.294 12.412-2.202 4.142-4.654 8.224-6.998 12.392-1.184 2.074-2.374 4.16-3.57 6.256-1.21 2.086-2.586 4.102-3.876 6.166-2.616 4.098-5.256 8.232-7.918 12.402-11.234 16.298-23.632 32.398-37.33 47.638-13.874 15.104-28.842 29.404-44.598 42.548-15.974 12.928-32.686 24.65-49.676 35.022-17.13 10.194-34.6 18.838-51.734 26.258-4.35 1.7-8.662 3.382-12.934 5.050-2.136 0.812-4.216 1.71-6.36 2.444-2.146 0.714-4.28 1.428-6.404 2.136-4.25 1.386-8.382 2.888-12.548 4.142-4.184 1.174-8.314 2.332-12.392 3.474-2.038 0.55-4.026 1.19-6.054 1.662-2.030 0.458-4.044 0.914-6.044 1.368-3.978 0.91-7.896 1.806-11.748 2.688-3.888 0.686-7.71 1.36-11.462 2.022-1.868 0.33-3.716 0.658-5.546 0.98-0.914 0.162-1.824 0.324-2.728 0.484-0.916 0.112-1.828 0.222-2.734 0.332-3.612 0.448-7.148 0.882-10.604 1.31-1.72 0.216-3.422 0.432-5.102 0.644-1.674 0.226-3.364 0.266-5.010 0.408-3.292 0.238-6.498 0.472-9.616 0.7-3.11 0.218-6.11 0.524-9.058 0.508-5.848 0.132-11.32 0.256-16.38 0.372-4.664-0.168-8.948-0.324-12.818-0.462-1.914-0.054-3.726-0.108-5.432-0.156-2.122-0.134-4.108-0.26-5.958-0.378-2.13-0.138-4.060-0.266-5.82-0.38-3.256-0.51-6.592-0.782-9.99-0.782-0.466 0-0.93 0.026-1.396 0.036-0.132-0.008-0.224-0.014-0.224-0.014v0.020c-31.004 0.774-56.524 23.586-61.488 53.364-3.2-0.64-6.446-1.61-9.792-2.522-3.386-0.934-6.876-1.894-10.454-2.878-1.778-0.516-3.602-0.938-5.404-1.546-1.802-0.598-3.63-1.204-5.478-1.812-3.68-1.218-7.448-2.464-11.292-3.738-0.96-0.316-1.924-0.632-2.892-0.954-0.956-0.372-1.914-0.742-2.876-1.114-1.926-0.746-3.868-1.5-5.83-2.258-3.904-1.524-7.884-3.070-11.932-4.648-3.96-1.77-7.988-3.566-12.080-5.39-2.038-0.91-4.088-1.824-6.156-2.746-2.060-0.934-4.072-2.036-6.126-3.054-4.082-2.070-8.222-4.172-12.41-6.296-4.144-2.2-8.226-4.652-12.394-6.996-2.074-1.184-4.16-2.376-6.256-3.57-2.086-1.21-4.102-2.586-6.166-3.878-4.098-2.614-8.23-5.254-12.402-7.918-16.296-11.23-32.398-23.632-47.636-37.328-15.104-13.876-29.406-28.84-42.55-44.598-12.928-15.972-24.648-32.684-35.020-49.676-10.196-17.128-18.84-34.602-26.26-51.734-1.698-4.352-3.382-8.664-5.050-12.934-0.812-2.136-1.71-4.218-2.444-6.36-0.714-2.148-1.428-4.282-2.136-6.406-1.386-4.25-2.888-8.382-4.142-12.546-1.174-4.184-2.33-8.316-3.474-12.394-0.55-2.036-1.19-4.024-1.66-6.054-0.46-2.028-0.916-4.042-1.368-6.042-0.91-3.98-1.808-7.898-2.688-11.75-0.688-3.886-1.362-7.71-2.024-11.46-0.33-1.868-0.656-3.718-0.98-5.546-0.162-0.914-0.324-1.824-0.484-2.73-0.11-0.914-0.222-1.828-0.332-2.734-0.446-3.61-0.882-7.148-1.31-10.602-0.216-1.722-0.432-3.422-0.642-5.102-0.226-1.676-0.268-3.364-0.41-5.012-0.238-3.29-0.472-6.496-0.7-9.614-0.218-3.11-0.524-6.11-0.508-9.058-0.132-5.848-0.256-11.32-0.372-16.382 0.168-4.664 0.324-8.946 0.462-12.816 0.054-1.914 0.108-3.726 0.156-5.434 0.134-2.122 0.26-4.106 0.378-5.958 0.138-2.128 0.266-4.058 0.38-5.82 0.496-3.26 0.766-6.596 0.766-9.994 0-0.466-0.026-0.93-0.036-1.396 0.008-0.132 0.016-0.224 0.016-0.224h-0.022c-0.78-31.38-24.134-57.154-54.44-61.674z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "spinner", + "loading", + "loading-wheel", + "busy", + "wait" + ], + "defaultCode": 59779, + "grid": 16 + }, + { + "id": 132, + "paths": [ + "M1024 384h-384l143.53-143.53c-72.53-72.526-168.96-112.47-271.53-112.47s-199 39.944-271.53 112.47c-72.526 72.53-112.47 168.96-112.47 271.53s39.944 199 112.47 271.53c72.53 72.526 168.96 112.47 271.53 112.47s199-39.944 271.528-112.472c6.056-6.054 11.86-12.292 17.456-18.668l96.32 84.282c-93.846 107.166-231.664 174.858-385.304 174.858-282.77 0-512-229.23-512-512s229.23-512 512-512c141.386 0 269.368 57.326 362.016 149.984l149.984-149.984v384z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "spinner", + "loading", + "loading-wheel", + "refresh", + "repeat", + "busy", + "wait", + "arrow" + ], + "defaultCode": 59780, + "grid": 16 + }, + { + "id": 133, + "paths": [ + "M64 0h384v64h-384zM576 0h384v64h-384zM952 320h-56v-256h-256v256h-256v-256h-256v256h-56c-39.6 0-72 32.4-72 72v560c0 39.6 32.4 72 72 72h304c39.6 0 72-32.4 72-72v-376h128v376c0 39.6 32.4 72 72 72h304c39.6 0 72-32.4 72-72v-560c0-39.6-32.4-72-72-72zM348 960h-248c-19.8 0-36-14.4-36-32s16.2-32 36-32h248c19.8 0 36 14.4 36 32s-16.2 32-36 32zM544 512h-64c-17.6 0-32-14.4-32-32s14.4-32 32-32h64c17.6 0 32 14.4 32 32s-14.4 32-32 32zM924 960h-248c-19.8 0-36-14.4-36-32s16.2-32 36-32h248c19.8 0 36 14.4 36 32s-16.2 32-36 32z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "binoculars", + "lookup", + "search", + "find" + ], + "defaultCode": 59781, + "grid": 16 + }, + { + "id": 134, + "paths": [ + "M992.262 871.396l-242.552-206.294c-25.074-22.566-51.89-32.926-73.552-31.926 57.256-67.068 91.842-154.078 91.842-249.176 0-212.078-171.922-384-384-384-212.076 0-384 171.922-384 384s171.922 384 384 384c95.098 0 182.108-34.586 249.176-91.844-1 21.662 9.36 48.478 31.926 73.552l206.294 242.552c35.322 39.246 93.022 42.554 128.22 7.356s31.892-92.898-7.354-128.22zM384 640c-141.384 0-256-114.616-256-256s114.616-256 256-256 256 114.616 256 256-114.614 256-256 256z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "search", + "magnifier", + "magnifying-glass", + "inspect", + "find" + ], + "defaultCode": 59782, + "grid": 16 + }, + { + "id": 135, + "paths": [ + "M992.262 871.396l-242.552-206.294c-25.074-22.566-51.89-32.926-73.552-31.926 57.256-67.068 91.842-154.078 91.842-249.176 0-212.078-171.922-384-384-384-212.076 0-384 171.922-384 384s171.922 384 384 384c95.098 0 182.108-34.586 249.176-91.844-1 21.662 9.36 48.478 31.926 73.552l206.294 242.552c35.322 39.246 93.022 42.554 128.22 7.356s31.892-92.898-7.354-128.22zM384 640c-141.384 0-256-114.616-256-256s114.616-256 256-256 256 114.616 256 256-114.614 256-256 256zM448 192h-128v128h-128v128h128v128h128v-128h128v-128h-128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "zoom-in", + "magnifier", + "magnifier-plus", + "enlarge" + ], + "defaultCode": 59783, + "grid": 16 + }, + { + "id": 136, + "paths": [ + "M992.262 871.396l-242.552-206.294c-25.074-22.566-51.89-32.926-73.552-31.926 57.256-67.068 91.842-154.078 91.842-249.176 0-212.078-171.922-384-384-384-212.076 0-384 171.922-384 384s171.922 384 384 384c95.098 0 182.108-34.586 249.176-91.844-1 21.662 9.36 48.478 31.926 73.552l206.294 242.552c35.322 39.246 93.022 42.554 128.22 7.356s31.892-92.898-7.354-128.22zM384 640c-141.384 0-256-114.616-256-256s114.616-256 256-256 256 114.616 256 256-114.614 256-256 256zM192 320h384v128h-384z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "zoom-out", + "magnifier", + "magnifier-minus", + "reduce" + ], + "defaultCode": 59784, + "grid": 16 + }, + { + "id": 137, + "paths": [ + "M1024 0h-416l160 160-192 192 96 96 192-192 160 160z", + "M1024 1024v-416l-160 160-192-192-96 96 192 192-160 160z", + "M0 1024h416l-160-160 192-192-96-96-192 192-160-160z", + "M0 0v416l160-160 192 192 96-96-192-192 160-160z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "enlarge", + "expand", + "maximize", + "fullscreen" + ], + "defaultCode": 59785, + "grid": 16 + }, + { + "id": 138, + "paths": [ + "M576 448h416l-160-160 192-192-96-96-192 192-160-160z", + "M576 576v416l160-160 192 192 96-96-192-192 160-160z", + "M448 575.996h-416l160 160-192 192 96 96 192-192 160 160z", + "M448 448v-416l-160 160-192-192-96 96 192 192-160 160z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "shrink", + "collapse", + "minimize", + "contract" + ], + "defaultCode": 59786, + "grid": 16 + }, + { + "id": 139, + "paths": [ + "M1024 0v416l-160-160-192 192-96-96 192-192-160-160zM448 672l-192 192 160 160h-416v-416l160 160 192-192z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "enlarge", + "expand", + "maximize", + "fullscreen" + ], + "defaultCode": 59787, + "grid": 16 + }, + { + "id": 140, + "paths": [ + "M448 576v416l-160-160-192 192-96-96 192-192-160-160zM1024 96l-192 192 160 160h-416v-416l160 160 192-192z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "shrink", + "collapse", + "minimize", + "contract" + ], + "defaultCode": 59788, + "grid": 16 + }, + { + "id": 141, + "paths": [ + "M704 0c-176.73 0-320 143.268-320 320 0 20.026 1.858 39.616 5.376 58.624l-389.376 389.376v192c0 35.346 28.654 64 64 64h64v-64h128v-128h128v-128h128l83.042-83.042c34.010 12.316 70.696 19.042 108.958 19.042 176.73 0 320-143.268 320-320s-143.27-320-320-320zM799.874 320.126c-53.020 0-96-42.98-96-96s42.98-96 96-96 96 42.98 96 96-42.98 96-96 96z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "key", + "password", + "login", + "signin" + ], + "defaultCode": 59789, + "grid": 16 + }, + { + "id": 142, + "paths": [ + "M1002.132 314.242l-101.106-101.104c-24.792-24.794-65.37-65.368-90.162-90.164l-101.106-101.104c-24.792-24.794-68.954-29.166-98.13-9.716l-276.438 184.292c-29.176 19.452-40.218 61.028-24.536 92.39l70.486 140.974c2.154 4.306 4.646 8.896 7.39 13.66l-356.53 356.53-32 224h192v-64h128v-128h128v-128h128v-71.186c6.396 3.812 12.534 7.216 18.192 10.044l140.97 70.488c31.366 15.682 72.94 4.638 92.39-24.538l184.294-276.44c19.454-29.172 15.078-73.33-9.714-98.126zM150.628 854.626l-45.254-45.254 311.572-311.57 45.254 45.254-311.572 311.57zM917.020 423.764l-45.256 45.256c-12.446 12.444-32.808 12.444-45.254 0l-271.53-271.53c-12.446-12.444-12.446-32.81 0-45.254l45.256-45.256c12.446-12.444 32.808-12.444 45.254 0l271.53 271.53c12.446 12.444 12.446 32.81 0 45.254z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "key", + "password", + "login", + "signin" + ], + "defaultCode": 59790, + "grid": 16 + }, + { + "id": 143, + "paths": [ + "M592 448h-16v-192c0-105.87-86.13-192-192-192h-128c-105.87 0-192 86.13-192 192v192h-16c-26.4 0-48 21.6-48 48v480c0 26.4 21.6 48 48 48h544c26.4 0 48-21.6 48-48v-480c0-26.4-21.6-48-48-48zM192 256c0-35.29 28.71-64 64-64h128c35.29 0 64 28.71 64 64v192h-256v-192z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "lock", + "secure", + "private", + "encrypted" + ], + "defaultCode": 59791, + "grid": 16 + }, + { + "id": 144, + "paths": [ + "M768 64c105.87 0 192 86.13 192 192v192h-128v-192c0-35.29-28.71-64-64-64h-128c-35.29 0-64 28.71-64 64v192h16c26.4 0 48 21.6 48 48v480c0 26.4-21.6 48-48 48h-544c-26.4 0-48-21.6-48-48v-480c0-26.4 21.6-48 48-48h400v-192c0-105.87 86.13-192 192-192h128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "unlocked", + "lock-open" + ], + "defaultCode": 59792, + "grid": 16 + }, + { + "id": 145, + "paths": [ + "M1002.934 817.876l-460.552-394.76c21.448-40.298 33.618-86.282 33.618-135.116 0-159.058-128.942-288-288-288-29.094 0-57.172 4.332-83.646 12.354l166.39 166.39c24.89 24.89 24.89 65.62 0 90.51l-101.49 101.49c-24.89 24.89-65.62 24.89-90.51 0l-166.39-166.39c-8.022 26.474-12.354 54.552-12.354 83.646 0 159.058 128.942 288 288 288 48.834 0 94.818-12.17 135.116-33.62l394.76 460.552c22.908 26.724 62.016 28.226 86.904 3.338l101.492-101.492c24.888-24.888 23.386-63.994-3.338-86.902z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "wrench", + "tool", + "fix", + "settings", + "control", + "options", + "preferences" + ], + "defaultCode": 59793, + "grid": 16 + }, + { + "id": 146, + "paths": [ + "M448 128v-16c0-26.4-21.6-48-48-48h-160c-26.4 0-48 21.6-48 48v16h-192v128h192v16c0 26.4 21.6 48 48 48h160c26.4 0 48-21.6 48-48v-16h576v-128h-576zM256 256v-128h128v128h-128zM832 432c0-26.4-21.6-48-48-48h-160c-26.4 0-48 21.6-48 48v16h-576v128h576v16c0 26.4 21.6 48 48 48h160c26.4 0 48-21.6 48-48v-16h192v-128h-192v-16zM640 576v-128h128v128h-128zM448 752c0-26.4-21.6-48-48-48h-160c-26.4 0-48 21.6-48 48v16h-192v128h192v16c0 26.4 21.6 48 48 48h160c26.4 0 48-21.6 48-48v-16h576v-128h-576v-16zM256 896v-128h128v128h-128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "equalizer", + "sliders", + "settings", + "preferences", + "dashboard", + "control" + ], + "defaultCode": 59794, + "grid": 16 + }, + { + "id": 147, + "paths": [ + "M896 448h16c26.4 0 48-21.6 48-48v-160c0-26.4-21.6-48-48-48h-16v-192h-128v192h-16c-26.4 0-48 21.6-48 48v160c0 26.4 21.6 48 48 48h16v576h128v-576zM768 256h128v128h-128v-128zM592 832c26.4 0 48-21.6 48-48v-160c0-26.4-21.6-48-48-48h-16v-576h-128v576h-16c-26.4 0-48 21.6-48 48v160c0 26.4 21.6 48 48 48h16v192h128v-192h16zM448 640h128v128h-128v-128zM272 448c26.4 0 48-21.6 48-48v-160c0-26.4-21.6-48-48-48h-16v-192h-128v192h-16c-26.4 0-48 21.6-48 48v160c0 26.4 21.6 48 48 48h16v576h128v-576h16zM128 256h128v128h-128v-128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "equalizer", + "sliders", + "settings", + "preferences", + "dashboard", + "control" + ], + "defaultCode": 59795, + "grid": 16 + }, + { + "id": 148, + "paths": [ + "M933.79 610.25c-53.726-93.054-21.416-212.304 72.152-266.488l-100.626-174.292c-28.75 16.854-62.176 26.518-97.846 26.518-107.536 0-194.708-87.746-194.708-195.99h-201.258c0.266 33.41-8.074 67.282-25.958 98.252-53.724 93.056-173.156 124.702-266.862 70.758l-100.624 174.292c28.97 16.472 54.050 40.588 71.886 71.478 53.638 92.908 21.512 211.92-71.708 266.224l100.626 174.292c28.65-16.696 61.916-26.254 97.4-26.254 107.196 0 194.144 87.192 194.7 194.958h201.254c-0.086-33.074 8.272-66.57 25.966-97.218 53.636-92.906 172.776-124.594 266.414-71.012l100.626-174.29c-28.78-16.466-53.692-40.498-71.434-71.228zM512 719.332c-114.508 0-207.336-92.824-207.336-207.334 0-114.508 92.826-207.334 207.336-207.334 114.508 0 207.332 92.826 207.332 207.334-0.002 114.51-92.824 207.334-207.332 207.334z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "cog", + "gear", + "preferences", + "settings", + "generate", + "control", + "options" + ], + "defaultCode": 59796, + "grid": 16 + }, + { + "id": 149, + "paths": [ + "M363.722 722.052l41.298-57.816-45.254-45.256-57.818 41.296c-10.722-5.994-22.204-10.774-34.266-14.192l-11.682-70.084h-64l-11.68 70.086c-12.062 3.418-23.544 8.198-34.266 14.192l-57.818-41.298-45.256 45.256 41.298 57.816c-5.994 10.72-10.774 22.206-14.192 34.266l-70.086 11.682v64l70.086 11.682c3.418 12.060 8.198 23.544 14.192 34.266l-41.298 57.816 45.254 45.256 57.818-41.296c10.722 5.994 22.204 10.774 34.266 14.192l11.682 70.084h64l11.68-70.086c12.062-3.418 23.544-8.198 34.266-14.192l57.818 41.296 45.254-45.256-41.298-57.816c5.994-10.72 10.774-22.206 14.192-34.266l70.088-11.68v-64l-70.086-11.682c-3.418-12.060-8.198-23.544-14.192-34.266zM224 864c-35.348 0-64-28.654-64-64s28.652-64 64-64 64 28.654 64 64-28.652 64-64 64zM1024 384v-64l-67.382-12.25c-1.242-8.046-2.832-15.978-4.724-23.79l57.558-37.1-24.492-59.128-66.944 14.468c-4.214-6.91-8.726-13.62-13.492-20.13l39.006-56.342-45.256-45.254-56.342 39.006c-6.512-4.766-13.22-9.276-20.13-13.494l14.468-66.944-59.128-24.494-37.1 57.558c-7.812-1.892-15.744-3.482-23.79-4.724l-12.252-67.382h-64l-12.252 67.382c-8.046 1.242-15.976 2.832-23.79 4.724l-37.098-57.558-59.128 24.492 14.468 66.944c-6.91 4.216-13.62 8.728-20.13 13.494l-56.342-39.006-45.254 45.254 39.006 56.342c-4.766 6.51-9.278 13.22-13.494 20.13l-66.944-14.468-24.492 59.128 57.558 37.1c-1.892 7.812-3.482 15.742-4.724 23.79l-67.384 12.252v64l67.382 12.25c1.242 8.046 2.832 15.978 4.724 23.79l-57.558 37.1 24.492 59.128 66.944-14.468c4.216 6.91 8.728 13.618 13.494 20.13l-39.006 56.342 45.254 45.256 56.342-39.006c6.51 4.766 13.22 9.276 20.13 13.492l-14.468 66.944 59.128 24.492 37.102-57.558c7.81 1.892 15.742 3.482 23.788 4.724l12.252 67.384h64l12.252-67.382c8.044-1.242 15.976-2.832 23.79-4.724l37.1 57.558 59.128-24.492-14.468-66.944c6.91-4.216 13.62-8.726 20.13-13.492l56.342 39.006 45.256-45.256-39.006-56.342c4.766-6.512 9.276-13.22 13.492-20.13l66.944 14.468 24.492-59.13-57.558-37.1c1.892-7.812 3.482-15.742 4.724-23.79l67.382-12.25zM672 491.2c-76.878 0-139.2-62.322-139.2-139.2s62.32-139.2 139.2-139.2 139.2 62.322 139.2 139.2c0 76.878-62.32 139.2-139.2 139.2z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "cogs", + "gears", + "preferences", + "settings", + "generate", + "control", + "options" + ], + "defaultCode": 59797, + "grid": 16 + }, + { + "id": 150, + "paths": [ + "M1009.996 828.976l-301.544-301.544c-18.668-18.668-49.214-18.668-67.882 0l-22.626 22.626-184-184 302.056-302.058h-320l-142.058 142.058-14.060-14.058h-67.882v67.882l14.058 14.058-206.058 206.060 160 160 206.058-206.058 184 184-22.626 22.626c-18.668 18.668-18.668 49.214 0 67.882l301.544 301.544c18.668 18.668 49.214 18.668 67.882 0l113.136-113.136c18.67-18.666 18.67-49.214 0.002-67.882z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "hammer", + "tool", + "fix", + "make", + "generate", + "work", + "build" + ], + "defaultCode": 59798, + "grid": 16 + }, + { + "id": 151, + "paths": [ + "M256 192l-128-128h-64v64l128 128zM320 0h64v128h-64zM576 320h128v64h-128zM640 128v-64h-64l-128 128 64 64zM0 320h128v64h-128zM320 576h64v128h-64zM64 576v64h64l128-128-64-64zM1010 882l-636.118-636.118c-18.668-18.668-49.214-18.668-67.882 0l-60.118 60.118c-18.668 18.668-18.668 49.214 0 67.882l636.118 636.118c18.668 18.668 49.214 18.668 67.882 0l60.118-60.118c18.668-18.668 18.668-49.214 0-67.882zM480 544l-192-192 64-64 192 192-64 64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "magic-wand", + "wizard" + ], + "defaultCode": 59799, + "grid": 16 + }, + { + "id": 152, + "paths": [ + "M896 256h-192v-128c0-35.2-28.8-64-64-64h-256c-35.2 0-64 28.8-64 64v128h-192c-70.4 0-128 57.6-128 128v512c0 70.4 57.6 128 128 128h768c70.4 0 128-57.6 128-128v-512c0-70.4-57.6-128-128-128zM384 128h256v128h-256v-128zM768 704h-192v192h-128v-192h-192v-128h192v-192h128v192h192v128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "aid-kit", + "health", + "medicine", + "medical" + ], + "defaultCode": 59800, + "grid": 16 + }, + { + "id": 153, + "paths": [ + "M1024 576v-64h-193.29c-5.862-72.686-31.786-139.026-71.67-192.25h161.944l70.060-280.24-62.090-15.522-57.94 231.76h-174.68c-0.892-0.694-1.796-1.374-2.698-2.056 6.71-19.502 10.362-40.422 10.362-62.194 0.002-105.76-85.958-191.498-191.998-191.498s-192 85.738-192 191.5c0 21.772 3.65 42.692 10.362 62.194-0.9 0.684-1.804 1.362-2.698 2.056h-174.68l-57.94-231.76-62.090 15.522 70.060 280.24h161.944c-39.884 53.222-65.806 119.562-71.668 192.248h-193.29v64h193.37c3.802 45.664 15.508 88.812 33.638 127.75h-123.992l-70.060 280.238 62.090 15.524 57.94-231.762h112.354c58.692 78.032 147.396 127.75 246.66 127.75s187.966-49.718 246.662-127.75h112.354l57.94 231.762 62.090-15.524-70.060-280.238h-123.992c18.13-38.938 29.836-82.086 33.636-127.75h193.37z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "bug", + "virus", + "error" + ], + "defaultCode": 59801, + "grid": 16 + }, + { + "id": 154, + "paths": [ + "M448 576v-448c-247.424 0-448 200.576-448 448s200.576 448 448 448 448-200.576 448-448c0-72.034-17.028-140.084-47.236-200.382l-400.764 200.382zM912.764 247.618c-73.552-146.816-225.374-247.618-400.764-247.618v448l400.764-200.382z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "pie-chart", + "stats", + "statistics", + "graph" + ], + "defaultCode": 59802, + "grid": 16 + }, + { + "id": 155, + "paths": [ + "M128 896h896v128h-1024v-1024h128zM288 832c-53.020 0-96-42.98-96-96s42.98-96 96-96c2.828 0 5.622 0.148 8.388 0.386l103.192-171.986c-9.84-15.070-15.58-33.062-15.58-52.402 0-53.020 42.98-96 96-96s96 42.98 96 96c0 19.342-5.74 37.332-15.58 52.402l103.192 171.986c2.766-0.238 5.56-0.386 8.388-0.386 2.136 0 4.248 0.094 6.35 0.23l170.356-298.122c-10.536-15.408-16.706-34.036-16.706-54.11 0-53.020 42.98-96 96-96s96 42.98 96 96c0 53.020-42.98 96-96 96-2.14 0-4.248-0.094-6.35-0.232l-170.356 298.124c10.536 15.406 16.706 34.036 16.706 54.11 0 53.020-42.98 96-96 96s-96-42.98-96-96c0-19.34 5.74-37.332 15.578-52.402l-103.19-171.984c-2.766 0.238-5.56 0.386-8.388 0.386s-5.622-0.146-8.388-0.386l-103.192 171.986c9.84 15.068 15.58 33.060 15.58 52.4 0 53.020-42.98 96-96 96z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "stats-dots", + "stats", + "plot", + "statistics", + "chart" + ], + "defaultCode": 59803, + "grid": 16 + }, + { + "id": 156, + "paths": [ + "M0 832h1024v128h-1024zM128 576h128v192h-128zM320 320h128v448h-128zM512 512h128v256h-128zM704 128h128v640h-128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "stats-bars", + "stats", + "statistics", + "chart" + ], + "defaultCode": 59804, + "grid": 16 + }, + { + "id": 157, + "paths": [ + "M288 384h-192c-17.6 0-32 14.4-32 32v576c0 17.6 14.4 32 32 32h192c17.6 0 32-14.4 32-32v-576c0-17.6-14.4-32-32-32zM288 960h-192v-256h192v256zM608 256h-192c-17.6 0-32 14.4-32 32v704c0 17.6 14.4 32 32 32h192c17.6 0 32-14.4 32-32v-704c0-17.6-14.4-32-32-32zM608 960h-192v-320h192v320zM928 128h-192c-17.6 0-32 14.4-32 32v832c0 17.6 14.4 32 32 32h192c17.6 0 32-14.4 32-32v-832c0-17.6-14.4-32-32-32zM928 960h-192v-384h192v384z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "stats-bars", + "stats", + "statistics", + "chart" + ], + "defaultCode": 59805, + "grid": 16 + }, + { + "id": 158, + "paths": [ + "M832 192v-128h-640v128h-192v128c0 106.038 85.958 192 192 192 20.076 0 39.43-3.086 57.62-8.802 46.174 66.008 116.608 113.796 198.38 130.396v198.406h-64c-70.694 0-128 57.306-128 128h512c0-70.694-57.306-128-128-128h-64v-198.406c81.772-16.6 152.206-64.386 198.38-130.396 18.19 5.716 37.544 8.802 57.62 8.802 106.042 0 192-85.962 192-192v-128h-192zM192 436c-63.962 0-116-52.038-116-116v-64h116v64c0 40.186 7.43 78.632 20.954 114.068-6.802 1.246-13.798 1.932-20.954 1.932zM948 320c0 63.962-52.038 116-116 116-7.156 0-14.152-0.686-20.954-1.932 13.524-35.436 20.954-73.882 20.954-114.068v-64h116v64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "trophy", + "cup", + "prize", + "award", + "winner", + "tournament" + ], + "defaultCode": 59806, + "grid": 16 + }, + { + "id": 159, + "paths": [ + "M771.516 320c18.126-12.88 35.512-27.216 51.444-43.148 33.402-33.402 55.746-74.5 62.912-115.722 7.858-45.186-3.672-87.14-31.63-115.1-22.3-22.298-52.51-34.086-87.364-34.086-49.632 0-101.922 23.824-143.46 65.362-66.476 66.476-105.226 158.238-126.076 223.722-15.44-65.802-46.206-154.644-106.018-214.458-32.094-32.092-73.114-48.57-111.846-48.57-31.654 0-61.78 11.004-84.26 33.486-49.986 49.988-43.232 137.786 15.086 196.104 20.792 20.792 45.098 38.062 70.72 52.412h-217.024v256h64v448h768v-448.002h64v-256h-188.484zM674.326 128.218c27.724-27.724 62.322-44.274 92.55-44.274 10.7 0 25.708 2.254 36.45 12.998 26.030 26.028 11.412 86.308-31.28 128.998-43.946 43.946-103.060 74.168-154.432 94.060h-50.672c18.568-57.548 52.058-136.456 107.384-191.782zM233.934 160.89c-0.702-9.12-0.050-26.248 12.196-38.494 10.244-10.244 23.788-12.396 33.348-12.396v0c21.258 0 43.468 10.016 60.932 27.48 33.872 33.872 61.766 87.772 80.668 155.876 0.51 1.84 1.008 3.67 1.496 5.486-1.816-0.486-3.646-0.984-5.486-1.496-68.104-18.904-122.002-46.798-155.874-80.67-15.828-15.826-25.77-36.16-27.28-55.786zM448 960h-256v-416h256v416zM448 512h-320v-128h320v128zM832 960h-256v-416h256v416zM896 512h-320v-128h320v128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "gift", + "present", + "box" + ], + "defaultCode": 59807, + "grid": 16 + }, + { + "id": 160, + "paths": [ + "M777.784 16.856c-5.576-10.38-16.406-16.856-28.19-16.856h-475.188c-11.784 0-22.614 6.476-28.19 16.856-35.468 66.020-54.216 143.184-54.216 223.144 0 105.412 32.372 204.828 91.154 279.938 45.428 58.046 102.48 96.54 164.846 112.172v327.89h-96c-17.672 0-32 14.326-32 32s14.328 32 32 32h320c17.674 0 32-14.326 32-32s-14.326-32-32-32h-96v-327.89c62.368-15.632 119.418-54.124 164.846-112.172 58.782-75.11 91.154-174.526 91.154-279.938 0-79.96-18.748-157.122-54.216-223.144zM294.1 64h435.8c24.974 52.902 38.1 113.338 38.1 176 0 5.364-0.108 10.696-0.296 16h-511.406c-0.19-5.304-0.296-10.636-0.296-16-0.002-62.664 13.126-123.098 38.098-176z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "glass", + "drink", + "beverage", + "wine" + ], + "defaultCode": 59808, + "grid": 16 + }, + { + "id": 161, + "paths": [ + "M889.162 179.77c7.568-9.632 8.972-22.742 3.62-33.758-5.356-11.018-16.532-18.012-28.782-18.012h-704c-12.25 0-23.426 6.994-28.78 18.012-5.356 11.018-3.95 24.126 3.618 33.758l313.162 398.57v381.66h-96c-17.672 0-32 14.326-32 32s14.328 32 32 32h320c17.674 0 32-14.326 32-32s-14.326-32-32-32h-96v-381.66l313.162-398.57zM798.162 192l-100.572 128h-371.18l-100.57-128h572.322z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "glass", + "drink", + "beverage", + "wine" + ], + "defaultCode": 59809, + "grid": 16 + }, + { + "id": 162, + "paths": [ + "M960 320h-192v-96c0-88.366-171.922-160-384-160s-384 71.634-384 160v640c0 88.366 171.922 160 384 160s384-71.634 384-160v-96h192c35.346 0 64-28.654 64-64v-320c0-35.346-28.654-64-64-64zM176.056 258.398c-36.994-12.19-59.408-25.246-71.41-34.398 12.004-9.152 34.416-22.208 71.41-34.398 57.942-19.090 131.79-29.602 207.944-29.602s150.004 10.512 207.944 29.602c36.994 12.188 59.408 25.246 71.41 34.398-12.002 9.152-34.416 22.208-71.41 34.398-57.94 19.090-131.79 29.602-207.944 29.602s-150.002-10.512-207.944-29.602zM896 640h-128v-192h128v192z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "mug", + "drink", + "glass", + "beverage" + ], + "defaultCode": 59810, + "grid": 16 + }, + { + "id": 163, + "paths": [ + "M224 0c-106.040 0-192 100.288-192 224 0 105.924 63.022 194.666 147.706 217.998l-31.788 518.124c-2.154 35.132 24.882 63.878 60.082 63.878h32c35.2 0 62.236-28.746 60.082-63.878l-31.788-518.124c84.684-23.332 147.706-112.074 147.706-217.998 0-123.712-85.96-224-192-224zM869.334 0l-53.334 320h-40l-26.666-320h-26.668l-26.666 320h-40l-53.334-320h-26.666v416c0 17.672 14.326 32 32 32h83.338l-31.42 512.122c-2.154 35.132 24.882 63.878 60.082 63.878h32c35.2 0 62.236-28.746 60.082-63.878l-31.42-512.122h83.338c17.674 0 32-14.328 32-32v-416h-26.666z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "spoon-knife", + "food", + "restaurant" + ], + "defaultCode": 59811, + "grid": 16 + }, + { + "id": 164, + "paths": [ + "M1011.328 134.496c-110.752-83.928-281.184-134.034-455.91-134.034-216.12 0-392.226 75.456-483.16 207.020-42.708 61.79-66.33 134.958-70.208 217.474-3.454 73.474 8.884 154.726 36.684 242.146 94.874-284.384 359.82-507.102 665.266-507.102 0 0-285.826 75.232-465.524 308.192-0.112 0.138-2.494 3.090-6.614 8.698-36.080 48.278-67.538 103.162-91.078 165.328-39.87 94.83-76.784 224.948-76.784 381.782h128c0 0-19.43-122.222 14.36-262.79 55.89 7.556 105.858 11.306 150.852 11.306 117.678 0 201.37-25.46 263.388-80.124 55.568-48.978 86.198-114.786 118.624-184.456 49.524-106.408 105.654-227.010 268.654-320.152 9.33-5.332 15.362-14.992 16.056-25.716s-4.040-21.080-12.606-27.572z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "leaf", + "nature", + "plant", + "tea", + "green", + "vegan", + "vegetarian" + ], + "defaultCode": 59812, + "grid": 16 + }, + { + "id": 165, + "paths": [ + "M704 64l-320 320h-192l-192 256c0 0 203.416-56.652 322.066-30.084l-322.066 414.084 421.902-328.144c58.838 134.654-37.902 328.144-37.902 328.144l256-192v-192l320-320 64-320-320 64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "rocket", + "jet", + "speed", + "spaceship", + "fast" + ], + "defaultCode": 59813, + "grid": 16 + }, + { + "id": 166, + "paths": [ + "M512 64c282.77 0 512 229.23 512 512 0 192.792-106.576 360.666-264.008 448h-495.984c-157.432-87.334-264.008-255.208-264.008-448 0-282.77 229.23-512 512-512zM801.914 865.914c77.438-77.44 120.086-180.398 120.086-289.914h-90v-64h85.038c-7.014-44.998-21.39-88.146-42.564-128h-106.474v-64h64.284c-9.438-11.762-19.552-23.096-30.37-33.914-46.222-46.22-101.54-80.038-161.914-99.798v69.712h-64v-85.040c-20.982-3.268-42.36-4.96-64-4.96s-43.018 1.69-64 4.96v85.040h-64v-69.712c-60.372 19.76-115.692 53.576-161.914 99.798-10.818 10.818-20.932 22.152-30.37 33.914h64.284v64h-106.476c-21.174 39.854-35.552 83.002-42.564 128h85.040v64h-90c0 109.516 42.648 212.474 120.086 289.914 10.71 10.71 21.924 20.728 33.56 30.086h192.354l36.572-512h54.856l36.572 512h192.354c11.636-9.358 22.852-19.378 33.56-30.086z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "meter", + "gauge", + "dashboard", + "speedometer", + "performance" + ], + "defaultCode": 59814, + "grid": 16 + }, + { + "id": 167, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM302.836 834.152c11.106-30.632 17.164-63.688 17.164-98.152 0-124.35-78.81-230.292-189.208-270.606 10.21-84.924 48.254-163.498 109.678-224.924 72.53-72.526 168.96-112.47 271.53-112.47s199 39.944 271.53 112.47c61.428 61.426 99.468 140 109.682 224.924-110.402 40.314-189.212 146.256-189.212 270.606 0 34.468 6.060 67.52 17.166 98.15-61.706 40.242-133.77 61.85-209.166 61.85-75.394 0-147.458-21.608-209.164-61.848zM551.754 640.996c13.878 3.494 24.246 16.080 24.246 31.004v64c0 17.6-14.4 32-32 32h-64c-17.6 0-32-14.4-32-32v-64c0-14.924 10.368-27.51 24.246-31.004l23.754-448.996h32l23.754 448.996z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "meter", + "gauge", + "dashboard", + "speedometer", + "performance" + ], + "defaultCode": 59815, + "grid": 16 + }, + { + "id": 168, + "paths": [ + "M1010.174 915.75l-548.634-499.458 25.534-25.598c20.894-20.954 32.188-48.030 33.918-75.61 1.002-0.45 2.002-0.912 2.958-1.442l102.99-64.402c13.934-16.392 12.916-42.268-2.284-57.502l-179.12-179.608c-15.19-15.234-40.998-16.262-57.344-2.284l-64.236 103.268c-0.526 0.966-0.99 1.966-1.44 2.974-27.502 1.736-54.5 13.056-75.398 34.006l-97.428 97.702c-20.898 20.956-32.184 48.026-33.918 75.604-1.004 0.45-2.004 0.916-2.964 1.446l-102.986 64.406c-13.942 16.39-12.916 42.264 2.276 57.496l179.12 179.604c15.194 15.238 40.996 16.262 57.35 2.286l64.228-103.27c0.528-0.958 0.988-1.96 1.442-2.966 27.502-1.738 54.504-13.050 75.398-34.004l28.292-28.372 498.122 550.114c14.436 15.944 36.7 18.518 49.474 5.712l50.356-50.488c12.764-12.808 10.196-35.132-5.706-49.614z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "hammer", + "gavel", + "rules", + "justice", + "legal" + ], + "defaultCode": 59816, + "grid": 16 + }, + { + "id": 169, + "paths": [ + "M321.008 1024c-68.246-142.008-31.902-223.378 20.55-300.044 57.44-83.956 72.244-167.066 72.244-167.066s45.154 58.7 27.092 150.508c79.772-88.8 94.824-230.28 82.782-284.464 180.314 126.012 257.376 398.856 153.522 601.066 552.372-312.532 137.398-780.172 65.154-832.85 24.082 52.676 28.648 141.85-20 185.126-82.352-312.276-285.972-376.276-285.972-376.276 24.082 161.044-87.296 337.144-194.696 468.73-3.774-64.216-7.782-108.528-41.55-169.98-7.58 116.656-96.732 211.748-120.874 328.628-32.702 158.286 24.496 274.18 241.748 396.622z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "fire", + "flame", + "hot", + "popular" + ], + "defaultCode": 59817, + "grid": 16 + }, + { + "id": 170, + "paths": [ + "M956.29 804.482l-316.29-527.024v-213.458h32c17.6 0 32-14.4 32-32s-14.4-32-32-32h-320c-17.6 0-32 14.4-32 32s14.4 32 32 32h32v213.458l-316.288 527.024c-72.442 120.734-16.512 219.518 124.288 219.518h640c140.8 0 196.73-98.784 124.29-219.518zM241.038 640l206.962-344.938v-231.062h128v231.062l206.964 344.938h-541.926z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "lab", + "beta", + "beaker", + "test", + "experiment" + ], + "defaultCode": 59818, + "grid": 16 + }, + { + "id": 171, + "paths": [ + "M896 0h-256l64 576c0 106.040-85.96 192-192 192s-192-85.96-192-192l64-576h-256l-64 576c0 247.424 200.576 448 448 448s448-200.576 448-448l-64-576zM777.874 841.874c-71.018 71.014-165.44 110.126-265.874 110.126s-194.856-39.112-265.872-110.126c-70.116-70.118-109.13-163.048-110.11-262.054l36.092-324.82h111.114l-35.224 317.010v3.99c0 70.518 27.46 136.814 77.324 186.676 49.862 49.864 116.158 77.324 186.676 77.324s136.814-27.46 186.676-77.324c49.864-49.862 77.324-116.158 77.324-186.676v-3.988l-0.44-3.962-34.782-313.050h111.114l36.090 324.818c-0.98 99.006-39.994 191.938-110.108 262.056z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "magnet", + "attract" + ], + "defaultCode": 59819, + "grid": 16 + }, + { + "id": 172, + "paths": [ + "M128 320v640c0 35.2 28.8 64 64 64h576c35.2 0 64-28.8 64-64v-640h-704zM320 896h-64v-448h64v448zM448 896h-64v-448h64v448zM576 896h-64v-448h64v448zM704 896h-64v-448h64v448z", + "M848 128h-208v-80c0-26.4-21.6-48-48-48h-224c-26.4 0-48 21.6-48 48v80h-208c-26.4 0-48 21.6-48 48v80h832v-80c0-26.4-21.6-48-48-48zM576 128h-192v-63.198h192v63.198z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "bin", + "trashcan", + "remove", + "delete", + "recycle", + "dispose" + ], + "defaultCode": 59820, + "grid": 16 + }, + { + "id": 173, + "paths": [ + "M192 1024h640l64-704h-768zM640 128v-128h-256v128h-320v192l64-64h768l64 64v-192h-320zM576 128h-128v-64h128v64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "bin", + "trashcan", + "remove", + "delete", + "recycle", + "dispose" + ], + "defaultCode": 59821, + "grid": 16 + }, + { + "id": 174, + "paths": [ + "M960 256h-256v-64c0-35.2-28.8-64-64-64h-256c-35.204 0-64 28.8-64 64v64h-256c-35.2 0-64 28.8-64 64v576c0 35.202 28.796 64 64 64h896c35.2 0 64-28.798 64-64v-576c0-35.2-28.8-64-64-64zM384 192.116c0.034-0.040 0.074-0.082 0.114-0.116h255.772c0.042 0.034 0.082 0.076 0.118 0.116v63.884h-256.004v-63.884zM960 512h-128v96c0 17.602-14.4 32-32 32h-64c-17.604 0-32-14.398-32-32v-96h-384v96c0 17.602-14.4 32-32 32h-64c-17.602 0-32-14.398-32-32v-96h-128v-64h896v64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "briefcase", + "portfolio", + "suitcase", + "work", + "job", + "employee" + ], + "defaultCode": 59822, + "grid": 16 + }, + { + "id": 175, + "paths": [ + "M768 639.968l-182.82-182.822 438.82-329.15-128.010-127.996-548.52 219.442-172.7-172.706c-49.78-49.778-119.302-61.706-154.502-26.508-35.198 35.198-23.268 104.726 26.51 154.5l172.686 172.684-219.464 548.582 127.99 128.006 329.19-438.868 182.826 182.828v255.98h127.994l63.992-191.988 191.988-63.996v-127.992l-255.98 0.004z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "airplane", + "travel", + "flight", + "plane", + "transport", + "fly", + "vacation" + ], + "defaultCode": 59823, + "grid": 16 + }, + { + "id": 176, + "paths": [ + "M1024 576l-128-256h-192v-128c0-35.2-28.8-64-64-64h-576c-35.2 0-64 28.8-64 64v512l64 64h81.166c-10.898 18.832-17.166 40.678-17.166 64 0 70.692 57.308 128 128 128s128-57.308 128-128c0-23.322-6.268-45.168-17.166-64h354.334c-10.898 18.832-17.168 40.678-17.168 64 0 70.692 57.308 128 128 128s128-57.308 128-128c0-23.322-6.27-45.168-17.168-64h81.168v-192zM704 576v-192h132.668l96 192h-228.668z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "truck", + "transit", + "transport", + "delivery", + "vehicle" + ], + "defaultCode": 59824, + "grid": 16 + }, + { + "id": 177, + "paths": [ + "M704 1024h320l-256-1024h-192l32 256h-192l32-256h-192l-256 1024h320l32-256h320l32 256zM368 640l32-256h224l32 256h-288z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "road", + "asphalt", + "travel" + ], + "defaultCode": 59825, + "grid": 16 + }, + { + "id": 178, + "paths": [ + "M416 96c0-53.018 42.98-96 96-96s96 42.982 96 96c0 53.020-42.98 96-96 96s-96-42.98-96-96z", + "M640 320l329.596-142.172-23.77-59.424-401.826 137.596h-64l-401.826-137.596-23.77 59.424 329.596 142.172v256l-131.27 424.57 59.84 22.7 185.716-415.27h27.428l185.716 415.27 59.84-22.7-131.27-424.57z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "accessibility" + ], + "defaultCode": 59826, + "grid": 16 + }, + { + "id": 179, + "paths": [ + "M1024 448h-100.924c-27.64-178.24-168.836-319.436-347.076-347.076v-100.924h-128v100.924c-178.24 27.64-319.436 168.836-347.076 347.076h-100.924v128h100.924c27.64 178.24 168.836 319.436 347.076 347.076v100.924h128v-100.924c178.24-27.64 319.436-168.836 347.076-347.076h100.924v-128zM792.822 448h-99.762c-19.284-54.55-62.51-97.778-117.060-117.060v-99.762c107.514 24.49 192.332 109.31 216.822 216.822zM512 576c-35.346 0-64-28.654-64-64s28.654-64 64-64c35.346 0 64 28.654 64 64s-28.654 64-64 64zM448 231.178v99.762c-54.55 19.282-97.778 62.51-117.060 117.060h-99.762c24.49-107.512 109.31-192.332 216.822-216.822zM231.178 576h99.762c19.282 54.55 62.51 97.778 117.060 117.060v99.762c-107.512-24.49-192.332-109.308-216.822-216.822zM576 792.822v-99.762c54.55-19.284 97.778-62.51 117.060-117.060h99.762c-24.49 107.514-109.308 192.332-216.822 216.822z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "target", + "goal", + "location", + "spot" + ], + "defaultCode": 59827, + "grid": 16 + }, + { + "id": 180, + "paths": [ + "M960 0l-448 128-448-128c0 0-4.5 51.698 0 128l448 140.090 448-140.090c4.498-76.302 0-128 0-128zM72.19 195.106c23.986 250.696 113.49 672.234 439.81 828.894 326.32-156.66 415.824-578.198 439.81-828.894l-439.81 165.358-439.81-165.358z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "shield", + "security", + "defense", + "protection", + "anti virus" + ], + "defaultCode": 59828, + "grid": 16 + }, + { + "id": 181, + "paths": [ + "M384 0l-384 512h384l-256 512 896-640h-512l384-384z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "power", + "lightning", + "bolt", + "electricity" + ], + "defaultCode": 59829, + "grid": 16 + }, + { + "id": 182, + "paths": [ + "M640 146.588v135.958c36.206 15.804 69.5 38.408 98.274 67.18 60.442 60.44 93.726 140.8 93.726 226.274s-33.286 165.834-93.726 226.274c-60.44 60.44-140.798 93.726-226.274 93.726s-165.834-33.286-226.274-93.726c-60.44-60.44-93.726-140.8-93.726-226.274s33.286-165.834 93.726-226.274c28.774-28.774 62.068-51.378 98.274-67.182v-135.956c-185.048 55.080-320 226.472-320 429.412 0 247.424 200.578 448 448 448 247.424 0 448-200.576 448-448 0-202.94-134.95-374.332-320-429.412zM448 0h128v512h-128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "switch" + ], + "defaultCode": 59830, + "grid": 16 + }, + { + "id": 183, + "paths": [ + "M1024 282.5l-90.506-90.5-178.746 178.752-101.5-101.502 178.75-178.75-90.5-90.5-178.75 178.75-114.748-114.75-86.626 86.624 512.002 512 86.624-86.622-114.752-114.752 178.752-178.75z", + "M794.040 673.79l-443.824-443.824c-95.818 114.904-204.52 292.454-129.396 445.216l-132.248 132.248c-31.112 31.114-31.112 82.024 0 113.136l14.858 14.858c31.114 31.114 82.026 31.114 113.138 0l132.246-132.244c152.764 75.132 330.318-33.566 445.226-129.39z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "power-cord", + "plugin", + "extension" + ], + "defaultCode": 59831, + "grid": 16 + }, + { + "id": 184, + "paths": [ + "M928 128h-288c0-70.692-57.306-128-128-128-70.692 0-128 57.308-128 128h-288c-17.672 0-32 14.328-32 32v832c0 17.674 14.328 32 32 32h832c17.674 0 32-14.326 32-32v-832c0-17.672-14.326-32-32-32zM512 64c35.346 0 64 28.654 64 64s-28.654 64-64 64c-35.346 0-64-28.654-64-64s28.654-64 64-64zM896 960h-768v-768h128v96c0 17.672 14.328 32 32 32h448c17.674 0 32-14.328 32-32v-96h128v768z", + "M448 858.51l-205.254-237.254 58.508-58.51 146.746 114.744 274.742-242.744 58.514 58.508z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "clipboard", + "board", + "signup", + "register", + "agreement" + ], + "defaultCode": 59832, + "grid": 16 + }, + { + "id": 185, + "paths": [ + "M384 832h640v128h-640zM384 448h640v128h-640zM384 64h640v128h-640zM192 0v256h-64v-192h-64v-64zM128 526v50h128v64h-192v-146l128-60v-50h-128v-64h192v146zM256 704v320h-192v-64h128v-64h-128v-64h128v-64h-128v-64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "list-numbered", + "options" + ], + "defaultCode": 59833, + "grid": 16 + }, + { + "id": 186, + "paths": [ + "M0 0h256v256h-256zM384 64h640v128h-640zM0 384h256v256h-256zM384 448h640v128h-640zM0 768h256v256h-256zM384 832h640v128h-640z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "list", + "todo", + "bullet", + "menu", + "options" + ], + "defaultCode": 59834, + "grid": 16 + }, + { + "id": 187, + "paths": [ + "M384 64h640v128h-640v-128zM384 448h640v128h-640v-128zM384 832h640v128h-640v-128zM0 128c0-70.692 57.308-128 128-128s128 57.308 128 128c0 70.692-57.308 128-128 128s-128-57.308-128-128zM0 512c0-70.692 57.308-128 128-128s128 57.308 128 128c0 70.692-57.308 128-128 128s-128-57.308-128-128zM0 896c0-70.692 57.308-128 128-128s128 57.308 128 128c0 70.692-57.308 128-128 128s-128-57.308-128-128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "list", + "todo", + "bullet", + "menu", + "options" + ], + "defaultCode": 59835, + "grid": 16 + }, + { + "id": 188, + "paths": [ + "M976 768h-16v-208c0-61.756-50.242-112-112-112h-272v-128h16c26.4 0 48-21.6 48-48v-160c0-26.4-21.6-48-48-48h-160c-26.4 0-48 21.6-48 48v160c0 26.4 21.6 48 48 48h16v128h-272c-61.756 0-112 50.244-112 112v208h-16c-26.4 0-48 21.6-48 48v160c0 26.4 21.6 48 48 48h160c26.4 0 48-21.6 48-48v-160c0-26.4-21.6-48-48-48h-16v-192h256v192h-16c-26.4 0-48 21.6-48 48v160c0 26.4 21.6 48 48 48h160c26.4 0 48-21.6 48-48v-160c0-26.4-21.6-48-48-48h-16v-192h256v192h-16c-26.4 0-48 21.6-48 48v160c0 26.4 21.6 48 48 48h160c26.4 0 48-21.6 48-48v-160c0-26.4-21.6-48-48-48zM192 960h-128v-128h128v128zM576 960h-128v-128h128v128zM448 256v-128h128v128h-128zM960 960h-128v-128h128v128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "tree", + "branches", + "inheritance" + ], + "defaultCode": 59836, + "grid": 16 + }, + { + "id": 189, + "paths": [ + "M64 192h896v192h-896zM64 448h896v192h-896zM64 704h896v192h-896z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "menu", + "list", + "options", + "lines", + "hamburger" + ], + "defaultCode": 59837, + "grid": 16 + }, + { + "id": 190, + "paths": [ + "M0 192h896v192h-896v-192zM0 448h896v192h-896v-192zM0 704h896v192h-896v-192z", + "M992 576l192 192 192-192z", + "M1376 512l-192-192-192 192z" + ], + "width": 1408, + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "menu", + "options", + "hamburger" + ], + "defaultCode": 59838, + "grid": 16 + }, + { + "id": 191, + "paths": [ + "M0 192h896v192h-896v-192zM0 448h896v192h-896v-192zM0 704h896v192h-896v-192z", + "M992 448l192 192 192-192z" + ], + "width": 1408, + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "menu", + "options", + "hamburger" + ], + "defaultCode": 59839, + "grid": 16 + }, + { + "id": 192, + "paths": [ + "M0 192h896v192h-896v-192zM0 448h896v192h-896v-192zM0 704h896v192h-896v-192z", + "M992 640l192-192 192 192z" + ], + "width": 1408, + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "menu", + "options", + "hamburger" + ], + "defaultCode": 59840, + "grid": 16 + }, + { + "id": 193, + "paths": [ + "M1024 657.542c0-82.090-56.678-150.9-132.996-169.48-3.242-128.7-108.458-232.062-237.862-232.062-75.792 0-143.266 35.494-186.854 90.732-24.442-31.598-62.69-51.96-105.708-51.96-73.81 0-133.642 59.874-133.642 133.722 0 6.436 0.48 12.76 1.364 18.954-11.222-2.024-22.766-3.138-34.57-3.138-106.998-0.002-193.732 86.786-193.732 193.842 0 107.062 86.734 193.848 193.73 193.848l656.262-0.012c96.138-0.184 174.008-78.212 174.008-174.446z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "cloud", + "weather" + ], + "defaultCode": 59841, + "grid": 16 + }, + { + "id": 194, + "paths": [ + "M891.004 360.060c-3.242-128.698-108.458-232.060-237.862-232.060-75.792 0-143.266 35.494-186.854 90.732-24.442-31.598-62.69-51.96-105.708-51.96-73.81 0-133.642 59.876-133.642 133.722 0 6.436 0.48 12.76 1.364 18.954-11.222-2.024-22.766-3.138-34.57-3.138-106.998-0.002-193.732 86.786-193.732 193.842 0 107.062 86.734 193.848 193.73 193.848h91.76l226.51 234.51 226.51-234.51 111.482-0.012c96.138-0.184 174.008-78.21 174.008-174.446 0-82.090-56.678-150.9-132.996-169.482zM512 832l-192-192h128v-192h128v192h128l-192 192z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "cloud-download", + "cloud", + "save", + "download" + ], + "defaultCode": 59842, + "grid": 16 + }, + { + "id": 195, + "paths": [ + "M892.268 386.49c2.444-11.11 3.732-22.648 3.732-34.49 0-88.366-71.634-160-160-160-14.222 0-28.014 1.868-41.132 5.352-24.798-77.352-97.29-133.352-182.868-133.352-87.348 0-161.054 58.336-184.326 138.17-22.742-6.622-46.792-10.17-71.674-10.17-141.384 0-256 114.616-256 256 0 141.388 114.616 256 256 256h128v192h256v-192h224c88.366 0 160-71.632 160-160 0-78.72-56.854-144.162-131.732-157.51zM576 640v192h-128v-192h-160l224-224 224 224h-160z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "cloud-upload", + "cloud", + "load", + "upload" + ], + "defaultCode": 59843, + "grid": 16 + }, + { + "id": 196, + "paths": [ + "M892.268 514.49c2.442-11.108 3.732-22.646 3.732-34.49 0-88.366-71.634-160-160-160-14.224 0-28.014 1.868-41.134 5.352-24.796-77.352-97.288-133.352-182.866-133.352-87.348 0-161.054 58.336-184.326 138.17-22.742-6.62-46.792-10.17-71.674-10.17-141.384 0-256 114.616-256 256 0 141.382 114.616 256 256 256h608c88.366 0 160-71.632 160-160 0-78.718-56.854-144.16-131.732-157.51zM416 768l-160-160 64-64 96 96 224-224 64 64-288 288z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "cloud-check", + "cloud", + "synced" + ], + "defaultCode": 59844, + "grid": 16 + }, + { + "id": 197, + "paths": [ + "M896 512h-160l-224 224-224-224h-160l-128 256v64h1024v-64l-128-256zM0 896h1024v64h-1024v-64zM576 320v-256h-128v256h-224l288 288 288-288h-224z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "download", + "save", + "store" + ], + "defaultCode": 59845, + "grid": 16 + }, + { + "id": 198, + "paths": [ + "M0 896h1024v64h-1024zM1024 768v64h-1024v-64l128-256h256v128h256v-128h256zM224 320l288-288 288 288h-224v256h-128v-256z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "upload", + "load", + "open" + ], + "defaultCode": 59846, + "grid": 16 + }, + { + "id": 199, + "paths": [ + "M736 448l-256 256-256-256h160v-384h192v384zM480 704h-480v256h960v-256h-480zM896 832h-128v-64h128v64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "download", + "save", + "store" + ], + "defaultCode": 59847, + "grid": 16 + }, + { + "id": 200, + "paths": [ + "M480 704h-480v256h960v-256h-480zM896 832h-128v-64h128v64zM224 320l256-256 256 256h-160v320h-192v-320z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "upload", + "load", + "open" + ], + "defaultCode": 59848, + "grid": 16 + }, + { + "id": 201, + "paths": [ + "M480 64c-265.096 0-480 214.904-480 480 0 265.098 214.904 480 480 480 265.098 0 480-214.902 480-480 0-265.096-214.902-480-480-480zM751.59 704c8.58-40.454 13.996-83.392 15.758-128h127.446c-3.336 44.196-13.624 87.114-30.68 128h-112.524zM208.41 384c-8.58 40.454-13.996 83.392-15.758 128h-127.444c3.336-44.194 13.622-87.114 30.678-128h112.524zM686.036 384c9.614 40.962 15.398 83.854 17.28 128h-191.316v-128h174.036zM512 320v-187.338c14.59 4.246 29.044 11.37 43.228 21.37 26.582 18.74 52.012 47.608 73.54 83.486 14.882 24.802 27.752 52.416 38.496 82.484h-155.264zM331.232 237.516c21.528-35.878 46.956-64.748 73.54-83.486 14.182-10 28.638-17.124 43.228-21.37v187.34h-155.264c10.746-30.066 23.616-57.68 38.496-82.484zM448 384v128h-191.314c1.88-44.146 7.666-87.038 17.278-128h174.036zM95.888 704c-17.056-40.886-27.342-83.804-30.678-128h127.444c1.762 44.608 7.178 87.546 15.758 128h-112.524zM256.686 576h191.314v128h-174.036c-9.612-40.96-15.398-83.854-17.278-128zM448 768v187.34c-14.588-4.246-29.044-11.372-43.228-21.37-26.584-18.74-52.014-47.61-73.54-83.486-14.882-24.804-27.75-52.418-38.498-82.484h155.266zM628.768 850.484c-21.528 35.876-46.958 64.746-73.54 83.486-14.184 9.998-28.638 17.124-43.228 21.37v-187.34h155.266c-10.746 30.066-23.616 57.68-38.498 82.484zM512 704v-128h191.314c-1.88 44.146-7.666 87.040-17.28 128h-174.034zM767.348 512c-1.762-44.608-7.178-87.546-15.758-128h112.524c17.056 40.886 27.344 83.806 30.68 128h-127.446zM830.658 320h-95.9c-18.638-58.762-44.376-110.294-75.316-151.428 42.536 20.34 81.058 47.616 114.714 81.272 21.48 21.478 40.362 44.938 56.502 70.156zM185.844 249.844c33.658-33.658 72.18-60.932 114.714-81.272-30.942 41.134-56.676 92.666-75.316 151.428h-95.898c16.138-25.218 35.022-48.678 56.5-70.156zM129.344 768h95.898c18.64 58.762 44.376 110.294 75.318 151.43-42.536-20.34-81.058-47.616-114.714-81.274-21.48-21.478-40.364-44.938-56.502-70.156zM774.156 838.156c-33.656 33.658-72.18 60.934-114.714 81.274 30.942-41.134 56.678-92.668 75.316-151.43h95.9c-16.14 25.218-35.022 48.678-56.502 70.156z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "sphere", + "globe", + "internet" + ], + "defaultCode": 59849, + "grid": 16 + }, + { + "id": 202, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 960.002c-62.958 0-122.872-13.012-177.23-36.452l233.148-262.29c5.206-5.858 8.082-13.422 8.082-21.26v-96c0-17.674-14.326-32-32-32-112.99 0-232.204-117.462-233.374-118.626-6-6.002-14.14-9.374-22.626-9.374h-128c-17.672 0-32 14.328-32 32v192c0 12.122 6.848 23.202 17.69 28.622l110.31 55.156v187.886c-116.052-80.956-192-215.432-192-367.664 0-68.714 15.49-133.806 43.138-192h116.862c8.488 0 16.626-3.372 22.628-9.372l128-128c6-6.002 9.372-14.14 9.372-22.628v-77.412c40.562-12.074 83.518-18.588 128-18.588 70.406 0 137.004 16.26 196.282 45.2-4.144 3.502-8.176 7.164-12.046 11.036-36.266 36.264-56.236 84.478-56.236 135.764s19.97 99.5 56.236 135.764c36.434 36.432 85.218 56.264 135.634 56.26 3.166 0 6.342-0.080 9.518-0.236 13.814 51.802 38.752 186.656-8.404 372.334-0.444 1.744-0.696 3.488-0.842 5.224-81.324 83.080-194.7 134.656-320.142 134.656z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "earth", + "globe", + "language", + "web", + "internet", + "sphere", + "planet" + ], + "defaultCode": 59850, + "grid": 16 + }, + { + "id": 203, + "paths": [ + "M440.236 635.766c-13.31 0-26.616-5.076-36.77-15.23-95.134-95.136-95.134-249.934 0-345.070l192-192c46.088-46.086 107.36-71.466 172.534-71.466s126.448 25.38 172.536 71.464c95.132 95.136 95.132 249.934 0 345.070l-87.766 87.766c-20.308 20.308-53.23 20.308-73.54 0-20.306-20.306-20.306-53.232 0-73.54l87.766-87.766c54.584-54.586 54.584-143.404 0-197.99-26.442-26.442-61.6-41.004-98.996-41.004s-72.552 14.562-98.996 41.006l-192 191.998c-54.586 54.586-54.586 143.406 0 197.992 20.308 20.306 20.306 53.232 0 73.54-10.15 10.152-23.462 15.23-36.768 15.23z", + "M256 1012c-65.176 0-126.45-25.38-172.534-71.464-95.134-95.136-95.134-249.934 0-345.070l87.764-87.764c20.308-20.306 53.234-20.306 73.54 0 20.308 20.306 20.308 53.232 0 73.54l-87.764 87.764c-54.586 54.586-54.586 143.406 0 197.992 26.44 26.44 61.598 41.002 98.994 41.002s72.552-14.562 98.998-41.006l192-191.998c54.584-54.586 54.584-143.406 0-197.992-20.308-20.308-20.306-53.232 0-73.54 20.306-20.306 53.232-20.306 73.54 0.002 95.132 95.134 95.132 249.932 0.002 345.068l-192.002 192c-46.090 46.088-107.364 71.466-172.538 71.466z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "link", + "chain", + "url", + "uri", + "anchor" + ], + "defaultCode": 59851, + "grid": 16 + }, + { + "id": 204, + "paths": [ + "M0 0h128v1024h-128v-1024z", + "M832 643.002c82.624 0 154.57-19.984 192-49.5v-512c-37.43 29.518-109.376 49.502-192 49.502s-154.57-19.984-192-49.502v512c37.43 29.516 109.376 49.5 192 49.5z", + "M608 32.528c-46.906-19.94-115.52-32.528-192-32.528-96.396 0-180.334 19.984-224 49.502v512c43.666-29.518 127.604-49.502 224-49.502 76.48 0 145.094 12.588 192 32.528v-512z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "flag", + "report", + "mark" + ], + "defaultCode": 59852, + "grid": 16 + }, + { + "id": 205, + "paths": [ + "M665.832 327.048l-64.952-64.922-324.81 324.742c-53.814 53.792-53.814 141.048 0 194.844 53.804 53.792 141.060 53.792 194.874 0l389.772-389.708c89.714-89.662 89.714-235.062 0-324.726-89.666-89.704-235.112-89.704-324.782 0l-409.23 409.178c-0.29 0.304-0.612 0.576-0.876 0.846-125.102 125.096-125.102 327.856 0 452.906 125.054 125.056 327.868 125.056 452.988 0 0.274-0.274 0.516-0.568 0.82-0.876l0.032 0.034 279.332-279.292-64.986-64.92-279.33 279.262c-0.296 0.268-0.564 0.57-0.846 0.844-89.074 89.058-233.98 89.058-323.076 0-89.062-89.042-89.062-233.922 0-322.978 0.304-0.304 0.604-0.582 0.888-0.846l-0.046-0.060 409.28-409.166c53.712-53.738 141.144-53.738 194.886 0 53.712 53.734 53.712 141.148 0 194.84l-389.772 389.7c-17.936 17.922-47.054 17.922-64.972 0-17.894-17.886-17.894-47.032 0-64.92l324.806-324.782z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "attachment", + "paperclip" + ], + "defaultCode": 59853, + "grid": 16 + }, + { + "id": 206, + "paths": [ + "M512 192c-223.318 0-416.882 130.042-512 320 95.118 189.958 288.682 320 512 320 223.312 0 416.876-130.042 512-320-95.116-189.958-288.688-320-512-320zM764.45 361.704c60.162 38.374 111.142 89.774 149.434 150.296-38.292 60.522-89.274 111.922-149.436 150.296-75.594 48.218-162.89 73.704-252.448 73.704-89.56 0-176.858-25.486-252.452-73.704-60.158-38.372-111.138-89.772-149.432-150.296 38.292-60.524 89.274-111.924 149.434-150.296 3.918-2.5 7.876-4.922 11.86-7.3-9.96 27.328-15.41 56.822-15.41 87.596 0 141.382 114.616 256 256 256 141.382 0 256-114.618 256-256 0-30.774-5.452-60.268-15.408-87.598 3.978 2.378 7.938 4.802 11.858 7.302v0zM512 416c0 53.020-42.98 96-96 96s-96-42.98-96-96 42.98-96 96-96 96 42.982 96 96z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "eye", + "views", + "vision", + "visit" + ], + "defaultCode": 59854, + "grid": 16 + }, + { + "id": 207, + "paths": [ + "M1024 128h-128v-128h-128v128h-128v128h128v128h128v-128h128z", + "M863.862 446.028c18.436 20.478 35.192 42.53 50.022 65.972-38.292 60.522-89.274 111.922-149.436 150.296-75.594 48.218-162.89 73.704-252.448 73.704-89.56 0-176.86-25.486-252.454-73.704-60.156-38.372-111.136-89.772-149.43-150.296 38.292-60.524 89.274-111.924 149.434-150.296 3.918-2.5 7.876-4.922 11.862-7.3-9.962 27.328-15.412 56.822-15.412 87.596 0 141.382 114.616 256 256 256 141.38 0 256-114.618 256-256 0-0.692-0.018-1.38-0.024-2.072-109.284-28.138-190.298-126.63-191.932-244.31-21.026-2.38-42.394-3.618-64.044-3.618-223.318 0-416.882 130.042-512 320 95.118 189.958 288.682 320 512 320 223.31 0 416.876-130.042 512-320-17.64-35.23-38.676-68.394-62.65-99.054-29.28 17.178-62.272 28.71-97.488 33.082zM416 320c53.020 0 96 42.982 96 96 0 53.020-42.98 96-96 96s-96-42.98-96-96 42.98-96 96-96z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "eye-plus", + "views", + "vision", + "visit" + ], + "defaultCode": 59855, + "grid": 16 + }, + { + "id": 208, + "paths": [ + "M640 128h384v128h-384v-128z", + "M870.32 320h-294.32v-124.388c-21.014-2.376-42.364-3.612-64-3.612-223.318 0-416.882 130.042-512 320 95.118 189.958 288.682 320 512 320 223.31 0 416.876-130.042 512-320-37.396-74.686-90.020-140.1-153.68-192zM416 320c53.020 0 96 42.982 96 96 0 53.020-42.98 96-96 96s-96-42.98-96-96 42.98-96 96-96zM764.448 662.296c-75.594 48.218-162.89 73.704-252.448 73.704-89.56 0-176.86-25.486-252.454-73.704-60.156-38.372-111.136-89.772-149.43-150.296 38.292-60.524 89.274-111.924 149.434-150.296 3.918-2.5 7.876-4.922 11.862-7.3-9.962 27.328-15.412 56.822-15.412 87.596 0 141.382 114.616 256 256 256 141.38 0 256-114.618 256-256 0-30.774-5.454-60.268-15.408-87.598 3.976 2.378 7.938 4.802 11.858 7.302 60.162 38.374 111.142 89.774 149.434 150.296-38.292 60.522-89.274 111.922-149.436 150.296z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "eye-minus", + "views", + "vision", + "visit" + ], + "defaultCode": 59856, + "grid": 16 + }, + { + "id": 209, + "paths": [ + "M945.942 14.058c-18.746-18.744-49.136-18.744-67.882 0l-202.164 202.164c-51.938-15.754-106.948-24.222-163.896-24.222-223.318 0-416.882 130.042-512 320 41.122 82.124 100.648 153.040 173.022 207.096l-158.962 158.962c-18.746 18.746-18.746 49.136 0 67.882 9.372 9.374 21.656 14.060 33.94 14.060s24.568-4.686 33.942-14.058l864-864c18.744-18.746 18.744-49.138 0-67.884zM416 320c42.24 0 78.082 27.294 90.92 65.196l-121.724 121.724c-37.902-12.838-65.196-48.68-65.196-90.92 0-53.020 42.98-96 96-96zM110.116 512c38.292-60.524 89.274-111.924 149.434-150.296 3.918-2.5 7.876-4.922 11.862-7.3-9.962 27.328-15.412 56.822-15.412 87.596 0 54.89 17.286 105.738 46.7 147.418l-60.924 60.924c-52.446-36.842-97.202-83.882-131.66-138.342z", + "M768 442c0-27.166-4.256-53.334-12.102-77.898l-321.808 321.808c24.568 7.842 50.742 12.090 77.91 12.090 141.382 0 256-114.618 256-256z", + "M830.026 289.974l-69.362 69.362c1.264 0.786 2.53 1.568 3.786 2.368 60.162 38.374 111.142 89.774 149.434 150.296-38.292 60.522-89.274 111.922-149.436 150.296-75.594 48.218-162.89 73.704-252.448 73.704-38.664 0-76.902-4.76-113.962-14.040l-76.894 76.894c59.718 21.462 123.95 33.146 190.856 33.146 223.31 0 416.876-130.042 512-320-45.022-89.916-112.118-166.396-193.974-222.026z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "eye-blocked", + "views", + "vision", + "visit", + "banned", + "blocked", + "forbidden", + "private" + ], + "defaultCode": 59857, + "grid": 16 + }, + { + "id": 210, + "paths": [ + "M192 0v1024l320-320 320 320v-1024z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "bookmark", + "ribbon" + ], + "defaultCode": 59858, + "grid": 16 + }, + { + "id": 211, + "paths": [ + "M256 128v896l320-320 320 320v-896zM768 0h-640v896l64-64v-768h576z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "bookmarks", + "ribbons" + ], + "defaultCode": 59859, + "grid": 16 + }, + { + "id": 212, + "paths": [ + "M512 832c35.346 0 64 28.654 64 64v64c0 35.346-28.654 64-64 64s-64-28.654-64-64v-64c0-35.346 28.654-64 64-64zM512 192c-35.346 0-64-28.654-64-64v-64c0-35.346 28.654-64 64-64s64 28.654 64 64v64c0 35.346-28.654 64-64 64zM960 448c35.346 0 64 28.654 64 64s-28.654 64-64 64h-64c-35.348 0-64-28.654-64-64s28.652-64 64-64h64zM192 512c0 35.346-28.654 64-64 64h-64c-35.346 0-64-28.654-64-64s28.654-64 64-64h64c35.346 0 64 28.654 64 64zM828.784 738.274l45.256 45.258c24.992 24.99 24.992 65.516 0 90.508-24.994 24.992-65.518 24.992-90.51 0l-45.256-45.256c-24.992-24.99-24.992-65.516 0-90.51 24.994-24.992 65.518-24.992 90.51 0zM195.216 285.726l-45.256-45.256c-24.994-24.994-24.994-65.516 0-90.51s65.516-24.994 90.51 0l45.256 45.256c24.994 24.994 24.994 65.516 0 90.51s-65.516 24.994-90.51 0zM828.784 285.726c-24.992 24.992-65.516 24.992-90.51 0-24.992-24.994-24.992-65.516 0-90.51l45.256-45.254c24.992-24.994 65.516-24.994 90.51 0 24.992 24.994 24.992 65.516 0 90.51l-45.256 45.254zM195.216 738.274c24.992-24.992 65.518-24.992 90.508 0 24.994 24.994 24.994 65.52 0 90.51l-45.254 45.256c-24.994 24.992-65.516 24.992-90.51 0s-24.994-65.518 0-90.508l45.256-45.258z", + "M512 256c-141.384 0-256 114.616-256 256 0 141.382 114.616 256 256 256 141.382 0 256-114.618 256-256 0-141.384-114.616-256-256-256zM512 672c-88.366 0-160-71.634-160-160s71.634-160 160-160 160 71.634 160 160-71.634 160-160 160z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "sun", + "weather" + ], + "defaultCode": 59860, + "grid": 16 + }, + { + "id": 213, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM128 512c0-212.078 171.922-384 384-384v768c-212.078 0-384-171.922-384-384z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "contrast" + ], + "defaultCode": 59861, + "grid": 16 + }, + { + "id": 214, + "paths": [ + "M512 256c-141.384 0-256 114.616-256 256s114.616 256 256 256 256-114.616 256-256-114.616-256-256-256zM512 672v-320c88.224 0 160 71.776 160 160s-71.776 160-160 160zM512 832c35.346 0 64 28.654 64 64v64c0 35.346-28.654 64-64 64s-64-28.654-64-64v-64c0-35.346 28.654-64 64-64zM512 192c-35.346 0-64-28.654-64-64v-64c0-35.346 28.654-64 64-64s64 28.654 64 64v64c0 35.346-28.654 64-64 64zM960 448c35.346 0 64 28.654 64 64s-28.654 64-64 64h-64c-35.346 0-64-28.654-64-64s28.654-64 64-64h64zM192 512c0 35.346-28.654 64-64 64h-64c-35.346 0-64-28.654-64-64s28.654-64 64-64h64c35.346 0 64 28.654 64 64zM828.784 738.274l45.256 45.256c24.992 24.992 24.992 65.516 0 90.51-24.994 24.992-65.518 24.992-90.51 0l-45.256-45.256c-24.992-24.992-24.992-65.516 0-90.51 24.994-24.992 65.518-24.992 90.51 0zM195.216 285.726l-45.256-45.256c-24.994-24.994-24.994-65.516 0-90.51s65.516-24.994 90.51 0l45.256 45.256c24.994 24.994 24.994 65.516 0 90.51s-65.516 24.994-90.51 0zM828.784 285.726c-24.992 24.992-65.516 24.992-90.51 0-24.992-24.994-24.992-65.516 0-90.51l45.256-45.254c24.992-24.994 65.516-24.994 90.51 0 24.992 24.994 24.992 65.516 0 90.51l-45.256 45.254zM195.216 738.274c24.992-24.992 65.516-24.992 90.508 0 24.994 24.994 24.994 65.518 0 90.51l-45.254 45.256c-24.994 24.992-65.516 24.992-90.51 0-24.994-24.994-24.994-65.518 0-90.51l45.256-45.256z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "brightness-contrast" + ], + "defaultCode": 59862, + "grid": 16 + }, + { + "id": 215, + "paths": [ + "M1024 397.050l-353.78-51.408-158.22-320.582-158.216 320.582-353.784 51.408 256 249.538-60.432 352.352 316.432-166.358 316.432 166.358-60.434-352.352 256.002-249.538zM512 753.498l-223.462 117.48 42.676-248.83-180.786-176.222 249.84-36.304 111.732-226.396 111.736 226.396 249.836 36.304-180.788 176.222 42.678 248.83-223.462-117.48z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "star-empty", + "rate", + "star", + "favorite", + "bookmark" + ], + "defaultCode": 59863, + "grid": 16 + }, + { + "id": 216, + "paths": [ + "M1024 397.050l-353.78-51.408-158.22-320.582-158.216 320.582-353.784 51.408 256 249.538-60.432 352.352 316.432-166.358 316.432 166.358-60.434-352.352 256.002-249.538zM512 753.498l-0.942 0.496 0.942-570.768 111.736 226.396 249.836 36.304-180.788 176.222 42.678 248.83-223.462-117.48z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "star-half", + "rate", + "star" + ], + "defaultCode": 59864, + "grid": 16 + }, + { + "id": 217, + "paths": [ + "M1024 397.050l-353.78-51.408-158.22-320.582-158.216 320.582-353.784 51.408 256 249.538-60.432 352.352 316.432-166.358 316.432 166.358-60.434-352.352 256.002-249.538z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "star-full", + "rate", + "star", + "favorite", + "bookmark" + ], + "defaultCode": 59865, + "grid": 16 + }, + { + "id": 218, + "paths": [ + "M755.188 64c-107.63 0-200.258 87.554-243.164 179-42.938-91.444-135.578-179-243.216-179-148.382 0-268.808 120.44-268.808 268.832 0 301.846 304.5 380.994 512.022 679.418 196.154-296.576 511.978-387.206 511.978-679.418 0-148.392-120.43-268.832-268.812-268.832z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "heart", + "like", + "love", + "favorite" + ], + "defaultCode": 59866, + "grid": 16 + }, + { + "id": 219, + "paths": [ + "M755.188 64c148.382 0 268.812 120.44 268.812 268.832 0 292.21-315.824 382.842-511.978 679.418-207.522-298.424-512.022-377.572-512.022-679.418 0-148.392 120.426-268.832 268.808-268.832 60.354 0 115.99 27.53 160.796 67.834l-77.604 124.166 224 128-128 320 352-384-224-128 61.896-92.846c35.42-21.768 75.21-35.154 117.292-35.154z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "heart-broken", + "heart", + "like", + "love" + ], + "defaultCode": 59867, + "grid": 16 + }, + { + "id": 220, + "paths": [ + "M576 96c0 53.019-42.981 96-96 96s-96-42.981-96-96c0-53.019 42.981-96 96-96s96 42.981 96 96z", + "M576 256h-192c-35.346 0-64 28.654-64 64v320h64v384h80v-384h32v384h80v-384h64v-320c0-35.346-28.652-64-64-64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "man", + "male", + "gender", + "sex" + ], + "defaultCode": 59868, + "grid": 16 + }, + { + "id": 221, + "paths": [ + "M576 96c0 53.019-42.981 96-96 96s-96-42.981-96-96c0-53.019 42.981-96 96-96s96 42.981 96 96z", + "M719 512l49-35.5-133.286-206.116c-5.92-8.98-15.958-14.384-26.714-14.384h-256c-10.756 0-20.792 5.404-26.714 14.384l-133.286 206.116 49 35.5 110.644-143.596 38.458 89.74-134.102 245.856h122.666l21.334 320h64v-320h32v320h64l21.334-320h122.666l-134.104-245.858 38.458-89.74 110.646 143.598z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "woman", + "female", + "gender", + "sex" + ], + "defaultCode": 59869, + "grid": 16 + }, + { + "id": 222, + "paths": [ + "M256 96c0 53.019-42.981 96-96 96s-96-42.981-96-96c0-53.019 42.981-96 96-96s96 42.981 96 96z", + "M832 96c0 53.019-42.981 96-96 96s-96-42.981-96-96c0-53.019 42.981-96 96-96s96 42.981 96 96z", + "M256 256h-192c-35.346 0-64 28.654-64 64v320h64v384h80v-384h32v384h80v-384h64v-320c0-35.346-28.652-64-64-64z", + "M975 512l49-35.5-133.286-206.116c-5.92-8.98-15.958-14.384-26.714-14.384h-256c-10.756 0-20.792 5.404-26.714 14.384l-133.286 206.116 49 35.5 110.644-143.596 38.458 89.74-134.102 245.856h122.666l21.334 320h64v-320h32v320h64l21.334-320h122.666l-134.104-245.858 38.458-89.74 110.646 143.598z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "man-woman", + "toilet", + "bathroom", + "sex", + "gender" + ], + "defaultCode": 59870, + "grid": 16 + }, + { + "id": 223, + "paths": [ + "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM512 598.76c115.95 0 226.23-30.806 320-84.92-14.574 178.438-153.128 318.16-320 318.16-166.868 0-305.422-139.872-320-318.304 93.77 54.112 204.050 85.064 320 85.064zM256 352c0-53.019 28.654-96 64-96s64 42.981 64 96c0 53.019-28.654 96-64 96s-64-42.981-64-96zM640 352c0-53.019 28.654-96 64-96s64 42.981 64 96c0 53.019-28.654 96-64 96s-64-42.981-64-96z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "happy", + "emoticon", + "smiley", + "face" + ], + "defaultCode": 59871, + "grid": 16 + }, + { + "id": 224, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM704 256c35.348 0 64 42.98 64 96s-28.652 96-64 96-64-42.98-64-96 28.652-96 64-96zM320 256c35.346 0 64 42.98 64 96s-28.654 96-64 96-64-42.98-64-96 28.654-96 64-96zM512 896c-166.868 0-305.422-139.872-320-318.304 93.77 54.114 204.050 85.064 320 85.064s226.23-30.806 320-84.92c-14.574 178.438-153.128 318.16-320 318.16z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "happy", + "emoticon", + "smiley", + "face" + ], + "defaultCode": 59872, + "grid": 16 + }, + { + "id": 225, + "paths": [ + "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM256 320c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM640 320c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM704.098 627.26l82.328 49.396c-55.962 93.070-157.916 155.344-274.426 155.344s-218.464-62.274-274.426-155.344l82.328-49.396c39.174 65.148 110.542 108.74 192.098 108.74s152.924-43.592 192.098-108.74z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "smile", + "emoticon", + "smiley", + "face" + ], + "defaultCode": 59873, + "grid": 16 + }, + { + "id": 226, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM704 256c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64 28.654-64 64-64zM320 256c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64 28.654-64 64-64zM512 832c-116.51 0-218.464-62.274-274.426-155.344l82.328-49.396c39.174 65.148 110.542 108.74 192.098 108.74s152.924-43.592 192.098-108.74l82.328 49.396c-55.962 93.070-157.916 155.344-274.426 155.344z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "smile", + "emoticon", + "smiley", + "face" + ], + "defaultCode": 59874, + "grid": 16 + }, + { + "id": 227, + "paths": [ + "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM256 320c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM640 320c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM768 576v64h-64v96c0 53.020-42.98 96-96 96s-96-42.98-96-96v-96h-256v-64h512z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "tongue", + "emoticon", + "smiley", + "face" + ], + "defaultCode": 59875, + "grid": 16 + }, + { + "id": 228, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM320 256c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64 28.654-64 64-64zM768 640h-64v96c0 53.020-42.98 96-96 96s-96-42.98-96-96v-96h-256v-64h512v64zM704 384c-35.346 0-64-28.654-64-64s28.654-64 64-64 64 28.654 64 64-28.654 64-64 64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "tongue", + "emoticon", + "smiley", + "face" + ], + "defaultCode": 59876, + "grid": 16 + }, + { + "id": 229, + "paths": [ + "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM256 320c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM640 320c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM319.902 780.74l-82.328-49.396c55.962-93.070 157.916-155.344 274.426-155.344 116.508 0 218.462 62.274 274.426 155.344l-82.328 49.396c-39.174-65.148-110.542-108.74-192.098-108.74-81.558 0-152.924 43.592-192.098 108.74z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "sad", + "emoticon", + "smiley", + "face" + ], + "defaultCode": 59877, + "grid": 16 + }, + { + "id": 230, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM704 256c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64 28.654-64 64-64zM320 256c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64 28.654-64 64-64zM704.098 780.74c-39.174-65.148-110.544-108.74-192.098-108.74-81.556 0-152.924 43.592-192.098 108.74l-82.328-49.396c55.96-93.070 157.916-155.344 274.426-155.344 116.508 0 218.464 62.274 274.426 155.344l-82.328 49.396z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "sad", + "emoticon", + "smiley", + "face" + ], + "defaultCode": 59878, + "grid": 16 + }, + { + "id": 231, + "paths": [ + "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM542.74 711.028c140.248-27.706 249.11-91.542 288.454-176.594-21.654 167.956-161.518 297.566-330.85 297.566-119.242 0-223.858-64.282-282.892-160.948 70.41 55.058 194.534 65.808 325.288 39.976zM640 352c0-53.019 28.654-96 64-96s64 42.981 64 96c0 53.019-28.654 96-64 96s-64-42.981-64-96zM352 371.5c-41.796 0-77.334 15.656-90.516 37.5-3.54-5.866-5.484-32.174-5.484-38.75 0-31.066 42.98-56.25 96-56.25s96 25.184 96 56.25c0 6.576-1.944 32.884-5.484 38.75-13.182-21.844-48.72-37.5-90.516-37.5z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "wink", + "emoticon", + "smiley", + "face" + ], + "defaultCode": 59879, + "grid": 16 + }, + { + "id": 232, + "paths": [ + "M512 0c-282.77 0-512 229.228-512 512 0 282.77 229.228 512 512 512 282.77 0 512-229.23 512-512 0-282.772-229.23-512-512-512zM704 256c35.346 0 64 42.98 64 96s-28.654 96-64 96-64-42.98-64-96 28.654-96 64-96zM352 312.062c59.646 0 102 22.332 102 57.282 0 7.398 3.812 42.994-0.17 49.594-14.828-24.576-54.81-42.188-101.83-42.188s-87.002 17.612-101.83 42.188c-3.982-6.6-0.17-42.196-0.17-49.594 0-34.95 42.354-57.282 102-57.282zM500.344 832c-119.242 0-223.858-64.28-282.892-160.952 70.41 55.060 194.534 65.81 325.288 39.978 140.248-27.706 249.11-91.542 288.454-176.594-21.654 167.96-161.518 297.568-330.85 297.568z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "wink", + "emoticon", + "smiley", + "face" + ], + "defaultCode": 59880, + "grid": 16 + }, + { + "id": 233, + "paths": [ + "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM192 512v64c0 140.8 115.2 256 256 256h128c140.8 0 256-115.2 256-256v-64h-640zM384 756.988c-26.538-9.458-50.924-24.822-71.544-45.446-36.406-36.402-56.456-84.54-56.456-135.542h128v180.988zM576 768h-128v-192h128v192zM711.544 711.542c-20.624 20.624-45.010 35.988-71.544 45.446v-180.988h128c0 51.002-20.048 99.14-56.456 135.542zM225.352 384c0.002 0 0 0 0 0 9.768 0 18.108-7.056 19.724-16.69 6.158-36.684 37.668-63.31 74.924-63.31s68.766 26.626 74.924 63.31c1.616 9.632 9.956 16.69 19.722 16.69 9.768 0 18.108-7.056 19.724-16.688 1.082-6.436 1.628-12.934 1.628-19.312 0-63.962-52.038-116-116-116s-116 52.038-116 116c0 6.378 0.548 12.876 1.628 19.312 1.62 9.632 9.96 16.688 19.726 16.688zM609.352 384c0.002 0 0 0 0 0 9.77 0 18.112-7.056 19.724-16.69 6.158-36.684 37.668-63.31 74.924-63.31s68.766 26.626 74.924 63.31c1.616 9.632 9.958 16.69 19.722 16.69s18.108-7.056 19.722-16.688c1.082-6.436 1.628-12.934 1.628-19.312 0-63.962-52.038-116-116-116s-116 52.038-116 116c0 6.378 0.544 12.876 1.626 19.312 1.624 9.632 9.964 16.688 19.73 16.688z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "grin", + "emoticon", + "smiley", + "face" + ], + "defaultCode": 59881, + "grid": 16 + }, + { + "id": 234, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.226 512 512 512c282.77 0 512-229.23 512-512s-229.23-512-512-512zM704 236c63.962 0 116 52.038 116 116 0 6.378-0.546 12.876-1.628 19.312-1.618 9.632-9.958 16.688-19.724 16.688s-18.108-7.056-19.722-16.69c-6.16-36.684-37.67-53.31-74.926-53.31s-68.766 16.626-74.924 53.31c-1.616 9.632-9.956 16.69-19.722 16.69-0.002 0 0 0-0.002 0-9.766 0-18.106-7.056-19.722-16.688-1.084-6.436-1.63-12.934-1.63-19.312 0-63.962 52.038-116 116-116zM320 236c63.962 0 116 52.038 116 116 0 6.378-0.548 12.876-1.628 19.312-1.618 9.632-9.956 16.688-19.724 16.688s-18.106-7.056-19.722-16.69c-6.16-36.684-37.67-53.31-74.926-53.31s-68.766 16.626-74.924 53.31c-1.616 9.632-9.956 16.69-19.722 16.69 0 0 0 0 0 0-9.766 0-18.106-7.056-19.724-16.688-1.082-6.436-1.63-12.934-1.63-19.312 0-63.962 52.038-116 116-116zM192 576h192v247.846c-110.094-28.606-192-129.124-192-247.846zM448 832v-256h128v256h-128zM640 823.846v-247.846h192c0 118.722-81.904 219.24-192 247.846z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "grin", + "emoticon", + "smiley", + "face" + ], + "defaultCode": 59882, + "grid": 16 + }, + { + "id": 235, + "paths": [ + "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM800 256c17.6 0 32 14.4 32 32v96c0 35.2-28.8 64-64 64h-128c-35.2 0-64-28.8-64-64h-128c0 35.2-28.8 64-64 64h-128c-35.2 0-64-28.8-64-64v-96c0-17.6 14.4-32 32-32h192c17.6 0 32 14.4 32 32v32h128v-32c0-17.6 14.4-32 32-32h192zM512 768c93.208 0 174.772-49.818 219.546-124.278l54.88 32.934c-55.966 93.070-157.916 155.344-274.426 155.344-48.458 0-94.384-10.796-135.54-30.082l33.162-55.278c31.354 13.714 65.964 21.36 102.378 21.36z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "cool", + "emoticon", + "smiley", + "face" + ], + "defaultCode": 59883, + "grid": 16 + }, + { + "id": 236, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.226 512 512 512c282.77 0 512-229.23 512-512s-229.23-512-512-512zM512 832c-48.458 0-94.384-10.796-135.542-30.082l33.162-55.276c31.356 13.712 65.966 21.358 102.38 21.358 93.208 0 174.772-49.818 219.542-124.278l54.882 32.934c-55.964 93.070-157.914 155.344-274.424 155.344zM832 384c0 35.2-28.8 64-64 64h-128c-35.2 0-64-28.8-64-64h-128c0 35.2-28.8 64-64 64h-128c-35.2 0-64-28.8-64-64v-96c0-17.6 14.4-32 32-32h192c17.6 0 32 14.4 32 32v32h128v-32c0-17.6 14.4-32 32-32h192c17.6 0 32 14.4 32 32v96z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "cool", + "emoticon", + "smiley", + "face" + ], + "defaultCode": 59884, + "grid": 16 + }, + { + "id": 237, + "paths": [ + "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM704.098 780.74c-39.174-65.148-110.544-108.74-192.098-108.74-81.556 0-152.924 43.592-192.098 108.74l-82.328-49.396c55.96-93.070 157.916-155.344 274.426-155.344 116.508 0 218.464 62.274 274.426 155.344l-82.328 49.396zM767.042 280.24c4.284 17.144-6.14 34.518-23.282 38.804-17.626 4.45-38.522 12.12-56.936 21.35 10.648 11.43 17.174 26.752 17.174 43.606 0 35.346-28.654 64-64 64s-64-28.654-64-64c0-1.17 0.036-2.33 0.098-3.484 2.032-47.454 45.212-78.946 81.592-97.138 34.742-17.37 69.102-26.060 70.548-26.422 17.146-4.288 34.518 6.138 38.806 23.284zM256.958 280.24c4.288-17.146 21.66-27.572 38.806-23.284 1.446 0.362 35.806 9.052 70.548 26.422 36.38 18.192 79.56 49.684 81.592 97.138 0.062 1.154 0.098 2.314 0.098 3.484 0 35.346-28.654 64-64 64s-64-28.654-64-64c0-16.854 6.526-32.176 17.174-43.606-18.414-9.23-39.31-16.9-56.936-21.35-17.142-4.286-27.566-21.66-23.282-38.804z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "angry", + "emoticon", + "smiley", + "face", + "rage" + ], + "defaultCode": 59885, + "grid": 16 + }, + { + "id": 238, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM576.094 380.516c2.032-47.454 45.21-78.948 81.592-97.138 34.742-17.372 69.104-26.060 70.548-26.422 17.146-4.288 34.52 6.138 38.806 23.284s-6.138 34.518-23.284 38.806c-17.624 4.45-38.522 12.12-56.936 21.35 10.648 11.43 17.174 26.752 17.174 43.606 0 35.346-28.654 64-64 64s-64-28.654-64-64c0.002-1.17 0.038-2.332 0.1-3.486zM256.958 280.24c4.288-17.146 21.66-27.572 38.806-23.284 1.446 0.362 35.806 9.052 70.548 26.422 36.38 18.192 79.56 49.684 81.592 97.138 0.062 1.154 0.098 2.314 0.098 3.484 0 35.346-28.654 64-64 64s-64-28.654-64-64c0-16.854 6.526-32.176 17.174-43.606-18.414-9.23-39.31-16.9-56.936-21.35-17.142-4.286-27.566-21.66-23.282-38.804zM704.098 780.74c-39.174-65.148-110.544-108.74-192.098-108.74-81.556 0-152.924 43.592-192.098 108.74l-82.328-49.396c55.96-93.070 157.916-155.344 274.426-155.344 116.508 0 218.464 62.274 274.426 155.344l-82.328 49.396z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "angry", + "emoticon", + "smiley", + "face", + "rage" + ], + "defaultCode": 59886, + "grid": 16 + }, + { + "id": 239, + "paths": [ + "M639.996 448c-35.346 0-64-28.654-63.998-64.002 0-1.17 0.036-2.33 0.098-3.484 2.032-47.454 45.212-78.946 81.592-97.138 34.742-17.37 69.102-26.060 70.548-26.422 17.146-4.288 34.518 6.138 38.806 23.284 4.284 17.146-6.14 34.518-23.284 38.806-17.626 4.45-38.522 12.12-56.936 21.35 10.648 11.43 17.174 26.752 17.174 43.606 0 35.346-28.654 64-64 64zM280.242 319.044c-17.144-4.286-27.568-21.66-23.282-38.804 4.286-17.146 21.66-27.572 38.806-23.284 1.444 0.362 35.806 9.050 70.548 26.422 36.382 18.19 79.56 49.684 81.592 97.138 0.062 1.154 0.098 2.316 0.098 3.484 0 35.346-28.654 64-64 64s-64-28.654-64-64c0-16.854 6.526-32.176 17.174-43.606-18.414-9.23-39.312-16.9-56.936-21.35zM512 736c81.554 0 152.924-43.592 192.098-108.74l82.328 49.396c-55.962 93.070-157.916 155.344-274.426 155.344s-218.464-62.274-274.426-155.344l82.328-49.396c39.174 65.148 110.542 108.74 192.098 108.74zM1024 64c0-45.516-9.524-88.8-26.652-128-33.576 76.836-96.448 137.932-174.494 169.178-86.194-65.96-193.936-105.178-310.854-105.178s-224.66 39.218-310.854 105.178c-78.048-31.246-140.918-92.342-174.494-169.178-17.128 39.2-26.652 82.484-26.652 128 0 73.574 24.85 141.328 66.588 195.378-42.37 74.542-66.588 160.75-66.588 252.622 0 282.77 229.23 512 512 512s512-229.23 512-512c0-91.872-24.218-178.080-66.588-252.622 41.738-54.050 66.588-121.804 66.588-195.378zM512 928c-229.75 0-416-186.25-416-416s186.25-416 416-416 416 186.25 416 416-186.25 416-416 416z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "evil", + "emoticon", + "smiley", + "face" + ], + "defaultCode": 59887, + "grid": 16 + }, + { + "id": 240, + "paths": [ + "M1024 64c0-45.516-9.524-88.8-26.652-128-33.576 76.836-96.448 137.932-174.494 169.178-86.194-65.96-193.936-105.178-310.854-105.178s-224.66 39.218-310.854 105.178c-78.048-31.246-140.918-92.342-174.494-169.178-17.128 39.2-26.652 82.484-26.652 128 0 73.574 24.85 141.328 66.588 195.378-42.37 74.542-66.588 160.75-66.588 252.622 0 282.77 229.23 512 512 512s512-229.23 512-512c0-91.872-24.218-178.080-66.588-252.622 41.738-54.050 66.588-121.804 66.588-195.378zM576.094 380.516c2.032-47.454 45.21-78.948 81.592-97.138 34.742-17.372 69.104-26.060 70.548-26.422 17.146-4.288 34.52 6.138 38.806 23.284s-6.138 34.518-23.284 38.806c-17.624 4.45-38.522 12.12-56.936 21.35 10.648 11.43 17.174 26.752 17.174 43.606 0 35.346-28.654 64-64 64s-64-28.654-64-64c0.002-1.17 0.038-2.332 0.1-3.486zM256.958 280.24c4.288-17.146 21.66-27.572 38.806-23.284 1.446 0.362 35.806 9.052 70.548 26.422 36.38 18.192 79.56 49.684 81.592 97.138 0.062 1.154 0.098 2.314 0.098 3.484 0 35.346-28.654 64-64 64s-64-28.654-64-64c0-16.854 6.526-32.176 17.174-43.606-18.414-9.23-39.31-16.9-56.936-21.35-17.142-4.286-27.566-21.66-23.282-38.804zM512 832c-116.51 0-218.464-62.274-274.426-155.344l82.328-49.396c39.174 65.148 110.542 108.74 192.098 108.74 81.554 0 152.924-43.592 192.098-108.74l82.328 49.396c-55.962 93.070-157.916 155.344-274.426 155.344z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "evil", + "emoticon", + "smiley", + "face" + ], + "defaultCode": 59888, + "grid": 16 + }, + { + "id": 241, + "paths": [ + "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM384 704c0-70.692 57.308-128 128-128s128 57.308 128 128c0 70.692-57.308 128-128 128s-128-57.308-128-128zM640 352c0-53.019 28.654-96 64-96s64 42.981 64 96c0 53.019-28.654 96-64 96s-64-42.981-64-96zM256 352c0-53.019 28.654-96 64-96s64 42.981 64 96c0 53.019-28.654 96-64 96s-64-42.981-64-96z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "shocked", + "emoticon", + "smiley", + "face" + ], + "defaultCode": 59889, + "grid": 16 + }, + { + "id": 242, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM320 448c-35.346 0-64-42.98-64-96s28.654-96 64-96 64 42.98 64 96-28.654 96-64 96zM512 832c-70.692 0-128-57.308-128-128s57.308-128 128-128c70.692 0 128 57.308 128 128s-57.308 128-128 128zM704 448c-35.346 0-64-42.98-64-96s28.654-96 64-96 64 42.98 64 96-28.654 96-64 96z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "shocked", + "emoticon", + "smiley", + "face" + ], + "defaultCode": 59890, + "grid": 16 + }, + { + "id": 243, + "paths": [ + "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416z", + "M384 416c0 17.673-14.327 32-32 32s-32-14.327-32-32c0-17.673 14.327-32 32-32s32 14.327 32 32z", + "M352 320c53.020 0 96 42.98 96 96s-42.98 96-96 96-96-42.98-96-96 42.98-96 96-96zM352 256c-88.224 0-160 71.776-160 160s71.776 160 160 160 160-71.776 160-160-71.776-160-160-160v0z", + "M704 416c0 17.673-14.327 32-32 32s-32-14.327-32-32c0-17.673 14.327-32 32-32s32 14.327 32 32z", + "M672 320c53.020 0 96 42.98 96 96s-42.98 96-96 96-96-42.98-96-96 42.98-96 96-96zM672 256c-88.224 0-160 71.776-160 160s71.776 160 160 160 160-71.776 160-160-71.776-160-160-160v0z", + "M384 704h256v64h-256v-64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "baffled", + "emoticon", + "smiley", + "shocked", + "face" + ], + "defaultCode": 59891, + "grid": 16 + }, + { + "id": 244, + "paths": [ + "M384 416c0 17.674-14.326 32-32 32s-32-14.326-32-32 14.326-32 32-32 32 14.326 32 32z", + "M704 416c0 17.674-14.326 32-32 32s-32-14.326-32-32 14.326-32 32-32 32 14.326 32 32z", + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM256 416c0-53.020 42.98-96 96-96s96 42.98 96 96-42.98 96-96 96-96-42.98-96-96zM640 768h-256v-64h256v64zM672 512c-53.020 0-96-42.98-96-96s42.98-96 96-96 96 42.98 96 96-42.98 96-96 96z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "baffled", + "emoticon", + "smiley", + "shocked", + "face" + ], + "defaultCode": 59892, + "grid": 16 + }, + { + "id": 245, + "paths": [ + "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM256 320c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM640 320c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM726.106 640h64.864c9.246 72.506-32.452 144.53-103.958 170.56-82.904 30.176-174.9-12.716-205.080-95.616-18.108-49.744-73.306-75.482-123.048-57.372-45.562 16.588-70.956 64.298-60.988 110.424h-64.86c-9.242-72.508 32.45-144.528 103.956-170.56 82.904-30.178 174.902 12.716 205.082 95.614 18.104 49.748 73.306 75.482 123.044 57.372 45.562-16.584 70.956-64.298 60.988-110.422z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "confused", + "emoticon", + "smiley", + "face", + "bewildered" + ], + "defaultCode": 59893, + "grid": 16 + }, + { + "id": 246, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.226 512 512 512c282.77 0 512-229.23 512-512s-229.23-512-512-512zM704 256c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64c0-35.346 28.654-64 64-64zM320 256c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64c0-35.346 28.654-64 64-64zM687.010 810.56c-82.902 30.18-174.9-12.712-205.080-95.614-18.108-49.742-73.306-75.478-123.048-57.372-45.562 16.588-70.958 64.296-60.988 110.424h-64.86c-9.244-72.508 32.45-144.532 103.956-170.56 82.904-30.18 174.902 12.712 205.082 95.614 18.108 49.742 73.306 75.476 123.046 57.37 45.562-16.584 70.958-64.294 60.988-110.422h64.864c9.24 72.506-32.454 144.532-103.96 170.56z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "confused", + "emoticon", + "smiley", + "face", + "bewildered" + ], + "defaultCode": 59894, + "grid": 16 + }, + { + "id": 247, + "paths": [ + "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM256 320c0 35.346 28.654 64 64 64s64-28.654 64-64-28.654-64-64-64-64 28.654-64 64zM640 320c0 35.346 28.654 64 64 64s64-28.654 64-64-28.654-64-64-64-64 28.654-64 64zM384 704h256v64h-256v-64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "neutral", + "emoticon", + "smiley", + "face" + ], + "defaultCode": 59895, + "grid": 16 + }, + { + "id": 248, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.226 512 512 512c282.77 0 512-229.23 512-512s-229.23-512-512-512zM640 768h-256v-64h256v64zM704 256c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64c0-35.346 28.654-64 64-64zM320 256c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64c0-35.346 28.654-64 64-64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "neutral", + "emoticon", + "smiley", + "face" + ], + "defaultCode": 59896, + "grid": 16 + }, + { + "id": 249, + "paths": [ + "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM256 320c0-35.346 28.654-64 64-64s64 28.654 64 64-28.654 64-64 64-64-28.654-64-64zM640 320c0-35.346 28.654-64 64-64s64 28.654 64 64-28.654 64-64 64-64-28.654-64-64z", + "M675.882 540.118c-37.49-37.49-98.276-37.49-135.766 0s-37.49 98.276 0 135.766c1.204 1.204 2.434 2.368 3.684 3.492 86.528 78.512 288.2-1.842 288.2-103.376-62 40-110.45 9.786-156.118-35.882z", + "M348.118 540.118c37.49-37.49 98.276-37.49 135.766 0s37.49 98.276 0 135.766c-1.204 1.204-2.434 2.368-3.684 3.492-86.528 78.512-288.2-1.842-288.2-103.376 62 40 110.45 9.786 156.118-35.882z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "hipster", + "emoticon", + "smiley", + "mustache", + "face" + ], + "defaultCode": 59897, + "grid": 16 + }, + { + "id": 250, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM704 256c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64 28.654-64 64-64zM320 256c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64 28.654-64 64-64zM543.8 679.376c-1.25-1.124-2.48-2.29-3.684-3.492-18.74-18.74-28.112-43.3-28.118-67.864-0.004 24.562-9.376 49.124-28.118 67.864-1.204 1.204-2.434 2.368-3.684 3.492-86.524 78.512-288.196-1.842-288.196-103.376 62 40 110.45 9.786 156.118-35.882 37.49-37.49 98.276-37.49 135.766 0 18.74 18.74 28.112 43.3 28.118 67.864 0.004-24.562 9.376-49.124 28.118-67.864 37.49-37.49 98.276-37.49 135.766 0 45.664 45.668 94.114 75.882 156.114 35.882 0 101.534-201.672 181.888-288.2 103.376z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "hipster", + "emoticon", + "smiley", + "mustache", + "face" + ], + "defaultCode": 59898, + "grid": 16 + }, + { + "id": 251, + "paths": [ + "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM745.74 601.62l22.488 76.776-437.008 128.002-22.488-76.776zM256 320c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM640 320c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "wondering", + "emoticon", + "smiley", + "face", + "question" + ], + "defaultCode": 59899, + "grid": 16 + }, + { + "id": 252, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM704 256c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64 28.654-64 64-64zM256 320c0-35.346 28.654-64 64-64s64 28.654 64 64-28.654 64-64 64-64-28.654-64-64zM331.244 806.386l-22.488-76.774 437-128 22.488 76.774-437 128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "wondering", + "emoticon", + "smiley", + "face", + "question" + ], + "defaultCode": 59900, + "grid": 16 + }, + { + "id": 253, + "paths": [ + "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416z", + "M640 672c0 88.366-57.308 160-128.002 160s-128.002-71.634-128.002-160c0-88.366 57.308-160 128.002-160s128.002 71.634 128.002 160z", + "M416 340c-8.19 0-16.378-3.124-22.626-9.374-19.334-19.332-63.412-19.332-82.746 0-12.496 12.498-32.758 12.498-45.254 0-12.498-12.496-12.498-32.758 0-45.254 44.528-44.53 128.726-44.53 173.254 0 12.498 12.496 12.498 32.758 0 45.254-6.248 6.25-14.438 9.374-22.628 9.374z", + "M736 340c-8.19 0-16.378-3.124-22.626-9.374-19.332-19.332-63.414-19.332-82.746 0-12.496 12.498-32.758 12.498-45.254 0-12.498-12.496-12.498-32.758 0-45.254 44.528-44.53 128.726-44.53 173.254 0 12.498 12.496 12.498 32.758 0 45.254-6.248 6.25-14.438 9.374-22.628 9.374z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "sleepy", + "emoticon", + "smiley", + "face" + ], + "defaultCode": 59901, + "grid": 16 + }, + { + "id": 254, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM310.628 330.626c-12.496 12.498-32.758 12.498-45.254 0-12.498-12.496-12.498-32.758 0-45.254 44.528-44.53 128.726-44.53 173.254 0 12.498 12.496 12.498 32.758 0 45.254-6.248 6.25-14.438 9.374-22.628 9.374s-16.378-3.124-22.626-9.374c-19.334-19.332-63.412-19.332-82.746 0zM511.998 832c-70.694 0-128.002-71.634-128.002-160s57.308-160 128.002-160 128.002 71.634 128.002 160-57.308 160-128.002 160zM758.628 330.626c-6.248 6.25-14.438 9.374-22.628 9.374s-16.378-3.124-22.626-9.374c-19.332-19.332-63.414-19.332-82.746 0-12.496 12.498-32.758 12.498-45.254 0-12.498-12.496-12.498-32.758 0-45.254 44.528-44.53 128.726-44.53 173.254 0 12.498 12.498 12.498 32.758 0 45.254z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "sleepy", + "emoticon", + "smiley", + "face" + ], + "defaultCode": 59902, + "grid": 16 + }, + { + "id": 255, + "paths": [ + "M366.312 283.378c-34.742-17.37-69.102-26.060-70.548-26.422-17.146-4.288-34.518 6.138-38.806 23.284-4.284 17.144 6.14 34.518 23.282 38.804 17.626 4.45 38.522 12.12 56.936 21.35-10.648 11.43-17.174 26.752-17.174 43.606 0 35.346 28.654 64 64 64s64-28.654 64-64c0-1.17-0.036-2.33-0.098-3.484-2.032-47.454-45.212-78.946-81.592-97.138z", + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM236.498 823.664c10.706 5.324 22.756 8.336 35.502 8.336h480c12.746 0 24.796-3.012 35.502-8.338-73.378 64.914-169.828 104.338-275.502 104.338-105.672 0-202.124-39.424-275.502-104.336zM256 752v-96c0-8.674 7.328-16 16-16h112v128h-112c-8.672 0-16-7.326-16-16zM448 768v-128h128v128h-128zM640 768v-128h112c8.674 0 16 7.326 16 16v96c0 8.674-7.326 16-16 16h-112zM823.662 787.502c5.326-10.706 8.338-22.756 8.338-35.502v-96c0-44.112-35.888-80-80-80h-480c-44.112 0-80 35.888-80 80v96c0 12.746 3.012 24.796 8.336 35.502-64.912-73.378-104.336-169.828-104.336-275.502 0-229.75 186.25-416 416-416s416 186.25 416 416c0 105.674-39.424 202.124-104.338 275.502z", + "M728.236 256.956c-1.448 0.362-35.806 9.052-70.548 26.422-36.378 18.192-79.558 49.684-81.592 97.138-0.060 1.154-0.098 2.314-0.098 3.484 0 35.346 28.654 64 64 64s64-28.654 64-64c0-16.854-6.526-32.176-17.174-43.606 18.414-9.23 39.31-16.9 56.936-21.35 17.142-4.286 27.566-21.66 23.284-38.804-4.29-17.146-21.662-27.572-38.808-23.284z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "frustrated", + "emoticon", + "smiley", + "face", + "angry" + ], + "defaultCode": 59903, + "grid": 16 + }, + { + "id": 256, + "paths": [ + "M256 656v96c0 8.674 7.328 16 16 16h112v-128h-112c-8.672 0-16 7.326-16 16z", + "M448 640h128v128h-128v-128z", + "M752 640h-112v128h112c8.674 0 16-7.326 16-16v-96c0-8.674-7.326-16-16-16z", + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM576.096 380.516c2.034-47.454 45.212-78.946 81.592-97.138 34.742-17.37 69.102-26.060 70.548-26.422 17.146-4.288 34.518 6.138 38.806 23.284 4.284 17.144-6.14 34.518-23.284 38.804-17.624 4.45-38.522 12.12-56.936 21.35 10.648 11.43 17.174 26.752 17.174 43.606 0 35.346-28.654 64-64 64s-64-28.654-64-64c0.002-1.17 0.040-2.33 0.1-3.484zM256.958 280.24c4.288-17.146 21.66-27.572 38.806-23.284 1.446 0.362 35.806 9.052 70.548 26.422 36.38 18.192 79.56 49.684 81.592 97.138 0.062 1.154 0.098 2.314 0.098 3.484 0 35.346-28.654 64-64 64s-64-28.654-64-64c0-16.854 6.526-32.176 17.174-43.606-18.414-9.23-39.31-16.9-56.936-21.35-17.142-4.286-27.566-21.66-23.282-38.804zM832 752c0 44.112-35.888 80-80 80h-480c-44.112 0-80-35.888-80-80v-96c0-44.112 35.888-80 80-80h480c44.112 0 80 35.888 80 80v96z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "frustrated", + "emoticon", + "smiley", + "face", + "angry" + ], + "defaultCode": 59904, + "grid": 16 + }, + { + "id": 257, + "paths": [ + "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416z", + "M800 384h-128c-17.674 0-32-14.328-32-32s14.326-32 32-32h128c17.674 0 32 14.328 32 32s-14.326 32-32 32z", + "M352 384h-128c-17.672 0-32-14.328-32-32s14.328-32 32-32h128c17.672 0 32 14.328 32 32s-14.328 32-32 32z", + "M608 856c-8.19 0-16.378-3.124-22.626-9.374-4.582-4.582-29.42-14.626-73.374-14.626s-68.79 10.044-73.374 14.626c-12.496 12.496-32.758 12.496-45.254 0-12.498-12.496-12.498-32.758 0-45.254 30.122-30.12 92.994-33.372 118.628-33.372 25.632 0 88.506 3.252 118.626 33.374 12.498 12.496 12.498 32.758 0 45.254-6.248 6.248-14.436 9.372-22.626 9.372z", + "M736 576c-17.674 0-32-14.326-32-32v-64c0-17.672 14.326-32 32-32s32 14.328 32 32v64c0 17.674-14.326 32-32 32z", + "M736 768c-17.674 0-32-14.326-32-32v-64c0-17.674 14.326-32 32-32s32 14.326 32 32v64c0 17.674-14.326 32-32 32z", + "M288 576c-17.672 0-32-14.326-32-32v-64c0-17.672 14.328-32 32-32s32 14.328 32 32v64c0 17.674-14.328 32-32 32z", + "M288 768c-17.672 0-32-14.326-32-32v-64c0-17.674 14.328-32 32-32s32 14.326 32 32v64c0 17.674-14.328 32-32 32z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "crying", + "emoticon", + "smiley", + "face" + ], + "defaultCode": 59905, + "grid": 16 + }, + { + "id": 258, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM320 736c0 17.674-14.328 32-32 32s-32-14.326-32-32v-64c0-17.674 14.328-32 32-32s32 14.326 32 32v64zM320 544c0 17.674-14.328 32-32 32s-32-14.326-32-32v-64c0-17.672 14.328-32 32-32s32 14.328 32 32v64zM352 384h-128c-17.672 0-32-14.328-32-32s14.328-32 32-32h128c17.672 0 32 14.328 32 32s-14.328 32-32 32zM630.626 846.626c-6.248 6.25-14.436 9.374-22.626 9.374s-16.378-3.124-22.626-9.374c-4.582-4.582-29.42-14.626-73.374-14.626s-68.79 10.044-73.374 14.626c-12.496 12.496-32.758 12.496-45.254 0-12.498-12.496-12.498-32.758 0-45.254 30.122-30.12 92.994-33.372 118.628-33.372 25.632 0 88.506 3.252 118.626 33.374 12.498 12.496 12.498 32.756 0 45.252zM768 736c0 17.674-14.326 32-32 32s-32-14.326-32-32v-64c0-17.674 14.326-32 32-32s32 14.326 32 32v64zM768 544c0 17.674-14.326 32-32 32s-32-14.326-32-32v-64c0-17.672 14.326-32 32-32s32 14.328 32 32v64zM800 384h-128c-17.674 0-32-14.328-32-32s14.326-32 32-32h128c17.674 0 32 14.328 32 32s-14.326 32-32 32z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "crying", + "emoticon", + "smiley", + "face" + ], + "defaultCode": 59906, + "grid": 16 + }, + { + "id": 259, + "paths": [ + "M960 608v-160c0-52.934-43.066-96-96-96-17.104 0-33.176 4.494-47.098 12.368-17.076-26.664-46.958-44.368-80.902-44.368-24.564 0-47.004 9.274-64 24.504-16.996-15.23-39.436-24.504-64-24.504-11.214 0-21.986 1.934-32 5.484v-229.484c0-52.934-43.066-96-96-96s-96 43.066-96 96v394.676l-176.018-93.836c-14.536-8.4-31.126-12.84-47.982-12.84-52.934 0-96 43.066-96 96 0 26.368 10.472 50.954 29.49 69.226 0.248 0.238 0.496 0.47 0.75 0.7l239.17 218.074h-45.41c-17.672 0-32 14.326-32 32v192c0 17.674 14.328 32 32 32h640c17.674 0 32-14.326 32-32v-192c0-17.674-14.326-32-32-32h-44.222l72.844-145.69c2.222-4.442 3.378-9.342 3.378-14.31zM896 864c0 17.674-14.326 32-32 32s-32-14.326-32-32 14.326-32 32-32 32 14.326 32 32zM896 600.446l-83.776 167.554h-383.826l-290.818-265.166c-6.18-6.070-9.58-14.164-9.58-22.834 0-17.644 14.356-32 32-32 5.46 0 10.612 1.31 15.324 3.894 0.53 0.324 1.070 0.632 1.622 0.926l224 119.416c9.92 5.288 21.884 4.986 31.52-0.8 9.638-5.782 15.534-16.196 15.534-27.436v-448c0-17.644 14.356-32 32-32s32 14.356 32 32v320c0 17.672 14.326 32 32 32s32-14.328 32-32c0-17.644 14.356-32 32-32s32 14.356 32 32c0 17.672 14.326 32 32 32s32-14.328 32-32c0-17.644 14.356-32 32-32s32 14.356 32 32v32c0 17.672 14.326 32 32 32s32-14.328 32-32c0-17.644 14.356-32 32-32s32 14.356 32 32v152.446z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "point-up", + "finger", + "direction", + "hand" + ], + "defaultCode": 59907, + "grid": 16 + }, + { + "id": 260, + "paths": [ + "M416 960h160c52.934 0 96-43.066 96-96 0-17.104-4.494-33.176-12.368-47.098 26.664-17.076 44.368-46.958 44.368-80.902 0-24.564-9.276-47.004-24.504-64 15.228-16.996 24.504-39.436 24.504-64 0-11.214-1.934-21.986-5.484-32h229.484c52.934 0 96-43.066 96-96s-43.066-96-96-96h-394.676l93.836-176.018c8.4-14.536 12.84-31.126 12.84-47.982 0-52.934-43.066-96-96-96-26.368 0-50.954 10.472-69.226 29.49-0.238 0.248-0.47 0.496-0.7 0.75l-218.074 239.17v-45.41c0-17.672-14.326-32-32-32h-192c-17.674 0-32 14.328-32 32v640c0 17.674 14.326 32 32 32h192c17.674 0 32-14.326 32-32v-44.222l145.69 72.844c4.444 2.222 9.342 3.378 14.31 3.378zM160 896c-17.674 0-32-14.326-32-32s14.326-32 32-32 32 14.326 32 32-14.326 32-32 32zM423.556 896l-167.556-83.778v-383.824l265.168-290.818c6.066-6.18 14.162-9.58 22.832-9.58 17.644 0 32 14.356 32 32 0 5.46-1.308 10.612-3.894 15.324-0.324 0.53-0.632 1.070-0.926 1.622l-119.418 224c-5.288 9.92-4.986 21.884 0.8 31.52 5.784 9.638 16.198 15.534 27.438 15.534h448c17.644 0 32 14.356 32 32s-14.356 32-32 32h-320c-17.672 0-32 14.326-32 32s14.328 32 32 32c17.644 0 32 14.356 32 32s-14.356 32-32 32c-17.674 0-32 14.326-32 32s14.326 32 32 32c17.644 0 32 14.356 32 32s-14.356 32-32 32h-32c-17.674 0-32 14.326-32 32s14.326 32 32 32c17.644 0 32 14.356 32 32s-14.356 32-32 32h-152.444z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "point-right", + "finger", + "direction", + "hand" + ], + "defaultCode": 59908, + "grid": 16 + }, + { + "id": 261, + "paths": [ + "M960 416v160c0 52.934-43.066 96-96 96-17.104 0-33.176-4.494-47.098-12.368-17.076 26.662-46.96 44.368-80.902 44.368-24.564 0-47.004-9.276-64-24.504-16.996 15.228-39.436 24.504-64 24.504-11.214 0-21.986-1.934-32-5.484v229.484c0 52.934-43.066 96-96 96-52.936 0-96-43.066-96-96v-394.676l-176.018 93.836c-14.538 8.398-31.126 12.84-47.982 12.84-52.936 0-96-43.066-96-96 0-26.368 10.472-50.952 29.488-69.226 0.248-0.238 0.496-0.47 0.75-0.7l239.17-218.074h-45.408c-17.674 0-32-14.326-32-32v-192c0-17.674 14.326-32 32-32h640c17.674 0 32 14.326 32 32v192c0 17.674-14.326 32-32 32h-44.222l72.842 145.69c2.224 4.442 3.38 9.342 3.38 14.31zM896 160c0-17.674-14.326-32-32-32s-32 14.326-32 32 14.326 32 32 32 32-14.326 32-32zM896 423.554l-83.778-167.554h-383.824l-290.82 265.168c-6.18 6.066-9.578 14.162-9.578 22.832 0 17.644 14.356 32 32 32 5.458 0 10.612-1.308 15.324-3.894 0.53-0.324 1.070-0.632 1.622-0.926l224-119.416c9.92-5.288 21.884-4.986 31.52 0.8 9.638 5.782 15.534 16.196 15.534 27.436v448c0 17.644 14.356 32 32 32s32-14.356 32-32v-320c0-17.672 14.326-32 32-32s32 14.328 32 32c0 17.644 14.356 32 32 32s32-14.356 32-32c0-17.674 14.326-32 32-32s32 14.326 32 32c0 17.644 14.356 32 32 32s32-14.356 32-32v-32c0-17.674 14.326-32 32-32s32 14.326 32 32c0 17.644 14.356 32 32 32s32-14.356 32-32v-152.446z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "point-down", + "finger", + "direction", + "hand" + ], + "defaultCode": 59909, + "grid": 16 + }, + { + "id": 262, + "paths": [ + "M608 960h-160c-52.934 0-96-43.066-96-96 0-17.104 4.494-33.176 12.368-47.098-26.662-17.076-44.368-46.958-44.368-80.902 0-24.564 9.276-47.004 24.504-64-15.228-16.996-24.504-39.436-24.504-64 0-11.214 1.934-21.986 5.484-32h-229.484c-52.934 0-96-43.066-96-96 0-52.936 43.066-96 96-96h394.676l-93.836-176.018c-8.398-14.536-12.84-31.126-12.84-47.982 0-52.936 43.066-96 96-96 26.368 0 50.952 10.472 69.224 29.488 0.238 0.248 0.472 0.496 0.7 0.75l218.076 239.17v-45.408c0-17.674 14.326-32 32-32h192c17.674 0 32 14.326 32 32v640c0 17.674-14.326 32-32 32h-192c-17.674 0-32-14.326-32-32v-44.222l-145.69 72.844c-4.442 2.222-9.34 3.378-14.31 3.378zM864 896c17.674 0 32-14.326 32-32s-14.326-32-32-32-32 14.326-32 32 14.326 32 32 32zM600.446 896l167.554-83.778v-383.824l-265.168-290.82c-6.066-6.18-14.162-9.578-22.832-9.578-17.644 0-32 14.356-32 32 0 5.458 1.308 10.612 3.894 15.324 0.324 0.53 0.632 1.070 0.926 1.622l119.416 224c5.29 9.92 4.988 21.884-0.798 31.52-5.784 9.638-16.198 15.534-27.438 15.534h-448c-17.644 0-32 14.356-32 32s14.356 32 32 32h320c17.672 0 32 14.326 32 32s-14.328 32-32 32c-17.644 0-32 14.356-32 32s14.356 32 32 32c17.674 0 32 14.326 32 32s-14.326 32-32 32c-17.644 0-32 14.356-32 32s14.356 32 32 32h32c17.674 0 32 14.326 32 32s-14.326 32-32 32c-17.644 0-32 14.356-32 32s14.356 32 32 32h152.446z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "point-left", + "finger", + "direction", + "hand" + ], + "defaultCode": 59910, + "grid": 16 + }, + { + "id": 263, + "paths": [ + "M512 92.774l429.102 855.226h-858.206l429.104-855.226zM512 0c-22.070 0-44.14 14.882-60.884 44.648l-437.074 871.112c-33.486 59.532-5 108.24 63.304 108.24h869.308c68.3 0 96.792-48.708 63.3-108.24h0.002l-437.074-871.112c-16.742-29.766-38.812-44.648-60.882-44.648v0z", + "M576 832c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-35.346 28.654-64 64-64s64 28.654 64 64z", + "M512 704c-35.346 0-64-28.654-64-64v-192c0-35.346 28.654-64 64-64s64 28.654 64 64v192c0 35.346-28.654 64-64 64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "warning", + "sign" + ], + "defaultCode": 59911, + "grid": 16 + }, + { + "id": 264, + "paths": [ + "M512 96c-111.118 0-215.584 43.272-294.156 121.844s-121.844 183.038-121.844 294.156c0 111.118 43.272 215.584 121.844 294.156s183.038 121.844 294.156 121.844c111.118 0 215.584-43.272 294.156-121.844s121.844-183.038 121.844-294.156c0-111.118-43.272-215.584-121.844-294.156s-183.038-121.844-294.156-121.844zM512 0v0c282.77 0 512 229.23 512 512s-229.23 512-512 512c-282.77 0-512-229.23-512-512s229.23-512 512-512zM448 704h128v128h-128zM448 192h128v384h-128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "notification", + "warning", + "notice", + "note", + "exclamation" + ], + "defaultCode": 59912, + "grid": 16 + }, + { + "id": 265, + "paths": [ + "M448 704h128v128h-128zM704 256c35.346 0 64 28.654 64 64v192l-192 128h-128v-64l192-128v-64h-320v-128h384zM512 96c-111.118 0-215.584 43.272-294.156 121.844s-121.844 183.038-121.844 294.156c0 111.118 43.272 215.584 121.844 294.156s183.038 121.844 294.156 121.844c111.118 0 215.584-43.272 294.156-121.844s121.844-183.038 121.844-294.156c0-111.118-43.272-215.584-121.844-294.156s-183.038-121.844-294.156-121.844zM512 0v0c282.77 0 512 229.23 512 512s-229.23 512-512 512c-282.77 0-512-229.23-512-512s229.23-512 512-512z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "question", + "help", + "support" + ], + "defaultCode": 59913, + "grid": 16 + }, + { + "id": 266, + "paths": [ + "M992 384h-352v-352c0-17.672-14.328-32-32-32h-192c-17.672 0-32 14.328-32 32v352h-352c-17.672 0-32 14.328-32 32v192c0 17.672 14.328 32 32 32h352v352c0 17.672 14.328 32 32 32h192c17.672 0 32-14.328 32-32v-352h352c17.672 0 32-14.328 32-32v-192c0-17.672-14.328-32-32-32z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "plus", + "add", + "sum" + ], + "defaultCode": 59914, + "grid": 16 + }, + { + "id": 267, + "paths": [ + "M0 416v192c0 17.672 14.328 32 32 32h960c17.672 0 32-14.328 32-32v-192c0-17.672-14.328-32-32-32h-960c-17.672 0-32 14.328-32 32z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "minus", + "subtract", + "minimize", + "line" + ], + "defaultCode": 59915, + "grid": 16 + }, + { + "id": 268, + "paths": [ + "M448 304c0-26.4 21.6-48 48-48h32c26.4 0 48 21.6 48 48v32c0 26.4-21.6 48-48 48h-32c-26.4 0-48-21.6-48-48v-32z", + "M640 768h-256v-64h64v-192h-64v-64h192v256h64z", + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 928c-229.75 0-416-186.25-416-416s186.25-416 416-416 416 186.25 416 416-186.25 416-416 416z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "info", + "information" + ], + "defaultCode": 59916, + "grid": 16 + }, + { + "id": 269, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 928c-229.75 0-416-186.25-416-416s186.25-416 416-416 416 186.25 416 416-186.25 416-416 416z", + "M672 256l-160 160-160-160-96 96 160 160-160 160 96 96 160-160 160 160 96-96-160-160 160-160z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "cancel-circle", + "close", + "remove", + "delete" + ], + "defaultCode": 59917, + "grid": 16 + }, + { + "id": 270, + "paths": [ + "M874.040 149.96c-96.706-96.702-225.28-149.96-362.040-149.96s-265.334 53.258-362.040 149.96c-96.702 96.706-149.96 225.28-149.96 362.040s53.258 265.334 149.96 362.040c96.706 96.702 225.28 149.96 362.040 149.96s265.334-53.258 362.040-149.96c96.702-96.706 149.96-225.28 149.96-362.040s-53.258-265.334-149.96-362.040zM896 512c0 82.814-26.354 159.588-71.112 222.38l-535.266-535.268c62.792-44.758 139.564-71.112 222.378-71.112 211.738 0 384 172.262 384 384zM128 512c0-82.814 26.354-159.586 71.112-222.378l535.27 535.268c-62.794 44.756-139.568 71.11-222.382 71.11-211.738 0-384-172.262-384-384z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "blocked", + "forbidden", + "denied", + "banned" + ], + "defaultCode": 59918, + "grid": 16 + }, + { + "id": 271, + "paths": [ + "M1014.662 822.66c-0.004-0.004-0.008-0.008-0.012-0.010l-310.644-310.65 310.644-310.65c0.004-0.004 0.008-0.006 0.012-0.010 3.344-3.346 5.762-7.254 7.312-11.416 4.246-11.376 1.824-24.682-7.324-33.83l-146.746-146.746c-9.148-9.146-22.45-11.566-33.828-7.32-4.16 1.55-8.070 3.968-11.418 7.31 0 0.004-0.004 0.006-0.008 0.010l-310.648 310.652-310.648-310.65c-0.004-0.004-0.006-0.006-0.010-0.010-3.346-3.342-7.254-5.76-11.414-7.31-11.38-4.248-24.682-1.826-33.83 7.32l-146.748 146.748c-9.148 9.148-11.568 22.452-7.322 33.828 1.552 4.16 3.97 8.072 7.312 11.416 0.004 0.002 0.006 0.006 0.010 0.010l310.65 310.648-310.65 310.652c-0.002 0.004-0.006 0.006-0.008 0.010-3.342 3.346-5.76 7.254-7.314 11.414-4.248 11.376-1.826 24.682 7.322 33.83l146.748 146.746c9.15 9.148 22.452 11.568 33.83 7.322 4.16-1.552 8.070-3.97 11.416-7.312 0.002-0.004 0.006-0.006 0.010-0.010l310.648-310.65 310.648 310.65c0.004 0.002 0.008 0.006 0.012 0.008 3.348 3.344 7.254 5.762 11.414 7.314 11.378 4.246 24.684 1.826 33.828-7.322l146.746-146.748c9.148-9.148 11.57-22.454 7.324-33.83-1.552-4.16-3.97-8.068-7.314-11.414z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "cross", + "cancel", + "close", + "quit", + "remove" + ], + "defaultCode": 59919, + "grid": 16 + }, + { + "id": 272, + "paths": [ + "M864 128l-480 480-224-224-160 160 384 384 640-640z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "checkmark", + "tick", + "correct", + "accept", + "ok" + ], + "defaultCode": 59920, + "grid": 16 + }, + { + "id": 273, + "paths": [ + "M397.434 917.696l-397.868-391.6 197.378-194.27 200.49 197.332 429.62-422.852 197.378 194.27-626.998 617.12zM107.912 526.096l289.524 284.962 518.656-510.482-89.036-87.632-429.62 422.852-200.49-197.334-89.034 87.634z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "checkmark", + "tick", + "correct", + "accept", + "ok" + ], + "defaultCode": 59921, + "grid": 16 + }, + { + "id": 274, + "paths": [ + "M128 256h128v192h64v-384c0-35.2-28.8-64-64-64h-128c-35.2 0-64 28.8-64 64v384h64v-192zM128 64h128v128h-128v-128zM960 64v-64h-192c-35.202 0-64 28.8-64 64v320c0 35.2 28.798 64 64 64h192v-64h-192v-320h192zM640 160v-96c0-35.2-28.8-64-64-64h-192v448h192c35.2 0 64-28.8 64-64v-96c0-35.2-8.8-64-44-64 35.2 0 44-28.8 44-64zM576 384h-128v-128h128v128zM576 192h-128v-128h128v128zM832 576l-416 448-224-288 82-70 142 148 352-302z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "spell-check", + "spelling", + "correct" + ], + "defaultCode": 59922, + "grid": 16 + }, + { + "id": 275, + "paths": [ + "M384 512h-320v-128h320v-128l192 192-192 192zM1024 0v832l-384 192v-192h-384v-256h64v192h320v-576l256-128h-576v256h-64v-320z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "enter", + "signin", + "login" + ], + "defaultCode": 59923, + "grid": 16 + }, + { + "id": 276, + "paths": [ + "M768 640v-128h-320v-128h320v-128l192 192zM704 576v256h-320v192l-384-192v-832h704v320h-64v-256h-512l256 128v576h256v-192z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "exit", + "signout", + "logout", + "quit", + "close" + ], + "defaultCode": 59924, + "grid": 16 + }, + { + "id": 277, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 928c-229.75 0-416-186.25-416-416s186.25-416 416-416 416 186.25 416 416-186.25 416-416 416zM384 288l384 224-384 224z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "play", + "player" + ], + "defaultCode": 59925, + "grid": 16 + }, + { + "id": 278, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 928c-229.75 0-416-186.25-416-416s186.25-416 416-416 416 186.25 416 416-186.25 416-416 416zM320 320h128v384h-128zM576 320h128v384h-128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "pause", + "player" + ], + "defaultCode": 59926, + "grid": 16 + }, + { + "id": 279, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 928c-229.75 0-416-186.25-416-416s186.25-416 416-416 416 186.25 416 416-186.25 416-416 416zM320 320h384v384h-384z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "stop", + "player" + ], + "defaultCode": 59927, + "grid": 16 + }, + { + "id": 280, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 928c-229.75 0-416-186.25-416-416s186.25-416 416-416 416 186.25 416 416-186.25 416-416 416z", + "M448 512l256-192v384z", + "M320 320h128v384h-128v-384z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "previous", + "player" + ], + "defaultCode": 59928, + "grid": 16 + }, + { + "id": 281, + "paths": [ + "M512 0c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 928c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416z", + "M576 512l-256-192v384z", + "M704 320h-128v384h128v-384z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "next", + "player" + ], + "defaultCode": 59929, + "grid": 16 + }, + { + "id": 282, + "paths": [ + "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM704 672l-224-160 224-160zM448 672l-224-160 224-160z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "backward", + "player" + ], + "defaultCode": 59930, + "grid": 16 + }, + { + "id": 283, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 928c-229.75 0-416-186.25-416-416s186.25-416 416-416 416 186.25 416 416-186.25 416-416 416zM320 352l224 160-224 160zM576 352l224 160-224 160z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "forward", + "player" + ], + "defaultCode": 59931, + "grid": 16 + }, + { + "id": 284, + "paths": [ + "M192 128l640 384-640 384z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "play", + "player" + ], + "defaultCode": 59932, + "grid": 16 + }, + { + "id": 285, + "paths": [ + "M128 128h320v768h-320zM576 128h320v768h-320z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "pause", + "player" + ], + "defaultCode": 59933, + "grid": 16 + }, + { + "id": 286, + "paths": [ + "M128 128h768v768h-768z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "stop", + "player", + "square" + ], + "defaultCode": 59934, + "grid": 16 + }, + { + "id": 287, + "paths": [ + "M576 160v320l320-320v704l-320-320v320l-352-352z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "backward", + "player" + ], + "defaultCode": 59935, + "grid": 16 + }, + { + "id": 288, + "paths": [ + "M512 864v-320l-320 320v-704l320 320v-320l352 352z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "forward", + "player" + ], + "defaultCode": 59936, + "grid": 16 + }, + { + "id": 289, + "paths": [ + "M128 896v-768h128v352l320-320v320l320-320v704l-320-320v320l-320-320v352z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "first", + "player" + ], + "defaultCode": 59937, + "grid": 16 + }, + { + "id": 290, + "paths": [ + "M896 128v768h-128v-352l-320 320v-320l-320 320v-704l320 320v-320l320 320v-352z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "last", + "player" + ], + "defaultCode": 59938, + "grid": 16 + }, + { + "id": 291, + "paths": [ + "M256 896v-768h128v352l320-320v704l-320-320v352z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "previous", + "player" + ], + "defaultCode": 59939, + "grid": 16 + }, + { + "id": 292, + "paths": [ + "M768 128v768h-128v-352l-320 320v-704l320 320v-352z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "next", + "player" + ], + "defaultCode": 59940, + "grid": 16 + }, + { + "id": 293, + "paths": [ + "M0 768h1024v128h-1024zM512 128l512 512h-1024z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "eject", + "player" + ], + "defaultCode": 59941, + "grid": 16 + }, + { + "id": 294, + "paths": [ + "M890.040 922.040c-12.286 0-24.566-4.686-33.942-14.056-18.744-18.746-18.744-49.136 0-67.882 87.638-87.642 135.904-204.16 135.904-328.1 0-123.938-48.266-240.458-135.904-328.098-18.744-18.746-18.744-49.138 0-67.882s49.138-18.744 67.882 0c105.77 105.772 164.022 246.4 164.022 395.98s-58.252 290.208-164.022 395.98c-9.372 9.372-21.656 14.058-33.94 14.058zM719.53 831.53c-12.286 0-24.566-4.686-33.942-14.056-18.744-18.744-18.744-49.136 0-67.882 131.006-131.006 131.006-344.17 0-475.176-18.744-18.746-18.744-49.138 0-67.882 18.744-18.742 49.138-18.744 67.882 0 81.594 81.59 126.53 190.074 126.53 305.466 0 115.39-44.936 223.876-126.53 305.47-9.372 9.374-21.656 14.060-33.94 14.060v0zM549.020 741.020c-12.286 0-24.568-4.686-33.942-14.058-18.746-18.746-18.746-49.134 0-67.88 81.1-81.1 81.1-213.058 0-294.156-18.746-18.746-18.746-49.138 0-67.882s49.136-18.744 67.882 0c118.53 118.53 118.53 311.392 0 429.922-9.372 9.368-21.656 14.054-33.94 14.054z", + "M416.006 960c-8.328 0-16.512-3.25-22.634-9.374l-246.626-246.626h-114.746c-17.672 0-32-14.326-32-32v-320c0-17.672 14.328-32 32-32h114.746l246.626-246.628c9.154-9.154 22.916-11.89 34.874-6.936 11.958 4.952 19.754 16.622 19.754 29.564v832c0 12.944-7.796 24.612-19.754 29.564-3.958 1.64-8.118 2.436-12.24 2.436z" + ], + "width": 1088, + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "volume-high", + "volume", + "audio", + "speaker", + "player" + ], + "defaultCode": 59942, + "grid": 16 + }, + { + "id": 295, + "paths": [ + "M719.53 831.53c-12.286 0-24.566-4.686-33.942-14.056-18.744-18.744-18.744-49.136 0-67.882 131.006-131.006 131.006-344.17 0-475.176-18.744-18.746-18.744-49.138 0-67.882 18.744-18.742 49.138-18.744 67.882 0 81.594 81.59 126.53 190.074 126.53 305.466 0 115.39-44.936 223.876-126.53 305.47-9.372 9.374-21.656 14.060-33.94 14.060v0zM549.020 741.020c-12.286 0-24.566-4.686-33.942-14.058-18.746-18.746-18.746-49.134 0-67.88 81.1-81.1 81.1-213.058 0-294.156-18.746-18.746-18.746-49.138 0-67.882s49.136-18.744 67.882 0c118.53 118.53 118.53 311.392 0 429.922-9.372 9.368-21.656 14.054-33.94 14.054z", + "M416.006 960c-8.328 0-16.512-3.25-22.634-9.374l-246.626-246.626h-114.746c-17.672 0-32-14.326-32-32v-320c0-17.672 14.328-32 32-32h114.746l246.626-246.628c9.154-9.154 22.916-11.89 34.874-6.936 11.958 4.952 19.754 16.622 19.754 29.564v832c0 12.944-7.796 24.612-19.754 29.564-3.958 1.64-8.118 2.436-12.24 2.436z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "volume-medium", + "volume", + "audio", + "speaker", + "player" + ], + "defaultCode": 59943, + "grid": 16 + }, + { + "id": 296, + "paths": [ + "M549.020 741.020c-12.286 0-24.566-4.686-33.942-14.058-18.746-18.746-18.746-49.134 0-67.88 81.1-81.1 81.1-213.058 0-294.156-18.746-18.746-18.746-49.138 0-67.882s49.136-18.744 67.882 0c118.53 118.53 118.53 311.392 0 429.922-9.372 9.368-21.656 14.054-33.94 14.054z", + "M416.006 960c-8.328 0-16.512-3.25-22.634-9.374l-246.626-246.626h-114.746c-17.672 0-32-14.326-32-32v-320c0-17.672 14.328-32 32-32h114.746l246.626-246.628c9.154-9.154 22.916-11.89 34.874-6.936 11.958 4.952 19.754 16.622 19.754 29.564v832c0 12.944-7.796 24.612-19.754 29.564-3.958 1.64-8.118 2.436-12.24 2.436z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "volume-low", + "volume", + "audio", + "speaker", + "player" + ], + "defaultCode": 59944, + "grid": 16 + }, + { + "id": 297, + "paths": [ + "M416.006 960c-8.328 0-16.512-3.25-22.634-9.374l-246.626-246.626h-114.746c-17.672 0-32-14.326-32-32v-320c0-17.672 14.328-32 32-32h114.746l246.626-246.628c9.154-9.154 22.916-11.89 34.874-6.936 11.958 4.952 19.754 16.622 19.754 29.564v832c0 12.944-7.796 24.612-19.754 29.564-3.958 1.64-8.118 2.436-12.24 2.436z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "volume-mute", + "volume", + "audio", + "speaker", + "player" + ], + "defaultCode": 59945, + "grid": 16 + }, + { + "id": 298, + "paths": [ + "M960 619.148v84.852h-84.852l-107.148-107.148-107.148 107.148h-84.852v-84.852l107.148-107.148-107.148-107.148v-84.852h84.852l107.148 107.148 107.148-107.148h84.852v84.852l-107.148 107.148 107.148 107.148z", + "M416.006 960c-8.328 0-16.512-3.25-22.634-9.374l-246.626-246.626h-114.746c-17.672 0-32-14.326-32-32v-320c0-17.672 14.328-32 32-32h114.746l246.626-246.628c9.154-9.154 22.916-11.89 34.874-6.936 11.958 4.952 19.754 16.622 19.754 29.564v832c0 12.944-7.796 24.612-19.754 29.564-3.958 1.64-8.118 2.436-12.24 2.436z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "volume-mute", + "volume", + "audio", + "player" + ], + "defaultCode": 59946, + "grid": 16 + }, + { + "id": 299, + "paths": [ + "M1024 576h-192v192h-128v-192h-192v-128h192v-192h128v192h192v128z", + "M416.006 960c-8.328 0-16.512-3.25-22.634-9.374l-246.626-246.626h-114.746c-17.672 0-32-14.326-32-32v-320c0-17.672 14.328-32 32-32h114.746l246.626-246.628c9.154-9.154 22.916-11.89 34.874-6.936 11.958 4.952 19.754 16.622 19.754 29.564v832c0 12.944-7.796 24.612-19.754 29.564-3.958 1.64-8.118 2.436-12.24 2.436z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "volume-increase", + "volume", + "audio", + "speaker", + "player" + ], + "defaultCode": 59947, + "grid": 16 + }, + { + "id": 300, + "paths": [ + "M512 448h512v128h-512v-128z", + "M416.006 960c-8.328 0-16.512-3.25-22.634-9.374l-246.626-246.626h-114.746c-17.672 0-32-14.326-32-32v-320c0-17.672 14.328-32 32-32h114.746l246.626-246.628c9.154-9.154 22.916-11.89 34.874-6.936 11.958 4.952 19.754 16.622 19.754 29.564v832c0 12.944-7.796 24.612-19.754 29.564-3.958 1.64-8.118 2.436-12.24 2.436z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "volume-decrease", + "volume", + "audio", + "speaker", + "player" + ], + "defaultCode": 59948, + "grid": 16 + }, + { + "id": 301, + "paths": [ + "M128 320h640v192l256-256-256-256v192h-768v384h128zM896 704h-640v-192l-256 256 256 256v-192h768v-384h-128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "loop", + "repeat", + "player" + ], + "defaultCode": 59949, + "grid": 16 + }, + { + "id": 302, + "paths": [ + "M889.68 166.32c-93.608-102.216-228.154-166.32-377.68-166.32-282.77 0-512 229.23-512 512h96c0-229.75 186.25-416 416-416 123.020 0 233.542 53.418 309.696 138.306l-149.696 149.694h352v-352l-134.32 134.32z", + "M928 512c0 229.75-186.25 416-416 416-123.020 0-233.542-53.418-309.694-138.306l149.694-149.694h-352v352l134.32-134.32c93.608 102.216 228.154 166.32 377.68 166.32 282.77 0 512-229.23 512-512h-96z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "loop", + "repeat", + "player", + "reload", + "refresh", + "update", + "synchronize", + "arrows" + ], + "defaultCode": 59950, + "grid": 16 + }, + { + "id": 303, + "paths": [ + "M783.988 752.012c-64.104 0-124.372-24.96-169.7-70.288l-102.288-102.282-102.276 102.27c-45.332 45.336-105.6 70.3-169.706 70.3-64.118 0-124.39-24.964-169.722-70.3-45.332-45.334-70.296-105.604-70.296-169.712s24.964-124.38 70.296-169.714c45.334-45.332 105.608-70.296 169.714-70.296 64.108 0 124.38 24.964 169.712 70.296l102.278 102.276 102.276-102.276c45.332-45.332 105.604-70.298 169.712-70.298 64.112 0 124.384 24.966 169.71 70.298 45.338 45.334 70.302 105.606 70.302 169.714 0 64.112-24.964 124.382-70.3 169.71-45.326 45.336-105.598 70.302-169.712 70.302zM681.72 614.288c27.322 27.31 63.64 42.354 102.268 42.352 38.634 0 74.958-15.044 102.276-42.362 27.316-27.322 42.364-63.644 42.364-102.278s-15.046-74.956-42.364-102.274c-27.32-27.318-63.64-42.364-102.276-42.364-38.632 0-74.956 15.044-102.278 42.364l-102.268 102.274 102.278 102.288zM240.012 367.362c-38.634 0-74.956 15.044-102.274 42.364-27.32 27.318-42.364 63.64-42.364 102.274 0 38.632 15.044 74.954 42.364 102.276 27.32 27.316 63.642 42.364 102.274 42.364 38.634 0 74.956-15.044 102.272-42.362l102.276-102.278-102.276-102.274c-27.318-27.32-63.64-42.366-102.272-42.364v0z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "infinite" + ], + "defaultCode": 59951, + "grid": 16 + }, + { + "id": 304, + "paths": [ + "M768 704h-101.49l-160-160 160-160h101.49v160l224-224-224-224v160h-128c-16.974 0-33.252 6.744-45.254 18.746l-178.746 178.744-178.746-178.746c-12-12-28.28-18.744-45.254-18.744h-192v128h165.49l160 160-160 160h-165.49v128h192c16.974 0 33.252-6.742 45.254-18.746l178.746-178.744 178.746 178.744c12.002 12.004 28.28 18.746 45.254 18.746h128v160l224-224-224-224v160z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "shuffle", + "random", + "player" + ], + "defaultCode": 59952, + "grid": 16 + }, + { + "id": 305, + "paths": [ + "M0 736l256-256 544 544 224-224-544-544 255.998-256h-735.998v736z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "arrow-up-left", + "up-left", + "arrow-top-left" + ], + "defaultCode": 59953, + "grid": 16 + }, + { + "id": 306, + "paths": [ + "M512 32l-480 480h288v512h384v-512h288z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "arrow-up", + "up", + "upload", + "top" + ], + "defaultCode": 59954, + "grid": 16 + }, + { + "id": 307, + "paths": [ + "M288 0l256 256-544 544 224 224 544-544 256 255.998v-735.998h-736z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "arrow-up-right", + "up-right", + "arrow-top-right" + ], + "defaultCode": 59955, + "grid": 16 + }, + { + "id": 308, + "paths": [ + "M992 512l-480-480v288h-512v384h512v288z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "arrow-right", + "right", + "next" + ], + "defaultCode": 59956, + "grid": 16 + }, + { + "id": 309, + "paths": [ + "M1024 288l-256 256-544-544-224 224 544 544-255.998 256h735.998v-736z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "arrow-down-right", + "down-right", + "arrow-bottom-right" + ], + "defaultCode": 59957, + "grid": 16 + }, + { + "id": 310, + "paths": [ + "M512 992l480-480h-288v-512h-384v512h-288z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "arrow-down", + "down", + "download", + "bottom" + ], + "defaultCode": 59958, + "grid": 16 + }, + { + "id": 311, + "paths": [ + "M736 1024l-256-256 544-544-224-224-544 544-256-255.998v735.998h736z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "arrow-down-left", + "down-left", + "arrow-bottom-left" + ], + "defaultCode": 59959, + "grid": 16 + }, + { + "id": 312, + "paths": [ + "M32 512l480 480v-288h512v-384h-512v-288z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "arrow-left", + "left", + "previous" + ], + "defaultCode": 59960, + "grid": 16 + }, + { + "id": 313, + "paths": [ + "M877.254 786.746l-530.744-530.746h229.49c35.346 0 64-28.654 64-64s-28.654-64-64-64h-384c-25.886 0-49.222 15.592-59.128 39.508-3.282 7.924-4.84 16.242-4.838 24.492h-0.034v384c0 35.346 28.654 64 64 64s64-28.654 64-64v-229.49l530.746 530.744c12.496 12.498 28.876 18.746 45.254 18.746s32.758-6.248 45.254-18.746c24.994-24.992 24.994-65.516 0-90.508z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "arrow-up-left", + "up-left", + "arrow-top-left" + ], + "defaultCode": 59961, + "grid": 16 + }, + { + "id": 314, + "paths": [ + "M877.254 402.746l-320-320c-24.992-24.994-65.514-24.994-90.508 0l-320 320c-24.994 24.994-24.994 65.516 0 90.51 24.994 24.996 65.516 24.996 90.51 0l210.744-210.746v613.49c0 35.346 28.654 64 64 64s64-28.654 64-64v-613.49l210.746 210.746c12.496 12.496 28.876 18.744 45.254 18.744s32.758-6.248 45.254-18.746c24.994-24.994 24.994-65.514 0-90.508z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "arrow-up", + "up", + "upload", + "top" + ], + "defaultCode": 59962, + "grid": 16 + }, + { + "id": 315, + "paths": [ + "M237.254 877.254l530.746-530.744v229.49c0 35.346 28.654 64 64 64s64-28.654 64-64v-384c0-25.884-15.594-49.222-39.508-59.126-7.924-3.284-16.242-4.84-24.492-4.838v-0.036h-384c-35.346 0-64 28.654-64 64 0 35.348 28.654 64 64 64h229.49l-530.744 530.746c-12.498 12.496-18.746 28.876-18.746 45.254s6.248 32.758 18.746 45.254c24.992 24.994 65.516 24.994 90.508 0z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "arrow-up-right", + "up-right", + "arrow-top-right" + ], + "defaultCode": 59963, + "grid": 16 + }, + { + "id": 316, + "paths": [ + "M621.254 877.254l320-320c24.994-24.992 24.994-65.516 0-90.51l-320-320c-24.994-24.992-65.516-24.992-90.51 0-24.994 24.994-24.994 65.516 0 90.51l210.746 210.746h-613.49c-35.346 0-64 28.654-64 64s28.654 64 64 64h613.49l-210.746 210.746c-12.496 12.496-18.744 28.876-18.744 45.254s6.248 32.758 18.744 45.254c24.994 24.994 65.516 24.994 90.51 0z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "arrow-right", + "right", + "next" + ], + "defaultCode": 59964, + "grid": 16 + }, + { + "id": 317, + "paths": [ + "M146.746 237.254l530.742 530.746h-229.488c-35.346 0-64 28.654-64 64s28.654 64 64 64h384c25.884 0 49.222-15.594 59.126-39.508 3.284-7.924 4.84-16.242 4.838-24.492h0.036v-384c0-35.346-28.654-64-64-64-35.348 0-64 28.654-64 64v229.49l-530.746-530.744c-12.496-12.498-28.874-18.746-45.254-18.746s-32.758 6.248-45.254 18.746c-24.994 24.992-24.994 65.516 0 90.508z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "arrow-down-right", + "down-right", + "arrow-bottom-right" + ], + "defaultCode": 59965, + "grid": 16 + }, + { + "id": 318, + "paths": [ + "M877.254 621.254l-320 320c-24.992 24.994-65.514 24.994-90.508 0l-320-320c-24.994-24.994-24.994-65.516 0-90.51 24.994-24.996 65.516-24.996 90.51 0l210.744 210.746v-613.49c0-35.346 28.654-64 64-64s64 28.654 64 64v613.49l210.746-210.746c12.496-12.496 28.876-18.744 45.254-18.744s32.758 6.248 45.254 18.746c24.994 24.994 24.994 65.514 0 90.508z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "arrow-down", + "down", + "download", + "bottom" + ], + "defaultCode": 59966, + "grid": 16 + }, + { + "id": 319, + "paths": [ + "M786.744 146.744l-530.744 530.744v-229.49c0-35.346-28.654-64-64-64s-64 28.654-64 64v384.002c0 25.886 15.592 49.222 39.508 59.128 7.924 3.282 16.242 4.84 24.492 4.836v0.036l384-0.002c35.344 0 64-28.654 64-63.998 0-35.348-28.656-64-64-64h-229.49l530.744-530.746c12.496-12.496 18.746-28.876 18.746-45.256 0-16.376-6.25-32.758-18.746-45.254-24.992-24.992-65.518-24.992-90.51 0v0z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "arrow-down-left", + "down-left", + "arrow-bottom-left" + ], + "defaultCode": 59967, + "grid": 16 + }, + { + "id": 320, + "paths": [ + "M402.746 877.254l-320-320c-24.994-24.992-24.994-65.516 0-90.51l320-320c24.994-24.992 65.516-24.992 90.51 0 24.994 24.994 24.994 65.516 0 90.51l-210.746 210.746h613.49c35.346 0 64 28.654 64 64s-28.654 64-64 64h-613.49l210.746 210.746c12.496 12.496 18.744 28.876 18.744 45.254s-6.248 32.758-18.744 45.254c-24.994 24.994-65.516 24.994-90.51 0z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "arrow-left", + "left", + "previous" + ], + "defaultCode": 59968, + "grid": 16 + }, + { + "id": 321, + "paths": [ + "M0 512c0 282.77 229.23 512 512 512s512-229.23 512-512-229.23-512-512-512-512 229.23-512 512zM928 512c0 229.75-186.25 416-416 416s-416-186.25-416-416 186.25-416 416-416 416 186.25 416 416z", + "M706.744 669.256l90.512-90.512-285.256-285.254-285.254 285.256 90.508 90.508 194.746-194.744z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "circle-up", + "up", + "circle-top", + "arrow" + ], + "defaultCode": 59969, + "grid": 16 + }, + { + "id": 322, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 928c-229.75 0-416-186.25-416-416s186.25-416 416-416 416 186.25 416 416-186.25 416-416 416z", + "M354.744 706.744l90.512 90.512 285.254-285.256-285.256-285.254-90.508 90.508 194.744 194.746z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "circle-right", + "right", + "circle-next", + "arrow" + ], + "defaultCode": 59970, + "grid": 16 + }, + { + "id": 323, + "paths": [ + "M1024 512c0-282.77-229.23-512-512-512s-512 229.23-512 512 229.23 512 512 512 512-229.23 512-512zM96 512c0-229.75 186.25-416 416-416s416 186.25 416 416-186.25 416-416 416-416-186.25-416-416z", + "M317.256 354.744l-90.512 90.512 285.256 285.254 285.254-285.256-90.508-90.508-194.746 194.744z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "circle-down", + "down", + "circle-bottom", + "arrow" + ], + "defaultCode": 59971, + "grid": 16 + }, + { + "id": 324, + "paths": [ + "M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416z", + "M669.256 317.256l-90.512-90.512-285.254 285.256 285.256 285.254 90.508-90.508-194.744-194.746z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "circle-left", + "left", + "circle-previous", + "arrow" + ], + "defaultCode": 59972, + "grid": 16 + }, + { + "id": 325, + "paths": [ + "M960 0h64v512h-64v-512z", + "M0 512h64v512h-64v-512z", + "M320 704h704v128h-704v160l-224-224 224-224v160z", + "M704 320h-704v-128h704v-160l224 224-224 224z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "tab", + "arrows" + ], + "defaultCode": 59973, + "grid": 16 + }, + { + "id": 326, + "paths": [ + "M704 512v384h64v-384h160l-192-192-192 192z", + "M64 192h96v64h-96v-64z", + "M192 192h96v64h-96v-64z", + "M320 192h64v96h-64v-96z", + "M64 416h64v96h-64v-96z", + "M160 448h96v64h-96v-64z", + "M288 448h96v64h-96v-64z", + "M64 288h64v96h-64v-96z", + "M320 320h64v96h-64v-96z", + "M320 704v192h-192v-192h192zM384 640h-320v320h320v-320z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "move-up", + "sort", + "arrange" + ], + "defaultCode": 59974, + "grid": 16 + }, + { + "id": 327, + "paths": [ + "M768 704v-384h-64v384h-160l192 192 192-192z", + "M320 256v192h-192v-192h192zM384 192h-320v320h320v-320z", + "M64 640h96v64h-96v-64z", + "M192 640h96v64h-96v-64z", + "M320 640h64v96h-64v-96z", + "M64 864h64v96h-64v-96z", + "M160 896h96v64h-96v-64z", + "M288 896h96v64h-96v-64z", + "M64 736h64v96h-64v-96z", + "M320 768h64v96h-64v-96z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "move-down", + "sort", + "arrange" + ], + "defaultCode": 59975, + "grid": 16 + }, + { + "id": 328, + "paths": [ + "M320 768v-768h-128v768h-160l224 224 224-224h-160z", + "M928 1024h-256c-11.8 0-22.644-6.496-28.214-16.9-5.566-10.404-4.958-23.030 1.59-32.85l222.832-334.25h-196.208c-17.672 0-32-14.328-32-32s14.328-32 32-32h256c11.8 0 22.644 6.496 28.214 16.9 5.566 10.404 4.958 23.030-1.59 32.85l-222.83 334.25h196.206c17.672 0 32 14.328 32 32s-14.328 32-32 32z", + "M1020.622 401.686l-192.002-384c-5.42-10.842-16.502-17.69-28.622-17.69-12.122 0-23.202 6.848-28.624 17.69l-191.996 384c-7.904 15.806-1.496 35.030 14.31 42.932 4.594 2.296 9.476 3.386 14.288 3.386 11.736 0 23.040-6.484 28.644-17.698l55.156-110.31h216.446l55.156 110.31c7.902 15.806 27.124 22.21 42.932 14.31 15.808-7.902 22.216-27.124 14.312-42.93zM723.778 255.996l76.22-152.446 76.224 152.446h-152.444z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "sort-alpha-asc", + "arrange", + "alphabetic" + ], + "defaultCode": 59976, + "grid": 16 + }, + { + "id": 329, + "paths": [ + "M320 768v-768h-128v768h-160l224 224 224-224h-160z", + "M928 448h-256c-11.8 0-22.644-6.496-28.214-16.9-5.566-10.406-4.958-23.030 1.59-32.85l222.832-334.25h-196.208c-17.672 0-32-14.328-32-32s14.328-32 32-32h256c11.8 0 22.644 6.496 28.214 16.9 5.566 10.406 4.958 23.030-1.59 32.85l-222.83 334.25h196.206c17.672 0 32 14.328 32 32s-14.328 32-32 32z", + "M1020.622 977.69l-192.002-384c-5.42-10.842-16.502-17.69-28.622-17.69-12.122 0-23.202 6.848-28.624 17.69l-191.996 384c-7.904 15.806-1.496 35.030 14.31 42.932 4.594 2.296 9.476 3.386 14.288 3.386 11.736 0 23.040-6.484 28.644-17.698l55.158-110.31h216.446l55.156 110.31c7.902 15.806 27.124 22.21 42.932 14.31 15.806-7.902 22.214-27.124 14.31-42.93zM723.778 832l76.22-152.446 76.226 152.446h-152.446z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "sort-alpha-desc", + "arrange", + "alphabetic" + ], + "defaultCode": 59977, + "grid": 16 + }, + { + "id": 330, + "paths": [ + "M320 768v-768h-128v768h-160l224 224 224-224h-160z", + "M864 448c-17.674 0-32-14.328-32-32v-352h-32c-17.674 0-32-14.328-32-32s14.326-32 32-32h64c17.674 0 32 14.328 32 32v384c0 17.672-14.326 32-32 32z", + "M928 576h-192c-17.674 0-32 14.326-32 32v192c0 17.674 14.326 32 32 32h160v128h-160c-17.674 0-32 14.326-32 32s14.326 32 32 32h192c17.674 0 32-14.326 32-32v-384c0-17.674-14.326-32-32-32zM768 640h128v128h-128v-128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "sort-numeric-asc", + "arrange" + ], + "defaultCode": 59978, + "grid": 16 + }, + { + "id": 331, + "paths": [ + "M320 768v-768h-128v768h-160l224 224 224-224h-160z", + "M864 1024c-17.674 0-32-14.328-32-32v-352h-32c-17.674 0-32-14.328-32-32s14.326-32 32-32h64c17.674 0 32 14.328 32 32v384c0 17.672-14.326 32-32 32z", + "M928 0h-192c-17.674 0-32 14.326-32 32v192c0 17.674 14.326 32 32 32h160v128h-160c-17.674 0-32 14.326-32 32s14.326 32 32 32h192c17.674 0 32-14.326 32-32v-384c0-17.674-14.326-32-32-32zM768 64h128v128h-128v-128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "sort-numberic-desc", + "arrange" + ], + "defaultCode": 59979, + "grid": 16 + }, + { + "id": 332, + "paths": [ + "M320 768v-768h-128v768h-160l224 224 224-224h-160z", + "M448 576h576v128h-576v-128z", + "M448 384h448v128h-448v-128z", + "M448 192h320v128h-320v-128z", + "M448 0h192v128h-192v-128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "sort-amount-asc", + "arrange" + ], + "defaultCode": 59980, + "grid": 16 + }, + { + "id": 333, + "paths": [ + "M320 768v-768h-128v768h-160l224 224 224-224h-160z", + "M448 0h576v128h-576v-128z", + "M448 192h448v128h-448v-128z", + "M448 384h320v128h-320v-128z", + "M448 576h192v128h-192v-128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "sort-amount-desc", + "arrange" + ], + "defaultCode": 59981, + "grid": 16 + }, + { + "id": 334, + "paths": [ + "M736 896c-88.224 0-160-71.776-160-160v-96h-128v96c0 88.224-71.776 160-160 160s-160-71.776-160-160 71.776-160 160-160h96v-128h-96c-88.224 0-160-71.776-160-160s71.776-160 160-160 160 71.776 160 160v96h128v-96c0-88.224 71.776-160 160-160s160 71.776 160 160-71.776 160-160 160h-96v128h96c88.224 0 160 71.776 160 160s-71.774 160-160 160zM640 640v96c0 52.934 43.066 96 96 96s96-43.066 96-96-43.066-96-96-96h-96zM288 640c-52.934 0-96 43.066-96 96s43.066 96 96 96 96-43.066 96-96v-96h-96zM448 576h128v-128h-128v128zM640 384h96c52.934 0 96-43.066 96-96s-43.066-96-96-96-96 43.066-96 96v96zM288 192c-52.934 0-96 43.066-96 96s43.066 96 96 96h96v-96c0-52.934-43.064-96-96-96z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "command", + "cmd" + ], + "defaultCode": 59982, + "grid": 16 + }, + { + "id": 335, + "paths": [ + "M672 896h-320c-17.672 0-32-14.326-32-32v-352h-128c-12.942 0-24.612-7.796-29.564-19.754-4.954-11.958-2.214-25.722 6.936-34.874l320-320c12.498-12.496 32.758-12.496 45.254 0l320 320c9.152 9.152 11.89 22.916 6.938 34.874s-16.62 19.754-29.564 19.754h-128v352c0 17.674-14.326 32-32 32zM384 832h256v-352c0-17.672 14.326-32 32-32h82.744l-242.744-242.746-242.744 242.746h82.744c17.672 0 32 14.328 32 32v352z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "shift" + ], + "defaultCode": 59983, + "grid": 16 + }, + { + "id": 336, + "paths": [ + "M736.014 448c-8.908 0-17.77-3.698-24.096-10.928l-199.918-228.478-199.918 228.478c-11.636 13.3-31.856 14.65-45.154 3.010-13.3-11.638-14.648-31.854-3.010-45.154l224-256c6.076-6.944 14.854-10.928 24.082-10.928s18.006 3.984 24.082 10.928l224 256c11.638 13.3 10.292 33.516-3.010 45.154-6.070 5.312-13.582 7.918-21.058 7.918z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "ctrl", + "control" + ], + "defaultCode": 59984, + "grid": 16 + }, + { + "id": 337, + "paths": [ + "M928 832h-256c-12.646 0-24.106-7.448-29.242-19.004l-247.554-556.996h-299.204c-17.672 0-32-14.328-32-32s14.328-32 32-32h320c12.646 0 24.106 7.448 29.242 19.004l247.556 556.996h235.202c17.674 0 32 14.326 32 32s-14.326 32-32 32z", + "M928 256h-320c-17.674 0-32-14.328-32-32s14.326-32 32-32h320c17.674 0 32 14.328 32 32s-14.326 32-32 32z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "opt", + "option", + "alt" + ], + "defaultCode": 59985, + "grid": 16 + }, + { + "id": 338, + "paths": [ + "M896 0h-768c-70.4 0-128 57.6-128 128v768c0 70.4 57.6 128 128 128h768c70.4 0 128-57.6 128-128v-768c0-70.4-57.6-128-128-128zM448 794.51l-237.254-237.256 90.51-90.508 146.744 146.744 306.746-306.746 90.508 90.51-397.254 397.256z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "checkbox-checked", + "checkbox", + "tick", + "checked", + "selected" + ], + "defaultCode": 59986, + "grid": 16 + }, + { + "id": 339, + "paths": [ + "M896 0h-768c-70.4 0-128 57.6-128 128v768c0 70.4 57.6 128 128 128h768c70.4 0 128-57.6 128-128v-768c0-70.4-57.6-128-128-128zM896 896h-768v-768h768v768z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "checkbox-unchecked", + "checkbox", + "unchecked", + "square" + ], + "defaultCode": 59987, + "grid": 16 + }, + { + "id": 340, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 896c-212.078 0-384-171.922-384-384s171.922-384 384-384c212.078 0 384 171.922 384 384s-171.922 384-384 384zM320 512c0-106.039 85.961-192 192-192s192 85.961 192 192c0 106.039-85.961 192-192 192s-192-85.961-192-192z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "radio-checked", + "radio-button" + ], + "defaultCode": 59988, + "grid": 16 + }, + { + "id": 341, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 640c-70.692 0-128-57.306-128-128 0-70.692 57.308-128 128-128 70.694 0 128 57.308 128 128 0 70.694-57.306 128-128 128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "radio-checked", + "radio-button" + ], + "defaultCode": 59989, + "grid": 16 + }, + { + "id": 342, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 896c-212.078 0-384-171.922-384-384s171.922-384 384-384c212.078 0 384 171.922 384 384s-171.922 384-384 384z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "radio-unchecked", + "radio-button", + "circle" + ], + "defaultCode": 59990, + "grid": 16 + }, + { + "id": 343, + "paths": [ + "M832 256l192-192-64-64-192 192h-448v-192h-128v192h-192v128h192v512h512v192h128v-192h192v-128h-192v-448zM320 320h320l-320 320v-320zM384 704l320-320v320h-320z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "crop", + "resize", + "cut" + ], + "defaultCode": 59991, + "grid": 16 + }, + { + "id": 344, + "paths": [ + "M320 128h-128c-35.2 0-64 28.8-64 64v128c0 35.2 28.8 64 64 64h128c35.2 0 64-28.8 64-64v-128c0-35.2-28.8-64-64-64z", + "M704 384h128c35.2 0 64-28.8 64-64v-128c0-35.2-28.8-64-64-64h-128c-35.2 0-64 28.8-64 64v128c0 35.2 28.8 64 64 64zM704 192h128v128h-128v-128z", + "M320 640h-128c-35.2 0-64 28.8-64 64v128c0 35.2 28.8 64 64 64h128c35.2 0 64-28.8 64-64v-128c0-35.2-28.8-64-64-64zM320 832h-128v-128h128v128z", + "M832 640h-128c-35.2 0-64 28.8-64 64v128c0 35.2 28.8 64 64 64h128c35.2 0 64-28.8 64-64v-128c0-35.2-28.8-64-64-64z", + "M896 512h-64c-85.476 0-165.834-33.286-226.274-93.724-60.44-60.442-93.726-140.802-93.726-226.276v-64c0-70.4-57.6-128-128-128h-256c-70.4 0-128 57.6-128 128v256c0 70.4 57.6 128 128 128h64c85.476 0 165.834 33.286 226.274 93.724 60.44 60.442 93.726 140.802 93.726 226.276v64c0 70.4 57.6 128 128 128h256c70.4 0 128-57.6 128-128v-256c0-70.4-57.6-128-128-128zM960 896c0 16.954-6.696 32.986-18.856 45.144-12.158 12.16-28.19 18.856-45.144 18.856h-256c-16.954 0-32.986-6.696-45.144-18.856-12.16-12.158-18.856-28.19-18.856-45.144v-64c0-212.078-171.922-384-384-384h-64c-16.954 0-32.986-6.696-45.146-18.854-12.158-12.16-18.854-28.192-18.854-45.146v-256c0-16.954 6.696-32.986 18.854-45.146 12.16-12.158 28.192-18.854 45.146-18.854h256c16.954 0 32.986 6.696 45.146 18.854 12.158 12.16 18.854 28.192 18.854 45.146v64c0 212.078 171.922 384 384 384h64c16.954 0 32.986 6.696 45.144 18.856 12.16 12.158 18.856 28.19 18.856 45.144v256z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "make-group" + ], + "defaultCode": 59992, + "grid": 16 + }, + { + "id": 345, + "paths": [ + "M384 464c0 26.4-21.6 48-48 48h-96c-26.4 0-48-21.6-48-48v-96c0-26.4 21.6-48 48-48h96c26.4 0 48 21.6 48 48v96z", + "M704 464c0 26.4-21.6 48-48 48h-96c-26.4 0-48-21.6-48-48v-96c0-26.4 21.6-48 48-48h96c26.4 0 48 21.6 48 48v96z", + "M384 784c0 26.4-21.6 48-48 48h-96c-26.4 0-48-21.6-48-48v-96c0-26.4 21.6-48 48-48h96c26.4 0 48 21.6 48 48v96z", + "M704 784c0 26.4-21.6 48-48 48h-96c-26.4 0-48-21.6-48-48v-96c0-26.4 21.6-48 48-48h96c26.4 0 48 21.6 48 48v96z", + "M912.082 160l111.918-111.916v-48.084h-48.082l-111.918 111.916-111.918-111.916h-48.082v48.084l111.918 111.916-111.918 111.916v48.084h48.082l111.918-111.916 111.918 111.916h48.082v-48.084z", + "M0 768h64v128h-64v-128z", + "M0 576h64v128h-64v-128z", + "M832 448h64v128h-64v-128z", + "M832 832h64v128h-64v-128z", + "M832 640h64v128h-64v-128z", + "M0 384h64v128h-64v-128z", + "M0 192h64v128h-64v-128z", + "M512 128h128v64h-128v-64z", + "M320 128h128v64h-128v-64z", + "M128 128h128v64h-128v-64z", + "M448 960h128v64h-128v-64z", + "M640 960h128v64h-128v-64z", + "M256 960h128v64h-128v-64z", + "M64 960h128v64h-128v-64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "ungroup" + ], + "defaultCode": 59993, + "grid": 16 + }, + { + "id": 346, + "paths": [ + "M913.826 679.694c-66.684-104.204-181.078-150.064-255.51-102.434-6.428 4.116-12.334 8.804-17.744 13.982l-79.452-124.262 183.462-287.972c15.016-27.73 20.558-60.758 13.266-93.974-6.972-31.75-24.516-58.438-48.102-77.226l-12.278-7.808-217.468 340.114-217.47-340.114-12.276 7.806c-23.586 18.79-41.13 45.476-48.1 77.226-7.292 33.216-1.75 66.244 13.264 93.974l183.464 287.972-79.454 124.262c-5.41-5.178-11.316-9.868-17.744-13.982-74.432-47.63-188.826-1.77-255.51 102.434-66.68 104.2-60.398 227.286 14.032 274.914 74.43 47.632 188.824 1.77 255.508-102.432l164.286-257.87 164.288 257.872c66.684 104.202 181.078 150.064 255.508 102.432 74.428-47.63 80.71-170.716 14.030-274.914zM234.852 800.43c-30.018 46.904-68.534 69.726-94.572 75.446-0.004 0-0.004 0-0.004 0-8.49 1.868-20.294 3.010-28.324-2.128-8.898-5.694-14.804-20.748-15.8-40.276-1.616-31.644 9.642-68.836 30.888-102.034 30.014-46.906 68.53-69.726 94.562-75.444 8.496-1.866 20.308-3.010 28.336 2.126 8.898 5.694 14.802 20.75 15.798 40.272 1.618 31.65-9.64 68.84-30.884 102.038zM480 512c-17.672 0-32-14.328-32-32s14.328-32 32-32 32 14.328 32 32-14.328 32-32 32zM863.85 833.47c-0.996 19.528-6.902 34.582-15.8 40.276-8.030 5.138-19.834 3.996-28.324 2.128 0 0 0 0-0.004 0-26.040-5.718-64.554-28.542-94.572-75.446-21.244-33.198-32.502-70.388-30.884-102.038 0.996-19.522 6.9-34.578 15.798-40.272 8.028-5.136 19.84-3.992 28.336-2.126 26.034 5.716 64.548 28.538 94.562 75.444 21.246 33.198 32.502 70.39 30.888 102.034z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "scissors", + "cut" + ], + "defaultCode": 59994, + "grid": 16 + }, + { + "id": 347, + "paths": [ + "M512 0c-282.77 0-512 71.634-512 160v96l384 384v320c0 35.346 57.306 64 128 64 70.692 0 128-28.654 128-64v-320l384-384v-96c0-88.366-229.23-160-512-160zM94.384 138.824c23.944-13.658 57.582-26.62 97.278-37.488 87.944-24.076 201.708-37.336 320.338-37.336 118.628 0 232.394 13.26 320.338 37.336 39.696 10.868 73.334 23.83 97.28 37.488 15.792 9.006 24.324 16.624 28.296 21.176-3.972 4.552-12.506 12.168-28.296 21.176-23.946 13.658-57.584 26.62-97.28 37.488-87.942 24.076-201.708 37.336-320.338 37.336s-232.394-13.26-320.338-37.336c-39.696-10.868-73.334-23.83-97.278-37.488-15.792-9.008-24.324-16.624-28.298-21.176 3.974-4.552 12.506-12.168 28.298-21.176z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "filter", + "funnel" + ], + "defaultCode": 59995, + "grid": 16 + }, + { + "id": 348, + "paths": [ + "M799.596 16.208c-90.526 0-148.62-16.208-241.848-16.208-301.284 0-441.792 171.584-441.792 345.872 0 102.678 48.64 136.458 144.564 136.458-6.758-14.864-18.914-31.080-18.914-104.034 0-204.010 77.006-263.458 175.636-267.51 0 0-80.918 793.374-315.778 888.542v24.672h316.594l108.026-512h197.844l44.072-128h-214.908l51.944-246.19c59.446 12.156 117.542 24.316 167.532 24.316 62.148 0 118.894-18.914 149.968-162.126-37.826 12.16-78.362 16.208-122.94 16.208z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "font", + "typeface", + "typography", + "font-family", + "wysiwyg" + ], + "defaultCode": 59996, + "grid": 16 + }, + { + "id": 349, + "paths": [ + "M768 871.822c0-0.040 0.002-0.076 0.002-0.116l-0.344-436.562-127.492 6.19h-251.93v-21.494c0-81.542 5.8-162.976 17.24-194.716 7.896-21.948 22.598-41.744 43.698-58.836 20.618-16.702 41.178-25.17 61.11-25.17 16.772 0 30.702 2.878 41.402 8.554 15.026 8.562 29.716 22.964 43.67 42.818 36.95 52.504 51.99 66.454 60.094 72.376 13.804 10.094 30.512 15.212 49.658 15.212 18.668 0 34.962-6.97 48.436-20.714 13.372-13.636 20.15-30.682 20.15-50.666 0-21.452-8.916-44.204-26.502-67.622-17.184-22.888-43.708-41.742-78.834-56.032-34.322-13.964-72.94-21.044-114.778-21.044-60.716 0-116.012 14.596-164.356 43.384-48.424 28.834-85.558 68.952-110.37 119.24-22.994 46.604-21.334 134.706-22.732 214.712h-125.732v71.402h125.598v324.668c0 71.666-21.906 91.008-30.216 101.324-11.436 14.202-32.552 29.104-60.444 29.104h-38.654v56.166h385.326v-56.168h-6.708c-91.144 0-117.020-9.832-117.020-120.842 0-0.018 0-0.034 0-0.048l-0.038-334.206h140.204c74.404 0 91.496 3.444 95.392 4.924 4.706 1.79 10.798 4.832 13.084 9.144 0.868 1.684 5.194 25.008 5.194 82.972v250.67c0 58.454-7.124 77.896-11.45 84.402-9.248 14.194-20.41 22.066-54.66 22.904v56.248h293.61v-55.846c-91.608 0-101.608-9.82-101.608-96.332z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "ligature", + "typography", + "font" + ], + "defaultCode": 59997, + "grid": 16 + }, + { + "id": 350, + "paths": [ + "M855.328 917.454c-11.734 0-83.62-13.2-88.020-29.338-10.274-39.612-11.738-82.152-11.738-130.568v-540.974c0-80.686 16.138-127.632 16.138-127.632-1.468-7.334-8.804-23.472-17.604-23.472h-4.404c-4.4 0-55.746 32.276-102.692 32.276-38.14-0.002-61.89-33.746-105.902-33.746-185.106 0-271.942 150.31-271.942 363.032v11.072c0 4.402-2.934 8.804-7.336 8.804h-60.148c-7.336 0-22.006 41.078-22.006 60.148 0 5.87 1.466 8.8 4.4 8.8h77.754c4.402 0 7.336 5.872 7.336 10.27 0 130.566-1.466 259.298-1.466 259.298 0 20.54-1.466 66.016-10.27 102.692-4.4 16.138-71.884 29.338-89.488 29.338-7.334 0-7.334 35.212 0 42.546 60.148-2.934 99.758-7.334 159.908-7.334 55.75 0 98.292 4.4 156.974 7.334 2.934-8.802 2.934-42.546-4.4-42.546-11.736 0-83.624-13.2-88.022-29.338-10.27-39.612-10.27-82.152-11.738-130.568v-232.888c0-4.402 4.402-8.804 8.802-8.804h151.104c10.27-20.538 17.606-45.476 17.606-58.68 0-8.802 0-10.27-7.336-10.27h-162.84c-2.934 0-7.336-4.402-7.336-7.334v-52.82c0-130.568 53.482-245.538 142.97-245.538 63.372 0 118.666 41.060 118.666 197.922 0 0.006 0 0.012 0 0.018 0.208 4.036 0.314 7.294 0.314 9.452v436.816c0 20.54-1.47 66.016-10.27 102.692-4.404 16.138-71.884 29.338-89.492 29.338-7.336 0-7.336 35.212 0 42.546 60.15-2.934 99.762-7.334 159.912-7.334 55.746 0 98.288 4.4 156.972 7.334 2.928-8.8 2.928-42.544-4.406-42.544z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "ligature", + "typography", + "font" + ], + "defaultCode": 59998, + "grid": 16 + }, + { + "id": 351, + "paths": [ + "M896 768h128l-160 192-160-192h128v-512h-128l160-192 160 192h-128zM640 64v256l-64-128h-192v704h128v64h-384v-64h128v-704h-192l-64 128v-256z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "text-height", + "wysiwyg" + ], + "defaultCode": 59999, + "grid": 16 + }, + { + "id": 352, + "paths": [ + "M256 896v128l-192-160 192-160v128h512v-128l192 160-192 160v-128zM832 64v256l-64-128h-192v448h128v64h-384v-64h128v-448h-192l-64 128v-256z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "text-width", + "wysiwyg" + ], + "defaultCode": 60000, + "grid": 16 + }, + { + "id": 353, + "paths": [ + "M64 512h384v128h-128v384h-128v-384h-128zM960 256h-251.75v768h-136.5v-768h-251.75v-128h640z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "font-size", + "wysiwyg" + ], + "defaultCode": 60001, + "grid": 16 + }, + { + "id": 354, + "paths": [ + "M707.88 484.652c37.498-44.542 60.12-102.008 60.12-164.652 0-141.16-114.842-256-256-256h-320v896h384c141.158 0 256-114.842 256-256 0-92.956-49.798-174.496-124.12-219.348zM384 192h101.5c55.968 0 101.5 57.42 101.5 128s-45.532 128-101.5 128h-101.5v-256zM543 832h-159v-256h159c58.45 0 106 57.42 106 128s-47.55 128-106 128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "bold", + "wysiwyg" + ], + "defaultCode": 60002, + "grid": 16 + }, + { + "id": 355, + "paths": [ + "M704 64h128v416c0 159.058-143.268 288-320 288-176.73 0-320-128.942-320-288v-416h128v416c0 40.166 18.238 78.704 51.354 108.506 36.896 33.204 86.846 51.494 140.646 51.494s103.75-18.29 140.646-51.494c33.116-29.802 51.354-68.34 51.354-108.506v-416zM192 832h640v128h-640z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "underline", + "wysiwyg" + ], + "defaultCode": 60003, + "grid": 16 + }, + { + "id": 356, + "paths": [ + "M896 64v64h-128l-320 768h128v64h-448v-64h128l320-768h-128v-64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "italic", + "wysiwyg" + ], + "defaultCode": 60004, + "grid": 16 + }, + { + "id": 357, + "paths": [ + "M1024 512v64h-234.506c27.504 38.51 42.506 82.692 42.506 128 0 70.878-36.66 139.026-100.58 186.964-59.358 44.518-137.284 69.036-219.42 69.036-82.138 0-160.062-24.518-219.42-69.036-63.92-47.938-100.58-116.086-100.58-186.964h128c0 69.382 87.926 128 192 128s192-58.618 192-128c0-69.382-87.926-128-192-128h-512v-64h299.518c-2.338-1.654-4.656-3.324-6.938-5.036-63.92-47.94-100.58-116.086-100.58-186.964s36.66-139.024 100.58-186.964c59.358-44.518 137.282-69.036 219.42-69.036 82.136 0 160.062 24.518 219.42 69.036 63.92 47.94 100.58 116.086 100.58 186.964h-128c0-69.382-87.926-128-192-128s-192 58.618-192 128c0 69.382 87.926 128 192 128 78.978 0 154.054 22.678 212.482 64h299.518z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "strikethrough", + "wysiwyg" + ], + "defaultCode": 60005, + "grid": 16 + }, + { + "id": 358, + "paths": [ + "M704 896h256l64-128v256h-384v-214.214c131.112-56.484 224-197.162 224-361.786 0-214.432-157.598-382.266-352-382.266-194.406 0-352 167.832-352 382.266 0 164.624 92.886 305.302 224 361.786v214.214h-384v-256l64 128h256v-32.59c-187.63-66.46-320-227.402-320-415.41 0-247.424 229.23-448 512-448s512 200.576 512 448c0 188.008-132.37 348.95-320 415.41v32.59z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "omega", + "wysiwyg", + "symbols" + ], + "defaultCode": 60006, + "grid": 16 + }, + { + "id": 359, + "paths": [ + "M941.606 734.708l44.394-94.708h38l-64 384h-960v-74.242l331.546-391.212-331.546-331.546v-227h980l44 256h-34.376l-18.72-38.88c-35.318-73.364-61.904-89.12-138.904-89.12h-662l353.056 353.056-297.42 350.944h542.364c116.008 0 146.648-41.578 173.606-97.292z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "sigma", + "wysiwyg", + "symbols" + ], + "defaultCode": 60007, + "grid": 16 + }, + { + "id": 360, + "paths": [ + "M0 512h128v64h-128zM192 512h192v64h-192zM448 512h128v64h-128zM640 512h192v64h-192zM896 512h128v64h-128zM880 0l16 448h-768l16-448h32l16 384h640l16-384zM144 1024l-16-384h768l-16 384h-32l-16-320h-640l-16 320z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "page-break", + "wysiwyg" + ], + "defaultCode": 60008, + "grid": 16 + }, + { + "id": 361, + "paths": [ + "M768 206v50h128v64h-192v-146l128-60v-50h-128v-64h192v146zM676 256h-136l-188 188-188-188h-136l256 256-256 256h136l188-188 188 188h136l-256-256z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "superscript", + "wysiwyg" + ], + "defaultCode": 60009, + "grid": 16 + }, + { + "id": 362, + "paths": [ + "M768 910v50h128v64h-192v-146l128-60v-50h-128v-64h192v146zM676 256h-136l-188 188-188-188h-136l256 256-256 256h136l188-188 188 188h136l-256-256z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "subscript", + "wysiwyg" + ], + "defaultCode": 60010, + "grid": 16 + }, + { + "id": 363, + "paths": [ + "M194.018 832l57.6-192h264.764l57.6 192h113.632l-192-640h-223.232l-192 640h113.636zM347.618 320h72.764l57.6 192h-187.964l57.6-192zM704 832l160-256 160 256h-320z", + "M864 128h-64c-17.644 0-32-14.356-32-32s14.356-32 32-32h128c17.674 0 32-14.328 32-32s-14.326-32-32-32h-128c-52.936 0-96 43.066-96 96 0 24.568 9.288 47.002 24.524 64 17.588 19.624 43.11 32 71.476 32h64c17.644 0 32 14.356 32 32s-14.356 32-32 32h-128c-17.674 0-32 14.328-32 32s14.326 32 32 32h128c52.936 0 96-43.066 96-96 0-24.568-9.288-47.002-24.524-64-17.588-19.624-43.108-32-71.476-32z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "superscript", + "wysiwyg" + ], + "defaultCode": 60011, + "grid": 16 + }, + { + "id": 364, + "paths": [ + "M194.018 832l57.6-192h264.764l57.6 192h113.632l-192-640h-223.232l-192 640h113.636zM347.618 320h72.764l57.6 192h-187.964l57.6-192zM1024 192l-160 256-160-256h320z", + "M864 832h-64c-17.644 0-32-14.356-32-32s14.356-32 32-32h128c17.674 0 32-14.328 32-32s-14.326-32-32-32h-128c-52.936 0-96 43.066-96 96 0 24.568 9.29 47.002 24.524 64 17.588 19.624 43.112 32 71.476 32h64c17.644 0 32 14.356 32 32s-14.356 32-32 32h-128c-17.674 0-32 14.328-32 32s14.326 32 32 32h128c52.936 0 96-43.066 96-96 0-24.568-9.29-47.002-24.524-64-17.588-19.624-43.108-32-71.476-32z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "subscript", + "wysiwyg" + ], + "defaultCode": 60012, + "grid": 16 + }, + { + "id": 365, + "paths": [ + "M322.018 832l57.6-192h264.764l57.6 192h113.632l-191.996-640h-223.236l-192 640h113.636zM475.618 320h72.764l57.6 192h-187.964l57.6-192z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "text-color", + "wysiwyg" + ], + "defaultCode": 60013, + "grid": 16 + }, + { + "id": 366, + "paths": [ + "M256 384v-384h768v384h-64v-320h-640v320zM1024 576v448h-768v-448h64v384h640v-384zM512 448h128v64h-128zM320 448h128v64h-128zM704 448h128v64h-128zM896 448h128v64h-128zM0 288l192 192-192 192z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "pagebreak", + "wysiwyg" + ], + "defaultCode": 60014, + "grid": 16 + }, + { + "id": 367, + "paths": [ + "M0 896h576v128h-576zM896 128h-302.56l-183.764 704h-132.288l183.762-704h-269.15v-128h704zM929.774 1024l-129.774-129.774-129.774 129.774-62.226-62.226 129.774-129.774-129.774-129.774 62.226-62.226 129.774 129.774 129.774-129.774 62.226 62.226-129.774 129.774 129.774 129.774z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "clear-formatting", + "wysiwyg", + "remove-style" + ], + "defaultCode": 60015, + "grid": 16 + }, + { + "id": 368, + "paths": [ + "M0 192v704h1024v-704h-1024zM384 640v-128h256v128h-256zM640 704v128h-256v-128h256zM640 320v128h-256v-128h256zM320 320v128h-256v-128h256zM64 512h256v128h-256v-128zM704 512h256v128h-256v-128zM704 448v-128h256v128h-256zM64 704h256v128h-256v-128zM704 832v-128h256v128h-256z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "table", + "wysiwyg" + ], + "defaultCode": 60016, + "grid": 16 + }, + { + "id": 369, + "paths": [ + "M0 64v896h1024v-896h-1024zM384 640v-192h256v192h-256zM640 704v192h-256v-192h256zM640 192v192h-256v-192h256zM320 192v192h-256v-192h256zM64 448h256v192h-256v-192zM704 448h256v192h-256v-192zM704 384v-192h256v192h-256zM64 704h256v192h-256v-192zM704 896v-192h256v192h-256z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "table", + "wysiwyg" + ], + "defaultCode": 60017, + "grid": 16 + }, + { + "id": 370, + "paths": [ + "M384 192h128v64h-128zM576 192h128v64h-128zM896 192v256h-192v-64h128v-128h-64v-64zM320 384h128v64h-128zM512 384h128v64h-128zM192 256v128h64v64h-128v-256h192v64zM384 576h128v64h-128zM576 576h128v64h-128zM896 576v256h-192v-64h128v-128h-64v-64zM320 768h128v64h-128zM512 768h128v64h-128zM192 640v128h64v64h-128v-256h192v64zM960 64h-896v896h896v-896zM1024 0v0 1024h-1024v-1024h1024z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "insert-template", + "wysiwyg" + ], + "defaultCode": 60018, + "grid": 16 + }, + { + "id": 371, + "paths": [ + "M384 0h512v128h-128v896h-128v-896h-128v896h-128v-512c-141.384 0-256-114.616-256-256s114.616-256 256-256z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "pilcrow", + "wysiwyg" + ], + "defaultCode": 60019, + "grid": 16 + }, + { + "id": 372, + "paths": [ + "M512 0c-141.384 0-256 114.616-256 256s114.616 256 256 256v512h128v-896h128v896h128v-896h128v-128h-512zM0 704l256-256-256-256z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "ltr", + "wysiwyg", + "left-to-right", + "direction" + ], + "defaultCode": 60020, + "grid": 16 + }, + { + "id": 373, + "paths": [ + "M256 0c-141.384 0-256 114.616-256 256s114.616 256 256 256v512h128v-896h128v896h128v-896h128v-128h-512zM1024 192l-256 256 256 256z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "rtl", + "wysiwyg", + "right-to-left", + "direction" + ], + "defaultCode": 60021, + "grid": 16 + }, + { + "id": 374, + "paths": [ + "M495.964 1024c-49.36 0-91.116-14.406-124.104-42.82-33.224-28.614-50.068-62.038-50.068-99.344 0-18.128 6.6-33.756 19.622-46.458 13.232-12.914 29.782-19.744 47.85-19.744 18.002 0 34.194 6.41 46.826 18.542 12.472 11.972 18.796 27.824 18.796 47.104 0 11.318-1.85 23.818-5.494 37.146-3.616 13.178-4.376 19.938-4.376 23.292 0 3.682 0.924 8.076 7.774 12.756 12.76 8.824 28.066 13.084 46.876 13.084 22.576 0 42.718-7.858 61.574-24.022 18.578-15.942 27.612-32.318 27.612-50.056 0-19.736-5.27-36.826-16.12-52.242-18.336-25.758-52.878-55.954-102.612-89.668-79.858-53.454-133.070-99.766-162.58-141.52-22.89-32.684-34.476-67.89-34.476-104.704 0-37.062 12.142-73.948 36.092-109.63 20.508-30.554 50.8-58.12 90.228-82.138-21.096-22.7-36.896-44.064-47.094-63.688-12.872-24.76-19.398-50.372-19.398-76.122 0-47.814 18.91-89.16 56.206-122.89 37.32-33.76 83.86-50.878 138.322-50.878 50.086 0 92.206 14.082 125.182 41.852 33.328 28.082 50.222 60.898 50.222 97.54 0 18.656-6.986 35.364-20.766 49.66l-0.276 0.282c-7.976 7.924-22.618 17.37-47.046 17.37-19.148 0-35.934-6.272-48.54-18.136-12.558-11.794-18.93-25.918-18.93-41.966 0-6.934 1.702-17.416 5.352-32.98 1.778-7.364 2.668-14.142 2.668-20.25 0-10.338-3.726-18.272-11.724-24.966-8.282-6.93-20.108-10.302-36.142-10.302-24.868 0-45.282 7.562-62.41 23.118-17.19 15.606-25.544 34.088-25.544 56.508 0 20.156 4.568 36.762 13.58 49.362 17.112 23.938 46.796 49.79 88.22 76.836 84.17 54.588 142.902 104.672 174.518 148.826 23.35 33.12 35.152 68.34 35.152 104.792 0 36.598-11.882 73.496-35.318 109.676-20.208 31.18-50.722 59.276-90.884 83.71 22.178 23.466 37.812 44.042 47.554 62.538 12.082 22.97 18.208 48.048 18.208 74.542 0 49.664-18.926 91.862-56.244 125.422-37.34 33.554-83.866 50.566-138.288 50.566zM446.416 356.346c-48.222 28.952-71.712 62.19-71.712 101.314 0 22.756 6.498 43.13 19.86 62.278 19.936 27.926 59.27 62.054 116.804 101.288 24.358 16.586 46.36 32.712 65.592 48.060 49.060-29.504 72.956-62.366 72.956-100.178 0-20.598-8.142-42.774-24.204-65.916-16.808-24.196-52.85-55.796-107.128-93.914-28.328-19.562-52.558-37.334-72.168-52.932z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "section", + "wysiwyg" + ], + "defaultCode": 60022, + "grid": 16 + }, + { + "id": 375, + "paths": [ + "M0 64h1024v128h-1024zM0 256h640v128h-640zM0 640h640v128h-640zM0 448h1024v128h-1024zM0 832h1024v128h-1024z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "paragraph-left", + "wysiwyg", + "align-left", + "left" + ], + "defaultCode": 60023, + "grid": 16 + }, + { + "id": 376, + "paths": [ + "M0 64h1024v128h-1024zM192 256h640v128h-640zM192 640h640v128h-640zM0 448h1024v128h-1024zM0 832h1024v128h-1024z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "paragraph-center", + "wysiwyg", + "align-center", + "center" + ], + "defaultCode": 60024, + "grid": 16 + }, + { + "id": 377, + "paths": [ + "M0 64h1024v128h-1024zM384 256h640v128h-640zM384 640h640v128h-640zM0 448h1024v128h-1024zM0 832h1024v128h-1024z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "paragraph-right", + "wysiwyg", + "align-right", + "right" + ], + "defaultCode": 60025, + "grid": 16 + }, + { + "id": 378, + "paths": [ + "M0 64h1024v128h-1024zM0 256h1024v128h-1024zM0 448h1024v128h-1024zM0 640h1024v128h-1024zM0 832h1024v128h-1024z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "paragraph-justify", + "wysiwyg", + "justify" + ], + "defaultCode": 60026, + "grid": 16 + }, + { + "id": 379, + "paths": [ + "M0 64h1024v128h-1024zM384 256h640v128h-640zM384 448h640v128h-640zM384 640h640v128h-640zM0 832h1024v128h-1024zM0 704v-384l256 192z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "indent-increase", + "wysiwyg" + ], + "defaultCode": 60027, + "grid": 16 + }, + { + "id": 380, + "paths": [ + "M0 64h1024v128h-1024zM384 256h640v128h-640zM384 448h640v128h-640zM384 640h640v128h-640zM0 832h1024v128h-1024zM256 320v384l-256-192z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "indent-decrease", + "wysiwyg" + ], + "defaultCode": 60028, + "grid": 16 + }, + { + "id": 381, + "paths": [ + "M256 640c0 0 58.824-192 384-192v192l384-256-384-256v192c-256 0-384 159.672-384 320zM704 768h-576v-384h125.876c10.094-11.918 20.912-23.334 32.488-34.18 43.964-41.19 96.562-72.652 156.114-93.82h-442.478v640h832v-268.624l-128 85.334v55.29z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "share", + "out", + "external", + "outside" + ], + "defaultCode": 60029, + "grid": 16 + }, + { + "id": 382, + "paths": [ + "M192 64v768h768v-768h-768zM896 768h-640v-640h640v640zM128 896v-672l-64-64v800h800l-64-64h-672z", + "M352 256l160 160-192 192 96 96 192-192 160 160v-416z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "new-tab", + "out", + "external", + "outside", + "popout", + "link", + "blank" + ], + "defaultCode": 60030, + "grid": 16 + }, + { + "id": 383, + "paths": [ + "M576 736l96 96 320-320-320-320-96 96 224 224z", + "M448 288l-96-96-320 320 320 320 96-96-224-224z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "embed", + "code", + "html", + "xml" + ], + "defaultCode": 60031, + "grid": 16 + }, + { + "id": 384, + "paths": [ + "M832 736l96 96 320-320-320-320-96 96 224 224z", + "M448 288l-96-96-320 320 320 320 96-96-224-224z", + "M701.298 150.519l69.468 18.944-191.987 704.026-69.468-18.944 191.987-704.026z" + ], + "width": 1280, + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "embed", + "code", + "html", + "xml" + ], + "defaultCode": 60032, + "grid": 16 + }, + { + "id": 385, + "paths": [ + "M0 64v896h1024v-896h-1024zM960 896h-896v-768h896v768zM896 192h-768v640h768v-640zM448 512h-64v64h-64v64h-64v-64h64v-64h64v-64h-64v-64h-64v-64h64v64h64v64h64v64zM704 640h-192v-64h192v64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "terminal", + "console", + "cmd", + "command-line" + ], + "defaultCode": 60033, + "grid": 16 + }, + { + "id": 386, + "paths": [ + "M864 704c-45.16 0-85.92 18.738-115.012 48.83l-431.004-215.502c1.314-8.252 2.016-16.706 2.016-25.328s-0.702-17.076-2.016-25.326l431.004-215.502c29.092 30.090 69.852 48.828 115.012 48.828 88.366 0 160-71.634 160-160s-71.634-160-160-160-160 71.634-160 160c0 8.622 0.704 17.076 2.016 25.326l-431.004 215.504c-29.092-30.090-69.852-48.83-115.012-48.83-88.366 0-160 71.636-160 160 0 88.368 71.634 160 160 160 45.16 0 85.92-18.738 115.012-48.828l431.004 215.502c-1.312 8.25-2.016 16.704-2.016 25.326 0 88.368 71.634 160 160 160s160-71.632 160-160c0-88.364-71.634-160-160-160z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "share", + "social" + ], + "defaultCode": 60034, + "grid": 16 + }, + { + "id": 387, + "paths": [ + "M853.31 0h-682.62c-93.88 0-170.69 76.784-170.69 170.658v682.656c0 93.876 76.81 170.686 170.69 170.686h682.622c93.938 0 170.688-76.81 170.688-170.686v-682.656c0-93.874-76.75-170.658-170.69-170.658zM256 256h512c9.138 0 18.004 1.962 26.144 5.662l-282.144 329.168-282.144-329.17c8.14-3.696 17.006-5.66 26.144-5.66zM192 704v-384c0-1.34 0.056-2.672 0.14-4l187.664 218.94-185.598 185.6c-1.444-5.338-2.206-10.886-2.206-16.54zM768 768h-512c-5.654 0-11.202-0.762-16.54-2.206l182.118-182.118 90.422 105.496 90.424-105.494 182.116 182.118c-5.34 1.442-10.886 2.204-16.54 2.204zM832 704c0 5.654-0.762 11.2-2.206 16.54l-185.598-185.598 187.664-218.942c0.084 1.328 0.14 2.66 0.14 4v384z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "mail", + "contact", + "support", + "newsletter", + "letter", + "email", + "envelop", + "social" + ], + "defaultCode": 60035, + "grid": 16 + }, + { + "id": 388, + "paths": [ + "M853.342 0h-682.656c-93.874 0-170.686 76.81-170.686 170.69v682.622c0 93.938 76.812 170.688 170.686 170.688h682.656c93.876 0 170.658-76.75 170.658-170.69v-682.62c0-93.88-76.782-170.69-170.658-170.69zM853.342 128c7.988 0 15.546 2.334 22.020 6.342l-363.362 300.404-363.354-300.4c6.478-4.010 14.044-6.346 22.040-6.346h682.656zM170.686 896c-1.924 0-3.82-0.146-5.684-0.408l225.626-312.966-29.256-29.254-233.372 233.37v-611.138l384 464.396 384-464.394v611.136l-233.372-233.37-29.254 29.254 225.628 312.968c-1.858 0.26-3.746 0.406-5.662 0.406h-682.654z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "mail", + "contact", + "support", + "newsletter", + "letter", + "email", + "envelop", + "social" + ], + "defaultCode": 60036, + "grid": 16 + }, + { + "id": 389, + "paths": [ + "M853.342 0h-682.656c-93.874 0-170.686 76.81-170.686 170.69v682.622c0 93.938 76.812 170.688 170.686 170.688h682.656c93.876 0 170.658-76.75 170.658-170.69v-682.62c0-93.88-76.782-170.69-170.658-170.69zM182.628 886.626l-77.256-77.254 256-256 29.256 29.254-208 304zM153.372 198.628l29.256-29.256 329.372 265.374 329.374-265.374 29.254 29.256-358.628 422.626-358.628-422.626zM841.374 886.626l-208-304 29.254-29.254 256 256-77.254 77.254z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "mail", + "contact", + "support", + "newsletter", + "letter", + "email", + "envelop", + "social" + ], + "defaultCode": 60037, + "grid": 16 + }, + { + "id": 390, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM256 256h512c9.138 0 18.004 1.962 26.144 5.662l-282.144 329.168-282.144-329.17c8.14-3.696 17.006-5.66 26.144-5.66zM192 704v-384c0-1.34 0.056-2.672 0.14-4l187.664 218.942-185.598 185.598c-1.444-5.336-2.206-10.886-2.206-16.54zM768 768h-512c-5.654 0-11.202-0.762-16.54-2.208l182.118-182.118 90.422 105.498 90.424-105.494 182.116 182.12c-5.34 1.44-10.886 2.202-16.54 2.202zM832 704c0 5.654-0.762 11.2-2.206 16.54l-185.6-185.598 187.666-218.942c0.084 1.328 0.14 2.66 0.14 4v384z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "mail", + "contact", + "support", + "newsletter", + "letter", + "email", + "envelop", + "social" + ], + "defaultCode": 60038, + "grid": 16 + }, + { + "id": 391, + "paths": [ + "M925.6 885.2c-112.2 82.8-274.6 126.8-414.6 126.8-196.2 0-372.8-72.4-506.4-193.2-10.4-9.4-1.2-22.4 11.4-15 144.2 84 322.6 134.4 506.8 134.4 124.2 0 260.8-25.8 386.6-79.2 18.8-8 34.8 12.6 16.2 26.2z", + "M972.2 832c-14.4-18.4-94.8-8.8-131-4.4-11 1.2-12.6-8.2-2.8-15.2 64.2-45 169.4-32 181.6-17 12.4 15.2-3.2 120.6-63.4 171-9.2 7.8-18 3.6-14-6.6 13.8-33.8 44-109.4 29.6-127.8z", + "M707.4 757.6l0.2 0.2c24.8-21.8 69.4-60.8 94.6-81.8 10-8 8.2-21.4 0.4-32.6-22.6-31.2-46.6-56.6-46.6-114.2v-192c0-81.4 5.6-156-54.2-212-47.2-45.2-125.6-61.2-185.6-61.2-117.2 0-248 43.8-275.4 188.6-3 15.4 8.4 23.6 18.4 25.8l119.4 13c11.2-0.6 19.2-11.6 21.4-22.8 10.2-49.8 52-74 99-74 25.4 0 54.2 9.2 69.2 32 17.2 25.4 15 60 15 89.4v16c-71.4 8-164.8 13.2-231.6 42.6-77.2 33.4-131.4 101.4-131.4 201.4 0 128 80.6 192 184.4 192 87.6 0 135.4-20.6 203-89.8 22.4 32.4 29.6 48.2 70.6 82.2 9.4 5 21 4.6 29.2-2.8zM583.2 457.2c0 48 1.2 88-23 130.6-19.6 34.8-50.6 56-85.2 56-47.2 0-74.8-36-74.8-89.2 0-105 94.2-124 183.2-124v26.6z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "amazon", + "brand" + ], + "defaultCode": 60039, + "grid": 16 + }, + { + "id": 392, + "paths": [ + "M522.2 438.8v175.6h290.4c-11.8 75.4-87.8 220.8-290.4 220.8-174.8 0-317.4-144.8-317.4-323.2s142.6-323.2 317.4-323.2c99.4 0 166 42.4 204 79l139-133.8c-89.2-83.6-204.8-134-343-134-283 0-512 229-512 512s229 512 512 512c295.4 0 491.6-207.8 491.6-500.2 0-33.6-3.6-59.2-8-84.8l-483.6-0.2z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "google", + "brand" + ], + "defaultCode": 60040, + "grid": 16 + }, + { + "id": 393, + "paths": [ + "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM519.6 896c-212.2 0-384-171.8-384-384s171.8-384 384-384c103.6 0 190.4 37.8 257.2 100.4l-104.2 100.4c-28.6-27.4-78.4-59.2-153-59.2-131.2 0-238 108.6-238 242.4s107 242.4 238 242.4c152 0 209-109.2 217.8-165.6h-217.8v-131.6h362.6c3.2 19.2 6 38.4 6 63.6 0.2 219.4-146.8 375.2-368.6 375.2z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "google", + "brand" + ], + "defaultCode": 60041, + "grid": 16 + }, + { + "id": 394, + "paths": [ + "M512 0c-282.8 0-512 229.2-512 512s229.2 512 512 512 512-229.2 512-512-229.2-512-512-512zM519.6 896c-212.2 0-384-171.8-384-384s171.8-384 384-384c103.6 0 190.4 37.8 257.2 100.4l-104.2 100.4c-28.6-27.4-78.4-59.2-153-59.2-131.2 0-238 108.6-238 242.4s107 242.4 238 242.4c152 0 209-109.2 217.8-165.6h-217.8v-131.6h362.6c3.2 19.2 6 38.4 6 63.6 0.2 219.4-146.8 375.2-368.6 375.2z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "google", + "brand" + ], + "defaultCode": 60042, + "grid": 16 + }, + { + "id": 395, + "paths": [ + "M325.8 457.4v111.8h184.8c-7.4 48-55.8 140.6-184.8 140.6-111.2 0-202-92.2-202-205.8s90.8-205.8 202-205.8c63.4 0 105.6 27 129.8 50.2l88.4-85.2c-56.8-53-130.4-85.2-218.2-85.2-180.2 0.2-325.8 145.8-325.8 326s145.6 325.8 325.8 325.8c188 0 312.8-132.2 312.8-318.4 0-21.4-2.4-37.8-5.2-54h-307.6z", + "M1024 448h-96v-96h-96v96h-96v96h96v96h96v-96h96z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "google-plus", + "brand", + "social" + ], + "defaultCode": 60043, + "grid": 16 + }, + { + "id": 396, + "paths": [ + "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM384 768c-141.6 0-256-114.4-256-256s114.4-256 256-256c69.2 0 127 25.2 171.6 67l-69.6 66.8c-19-18.2-52.2-39.4-102-39.4-87.4 0-158.8 72.4-158.8 161.6s71.4 161.6 158.8 161.6c101.4 0 139.4-72.8 145.2-110.4h-145.2v-87.8h241.8c2.2 12.8 4 25.6 4 42.4 0 146.4-98 250.2-245.8 250.2zM896 512h-64v64h-64v-64h-64v-64h64v-64h64v64h64v64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "google-plus", + "brand", + "social" + ], + "defaultCode": 60044, + "grid": 16 + }, + { + "id": 397, + "paths": [ + "M512 0c-282.8 0-512 229.2-512 512s229.2 512 512 512 512-229.2 512-512-229.2-512-512-512zM384 768c-141.6 0-256-114.4-256-256s114.4-256 256-256c69.2 0 127 25.2 171.6 67l-69.6 66.8c-19-18.2-52.2-39.4-102-39.4-87.4 0-158.8 72.4-158.8 161.6s71.4 161.6 158.8 161.6c101.4 0 139.4-72.8 145.2-110.4h-145.2v-87.8h241.8c2.2 12.8 4 25.6 4 42.4 0 146.4-98 250.2-245.8 250.2zM832 512v64h-64v-64h-64v-64h64v-64h64v64h64v64h-64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "google-plus", + "brand", + "social" + ], + "defaultCode": 60045, + "grid": 16 + }, + { + "id": 398, + "paths": [ + "M511.8 0c-244.2 0-442.2 198-442.2 442.2 0 231.4 210.8 419 442.2 419v162.8c268.6-136.2 442.6-355.6 442.6-581.8 0-244.2-198.4-442.2-442.6-442.2zM448 512c0 53-28.6 96-64 96v-96h-128v-192h192v192zM768 512c0 53-28.6 96-64 96v-96h-128v-192h192v192z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "hangouts", + "brand", + "social" + ], + "defaultCode": 60046, + "grid": 16 + }, + { + "id": 399, + "paths": [ + "M438 640l-184.6 320h580.6l184.6-320z", + "M992.4 576l-295.6-512h-369.6l295.6 512z", + "M290.2 128l-290.2 502.8 184.8 320 290.2-502.8z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "google-drive", + "brand" + ], + "defaultCode": 60047, + "grid": 16 + }, + { + "id": 400, + "paths": [ + "M608 192h160v-192h-160c-123.514 0-224 100.486-224 224v96h-128v192h128v512h192v-512h160l32-192h-192v-96c0-17.346 14.654-32 32-32z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "facebook", + "brand", + "social" + ], + "defaultCode": 60048, + "grid": 16 + }, + { + "id": 401, + "paths": [ + "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h416v-448h-128v-128h128v-64c0-105.8 86.2-192 192-192h128v128h-128c-35.2 0-64 28.8-64 64v64h192l-32 128h-160v448h288c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "facebook", + "brand", + "social" + ], + "defaultCode": 60049, + "grid": 16 + }, + { + "id": 402, + "paths": [ + "M512 92.2c136.8 0 153 0.6 206.8 3 50 2.2 77 10.6 95 17.6 23.8 9.2 41 20.4 58.8 38.2 18 18 29 35 38.4 58.8 7 18 15.4 45.2 17.6 95 2.4 54 3 70.2 3 206.8s-0.6 153-3 206.8c-2.2 50-10.6 77-17.6 95-9.2 23.8-20.4 41-38.2 58.8-18 18-35 29-58.8 38.4-18 7-45.2 15.4-95 17.6-54 2.4-70.2 3-206.8 3s-153-0.6-206.8-3c-50-2.2-77-10.6-95-17.6-23.8-9.2-41-20.4-58.8-38.2-18-18-29-35-38.4-58.8-7-18-15.4-45.2-17.6-95-2.4-54-3-70.2-3-206.8s0.6-153 3-206.8c2.2-50 10.6-77 17.6-95 9.2-23.8 20.4-41 38.2-58.8 18-18 35-29 58.8-38.4 18-7 45.2-15.4 95-17.6 53.8-2.4 70-3 206.8-3zM512 0c-139 0-156.4 0.6-211 3-54.4 2.4-91.8 11.2-124.2 23.8-33.8 13.2-62.4 30.6-90.8 59.2-28.6 28.4-46 57-59.2 90.6-12.6 32.6-21.4 69.8-23.8 124.2-2.4 54.8-3 72.2-3 211.2s0.6 156.4 3 211c2.4 54.4 11.2 91.8 23.8 124.2 13.2 33.8 30.6 62.4 59.2 90.8 28.4 28.4 57 46 90.6 59 32.6 12.6 69.8 21.4 124.2 23.8 54.6 2.4 72 3 211 3s156.4-0.6 211-3c54.4-2.4 91.8-11.2 124.2-23.8 33.6-13 62.2-30.6 90.6-59s46-57 59-90.6c12.6-32.6 21.4-69.8 23.8-124.2 2.4-54.6 3-72 3-211s-0.6-156.4-3-211c-2.4-54.4-11.2-91.8-23.8-124.2-12.6-34-30-62.6-58.6-91-28.4-28.4-57-46-90.6-59-32.6-12.6-69.8-21.4-124.2-23.8-54.8-2.6-72.2-3.2-211.2-3.2v0z", + "M512 249c-145.2 0-263 117.8-263 263s117.8 263 263 263 263-117.8 263-263c0-145.2-117.8-263-263-263zM512 682.6c-94.2 0-170.6-76.4-170.6-170.6s76.4-170.6 170.6-170.6c94.2 0 170.6 76.4 170.6 170.6s-76.4 170.6-170.6 170.6z", + "M846.8 238.6c0 33.91-27.49 61.4-61.4 61.4s-61.4-27.49-61.4-61.4c0-33.91 27.49-61.4 61.4-61.4s61.4 27.49 61.4 61.4z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "instagram", + "brand", + "social" + ], + "defaultCode": 60050, + "grid": 16 + }, + { + "id": 403, + "paths": [ + "M873 148.8c-95.8-96-223.2-148.8-359-148.8-279.6 0-507.2 227.6-507.2 507.4 0 89.4 23.4 176.8 67.8 253.6l-72 263 269-70.6c74.2 40.4 157.6 61.8 242.4 61.8h0.2c0 0 0 0 0 0 279.6 0 507.4-227.6 507.4-507.4 0-135.6-52.8-263-148.6-359zM514.2 929.6v0c-75.8 0-150-20.4-214.8-58.8l-15.4-9.2-159.6 41.8 42.6-155.6-10-16c-42.4-67-64.6-144.6-64.6-224.4 0-232.6 189.2-421.8 422-421.8 112.6 0 218.6 44 298.2 123.6 79.6 79.8 123.4 185.6 123.4 298.4-0.2 232.8-189.4 422-421.8 422zM745.4 613.6c-12.6-6.4-75-37-86.6-41.2s-20-6.4-28.6 6.4c-8.4 12.6-32.8 41.2-40.2 49.8-7.4 8.4-14.8 9.6-27.4 3.2s-53.6-19.8-102-63c-37.6-33.6-63.2-75.2-70.6-87.8s-0.8-19.6 5.6-25.8c5.8-5.6 12.6-14.8 19-22.2s8.4-12.6 12.6-21.2c4.2-8.4 2.2-15.8-1-22.2s-28.6-68.8-39-94.2c-10.2-24.8-20.8-21.4-28.6-21.8-7.4-0.4-15.8-0.4-24.2-0.4s-22.2 3.2-33.8 15.8c-11.6 12.6-44.4 43.4-44.4 105.8s45.4 122.6 51.8 131.2c6.4 8.4 89.4 136.6 216.6 191.4 30.2 13 53.8 20.8 72.2 26.8 30.4 9.6 58 8.2 79.8 5 24.4-3.6 75-30.6 85.6-60.2s10.6-55 7.4-60.2c-3-5.6-11.4-8.8-24.2-15.2z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "whatsapp", + "brand", + "social" + ], + "defaultCode": 60051, + "grid": 16 + }, + { + "id": 404, + "paths": [ + "M512 0c-281.6 0-512 230.4-512 512s230.4 512 512 512 512-230.4 512-512-227.8-512-512-512zM747.6 739.8c-10.2 15.4-28.2 20.4-43.6 10.2-120.4-74.2-271.4-89.6-450.6-48.6-18 5.2-33.2-7.6-38.4-23-5.2-18 7.6-33.2 23-38.4 194.6-43.6 363.6-25.6 496.6 56.4 18 7.6 20.6 28 13 43.4zM809 599c-12.8 18-35.8 25.6-53.8 12.8-138.2-84.4-348.2-110-509.4-58.8-20.4 5.2-43.6-5.2-48.6-25.6-5.2-20.4 5.2-43.6 25.6-48.6 186.8-56.4 417.2-28.2 576 69.2 15.2 7.6 23 33.2 10.2 51zM814 455.6c-163.8-97.2-437.8-107.6-594-58.8-25.6 7.6-51.2-7.6-58.8-30.8-7.6-25.6 7.6-51.2 30.8-58.8 181.8-53.8 481.2-43.6 670.8 69.2 23 12.8 30.8 43.6 18 66.6-13 17.8-43.6 25.4-66.8 12.6z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "spotify", + "brand", + "social" + ], + "defaultCode": 60052, + "grid": 16 + }, + { + "id": 405, + "paths": [ + "M512 0c-282.8 0-512 229.2-512 512s229.2 512 512 512 512-229.2 512-512-229.2-512-512-512zM763.6 351l-84 395.8c-5.8 28.2-22.8 34.8-46.4 21.8l-128-94.6-61.4 59.8c-7.2 7-12.8 12.8-25.6 12.8-16.6 0-13.8-6.2-19.4-22l-43.6-143.2-126.6-39.4c-27.4-8.4-27.6-27.2 6.2-40.6l493.2-190.4c22.4-10.2 44.2 5.4 35.6 40z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "telegram", + "brand", + "social" + ], + "defaultCode": 60053, + "grid": 16 + }, + { + "id": 406, + "paths": [ + "M1024 226.4c-37.6 16.8-78.2 28-120.6 33 43.4-26 76.6-67.2 92.4-116.2-40.6 24-85.6 41.6-133.4 51-38.4-40.8-93-66.2-153.4-66.2-116 0-210 94-210 210 0 16.4 1.8 32.4 5.4 47.8-174.6-8.8-329.4-92.4-433-219.6-18 31-28.4 67.2-28.4 105.6 0 72.8 37 137.2 93.4 174.8-34.4-1-66.8-10.6-95.2-26.2 0 0.8 0 1.8 0 2.6 0 101.8 72.4 186.8 168.6 206-17.6 4.8-36.2 7.4-55.4 7.4-13.6 0-26.6-1.4-39.6-3.8 26.8 83.4 104.4 144.2 196.2 146-72 56.4-162.4 90-261 90-17 0-33.6-1-50.2-3 93.2 59.8 203.6 94.4 322.2 94.4 386.4 0 597.8-320.2 597.8-597.8 0-9.2-0.2-18.2-0.6-27.2 41-29.4 76.6-66.4 104.8-108.6z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "twitter", + "brand", + "tweet", + "social" + ], + "defaultCode": 60054, + "grid": 16 + }, + { + "id": 407, + "paths": [ + "M960.8 509c-26.4 6-51.8 8.8-74.8 8.8-129.2 0-228.6-90.2-228.6-247.2 0-77 29.8-116.8 71.8-116.8 40 0 66.6 35.8 66.6 108.6 0 41.4-11 86.8-19.2 113.6 0 0 39.8 69.4 148.6 48.2 23.2-51.4 35.6-117.8 35.6-176 0-156.8-80-248.2-226.6-248.2-150.8 0-239 115.8-239 268.6 0 151.4 70.8 281.2 187.4 340.4-49 98.2-111.4 184.6-176.6 249.8-118-142.8-224.8-333.2-268.6-705h-174.2c80.6 619.2 320.4 816.4 384 854.2 35.8 21.6 66.8 20.6 99.6 2 51.6-29.2 206.2-184 292-365 36 0 79.2-4.2 122.2-14v-122z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "vine", + "brand", + "social" + ], + "defaultCode": 60055, + "grid": 16 + }, + { + "id": 408, + "paths": [ + "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM829.4 716.8l-93.6 1.4c0 0-20.2 4-46.6-14.2-35-24-68-86.6-93.8-78.4-26 8.2-25.2 64.4-25.2 64.4s0.2 12-5.8 18.4c-6.4 7-19.2 8.4-19.2 8.4h-41.8c0 0-92.4 5.6-173.8-79.2-88.8-92.4-167.2-275.8-167.2-275.8s-4.6-12 0.4-17.8c5.6-6.6 20.6-7 20.6-7l100.2-0.6c0 0 9.4 1.6 16.2 6.6 5.6 4 8.6 11.8 8.6 11.8s16.2 41 37.6 78c41.8 72.2 61.4 88 75.6 80.4 20.6-11.2 14.4-102.2 14.4-102.2s0.4-33-10.4-47.6c-8.4-11.4-24.2-14.8-31-15.6-5.6-0.8 3.6-13.8 15.6-19.8 18-8.8 49.8-9.4 87.4-9 29.2 0.2 37.8 2.2 49.2 4.8 34.6 8.4 22.8 40.6 22.8 117.8 0 24.8-4.4 59.6 13.4 71 7.6 5 26.4 0.8 73.4-79 22.2-37.8 39-82.2 39-82.2s3.6-8 9.2-11.4c5.8-3.4 13.6-2.4 13.6-2.4l105.4-0.6c0 0 31.6-3.8 36.8 10.6 5.4 15-11.8 50-54.8 107.4-70.6 94.2-78.6 85.4-19.8 139.8 56 52 67.6 77.4 69.6 80.6 22.8 38.4-26 41.4-26 41.4z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "vk", + "brand", + "social" + ], + "defaultCode": 60056, + "grid": 16 + }, + { + "id": 409, + "paths": [ + "M425.2 10.6c-241.2 40.6-425.2 250.4-425.2 503.2 0 125.6 45.6 240.6 120.8 329.6 178.6-86.4 303.6-282 304.4-509.8v-323z", + "M598.8 10.6c241.2 40.6 425.2 250.4 425.2 503.2 0 125.6-45.6 240.6-120.8 329.6-178.6-86.4-303.6-282-304.4-509.8v-323z", + "M510.2 642.6c-31.8 131.6-126.8 244-245 318.8 72.8 39.8 156.2 62.6 245 62.6s172.2-22.8 245-62.6c-118.2-74.8-213.2-187.2-245-318.8z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "renren", + "brand", + "social" + ], + "defaultCode": 60057, + "grid": 16 + }, + { + "id": 410, + "paths": [ + "M430.2 898c-169.6 16.8-316-60-327-171.2-11-111.4 117.6-215 287-231.8 169.6-16.8 316 60 326.8 171.2 11.2 111.4-117.4 215.2-286.8 231.8zM769.2 528.6c-14.4-4.4-24.4-7.2-16.8-26.2 16.4-41.2 18-76.6 0.2-102-33.2-47.4-124.2-45-228.4-1.2 0 0-32.8 14.2-24.4-11.6 16-51.6 13.6-94.6-11.4-119.6-56.6-56.6-207 2.2-336 131.2-96.4 96.2-152.4 198.8-152.4 287.4 0 169.2 217.2 272.2 429.6 272.2 278.4 0 463.8-161.8 463.8-290.2 0-77.8-65.4-121.8-124.2-140z", + "M954.2 218.6c-67.2-74.6-166.4-103-258-83.6v0c-21.2 4.6-34.6 25.4-30 46.4 4.6 21.2 25.2 34.6 46.4 30 65.2-13.8 135.6 6.4 183.4 59.4s60.8 125.2 40.2 188.4v0c-6.6 20.6 4.6 42.6 25.2 49.4 20.6 6.6 42.6-4.6 49.4-25.2v-0.2c28.8-88.4 10.6-190-56.6-264.6z", + "M850.8 312c-32.8-36.4-81.2-50.2-125.6-40.6-18.2 3.8-29.8 22-26 40.2 4 18.2 22 29.8 40 25.8v0c21.8-4.6 45.4 2.2 61.4 19.8 16 17.8 20.4 42 13.4 63.2v0c-5.6 17.6 4 36.8 21.8 42.6 17.8 5.6 36.8-4 42.6-21.8 14-43.4 5.2-93-27.6-129.2z", + "M439.6 696.6c-6 10.2-19 15-29.2 10.8-10.2-4-13.2-15.6-7.4-25.4 6-9.8 18.6-14.6 28.6-10.8 10 3.6 13.6 15 8 25.4zM385.4 765.8c-16.4 26.2-51.6 37.6-78 25.6-26-11.8-33.8-42.2-17.4-67.8 16.2-25.4 50.2-36.8 76.4-25.8 26.6 11.4 35.2 41.6 19 68zM447 580.6c-80.6-21-171.8 19.2-206.8 90.2-35.8 72.4-1.2 153 80.2 179.4 84.4 27.2 184-14.6 218.6-92.6 34.2-76.6-8.4-155.2-92-177z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "sina-weibo", + "brand", + "social" + ], + "defaultCode": 60058, + "grid": 16 + }, + { + "id": 411, + "paths": [ + "M136.294 750.93c-75.196 0-136.292 61.334-136.292 136.076 0 75.154 61.1 135.802 136.292 135.802 75.466 0 136.494-60.648 136.494-135.802-0.002-74.742-61.024-136.076-136.494-136.076zM0.156 347.93v196.258c127.784 0 247.958 49.972 338.458 140.512 90.384 90.318 140.282 211.036 140.282 339.3h197.122c-0.002-372.82-303.282-676.070-675.862-676.070zM0.388 0v196.356c455.782 0 826.756 371.334 826.756 827.644h196.856c0-564.47-459.254-1024-1023.612-1024z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "feed", + "rss", + "social" + ], + "defaultCode": 60059, + "grid": 16 + }, + { + "id": 412, + "paths": [ + "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM279 831.2c-48 0-87-38.6-87-86.6 0-47.6 39-86.8 87-86.8 48.2 0 87 39.2 87 86.8 0 48-39 86.6-87 86.6zM497.4 832c0-81.8-31.8-158.8-89.4-216.4-57.8-57.8-134.4-89.6-216-89.6v-125.2c237.6 0 431.2 193.4 431.2 431.2h-125.8zM719.6 832c0-291-236.6-528-527.4-528v-125.2c360 0 653 293.2 653 653.2h-125.6z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "feed", + "rss", + "social" + ], + "defaultCode": 60060, + "grid": 16 + }, + { + "id": 413, + "paths": [ + "M1013.8 307.2c0 0-10-70.6-40.8-101.6-39-40.8-82.6-41-102.6-43.4-143.2-10.4-358.2-10.4-358.2-10.4h-0.4c0 0-215 0-358.2 10.4-20 2.4-63.6 2.6-102.6 43.4-30.8 31-40.6 101.6-40.6 101.6s-10.2 82.8-10.2 165.8v77.6c0 82.8 10.2 165.8 10.2 165.8s10 70.6 40.6 101.6c39 40.8 90.2 39.4 113 43.8 82 7.8 348.2 10.2 348.2 10.2s215.2-0.4 358.4-10.6c20-2.4 63.6-2.6 102.6-43.4 30.8-31 40.8-101.6 40.8-101.6s10.2-82.8 10.2-165.8v-77.6c-0.2-82.8-10.4-165.8-10.4-165.8zM406.2 644.8v-287.8l276.6 144.4-276.6 143.4z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "youtube", + "brand", + "social" + ], + "defaultCode": 60061, + "grid": 16 + }, + { + "id": 414, + "paths": [ + "M344.012 169.399c0.209-0.865 0.344-1.479 0.388-1.8l1.042-7.559-47.349-0.267c-42.779-0.242-55.87 0.007-57.047 1.084-0.565 0.516-15.333 56.633-41.655 158.273-12.556 48.484-23.124 87.206-23.487 86.051s-15.391-56.498-33.397-122.98c-18.006-66.482-33.104-121.243-33.55-121.692-0.623-0.623-57.98-0.9-104.417-0.502-6.735 0.056-10.477-13.11 60.021 211.133 9.759 31.041 24.371 74.997 32.469 97.679 9.333 26.141 15.989 46.323 20.534 63.173 8.038 32.067 8.319 52.163 6.565 75.625-2.026 27.101-2.321 218.438-0.342 221.638 1.512 2.449 91.223 3.589 99.712 1.268 1.358-0.372 2.265-1.691 2.87-8.928 2.119-6.219 2.286-30.969 2.286-133.744v-131.281l5.742-18.112c3.756-11.849 13.201-42.995 20.989-69.22 7.789-26.222 17.21-57.619 20.938-69.771 33.834-110.319 66.14-218.831 66.994-225.011l0.693-5.056z", + "M846.122 328.651l-0.021 6.838-1.065 0.014-0.595 188.993-0.577 183.227-14.666 14.929c-16.424 16.719-29.585 23.101-41.488 20.113-12.963-3.254-12.64 1.8-13.722-214.768l-0.998-199.347h-94.316v6.851h-1.086v216.289c0 231.737-0.007 231.599 11.752 254.875 9.366 18.536 23.010 27.559 46.391 30.671h0.002c30.79 4.1 64.001-9.849 94.77-39.809l13.373-13.022v22.445c0 19.396 0.554 22.601 4.070 23.58 5.756 1.605 77.173 1.707 84.89 0.126l6.396-1.314v-6.628l1.086-0.223v-495.098l-94.195 1.258z", + "M606.892 426.33c-8.935-38.341-25.68-64.115-53.233-81.939-43.281-27.999-92.718-30.957-138.586-8.291-33.425 16.515-54.951 43.914-66.071 84.083-1.326 4.786-2.298 8.812-3.033 14.815-2.83 14.184-3.163 35.351-3.889 133.951-1.121 151.928 0.616 170.003 19.643 204.51 18.664 33.848 57.403 58.661 99.572 63.782 12.696 1.54 38.43-0.858 53.23-4.961 33.632-9.326 65.864-35.906 80.118-66.078 6.158-13.033 9.875-22.096 12.115-38.651 4.175-22.617 4.47-59.175 4.47-152.375-0.002-118.875-0.379-131.862-4.337-148.847zM499.34 736.003c-7.907 6.028-21.734 8.649-32.983 6.249-8.656-1.847-20.338-15.419-23.934-27.801-4.479-15.436-4.823-229.985-0.954-272.059 6.379-21.054 24.19-32.050 43.635-26.813 15.157 4.082 22.915 13.575 27.336 33.457 3.282 14.754 3.67 33.129 2.972 141.26-0.46 71.701-0.716 106.742-3.058 125.553-2.382 11.87-6.319 15.047-13.015 20.154z", + "M2300.389 534.137h45.57l-0.726-41.281c-0.705-37.869-1.263-42.2-6.324-52.472-7.982-16.21-19.759-23.401-38.446-23.401-22.448 0-36.678 10.849-43.388 33.141-2.858 9.486-5.863 74.685-3.707 80.308 1.205 3.144 7.724 3.705 47.021 3.705z", + "M1995.795 440.237c-6.077-12.247-17.385-18.278-30.525-17.806-10.221 0.365-21.561 4.677-32.488 13.010l-8.14 6.177v296.598l8.14 6.177c18.429 14.052 38.674 17.031 52.619 7.703 5.519-3.691 9.117-8.779 11.919-16.861 3.647-10.524 3.965-24.003 3.489-148.772-0.495-130.043-0.781-137.702-5.014-146.226z", + "M2560.878 306.633c-9.080-108.842-16.303-144.165-38.751-189.544-29.729-60.101-72.692-91.788-133.876-98.747-47.309-5.379-225.315-12.97-390.044-16.631-285.188-6.338-754.057 5.858-813.939 21.173-27.673 7.077-48.426 19.11-70.022 40.604-37.844 37.662-60.391 91.679-69.452 166.396-20.692 170.606-21.134 376.727-1.188 553.515 8.577 76.041 26.243 125.443 59.41 166.159 20.694 25.406 56.352 46.998 88.26 53.442 22.385 4.523 134.42 10.798 297.605 16.668 24.306 0.874 88.667 2.379 143.030 3.344 113.301 2.012 321.627 0.821 440.719-2.519 80.127-2.249 226.201-8.172 253.5-10.282 7.677-0.593 25.469-1.728 39.537-2.523 47.277-2.67 77.353-12.568 105.596-34.76 36.553-28.718 64.857-81.795 76.815-144.037 11.314-58.894 18.887-163.773 20.422-282.851 1.284-99.491-0.426-153.175-7.621-239.409zM1425.273 267.192l-52.982 0.654-2.326 565.143-45.932 0.581c-35.525 0.488-46.307-0.044-47.167-2.326-0.616-1.626-1.356-129.020-1.672-283.153l-0.581-280.246-103.493-1.307v-88.304l305.829 1.235 1.307 87.069-52.982 0.654zM1750.216 591.117v243.035h-83.725v-25.583c0-19.247-0.735-25.583-2.979-25.583-1.64 0-9.226 6.344-16.861 14.098-16.557 16.817-36.171 30.367-52.91 36.63-34.662 12.968-67.589 5.4-81.618-18.75-12.838-22.11-13.082-27.052-13.082-256.335v-210.547h83.653l0.654 198.265c0.623 194.821 0.714 198.393 5.377 206.333 6.182 10.521 15.608 13.347 30.597 9.231 8.817-2.423 14.836-6.707 29.143-20.931l18.024-17.952v-374.946h83.725v243.035zM2076.757 799.41c-7.372 16.424-23.806 32.509-37.283 36.485-35.167 10.382-63.375 1.923-95.935-28.708-10.103-9.505-19.51-17.224-20.931-17.224-1.712 0-2.616 7.449-2.616 22.094v22.094h-83.725v-655.845h83.725v106.982c0 58.84 0.786 106.982 1.744 106.982s9.789-7.807 19.624-17.298c22.629-21.841 41.548-31.399 65.557-33.213 42.811-3.24 68.327 18.794 80.018 69.117 3.647 15.696 3.998 33.625 3.998 179.078-0.002 177.178-0.021 177.918-14.175 209.457zM2430.99 702.168c-0.744 18.226-2.954 39.137-4.942 46.514-11.642 43.167-42.635 73.731-87.432 86.269-60.315 16.878-126.704-10.777-153.205-63.812-14.875-29.769-15.408-35.706-15.408-181.185 0-118.617 0.419-133.171 4.214-149.354 10.747-45.788 37.392-75.422 82.49-91.865 13.068-4.765 26.708-7.207 40.337-7.486 48.672-0.998 96.984 25.18 117.229 67.808 13.659 28.76 15.35 41.060 16.717 122.099l1.235 72.678-178.497 1.235-0.654 48.84c-0.93 68.901 3.716 90.088 22.313 102.621 15.645 10.54 39.679 9.745 52.765-1.744 12.263-10.768 15.726-22.336 16.933-56.107l1.091-29.653h86.195l-1.381 33.143z" + ], + "width": 2569, + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "youtube", + "brand", + "social" + ], + "defaultCode": 60062, + "grid": 16 + }, + { + "id": 415, + "paths": [ + "M96 0l-96 160v736h256v128h128l128-128h160l288-288v-608h-864zM832 544l-160 160h-160l-128 128v-128h-192v-576h640v416z", + "M608 256h96v256h-96v-256z", + "M416 256h96v256h-96v-256z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "twitch", + "brand", + "social" + ], + "defaultCode": 60063, + "grid": 16 + }, + { + "id": 416, + "paths": [ + "M1023.6 274c-4.6 99.6-74.2 236.2-208.8 409.4-139.2 180.8-257 271.4-353.4 271.4-59.6 0-110.2-55-151.4-165.2-27.6-101-55-202-82.6-303-30.6-110.2-63.4-165.2-98.6-165.2-7.6 0-34.4 16.2-80.4 48.2l-48.2-62c50.6-44.4 100.4-88.8 149.4-133.2 67.4-58.2 118-88.8 151.8-92 79.6-7.6 128.8 46.8 147.2 163.4 19.8 125.8 33.6 204 41.4 234.6 23 104.4 48.2 156.6 75.8 156.6 21.4 0 53.6-33.8 96.6-101.6 42.8-67.6 65.8-119.2 69-154.6 6.2-58.4-16.8-87.8-69-87.8-24.6 0-49.8 5.6-75.8 16.8 50.4-164.8 146.4-244.8 288.4-240.2 105 2.8 154.6 71 148.6 204.4z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "vimeo", + "brand", + "social" + ], + "defaultCode": 60064, + "grid": 16 + }, + { + "id": 417, + "paths": [ + "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM861.6 340c-3.2 72-53.6 170.6-151 295.8-100.6 130.8-185.8 196.2-255.4 196.2-43.2 0-79.6-39.8-109.4-119.4-20-73-39.8-146-59.8-219-22-79.6-45.8-119.4-71.2-119.4-5.6 0-25 11.6-58 34.8l-34.8-44.8c36.6-32 72.6-64.2 108-96.2 48.8-42 85.2-64.2 109.6-66.4 57.6-5.6 93 33.8 106.4 118 14.4 91 24.4 147.4 30 169.6 16.6 75.4 34.8 113 54.8 113 15.4 0 38.8-24.4 69.8-73.4s47.6-86.2 49.8-111.8c4.4-42.2-12.2-63.4-49.8-63.4-17.8 0-36 4-54.8 12.2 36.4-119 105.8-177 208.4-173.6 76 2.2 111.8 51.4 107.4 147.8z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "vimeo", + "brand", + "social" + ], + "defaultCode": 60065, + "grid": 16 + }, + { + "id": 418, + "paths": [ + "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM822.4 768.8l-348.4 114c-79.6 26-87.6 21.8-123.6-89.6l-88-272.6c-21-64.6-85-238.6-95.8-272-20-62-20-65.4 97-103.4 91.6-30 95.4-29 128.6 74.4 26.8 83.2 44 150.4 71.6 235.4l75 232 239.6-78.4c47.2-15.6 63-14.8 76.4 43.4l9.6 44c11.2 51-14.6 64-42 72.8z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "lanyrd", + "brand" + ], + "defaultCode": 60066, + "grid": 16 + }, + { + "id": 419, + "paths": [ + "M0 544c0-123.712 100.288-224 224-224s224 100.288 224 224c0 123.712-100.288 224-224 224s-224-100.288-224-224zM576 544c0-123.712 100.288-224 224-224s224 100.288 224 224c0 123.712-100.288 224-224 224s-224-100.288-224-224z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "flickr", + "brand", + "social" + ], + "defaultCode": 60067, + "grid": 16 + }, + { + "id": 420, + "paths": [ + "M800 416c-70.58 0-128 57.42-128 128s57.42 128 128 128c70.58 0 128-57.42 128-128s-57.42-128-128-128zM800 320v0c123.71 0 224 100.288 224 224 0 123.71-100.29 224-224 224s-224-100.29-224-224c0-123.712 100.29-224 224-224zM0 544c0-123.712 100.288-224 224-224s224 100.288 224 224c0 123.712-100.288 224-224 224s-224-100.288-224-224z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "flickr", + "brand", + "social" + ], + "defaultCode": 60068, + "grid": 16 + }, + { + "id": 421, + "paths": [ + "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM288 672c-88.4 0-160-71.6-160-160s71.6-160 160-160 160 71.6 160 160-71.6 160-160 160zM736 672c-88.4 0-160-71.6-160-160s71.6-160 160-160c88.4 0 160 71.6 160 160s-71.6 160-160 160z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "flickr", + "brand", + "social" + ], + "defaultCode": 60069, + "grid": 16 + }, + { + "id": 422, + "paths": [ + "M512 0c-282.77 0-512 230.796-512 515.5s229.23 515.5 512 515.5 512-230.796 512-515.5-229.23-515.5-512-515.5zM288 672c-88.366 0-160-71.634-160-160s71.634-160 160-160 160 71.634 160 160c0 88.366-71.634 160-160 160zM736 672c-88.368 0-160-71.634-160-160s71.632-160 160-160 160 71.634 160 160c0 88.366-71.632 160-160 160z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "flickr", + "brand", + "social" + ], + "defaultCode": 60070, + "grid": 16 + }, + { + "id": 423, + "paths": [ + "M512 1024c-282.4 0-512-229.6-512-512s229.6-512 512-512c282.4 0 512 229.6 512 512s-229.6 512-512 512v0zM943.8 582c-15-4.8-135.4-40.6-272.4-18.6 57.2 157.2 80.4 285.2 85 311.8 98-66.4 168-171.4 187.4-293.2v0zM682.8 915.2c-6.6-38.4-31.8-172-93.2-331.6-1 0.4-2 0.6-2.8 1-246.8 86-335.4 257-343.2 273 74.2 57.8 167.4 92.4 268.4 92.4 60.6 0 118.4-12.4 170.8-34.8v0zM187 805c10-17 130-215.6 355.4-288.6 5.6-1.8 11.4-3.6 17.2-5.2-11-24.8-23-49.8-35.4-74.2-218.2 65.4-430.2 62.6-449.4 62.4-0.2 4.4-0.2 8.8-0.2 13.4 0 112.2 42.6 214.8 112.4 292.2v0zM84 423c19.6 0.2 199.8 1 404.4-53.2-72.4-128.8-150.6-237.2-162.2-253-122.4 57.8-214 170.6-242.2 306.2v0zM409.6 87.4c12 16.2 91.6 124.4 163.2 256 155.6-58.2 221.4-146.8 229.2-158-77.2-68.6-178.8-110.2-290-110.2-35.2 0.2-69.6 4.4-102.4 12.2v0zM850.6 236.2c-9.2 12.4-82.6 106.4-244.2 172.4 10.2 20.8 20 42 29 63.4 3.2 7.6 6.4 15 9.4 22.6 145.6-18.2 290.2 11 304.6 14-1-103.2-38-198-98.8-272.4v0z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "dribbble", + "brand", + "social" + ], + "defaultCode": 60071, + "grid": 16 + }, + { + "id": 424, + "paths": [ + "M297 205.2c30.2 0 57.4 2.6 82.2 8 24.8 5.2 45.8 14 63.6 26 17.6 12 31.2 28 41.2 48 9.6 19.8 14.4 44.6 14.4 74 0 31.8-7.2 58.2-21.6 79.4-14.6 21.2-35.8 38.4-64.2 52 38.8 11.2 67.4 30.8 86.6 58.6 19.2 28 28.4 61.6 28.4 101.2 0 32-6.2 59.4-18.4 82.6-12.4 23.4-29.2 42.4-49.8 57-20.8 14.8-44.8 25.6-71.6 32.6-26.6 7-54 10.6-82.4 10.6h-305.4v-630h297zM279 459.6c24.6 0 45-5.8 61-17.6 16-11.6 23.6-30.8 23.6-57.2 0-14.6-2.6-26.8-7.8-36.2-5.4-9.4-12.4-16.8-21.4-22-8.8-5.4-18.8-9-30.6-11-11.4-2.2-23.4-3.2-35.6-3.2h-129.6v147.2h140.4zM286.6 727.8c13.6 0 26.6-1.2 38.8-4 12.4-2.8 23.4-7 32.6-13.4 9.2-6.2 17-14.4 22.6-25.2 5.6-10.6 8.2-24.2 8.2-40.8 0-32.4-9.2-55.6-27.4-69.6-18.2-13.8-42.4-20.6-72.4-20.6h-150.4v173.4h148z", + "M725.2 725.6c18.8 18.4 45.8 27.6 81 27.6 25.2 0 47.2-6.4 65.4-19.2s29.2-26.4 33.4-40.4h110.4c-17.8 55-44.6 94-81.4 117.6-36.2 23.6-80.6 35.6-132 35.6-36 0-68.2-5.8-97.2-17.2-29-11.6-53.2-27.8-73.6-49-19.8-21.2-35.4-46.4-46.4-76-10.8-29.4-16.4-62-16.4-97.2 0-34.2 5.6-66 16.8-95.4 11.4-29.6 27-55 47.8-76.4s45.2-38.4 74-50.8c28.6-12.4 60.2-18.6 95.2-18.6 38.6 0 72.4 7.4 101.4 22.6 28.8 15 52.6 35.2 71.2 60.4s31.8 54.2 40 86.6c8.2 32.4 11 66.2 8.8 101.6h-329.4c0 35.8 12 70 31 88.2zM869 486c-14.8-16.4-40.2-25.4-70.8-25.4-20 0-36.6 3.4-49.8 10.2-13 6.8-23.6 15.2-31.8 25.2-8 10-13.6 20.8-16.8 32.2-3.2 11-5.2 21.2-5.8 30h204c-3-32-14-55.6-29-72.2z", + "M668.4 256h255.4v62.2h-255.4v-62.2z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "behance", + "brand", + "social" + ], + "defaultCode": 60072, + "grid": 16 + }, + { + "id": 425, + "paths": [ + "M404.2 448.6c13-9.4 19.2-25 19.2-46.6 0-12-2-21.8-6.2-29.4-4.4-7.6-10-13.6-17.4-17.8-7.2-4.4-15.4-7.4-24.8-9-9.2-1.8-19-2.6-29-2.6h-105.4v119.6h114c20 0.2 36.6-4.6 49.6-14.2z", + "M422 556.6c-14.8-11.2-34.4-16.8-58.8-16.8h-122.6v141h120.2c11.2 0 21.6-1 31.6-3.2s19-5.6 26.6-10.8c7.6-5 13.8-11.8 18.4-20.4s6.8-19.8 6.8-33.2c0-26.4-7.4-45.2-22.2-56.6z", + "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM671.2 269.4h207.4v50.6h-207.4v-50.6zM541.6 686.4c-10 19-23.6 34.4-40.4 46.4-17 12-36.4 20.8-58.2 26.6-21.6 5.8-44 8.6-66.8 8.6h-248.2v-511.8h241.2c24.4 0 46.6 2.2 66.8 6.4 20 4.2 37.2 11.4 51.6 21.2 14.2 9.8 25.4 22.8 33.4 39 7.8 16 11.8 36.2 11.8 60 0 25.8-5.8 47.2-17.6 64.4s-29 31.2-52.2 42.2c31.6 9 54.8 25 70.2 47.6 15.6 22.8 23.2 50.2 23.2 82.2 0.2 26.2-4.8 48.6-14.8 67.2zM959.4 607.2h-267.4c0 29.2 10 57 25.2 72 15.2 14.8 37.2 22.4 65.8 22.4 20.6 0 38.2-5.2 53.2-15.6 14.8-10.4 23.8-21.4 27.2-32.8h89.6c-14.4 44.6-36.2 76.4-66 95.6-29.4 19.2-65.4 28.8-107.2 28.8-29.2 0-55.4-4.8-79-14-23.6-9.4-43.2-22.6-59.8-39.8-16.2-17.2-28.6-37.8-37.6-61.8-8.8-23.8-13.4-50.4-13.4-79 0-27.8 4.6-53.6 13.6-77.6 9.2-24 22-44.8 38.8-62 16.8-17.4 36.8-31.2 60-41.4 23.2-10 48.8-15 77.2-15 31.4 0 58.8 6 82.4 18.4 23.4 12.2 42.6 28.6 57.8 49.2s25.8 44 32.6 70.4c6.6 26 8.8 53.4 7 82.2z", + "M776.6 463.8c-16.2 0-29.8 2.8-40.4 8.4s-19.2 12.4-25.8 20.4c-6.6 8.2-11 16.8-13.6 26.2-2.6 9-4.2 17.2-4.6 24.4h165.6c-2.4-26-11.4-45.2-23.4-58.6-12.4-13.6-32.8-20.8-57.8-20.8z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "behance", + "brand", + "social" + ], + "defaultCode": 60073, + "grid": 16 + }, + { + "id": 426, + "paths": [ + "M829 186.2v-186.2h-186.2l-18.6 18.8-88 167.4-27.6 18.6h-313.6v255.6h172.4l15.4 18.6-187.8 358.8v186.2h186.2l18.6-18.8 88-167.4 27.6-18.6h313.6v-255.6h-172.4l-15.4-18.8z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "deviantart", + "brand", + "social" + ], + "defaultCode": 60074, + "grid": 16 + }, + { + "id": 427, + "paths": [ + "M253 672.8c0.2 0.6 5.6 15.2 8.6 22.6 16.8 39.8 41 75.8 71.8 106.6s66.6 55 106.6 71.8c41.4 17.4 85.2 26.4 130.4 26.4s89.2-8.8 130.4-26.4c40-16.8 75.8-41 106.6-71.8s55-66.6 71.8-106.6c17.4-41.4 26.4-85.2 26.4-130.4s-8.8-89.2-26.4-130.4c-16.8-40-41-75.8-71.8-106.6s-66.6-55-106.6-71.8c-41.4-17.4-85.2-26.4-130.4-26.4-45.8 0-91.6 9.2-132.2 26.4-32.6 13.8-87.8 49.2-120 82.6l-0.2 0.2v-276h463.4c16.8-0.2 16.8-23.8 16.8-31.4 0-7.8 0-31.2-17-31.4h-501c-13.6 0-22 11.4-22 21.8v388.2c0 12.6 15.6 21.6 30.2 24.6 28.4 6 34.8-3 41.8-12.6l1-1.2c10.6-15.8 43.6-49 44-49.4 51.6-51.6 120.6-80 194.4-80 73.4 0 142.2 28.4 193.8 80 51.8 51.8 80.4 120.4 80.4 193.2 0 73-28.4 141.8-80 193.2-50.8 50.8-122 80-195 80-49.4 0-97.2-13.2-138.2-38.2l0.2-236c0-31.4 13.6-65.8 36.6-91.6 26.2-29.6 62.2-45.8 101.6-45.8 38 0 73.6 14.4 100.2 40.6 26.2 26 40.8 60.8 40.8 97.8 0 78.8-62 140.6-141.2 140.6-15.2 0-43-6.8-44.2-7-16-4.8-22.8 17.4-25 24.8-8.6 28.2 4.4 33.8 7 34.6 25.4 8 42.2 9.4 64.2 9.4 111.8 0 202.8-91 202.8-202.8 0-111-91-201.2-202.6-201.2-54.8 0-106.2 21-144.8 58.8-36.8 36.2-57.8 84.4-57.8 132.4v1.2c-0.2 6-0.2 147.6-0.4 194l-0.2-0.2c-21-23.2-41.8-58.8-55.6-95.2-5.4-14.2-17.6-11.8-34.2-6.6-8 2.2-30 9-25 25.2v0zM491.2 617.4c0 6.8 6.2 12.8 10 16.2l1.2 1.2c6.4 6.2 12.4 9.4 18 9.4 4.6 0 7.4-2.2 8.4-3.2 2.8-2.6 34.4-34.8 37.6-37.8l35.4 35.2c3.2 3.6 6.8 5.6 11 5.6 5.6 0 11.8-3.4 18.2-10 15.2-15.6 7.6-24 4-28l-35.8-35.8 37.4-37.6c8.2-8.8 1-18.2-6.2-25.4-10.4-10.4-20.6-13.2-27-7.2l-37.2 37.2-37.6-37.6c-2-2-4.6-3-7.2-3-5 0-11 3.4-17.6 10-11.6 11.6-14 19.6-8 26l37.6 37.4-37.4 37.4c-3.4 3.2-5 6.6-4.8 10zM573 109.8c-60 0-124 12.2-170.8 32.4-5 2-8 6-8.6 11.6-0.6 5.4 0.8 12.4 4.4 21.6 3 7.4 10.6 27.2 25.6 21.4 48-18.4 101.2-28.4 149.4-28.4 54.8 0 108 10.8 158 31.8 39.8 16.8 77.2 41.2 118 76.4 3 2.6 6.2 3.8 9.4 3.8 8 0 15.6-7.8 22.2-15.2 10.8-12.2 18.4-22.4 7.6-32.6-39-36.8-81.6-64.4-134.4-86.8-57.2-23.8-118.2-36-180.8-36zM896.4 851.2v0c-7.2-7.2-13.4-11.4-18.8-13s-10.4-0.4-14.2 3.4l-3.6 3.6c-37.2 37.2-80.6 66.4-128.8 86.8-50 21.2-103 31.8-157.6 31.8-54.8 0-107.8-10.8-157.6-31.8-48.2-20.4-91.6-49.6-128.8-86.8-38.8-38.8-68-82.2-86.8-128.8-18.4-45.6-24.4-79.8-26.4-91-0.2-1-0.4-1.8-0.4-2.4-2.6-13.2-14.8-14.2-32.2-11.4-7.2 1.2-29.4 4.6-27.4 20.4v0.4c5.8 37 16.2 73.2 30.8 107.6 23.4 55.4 57 105.2 99.8 148s92.6 76.2 148 99.8c57.4 24.2 118.4 36.6 181.2 36.6s123.8-12.4 181.2-36.6c55.4-23.4 105.2-57 148-99.8 0 0 2.4-2.4 3.8-3.8 4.4-5.4 8.6-14.4-10.2-33z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "500px", + "brand", + "social" + ], + "defaultCode": 60075, + "grid": 16 + }, + { + "id": 428, + "paths": [ + "M704 288c0-53.019 42.981-96 96-96s96 42.981 96 96c0 53.019-42.981 96-96 96s-96-42.981-96-96zM958.392 129.608c-87.478-87.476-229.306-87.476-316.786 0-35.578 35.578-56.684 80.146-63.322 126.392v0l-204.694 310.228c-27.506 1.41-54.776 8.416-79.966 21.016l-157.892-123.424c-36.55-28.574-89.342-22.102-117.912 14.448-28.572 36.55-22.102 89.342 14.448 117.912l155.934 121.892c-16.96 66.782 0.672 140.538 52.93 192.794 78.906 78.904 206.832 78.904 285.736 0 48.466-48.466 67.15-115.428 56.076-178.166l249.054-222.986c46.248-6.638 90.816-27.744 126.394-63.322 87.478-87.476 87.478-229.306 0-316.784zM384 902.698c-74.39 0-134.698-60.304-134.698-134.698 0-0.712 0.042-1.414 0.054-2.124l66.912 52.304c15.36 12.006 33.582 17.824 51.674 17.824 24.962 0 49.672-11.080 66.238-32.272 28.572-36.55 22.102-89.342-14.448-117.912l-63.5-49.636c8.962-1.878 18.248-2.88 27.768-2.88 74.392 0 134.698 60.304 134.698 134.698s-60.306 134.696-134.698 134.696zM800 448c-88.366 0-160-71.634-160-160s71.634-160 160-160 160 71.634 160 160-71.634 160-160 160z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "steam", + "brand", + "social" + ], + "defaultCode": 60076, + "grid": 16 + }, + { + "id": 429, + "paths": [ + "M303.922 836.010c27.144 0 53.786-13.136 69.972-37.416 25.734-38.602 15.302-90.754-23.298-116.488l-66.074-44.048c11.308-3.080 23.194-4.756 35.478-4.756 74.392 0 134.696 60.304 134.696 134.698s-60.306 134.698-134.698 134.698c-72.404 0-131.444-57.132-134.548-128.774l71.954 47.968c14.322 9.548 30.506 14.118 46.518 14.118zM853.34 0c93.876 0 170.66 76.812 170.66 170.688v682.628c0 93.936-76.784 170.684-170.66 170.684h-682.652c-93.876 0-170.688-76.75-170.688-170.682v-203.028l121.334 80.888c-11.652 63.174 6.938 130.83 55.798 179.69 78.904 78.904 206.83 78.904 285.736 0 48.468-48.466 67.15-115.43 56.076-178.166l249.056-222.988c46.248-6.638 90.816-27.744 126.394-63.322 87.476-87.476 87.476-229.306 0-316.784-87.48-87.478-229.308-87.478-316.786 0-35.578 35.578-56.684 80.146-63.322 126.392v0l-204.694 310.23c-31.848 1.632-63.378 10.764-91.726 27.392l-217.866-145.244v-277.69c0-93.876 76.81-170.688 170.686-170.688h682.654zM896 288c0-88.366-71.634-160-160-160s-160 71.634-160 160 71.634 160 160 160 160-71.634 160-160zM640 288c0-53.020 42.98-96 96-96s96 42.98 96 96-42.98 96-96 96-96-42.98-96-96z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "steam", + "brand", + "social" + ], + "defaultCode": 60077, + "grid": 16 + }, + { + "id": 430, + "paths": [ + "M736 32l-224 192 288 192 224-192z", + "M512 224l-224-192-288 192 224 192z", + "M800 416l224 192-288 160-224-192z", + "M512 576l-288-160-224 192 288 160z", + "M728.156 845.57l-216.156-185.278-216.158 185.278-135.842-75.468v93.898l352 160 352-160v-93.898z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "dropbox", + "brand" + ], + "defaultCode": 60078, + "grid": 16 + }, + { + "id": 431, + "paths": [ + "M350.868 828.388c-60.274-15.060-93.856-62.97-93.962-134.064-0.032-22.726 1.612-33.62 7.286-48.236 13.908-35.834 50.728-62.872 99.176-72.822 24.11-4.95 31.536-10.266 31.536-22.572 0-3.862 2.872-15.36 6.378-25.552 15.932-46.306 45.43-84.91 76.948-100.702 32.99-16.526 49.642-20.254 89.548-20.040 56.674 0.304 84.952 12.598 124.496 54.128l21.75 22.842 19.484-6.742c94.3-32.636 188.306 22.916 195.888 115.756l2.072 25.398 18.57 6.65c53.032 19.004 77.96 58.904 73.442 117.556-2.958 38.358-20.89 68.98-49.3 84.184l-13.356 7.146-296.822 0.57c-228.094 0.44-300.6-0.368-313.134-3.5v0zM103.218 785.966c-36.176-9.086-74.506-42.854-92.48-81.47-10.196-21.906-10.738-25.128-10.738-63.88 0-36.864 0.87-42.778 8.988-61.080 17.11-38.582 49.894-66.46 91.030-77.408 8.684-2.312 16.842-6 18.128-8.196 1.29-2.198 2.722-14.164 3.182-26.592 2.866-77.196 50.79-145.214 117.708-167.056 36.154-11.8 83.572-12.898 122.896 3.726 12.47 5.274 11.068 6.404 37.438-30.14 15.594-21.612 45.108-44.49 70.9-58.18 27.838-14.776 56.792-21.584 91.412-21.494 96.768 0.252 180.166 64.22 211.004 161.848 9.854 31.192 9.362 39.926-2.26 40.184-5.072 0.112-19.604 3.064-32.292 6.558l-23.072 6.358-21.052-22.25c-59.362-62.734-156.238-76.294-238.592-33.396-32.9 17.138-59.34 41.746-79.31 73.81-14.236 22.858-32.39 65.504-32.39 76.094 0 7.51-5.754 11.264-30.332 19.782-76.094 26.376-120.508 87.282-120.476 165.218 0.010 28.368 6.922 63.074 16.52 82.956 3.618 7.494 5.634 14.622 4.484 15.836-2.946 3.106-97.608 2.060-110.696-1.228v0z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "onedrive", + "brand", + "skydrive" + ], + "defaultCode": 60079, + "grid": 16 + }, + { + "id": 432, + "paths": [ + "M512.008 12.642c-282.738 0-512.008 229.218-512.008 511.998 0 226.214 146.704 418.132 350.136 485.836 25.586 4.738 34.992-11.11 34.992-24.632 0-12.204-0.48-52.542-0.696-95.324-142.448 30.976-172.504-60.41-172.504-60.41-23.282-59.176-56.848-74.916-56.848-74.916-46.452-31.778 3.51-31.124 3.51-31.124 51.4 3.61 78.476 52.766 78.476 52.766 45.672 78.27 119.776 55.64 149.004 42.558 4.588-33.086 17.852-55.68 32.506-68.464-113.73-12.942-233.276-56.85-233.276-253.032 0-55.898 20.004-101.574 52.76-137.428-5.316-12.9-22.854-64.972 4.952-135.5 0 0 43.006-13.752 140.84 52.49 40.836-11.348 84.636-17.036 128.154-17.234 43.502 0.198 87.336 5.886 128.256 17.234 97.734-66.244 140.656-52.49 140.656-52.49 27.872 70.528 10.35 122.6 5.036 135.5 32.82 35.856 52.694 81.532 52.694 137.428 0 196.654-119.778 239.95-233.79 252.624 18.364 15.89 34.724 47.046 34.724 94.812 0 68.508-0.596 123.644-0.596 140.508 0 13.628 9.222 29.594 35.172 24.566 203.322-67.776 349.842-259.626 349.842-485.768 0-282.78-229.234-511.998-511.992-511.998z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "github", + "brand", + "octacat", + "social" + ], + "defaultCode": 60080, + "grid": 16 + }, + { + "id": 433, + "paths": [ + "M0 0v1024h1024v-1024h-1024zM832 832h-128v-512h-192v512h-320v-640h640v640z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "npm", + "brand" + ], + "defaultCode": 60081, + "grid": 16 + }, + { + "id": 434, + "paths": [ + "M512 106.6c-186.8 0-330.8 156.4-412.4 309.6-46 86.2-78.2 180.6-93 277.2-1.6 11-3.2 22-4.4 33.2-0.6 6-1.2 12-1.6 18-0.6 7.6-0.2 10 3.8 16.4 12 19.4 26.2 37.4 42.2 53.6 32.8 33.6 72.6 59.4 114.8 79.4 96.2 45.4 204.8 61.8 310.4 65.4 109 3.6 221-5.4 325.2-39.4 89-29 174.8-79.6 224.2-161.4 5.4-8.8 1.6-21.8 0.6-32-1.2-12.2-2.8-24.2-4.8-36.2-3.6-23.6-8.4-46.8-14.2-70-11.6-47.2-27.4-93.6-46.6-138.2-69.6-161.6-198.4-334-381.6-369.6-20.6-4-41.6-6-62.6-6zM518.4 890.2c-114.2 0-238.6-10.2-341.4-65.2-40-21.4-80.8-52.4-100-95-5.6-12.4-3.6-17.2-1-31.8 1.8-9.4 2.6-18.6 6.8-27.4 5.8-12.2 11.8-24.2 18-36.2 21-40.6 43.6-80.8 69.8-118.6 13-18.6 26.8-37 42.8-53 11.2-11.2 24.8-23.2 40.6-27 48.4-11.6 85.4 44.4 114.8 72.6 14.2 13.6 33.2 29 54.4 26.4 14.6-1.8 27.6-13.2 38-22.6 35.4-31.8 63.8-71.2 93.2-108.2 14.6-18.2 29-36.6 44.8-54 10.6-11.8 22.2-25.2 36.4-32.8 25.4-13.8 57.8 14.6 75.4 29.2 30 25 56.6 54.2 82 83.8 24.2 28.2 47.6 56.8 68.2 87.8 31.8 48 59.4 99.2 84.6 151 5.4 11.2 7.2 18.8 9.2 31.2 1.2 6.8 3.8 14.6 2.8 21.6-1.4 9.8-8.2 20.4-13.2 28.4-12 19-28.2 35.4-46 49.2-74.6 57.8-175.6 77-267.4 85.6-37.6 3.6-75.2 5-112.8 5z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "basecamp", + "brand" + ], + "defaultCode": 60082, + "grid": 16 + }, + { + "id": 435, + "paths": [ + "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM448 768c0 35.2-28.8 64-64 64h-128c-35.2 0-64-28.8-64-64v-512c0-35.2 28.8-64 64-64h128c35.2 0 64 28.8 64 64v512zM832 576c0 35.2-28.8 64-64 64h-128c-35.2 0-64-28.8-64-64v-320c0-35.2 28.8-64 64-64h128c35.2 0 64 28.8 64 64v320z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "trello", + "brand" + ], + "defaultCode": 60083, + "grid": 16 + }, + { + "id": 436, + "paths": [ + "M128 511.992c0 148.026 88.322 275.968 216.43 336.578l-183.178-488.784c-21.308 46.508-33.252 97.982-33.252 152.206zM771.228 493.128c0-46.234-17.054-78.236-31.654-103.142-19.458-30.82-37.72-56.894-37.72-87.716 0-34.374 26.766-66.376 64.486-66.376 1.704 0 3.32 0.204 4.976 0.302-68.316-60.97-159.34-98.196-259.308-98.196-134.16 0-252.186 67.046-320.844 168.568 9.010 0.282 17.506 0.454 24.712 0.454 40.154 0 102.34-4.752 102.34-4.752 20.69-1.182 23.132 28.434 2.458 30.822 0 0-20.81 2.368-43.952 3.55l139.834 405.106 84.044-245.456-59.822-159.65c-20.688-1.184-40.278-3.55-40.278-3.55-20.702-1.192-18.272-32.002 2.438-30.822 0 0 63.4 4.752 101.134 4.752 40.146 0 102.35-4.752 102.35-4.752 20.702-1.182 23.14 28.434 2.446 30.822 0 0-20.834 2.372-43.948 3.55l138.78 402.018 38.312-124.632c16.58-51.75 29.216-88.9 29.216-120.9zM518.742 544.704l-115.226 326.058c34.416 9.858 70.794 15.238 108.488 15.238 44.716 0 87.604-7.518 127.518-21.2-1.018-1.602-1.974-3.304-2.75-5.154l-118.030-314.942zM848.962 332.572c1.652 11.91 2.588 24.686 2.588 38.458 0 37.93-7.292 80.596-29.202 133.95l-117.286 330.272c114.162-64.828 190.938-185.288 190.938-323.258 0-65.030-17.060-126.16-47.038-179.422zM512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 960c-247.424 0-448-200.576-448-448s200.576-448 448-448 448 200.576 448 448-200.576 448-448 448z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "wordpress", + "brand", + "social", + "cms" + ], + "defaultCode": 60084, + "grid": 16 + }, + { + "id": 437, + "paths": [ + "M266.004 276.678c32.832-32.844 86.002-32.844 118.804-0.032l7.826 7.868 101.104-101.156-7.874-7.88c-57.624-57.7-138.514-77.878-212.42-60.522-10.594-65.182-67.088-114.924-135.174-114.956-75.65 0-136.954 61.442-136.97 137.158 0 65.336 45.59 120 106.662 133.83-23.138 77.45-4.242 164.834 56.846 225.984l227.826 227.9 100.996-101.214-227.81-227.886c-32.682-32.722-32.742-86.126 0.184-119.094zM1022.712 137.158c0.016-75.762-61.318-137.158-136.984-137.158-69.234 0-126.478 51.444-135.682 118.238-77.074-22.664-163.784-3.496-224.64 57.408l-227.84 227.9 101.102 101.172 227.766-227.856c32.94-32.966 85.988-32.906 118.684-0.184 32.8 32.83 32.8 86.114-0.032 118.956l-7.794 7.836 101.010 101.248 7.858-7.928c60.458-60.566 79.678-146.756 57.612-223.638 67.15-8.834 118.94-66.364 118.94-135.994zM906.266 751.064c18.102-74.458-1.976-156.324-60.108-214.5l-227.49-227.992-101.102 101.122 227.52 228.012c32.94 32.996 32.864 86.096 0.184 118.848-32.802 32.814-86.004 32.814-118.836-0.030l-7.766-7.79-100.994 101.246 7.732 7.728c61.516 61.594 149.618 80.438 227.368 56.488 12.632 62.682 67.934 109.804 134.258 109.804 75.604 0 136.968-61.35 136.968-137.126 0-69.2-51.18-126.456-117.734-135.81zM612.344 528.684l-227.536 227.992c-32.71 32.768-86.034 32.828-118.944-0.124-32.818-32.904-32.832-86.098-0.044-118.97l7.808-7.774-101.086-101.124-7.734 7.712c-58.76 58.802-78.56 141.834-59.45 216.982-60.398 14.26-105.358 68.634-105.358 133.496-0.016 75.746 61.332 137.126 136.982 137.126 65.1-0.032 119.588-45.418 133.54-106.382 74.702 18.552 156.998-1.304 215.344-59.756l227.49-227.96-101.012-101.218z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "joomla", + "brand", + "cms" + ], + "defaultCode": 60085, + "grid": 16 + }, + { + "id": 438, + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM824.636 589.598c-36.798 142.716-165.358 242.402-312.63 242.402-147.282 0-275.85-99.686-312.654-242.42-6.232-24.158 8.352-48.886 32.512-55.124 3.71-0.958 7.528-1.446 11.338-1.446 20.624 0 38.628 13.972 43.788 33.976 26.512 102.748 119.042 174.51 225.014 174.51 105.978 0 198.502-71.76 225-174.51 5.152-20.006 23.15-33.982 43.766-33.982 3.822 0 7.65 0.49 11.376 1.456 11.692 3.016 21.526 10.418 27.668 20.842 6.142 10.416 7.854 22.596 4.822 34.296z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "ello", + "brand", + "social" + ], + "defaultCode": 60086, + "grid": 16 + }, + { + "id": 439, + "paths": [ + "M957.796 384h-57.406c-35.166 0-65.988-29.742-68.39-64v0c0.004-182.668-147.258-320-331.19-320h-167.824c-183.812 0-332.856 148-332.986 330.666v362.798c0 182.654 149.174 330.536 332.984 330.536h358.42c183.948 0 332.596-147.882 332.596-330.536v-234.382c0-36.502-29.44-75.082-66.204-75.082zM320 256h192c35.2 0 64 28.8 64 64s-28.8 64-64 64h-192c-35.2 0-64-28.8-64-64s28.8-64 64-64zM704 768h-384c-35.2 0-64-28.8-64-64s28.8-64 64-64h384c35.2 0 64 28.8 64 64s-28.8 64-64 64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "blogger", + "brand", + "social" + ], + "defaultCode": 60087, + "grid": 16 + }, + { + "id": 440, + "paths": [ + "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM896 648c0 137-111.4 248-249.4 248h-268.8c-138 0-249.8-111-249.8-248v-272c0-137 111.8-248 249.8-248h125.8c138 0 248.4 103 248.4 240 1.8 25.6 25 48 51.2 48h43c27.6 0 49.6 29 49.6 56.4v175.6z", + "M704 640c0 35.2-28.8 64-64 64h-256c-35.2 0-64-28.8-64-64v0c0-35.2 28.8-64 64-64h256c35.2 0 64 28.8 64 64v0z", + "M576 384c0 35.2-28.8 64-64 64h-128c-35.2 0-64-28.8-64-64v0c0-35.2 28.8-64 64-64h128c35.2 0 64 28.8 64 64v0z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "blogger", + "brand", + "social" + ], + "defaultCode": 60088, + "grid": 16 + }, + { + "id": 441, + "paths": [ + "M576.032 448l-0.002 234.184c0 59.418-0.77 93.656 5.53 110.5 6.25 16.754 21.918 34.146 38.99 44.202 22.684 13.588 48.542 20.376 77.708 20.376 51.854 0 82.478-6.848 133.742-40.54v153.944c-43.7 20.552-81.866 32.594-117.324 40.922-35.5 8.242-73.86 12.406-115.064 12.406-46.828 0-74.456-5.886-110.41-17.656-35.958-11.868-66.66-28.806-92.020-50.54-25.45-21.922-43.022-45.208-52.848-69.832-9.826-24.636-14.716-60.414-14.716-107.244v-359.1h-137.426v-145.006c40.208-13.042 85.164-31.788 113.78-56.152 28.754-24.45 51.766-53.706 69.106-87.944 17.392-34.146 29.348-77.712 35.872-130.516h165.084l-0.002 255.996h255.968v192h-255.968z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "tumblr", + "brand", + "social" + ], + "defaultCode": 60089, + "grid": 16 + }, + { + "id": 442, + "paths": [ + "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM731.8 824.6c-30.2 14.2-57.6 24.2-82 30-24.4 5.6-51 8.6-79.4 8.6-32.4 0-51.4-4-76.2-12.2s-46-19.8-63.6-34.8c-17.6-15.2-29.6-31.2-36.4-48.2s-10.2-41.6-10.2-74v-247.8h-96v-100c27.8-9 60-22 79.6-38.8 19.8-16.8 35.8-37 47.6-60.6 12-23.6 20.2-53.6 24.8-90h100.4v163.2h163.6v126.2h-163.4v181.2c0 41-0.6 64.6 3.8 76.2s15.2 23.6 27 30.4c15.6 9.4 33.6 14 53.6 14 35.8 0 71.4-11.6 106.8-34.8v111.4z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "tumblr", + "brand", + "social" + ], + "defaultCode": 60090, + "grid": 16 + }, + { + "id": 443, + "paths": [ + "M568.2 589v0c112.6-197.6 298.6-520 349.6-589-22.4 15-56.8 22.6-88.4 29.8l-47.8-29.8c-38.4 71.6-180 303-270.2 451.2-91.4-151.4-199.6-326.2-270.2-451.2-56 12-79.2 12.6-135 0v0 0c0 0 0 0 0 0v0c110.8 166.8 288.2 484.6 348.6 589v0l-8.2 435 64.8-29.8v-0.8l64.8 30.6-8-435z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "yahoo", + "brand", + "social" + ], + "defaultCode": 60091, + "grid": 16 + }, + { + "id": 444, + "paths": [ + "M513.2 69.6c-181 0-352-23.8-513.2-69.6 0 361.8 0 933.2 0 1024 161.4-45.8 332.4-69.6 513.2-69.6 178.8 0 349.4 23.2 510.8 69.6 0-348.4 0-649.8 0-1024-161.4 46.4-331.8 69.6-510.8 69.6zM796.8 157l-6.2 9.8c-5.8 9.2-11 17-18.2 28-9.6 14.4-27.6 43-49.2 79.8-6 10.2-13.4 22.4-21 35.6-14.6 24.6-31 52.4-44 74.4-5.4 9.4-10.8 19-16.4 28.6-14.4 25-29.2 50.8-43.4 75.6-14.6 25.8-29 51.2-43.4 76.4v25.4c0 35.2 0.8 73.6 2 107.8 0.6 15.6 1.2 43.4 2 72.8 0.8 35 1.6 71.2 2.6 89.6l0.2 5.6v0.6l-6-1.6c-2.4-0.6-4.6-1.2-7-1.8-7.2-1.6-15-2.8-22.6-3.6-4.6-0.4-9.4-0.6-14.2-0.6 0 0 0 0 0 0s0 0 0 0c-4.8 0-9.6 0.2-14.2 0.6-7.6 0.8-15.4 2-22.6 3.6-2.4 0.6-4.8 1.2-7 1.8l-6 1.6v-0.6l0.2-5.6c0.8-18.2 1.8-54.6 2.6-89.6 0.6-29.4 1.4-57.2 2-72.8 1.4-34.4 2-72.6 2-107.8v-25.4c-14.4-25.4-28.8-50.6-43.4-76.4-14.2-25-29-50.6-43.2-75.6-5.6-9.6-11-19.2-16.4-28.6-12.8-22.2-29.4-50-44-74.4-7.8-13-15.2-25.4-21-35.6-21.6-36.8-39.6-65.2-49.2-79.8-7.2-11-12.4-18.8-18.2-28l-6.2-9.8 11.2 3.2c14.2 4 28.8 6 44.4 6s30.6-2 44.6-6l3.4-1 1.8 3c27.6 49.8 101.8 171.8 146.2 244.8 15.2 25.2 27.4 45 33.4 55.2 0 0 0 0 0-0.2 0 0 0 0 0 0.2 6-10 18.2-30 33.4-55.2 44.4-72.8 118.6-194.8 146.2-244.8l1.8-3 3.4 1c14 4 29 6 44.6 6s30.2-2 44.4-6l10.6-3.2z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "yahoo" + ], + "defaultCode": 60092, + "grid": 16 + }, + { + "id": 445, + "paths": [ + "M567.656 736.916c-81.944 38.118-158.158 37.716-209.34 34.020-61.052-4.41-110.158-21.124-131.742-35.732-13.3-9.006-31.384-5.522-40.39 7.782-9.004 13.302-5.52 31.386 7.782 40.39 34.698 23.486 96.068 40.954 160.162 45.58 10.866 0.784 22.798 1.278 35.646 1.278 55.782 0 126.626-5.316 202.42-40.57 14.564-6.778 20.878-24.074 14.104-38.64-6.776-14.566-24.076-20.872-38.642-14.108zM890.948 693.816c2.786-252.688 28.762-730.206-454.97-691.612-477.6 38.442-350.964 542.968-358.082 711.95-6.308 89.386-35.978 198.648-77.896 309.846h129.1c13.266-47.122 23.024-93.72 27.232-138.15 7.782 5.428 16.108 10.674 24.994 15.7 14.458 8.518 26.884 19.844 40.040 31.834 30.744 28.018 65.59 59.774 133.712 63.752 4.572 0.262 9.174 0.394 13.676 0.394 68.896 0 116.014-30.154 153.878-54.382 18.14-11.612 33.818-21.64 48.564-26.452 41.91-13.12 78.532-34.296 105.904-61.252 4.276-4.208 8.242-8.538 11.962-12.948 15.246 55.878 36.118 118.758 59.288 181.504h275.65c-66.174-102.224-134.436-202.374-133.052-330.184zM124.11 556.352c0-0.016 0-0.030-0.002-0.046-4.746-82.462 34.71-151.832 88.126-154.936 53.412-3.106 100.56 61.228 105.304 143.692 0 0.014 0.004 0.030 0.004 0.044 0.256 4.446 0.368 8.846 0.37 13.206-16.924 4.256-32.192 10.436-45.872 17.63-0.052-0.612-0.092-1.216-0.152-1.83 0-0.008 0-0.018 0-0.026-4.57-46.81-29.572-82.16-55.852-78.958-26.28 3.204-43.88 43.75-39.312 90.558 0 0.010 0.004 0.018 0.004 0.026 1.992 20.408 7.868 38.636 16.042 52.444-2.034 1.604-7.784 5.812-14.406 10.656-4.97 3.634-11.020 8.058-18.314 13.43-19.882-26.094-33.506-63.58-35.94-105.89zM665.26 760.178c-1.9 43.586-58.908 84.592-111.582 101.044l-0.296 0.096c-21.9 7.102-41.428 19.6-62.104 32.83-34.732 22.224-70.646 45.208-122.522 45.208-3.404 0-6.894-0.104-10.326-0.296-47.516-2.778-69.742-23.032-97.88-48.676-14.842-13.526-30.19-27.514-49.976-39.124l-0.424-0.244c-42.706-24.104-69.212-54.082-70.908-80.194-0.842-12.98 4.938-24.218 17.182-33.4 26.636-19.972 44.478-33.022 56.284-41.658 13.11-9.588 17.068-12.48 20-15.264 2.096-1.986 4.364-4.188 6.804-6.562 24.446-23.774 65.36-63.562 128.15-63.562 38.404 0 80.898 14.8 126.17 43.902 21.324 13.878 39.882 20.286 63.38 28.4 16.156 5.578 34.468 11.902 58.992 22.404l0.396 0.164c22.88 9.404 49.896 26.564 48.66 54.932zM652.646 657.806c-4.4-2.214-8.974-4.32-13.744-6.286-22.106-9.456-39.832-15.874-54.534-20.998 8.116-15.894 13.16-35.72 13.624-57.242 0-0.010 0-0.022 0-0.030 1.126-52.374-25.288-94.896-58.996-94.976-33.71-0.078-61.95 42.314-63.076 94.686 0 0.010 0 0.018 0 0.028-0.038 1.714-0.042 3.416-0.020 5.11-20.762-9.552-41.18-16.49-61.166-20.76-0.092-1.968-0.204-3.932-0.244-5.92 0-0.016 0-0.036 0-0.050-1.938-95.412 56.602-174.39 130.754-176.402 74.15-2.014 135.828 73.7 137.772 169.11 0 0.018 0 0.038 0 0.052 0.874 43.146-10.66 82.866-30.37 113.678z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "tux", + "brand", + "linux" + ], + "defaultCode": 60093, + "grid": 16 + }, + { + "id": 446, + "paths": [ + "M791.498 544.092c-1.294-129.682 105.758-191.876 110.542-194.966-60.152-88.020-153.85-100.078-187.242-101.472-79.742-8.074-155.596 46.948-196.066 46.948-40.368 0-102.818-45.754-168.952-44.552-86.916 1.292-167.058 50.538-211.812 128.38-90.304 156.698-23.126 388.84 64.89 515.926 43.008 62.204 94.292 132.076 161.626 129.58 64.842-2.588 89.362-41.958 167.756-41.958s100.428 41.958 169.050 40.67c69.774-1.296 113.982-63.398 156.692-125.796 49.39-72.168 69.726-142.038 70.924-145.626-1.548-0.706-136.060-52.236-137.408-207.134zM662.562 163.522c35.738-43.358 59.86-103.512 53.28-163.522-51.478 2.096-113.878 34.29-150.81 77.55-33.142 38.376-62.148 99.626-54.374 158.436 57.466 4.484 116.128-29.204 151.904-72.464z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "apple", + "brand" + ], + "defaultCode": 60094, + "grid": 16 + }, + { + "id": 447, + "paths": [ + "M569.226 778.256c-0.002-0.044-0.002-0.088-0.004-0.132 0.002 0.044 0.002 0.088 0.004 0.132z", + "M570.596 814.538c-0.012-0.234-0.022-0.466-0.032-0.702 0.010 0.234 0.020 0.466 0.032 0.702z", + "M569.814 796.312c-0.006-0.178-0.012-0.356-0.020-0.536 0.010 0.182 0.016 0.358 0.020 0.536z", + "M960 0h-896c-35.2 0-64 28.8-64 64v896c0 35.2 28.8 64 64 64h493.832c0.044 0 0.088 0.006 0.132 0.006 0.042 0 0.084-0.006 0.126-0.006h401.91c35.2 0 64-28.8 64-64v-896c0-35.2-28.8-64-64-64zM192 224c0-17.672 14.328-32 32-32s32 14.328 32 32v64c0 17.672-14.328 32-32 32s-32-14.328-32-32v-64zM960 960h-375.058c-6.7-42.082-10.906-85.476-13.388-127.604 0.006 0.116 0.010 0.228 0.018 0.344-19.696 2.146-39.578 3.26-59.572 3.26-133.65 0-262.382-48.656-362.484-137.006-14.906-13.156-16.326-35.906-3.168-50.812 13.158-14.904 35.906-16.326 50.814-3.168 86.936 76.728 198.748 118.986 314.838 118.986 19.086 0 38.052-1.166 56.816-3.416-2.192-118.194 6.876-211.914 7.026-213.404 0.898-8.996-2.050-17.952-8.118-24.654-6.066-6.702-14.682-10.526-23.724-10.526h-95.174c1.384-34.614 5.082-93.814 14.958-160.188 18.864-126.76 51.994-225.77 96.152-287.812h400.064v896z", + "M800 320c-17.674 0-32-14.328-32-32v-64c0-17.672 14.326-32 32-32s32 14.328 32 32v64c0 17.672-14.326 32-32 32z", + "M540.496 835.232c-3.646 0.192-7.298 0.336-10.956 0.454 3.658-0.116 7.31-0.264 10.956-0.454z", + "M512 836c4.692 0 9.374-0.074 14.050-0.196-4.676 0.122-9.358 0.196-14.050 0.196z", + "M539.074 763.202c0.784-0.044 1.568-0.084 2.352-0.132-0.782 0.048-1.568 0.088-2.352 0.132z", + "M525.084 763.8c1.074-0.030 2.146-0.072 3.218-0.11-1.072 0.038-2.144 0.082-3.218 0.11z", + "M877.65 648.182c-13.156-14.91-35.908-16.322-50.812-3.168-72.642 64.114-162.658 104.136-258.022 115.57 0.43 23.278 1.294 47.496 2.754 72.156 111.954-12.21 217.786-58.614 302.912-133.746 14.908-13.156 16.326-35.906 3.168-50.812z", + "M571.498 832.748c-4.606 0.5-9.222 0.936-13.848 1.322 4.626-0.384 9.244-0.822 13.848-1.322z", + "M555.488 834.242c-3.906 0.312-7.822 0.576-11.742 0.806 3.92-0.226 7.834-0.496 11.742-0.806z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "finder", + "brand", + "mac", + "os" + ], + "defaultCode": 60095, + "grid": 16 + }, + { + "id": 448, + "paths": [ + "M896 384c-35.2 0-64 28.8-64 64v256c0 35.2 28.8 64 64 64s64-28.8 64-64v-256c0-35.2-28.8-64-64-64zM128 384c-35.2 0-64 28.8-64 64v256c0 35.2 28.8 64 64 64s64-28.8 64-64v-256c0-35.2-28.802-64-64-64zM224 736c0 53.020 42.98 96 96 96v0 128c0 35.2 28.8 64 64 64s64-28.8 64-64v-128h128v128c0 35.2 28.8 64 64 64s64-28.8 64-64v-128c53.020 0 96-42.98 96-96v-352h-576v352z", + "M798.216 320.002c-9.716-87.884-59.004-163.792-129.62-209.646l32.024-64.046c7.904-15.806 1.496-35.028-14.31-42.932s-35.030-1.496-42.932 14.312l-32.142 64.286-8.35-3.316c-28.568-9.502-59.122-14.66-90.886-14.66-31.762 0-62.316 5.158-90.888 14.656l-8.348 3.316-32.142-64.282c-7.904-15.808-27.128-22.212-42.932-14.312-15.808 7.904-22.214 27.126-14.312 42.932l32.022 64.046c-70.616 45.852-119.904 121.762-129.622 209.644v32h574.222v-31.998h-1.784zM416 256c-17.674 0-32-14.328-32-32 0-17.648 14.288-31.958 31.93-31.996 0.032 0 0.062 0.002 0.094 0.002 0.018 0 0.036-0.002 0.052-0.002 17.638 0.042 31.924 14.35 31.924 31.996 0 17.672-14.326 32-32 32zM608 256c-17.674 0-32-14.328-32-32 0-17.646 14.286-31.954 31.924-31.996 0.016 0 0.034 0.002 0.050 0.002 0.032 0 0.064-0.002 0.096-0.002 17.64 0.038 31.93 14.348 31.93 31.996 0 17.672-14.326 32-32 32z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "android", + "brand", + "os", + "mobile" + ], + "defaultCode": 60096, + "grid": 16 + }, + { + "id": 449, + "paths": [ + "M412.23 511.914c-47.708-24.518-94.086-36.958-137.88-36.958-5.956 0-11.952 0.18-17.948 0.708-55.88 4.624-106.922 19.368-139.75 30.828-8.708 3.198-17.634 6.576-26.83 10.306l-89.822 311.394c61.702-22.832 116.292-33.938 166.27-33.938 80.846 0 139.528 30.208 187.992 61.304 22.962-77.918 78.044-266.090 94.482-322.324-11.95-7.284-24.076-14.57-36.514-21.32zM528.348 591.070l-90.446 314.148c26.832 15.372 117.098 64.050 186.212 64.050 55.792 0 118.252-14.296 190.834-43.792l86.356-301.976c-58.632 18.922-114.876 28.52-167.464 28.52-95.95 0-163.114-31.098-205.492-60.95zM292.822 368.79c77.118 0.798 134.152 30.208 181.416 60.502l92.752-317.344c-19.546-11.196-70.806-39.094-107.858-48.6-24.386-5.684-50.020-8.616-77.204-8.616-51.796 0.976-108.388 13.946-172.888 39.8l-88.44 310.596c64.808-24.436 120.644-36.34 172.086-36.34 0.046 0.002 0.136 0.002 0.136 0.002zM1024 198.124c-58.814 22.832-116.208 34.466-171.028 34.466-91.686 0-159.292-31.802-203.094-62.366l-91.95 318.236c61.746 39.708 128.29 59.878 198.122 59.878 56.948 0 115.94-13.68 175.462-40.688l-0.182-2.222 3.734-0.886 88.936-306.418z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "windows", + "brand", + "os" + ], + "defaultCode": 60097, + "grid": 16 + }, + { + "id": 450, + "paths": [ + "M0.35 512l-0.35-312.074 384-52.144v364.218zM448 138.482l511.872-74.482v448h-511.872zM959.998 576l-0.126 448-511.872-72.016v-375.984zM384 943.836l-383.688-52.594-0.020-315.242h383.708z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "windows8", + "brand", + "os" + ], + "defaultCode": 60098, + "grid": 16 + }, + { + "id": 451, + "paths": [ + "M891.96 514.204c-18.086 0-35.348 3.52-51.064 9.856-10.506-114.358-110.29-204.060-232-204.060-29.786 0-58.682 5.63-84.318 15.164-9.96 3.702-12.578 7.52-12.578 14.916v402.714c0 7.766 6.24 14.234 14.124 14.996 0.336 0.034 363.536 0.21 365.89 0.21 72.904 0 131.986-56.816 131.986-126.894s-59.134-126.902-132.040-126.902zM400 768h32l16-224.22-16-223.78h-32l-16 223.78zM304 768h-32l-16-162.75 16-157.25h32l16 160zM144 768h32l16-128-16-128h-32l-16 128zM16 704h32l16-64-16-64h-32l-16 64z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "soundcloud", + "brand", + "social" + ], + "defaultCode": 60099, + "grid": 16 + }, + { + "id": 452, + "paths": [ + "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM176 704h-32l-16-96 16-96h32l16 96-16 96zM304 704h-32l-16-128 16-128h32l16 128-16 128zM432 704h-32l-16-192 16-192h32l16 192-16 192zM825.2 704c-2 0-301.2-0.2-301.4-0.2-6.4-0.6-11.6-6.2-11.8-12.8v-345.2c0-6.4 2.2-9.6 10.4-12.8 21.2-8.2 45-13 69.6-13 100.2 0 182.4 76.8 191.2 175 13-5.4 27.2-8.4 42-8.4 60 0 108.8 48.8 108.8 108.8s-48.8 108.6-108.8 108.6z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "soundcloud", + "brand", + "social" + ], + "defaultCode": 60100, + "grid": 16 + }, + { + "id": 453, + "paths": [ + "M425.6 37.4c-1.6-1-3.4-1.8-5-2.6-1.8 0.4-3.4 0.6-5.2 1l10.2 1.6z", + "M36.8 421c-0.4 1.8-0.6 3.6-0.8 5.2 1 1.6 1.6 3.2 2.6 4.8l-1.8-10z", + "M986.8 602.6c0.4-1.8 0.6-3.6 1-5.4-1-1.6-1.6-3.2-2.6-4.8l1.6 10.2z", + "M592 983c1.6 1 3.4 1.8 5 2.6 1.8-0.4 3.6-0.6 5.4-0.8l-10.4-1.8z", + "M987.8 597.2c-0.4 1.8-0.6 3.6-1 5.4l-1.8-10.4c1 1.8 1.8 3.4 2.8 5 5.2-28.8 8-58.2 8-87.6 0-65.2-12.8-128.6-38-188.2-24.4-57.6-59.2-109.4-103.6-153.8s-96.2-79.2-153.6-103.6c-59.6-25.2-123-38-188.2-38-30.8 0-61.6 2.8-91.6 8.6 0 0-0.2 0-0.2 0 1.6 0.8 3.4 1.6 5 2.6l-10.2-1.6c1.8-0.4 3.4-0.6 5.2-1-41.2-21.8-87.4-33.6-134.2-33.6-76.4 0-148.4 29.8-202.4 83.8s-83.8 126-83.8 202.4c0 48.6 12.6 96.6 36 138.8 0.4-1.8 0.6-3.6 0.8-5.2l1.8 10.2c-1-1.6-1.8-3.2-2.6-4.8-4.8 27.4-7.2 55.4-7.2 83.4 0 65.2 12.8 128.6 38 188.2 24.4 57.6 59.2 109.2 103.6 153.6s96.2 79.2 153.8 103.6c59.6 25.2 123 38 188.2 38 28.4 0 56.8-2.6 84.6-7.6-1.6-1-3.2-1.8-5-2.6l10.4 1.8c-1.8 0.4-3.6 0.6-5.4 0.8 42.8 24.2 91.4 37.2 140.8 37.2 76.4 0 148.4-29.8 202.4-83.8s83.8-126 83.8-202.4c-0.2-48.6-12.8-96.6-36.4-139.2zM514.2 805.8c-171.8 0-248.6-84.4-248.6-147.8 0-32.4 24-55.2 57-55.2 73.6 0 54.4 105.6 191.6 105.6 70.2 0 109-38.2 109-77.2 0-23.4-11.6-49.4-57.8-60.8l-152.8-38.2c-123-30.8-145.4-97.4-145.4-160 0-129.8 122.2-178.6 237-178.6 105.8 0 230.4 58.4 230.4 136.4 0 33.4-29 52.8-62 52.8-62.8 0-51.2-86.8-177.6-86.8-62.8 0-97.4 28.4-97.4 69s49.6 53.6 92.6 63.4l113.2 25.2c123.8 27.6 155.2 100 155.2 168 0 105.4-81 184.2-244.4 184.2z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "skype", + "brand", + "social" + ], + "defaultCode": 60101, + "grid": 16 + }, + { + "id": 454, + "paths": [ + "M256 640c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM640 640c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM643.112 776.778c16.482-12.986 40.376-10.154 53.364 6.332s10.152 40.378-6.334 53.366c-45.896 36.158-115.822 59.524-178.142 59.524-62.322 0-132.248-23.366-178.144-59.522-16.486-12.99-19.32-36.882-6.332-53.368 12.99-16.482 36.882-19.318 53.366-6.332 26.422 20.818 78.722 43.222 131.11 43.222s104.688-22.404 131.112-43.222zM1024 512c0-70.692-57.308-128-128-128-48.116 0-89.992 26.57-111.852 65.82-65.792-35.994-145.952-59.246-233.28-64.608l76.382-171.526 146.194 42.2c13.152 37.342 48.718 64.114 90.556 64.114 53.020 0 96-42.98 96-96s-42.98-96-96-96c-36.56 0-68.342 20.442-84.554 50.514l-162.906-47.024c-18.224-5.258-37.538 3.722-45.252 21.052l-103.77 233.026c-85.138 5.996-163.262 29.022-227.636 64.236-21.864-39.25-63.766-65.804-111.882-65.804-70.692 0-128 57.308-128 128 0 52.312 31.402 97.254 76.372 117.102-8.070 24.028-12.372 49.104-12.372 74.898 0 176.73 200.576 320 448 320 247.422 0 448-143.27 448-320 0-25.792-4.3-50.862-12.368-74.886 44.97-19.85 76.368-64.802 76.368-117.114zM864 188c19.882 0 36 16.118 36 36s-16.118 36-36 36-36-16.118-36-36 16.118-36 36-36zM64 512c0-35.29 28.71-64 64-64 25.508 0 47.572 15.004 57.846 36.646-33.448 25.366-61.166 54.626-81.666 86.738-23.524-9.47-40.18-32.512-40.18-59.384zM512 948c-205.45 0-372-109.242-372-244s166.55-244 372-244c205.45 0 372 109.242 372 244s-166.55 244-372 244zM919.82 571.384c-20.5-32.112-48.218-61.372-81.666-86.738 10.276-21.642 32.338-36.646 57.846-36.646 35.29 0 64 28.71 64 64 0 26.872-16.656 49.914-40.18 59.384z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "reddit", + "brand", + "social" + ], + "defaultCode": 60102, + "grid": 16 + }, + { + "id": 455, + "paths": [ + "M0 0v1024h1024v-1024h-1024zM544 584v216h-64v-216l-175-328h72.6l134.4 252 134.4-252h72.6l-175 328z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "hackernews", + "brand", + "ycombinator", + "yc", + "social" + ], + "defaultCode": 60103, + "grid": 16 + }, + { + "id": 456, + "paths": [ + "M966.8 233.6c0 3.2-1 6.2-3 9-2 2.6-4.2 4-6.8 4-20 2-36.4 8.4-49 19.2-12.8 10.8-25.8 31.8-39.2 62.4l-206.4 465.4c-1.4 4.4-5.2 6.4-11.4 6.4-4.8 0-8.6-2.2-11.4-6.4l-115.8-242-133.2 242c-2.8 4.4-6.4 6.4-11.4 6.4-6 0-9.8-2.2-11.8-6.4l-202.6-465.2c-12.6-28.8-26-49-40-60.4s-33.6-18.6-58.6-21.2c-2.2 0-4.2-1.2-6-3.4-2-2.2-2.8-4.8-2.8-7.8 0-7.6 2.2-11.4 6.4-11.4 18 0 37 0.8 56.8 2.4 18.4 1.6 35.6 2.4 51.8 2.4 16.4 0 36-0.8 58.4-2.4 23.4-1.6 44.2-2.4 62.4-2.4 4.4 0 6.4 3.8 6.4 11.4s-1.4 11.2-4 11.2c-18 1.4-32.4 6-42.8 13.8s-15.6 18-15.6 30.8c0 6.4 2.2 14.6 6.4 24.2l167.4 378.4 95.2-179.6-88.6-185.8c-16-33.2-29-54.6-39.2-64.2s-25.8-15.4-46.6-17.6c-2 0-3.6-1.2-5.4-3.4s-2.6-4.8-2.6-7.8c0-7.6 1.8-11.4 5.6-11.4 18 0 34.6 0.8 49.8 2.4 14.6 1.6 30 2.4 46.6 2.4 16.2 0 33.2-0.8 51.4-2.4 18.6-1.6 37-2.4 55-2.4 4.4 0 6.4 3.8 6.4 11.4s-1.2 11.2-4 11.2c-36.2 2.4-54.2 12.8-54.2 30.8 0 8 4.2 20.6 12.6 37.6l58.6 119 58.4-108.8c8-15.4 12.2-28.4 12.2-38.8 0-24.8-18-38-54.2-39.6-3.2 0-4.8-3.8-4.8-11.2 0-2.8 0.8-5.2 2.4-7.6s3.2-3.6 4.8-3.6c13 0 28.8 0.8 47.8 2.4 18 1.6 33 2.4 44.6 2.4 8.4 0 20.6-0.8 36.8-2 20.4-1.8 37.6-2.8 51.4-2.8 3.2 0 4.8 3.2 4.8 9.6 0 8.6-3 13-8.8 13-21 2.2-38 8-50.8 17.4s-28.8 30.8-48 64.4l-78.2 143.2 105.2 214.4 155.4-361.4c5.4-13.2 8-25.4 8-36.4 0-26.4-18-40.4-54.2-42.2-3.2 0-4.8-3.8-4.8-11.2 0-7.6 2.4-11.4 7.2-11.4 13.2 0 28.8 0.8 47 2.4 16.8 1.6 30.8 2.4 42 2.4 12 0 25.6-0.8 41.2-2.4 16.2-1.6 30.8-2.4 43.8-2.4 4 0 6 3.2 6 9.6z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "wikipedia", + "brand" + ], + "defaultCode": 60104, + "grid": 16 + }, + { + "id": 457, + "paths": [ + "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM384 832h-128v-448h128v448zM320 320c-35.4 0-64-28.6-64-64s28.6-64 64-64c35.4 0 64 28.6 64 64s-28.6 64-64 64zM832 832h-128v-256c0-35.4-28.6-64-64-64s-64 28.6-64 64v256h-128v-448h128v79.4c26.4-36.2 66.8-79.4 112-79.4 79.6 0 144 71.6 144 160v288z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "linkedin", + "brand", + "social" + ], + "defaultCode": 60105, + "grid": 16 + }, + { + "id": 458, + "paths": [ + "M384 384h177.106v90.782h2.532c24.64-44.194 84.958-90.782 174.842-90.782 186.946 0 221.52 116.376 221.52 267.734v308.266h-184.61v-273.278c0-65.184-1.334-149.026-96.028-149.026-96.148 0-110.82 70.986-110.82 144.292v278.012h-184.542v-576z", + "M64 384h192v576h-192v-576z", + "M256 224c0 53.019-42.981 96-96 96s-96-42.981-96-96c0-53.019 42.981-96 96-96s96 42.981 96 96z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "linkedin", + "brand", + "social" + ], + "defaultCode": 60106, + "grid": 16 + }, + { + "id": 459, + "paths": [ + "M451.6 766.2l-37.6-102c0 0-61 68-152.4 68-81 0-138.4-70.4-138.4-183 0-144.2 72.8-195.8 144.2-195.8 103.2 0 136 66.8 164.2 152.4l37.6 117.2c37.6 113.8 108 205.2 310.8 205.2 145.4 0 244-44.6 244-161.8 0-95-54-144.2-154.8-167.8l-75-16.4c-51.6-11.8-66.8-32.8-66.8-68 0-39.8 31.6-63.4 83.2-63.4 56.4 0 86.8 21.2 91.4 71.6l117.2-14c-9.4-105.6-82.2-149-201.8-149-105.6 0-208.8 39.8-208.8 167.8 0 79.8 38.8 130.2 136 153.6l79.8 18.8c59.8 14 79.8 38.8 79.8 72.8 0 43.4-42.2 61-122 61-118.4 0-167.8-62.2-195.8-147.8l-38.8-117.2c-49-152.6-127.6-208.8-283.6-208.8-172.4 0-264 109-264 294.4 0 178.2 91.4 274.4 255.8 274.4 132.4 0 195.8-62.2 195.8-62.2v0z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "lastfm", + "brand", + "social" + ], + "defaultCode": 60107, + "grid": 16 + }, + { + "id": 460, + "paths": [ + "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM746.6 760.8c-177.6 0-239.2-80-272-179.6l-32.8-102.6c-24.6-75-53.4-133.4-143.6-133.4-62.6 0-126.2 45.2-126.2 171.4 0 98.6 50.2 160.2 121.2 160.2 80 0 133.4-59.6 133.4-59.6l32.8 89.2c0 0-55.4 54.4-171.4 54.4-144 0-224-84-224-240 0-162.2 80-257.6 231-257.6 136.6 0 205.2 49.2 248.4 182.6l33.8 102.6c24.6 75 67.8 129.4 171.4 129.4 69.8 0 106.8-15.4 106.8-53.4 0-29.8-17.4-51.4-69.8-63.6l-69.8-16.4c-85.2-20.6-119-64.6-119-134.4 0-111.8 90.4-146.8 182.6-146.8 104.6 0 168.4 38 176.6 130.4l-102.6 12.4c-4.2-44.2-30.8-62.6-80-62.6-45.2 0-72.8 20.6-72.8 55.4 0 30.8 13.4 49.2 58.4 59.6l65.6 14.4c88.2 20.6 135.4 63.6 135.4 146.8 0 102.2-86.2 141.2-213.4 141.2z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "lastfm", + "brand", + "social" + ], + "defaultCode": 60108, + "grid": 16 + }, + { + "id": 461, + "paths": [ + "M0 0v1024h1024v-1024h-1024zM512 960v-448h-448v-448h448v448h448v448h-448z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "delicious", + "brand", + "social" + ], + "defaultCode": 60109, + "grid": 16 + }, + { + "id": 462, + "paths": [ + "M512 320c-35.2 0-64 28.8-64 64v256c0 105.8-86.2 192-192 192s-192-86.2-192-192v-128h128v128c0 35.2 28.8 64 64 64s64-28.8 64-64v-256c0-105.8 86.2-192 192-192s192 86.2 192 178v62l-82 24-46-24v-62c0-21.2-28.8-50-64-50z", + "M960 640c0 105.8-86.2 192-192 192s-192-86.2-192-206v-124l46 24 82-24v124c0 49.2 28.8 78 64 78s64-28.8 64-64v-128h128v128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "stumbleupon", + "brand", + "social" + ], + "defaultCode": 60110, + "grid": 16 + }, + { + "id": 463, + "paths": [ + "M852 0h-680c-94.6 0-172 77.4-172 172v680c0 94.6 77.4 172 172 172h680c94.6 0 172-77.4 172-172v-680c0-94.6-77.4-172-172-172zM512 320c-35.29 0-64 28.71-64 64v256c0 105.872-86.13 192-192 192s-192-86.128-192-192v-128h128v128c0 35.29 28.71 64 64 64s64-28.71 64-64v-256c0-105.87 86.13-192 192-192s192 86.13 192 178v62l-82 24-46-24v-62c0-21.29-28.71-50-64-50zM960 640c0 105.872-86.13 192-192 192s-192-86.128-192-206v-124l46 24 82-24v124c0 49.29 28.71 78 64 78s64-28.71 64-64v-128h128v128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "stumbleupon", + "brand", + "social" + ], + "defaultCode": 60111, + "grid": 16 + }, + { + "id": 464, + "paths": [ + "M1024 640v384h-1024v-384h128v256h768v-256zM192 704h640v128h-640zM207.152 565.466l27.698-124.964 624.832 138.496-27.698 124.964zM279.658 308.558l54.092-116.006 580.032 270.464-54.092 116.006zM991.722 361.476l-77.922 101.55-507.746-389.608 56.336-73.418h58.244z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "stackoverflow", + "brand", + "social" + ], + "defaultCode": 60112, + "grid": 16 + }, + { + "id": 465, + "paths": [ + "M512 68.4c-245 0-443.6 198.6-443.6 443.6 0 188 117 348.4 282 413-3.8-35-7.4-89 1.6-127.2 8-34.6 52-220.4 52-220.4s-13.2-26.6-13.2-65.8c0-61.6 35.8-107.8 80.2-107.8 37.8 0 56.2 28.4 56.2 62.4 0 38-24.2 95-36.8 147.6-10.6 44.2 22 80.2 65.6 80.2 78.8 0 139.4-83.2 139.4-203.2 0-106.2-76.4-180.4-185.2-180.4-126.2 0-200.2 94.6-200.2 192.6 0 38.2 14.6 79 33 101.2 3.6 4.4 4.2 8.2 3 12.8-3.4 14-10.8 44.2-12.4 50.4-2 8.2-6.4 9.8-14.8 6-55.4-25.8-90-106.8-90-171.8 0-140 101.6-268.4 293-268.4 153.8 0 273.4 109.6 273.4 256.2 0 152.8-96.4 276-230.2 276-45 0-87.2-23.4-101.6-51 0 0-22.2 84.6-27.6 105.4-10 38.6-37 86.8-55.2 116.2 41.6 12.8 85.6 19.8 131.4 19.8 245 0 443.6-198.6 443.6-443.6 0-245.2-198.6-443.8-443.6-443.8z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "pinterest", + "brand", + "social" + ], + "defaultCode": 60113, + "grid": 16 + }, + { + "id": 466, + "paths": [ + "M512 0c-282.4 0-512 229.6-512 512s229.6 512 512 512 512-229.6 512-512-229.6-512-512-512zM512 955.6c-45.8 0-89.8-7-131.4-19.8 18-29.4 45.2-77.8 55.2-116.2 5.4-20.8 27.6-105.4 27.6-105.4 14.4 27.6 56.8 51 101.6 51 133.8 0 230.2-123 230.2-276 0-146.6-119.6-256.2-273.4-256.2-191.4 0-293 128.6-293 268.4 0 65 34.6 146 90 171.8 8.4 4 12.8 2.2 14.8-6 1.4-6.2 9-36.2 12.4-50.4 1-4.4 0.6-8.4-3-12.8-18.4-22.2-33-63.2-33-101.2 0-97.8 74-192.6 200.2-192.6 109 0 185.2 74.2 185.2 180.4 0 120-60.6 203.2-139.4 203.2-43.6 0-76.2-36-65.6-80.2 12.6-52.8 36.8-109.6 36.8-147.6 0-34-18.2-62.4-56.2-62.4-44.6 0-80.2 46-80.2 107.8 0 39.2 13.2 65.8 13.2 65.8s-44 185.8-52 220.4c-9 38.4-5.4 92.2-1.6 127.2-165-64.4-282-224.8-282-412.8 0-245 198.6-443.6 443.6-443.6s443.6 198.6 443.6 443.6c0 245-198.6 443.6-443.6 443.6z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "pinterest", + "brand", + "social" + ], + "defaultCode": 60114, + "grid": 16 + }, + { + "id": 467, + "paths": [ + "M928 0h-832c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h832c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM312.6 666h-110.6c-6.6 0-11.6-3-14.4-7.6-3-4.8-3-10.8 0-17l117.6-207.6c0.2-0.2 0.2-0.4 0-0.6l-74.8-129.6c-3-6.2-3.6-12.2-0.6-17 2.8-4.6 8.4-7 15.2-7h110.8c17 0 25.4 11 30.8 20.8 0 0 75.6 132 76.2 132.8-4.4 8-119.6 211.4-119.6 211.4-6 10.4-14 21.4-30.6 21.4zM836.4 152.2l-245.2 433.6c-0.2 0.2-0.2 0.6 0 0.8l156.2 285.2c3 6.2 3.2 12.4 0.2 17.2-2.8 4.6-8 7-14.8 7h-110.6c-17 0-25.4-11.2-31-21 0 0-157-288-157.4-288.8 7.8-13.8 246.4-437 246.4-437 6-10.6 13.2-21 29.6-21h112.2c6.6 0 12 2.6 14.8 7 2.8 4.6 2.8 10.8-0.4 17z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "xing", + "brand", + "social" + ], + "defaultCode": 60115, + "grid": 16 + }, + { + "id": 468, + "paths": [ + "M155.6 202.2c-8.8 0-16.4 3.2-20.2 9.2-3.8 6.4-3.2 14.4 0.8 22.6l99.8 172.8c0.2 0.4 0.2 0.6 0 0.8l-156.8 277.2c-4 8.2-3.8 16.4 0 22.6 3.8 6 10.4 10 19.2 10h147.6c22 0 32.8-15 40.2-28.6 0 0 153.4-271.4 159.4-282-0.6-1-101.6-177-101.6-177-7.4-13-18.4-27.6-41.2-27.6h-147.2z", + "M776 0c-22 0-31.6 13.8-39.6 28.2 0 0-318.2 564.2-328.6 582.8 0.6 1 209.8 385 209.8 385 7.4 13 18.6 28.2 41.2 28.2h147.6c8.8 0 15.8-3.4 19.6-9.4 4-6.4 3.8-14.6-0.4-22.8l-208-380.6c-0.2-0.4-0.2-0.6 0-1l327-578.2c4-8.2 4.2-16.4 0.4-22.8-3.8-6-10.8-9.4-19.6-9.4h-149.4z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "xing", + "brand", + "social" + ], + "defaultCode": 60116, + "grid": 16 + }, + { + "id": 469, + "paths": [ + "M367.562 0c-243.358 0-367.562 140.162-367.562 401.856v0 549.034l238.39-238.628v-278.896c0-108.416 28.73-177.406 125.118-192.894v0c33.672-6.584 103.75-4.278 148.306-4.278v0 165.596c0 1.51 0.208 4.206 0.594 5.586v0c1.87 6.704 7.93 11.616 15.116 11.63v0c4.062 0.008 7.868-2.104 11.79-5.97v0l413.122-412.974-584.874-0.062zM785.61 311.746v278.89c0 108.414-28.736 177.414-125.116 192.894v0c-33.672 6.582-103.756 4.278-148.312 4.278v0-165.594c0-1.5-0.206-4.204-0.594-5.582v0c-1.864-6.712-7.922-11.622-15.112-11.63v0c-4.064-0.008-7.866 2.112-11.79 5.966v0l-413.124 412.966 584.874 0.066c243.354 0 367.564-140.168 367.564-401.852v0-549.028l-238.39 238.626z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "flattr", + "brand", + "donate", + "social" + ], + "defaultCode": 60117, + "grid": 16 + }, + { + "id": 470, + "paths": [ + "M851.564 90.090c-12.060-16.404-31.204-26.090-51.564-26.090h-608c-35.346 0-64 28.654-64 64v768c0 25.884 15.592 49.222 39.508 59.128 7.918 3.28 16.234 4.874 24.478 4.874 16.656 0 33.026-6.504 45.268-18.748l237.256-237.254h165.49c27.992 0 52.736-18.192 61.086-44.91l160-512c6.074-19.432 2.538-40.596-9.522-57zM672.948 320h-224.948c-35.346 0-64 28.654-64 64s28.654 64 64 64h184.948l-40 128h-144.948c-16.974 0-33.252 6.742-45.254 18.746l-146.746 146.744v-549.49h456.948l-40 128z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "foursquare", + "brand", + "social" + ], + "defaultCode": 60118, + "grid": 16 + }, + { + "id": 471, + "paths": [ + "M608.876 653.468c-17.282 17.426-2.668 49.128-2.668 49.128l130.090 217.218c0 0 21.36 28.64 39.864 28.64 18.59 0 36.954-15.27 36.954-15.27l102.844-147.008c0 0 10.36-18.546 10.598-34.792 0.372-23.106-34.454-29.434-34.454-29.434l-243.488-78.192c-0.002 0.004-23.858-6.328-39.74 9.71zM596.532 543.984c12.46 21.128 46.828 14.972 46.828 14.972l242.938-71.006c0 0 33.106-13.466 37.832-31.418 4.64-17.954-5.46-39.622-5.46-39.622l-116.098-136.752c0 0-10.062-17.292-30.938-19.032-23.016-1.958-37.18 25.898-37.18 25.898l-137.27 216.010c0 0.004-12.134 21.516-0.652 40.95zM481.754 459.768c28.608-7.044 33.148-48.604 33.148-48.604l-1.944-345.87c0 0-4.314-42.666-23.486-54.232-30.070-18.242-38.982-8.718-47.596-7.444l-201.696 74.944c0 0-19.754 6.536-30.042 23.018-14.69 23.352 14.928 57.544 14.928 57.544l209.644 285.756c0 0 20.69 21.396 47.044 14.888zM431.944 599.738c0.722-26.676-32.030-42.7-32.030-42.7l-216.796-109.524c0 0-32.126-13.246-47.722-4.016-11.95 7.060-22.536 19.84-23.572 31.134l-14.12 173.812c0 0-2.116 30.114 5.69 43.82 11.054 19.442 47.428 5.902 47.428 5.902l253.096-55.942c9.832-6.61 27.074-7.204 28.026-42.486zM494.88 693.542c-21.726-11.156-47.724 11.95-47.724 11.95l-169.468 186.566c0 0-21.144 28.528-15.768 46.050 5.066 16.418 13.454 24.578 25.318 30.328l170.192 53.726c0 0 20.634 4.286 36.258-0.242 22.18-6.43 18.094-41.152 18.094-41.152l3.848-252.602c-0.002 0.002-0.868-24.334-20.75-34.624z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "yelp", + "brand", + "social" + ], + "defaultCode": 60119, + "grid": 16 + }, + { + "id": 472, + "paths": [ + "M930 308.6c-47.8 212.2-195.4 324.2-428 324.2h-77.4l-53.8 341.6h-64.8l-3.4 22c-2.2 14.6 9 27.6 23.6 27.6h165.6c19.6 0 36.2-14.2 39.4-33.6l1.6-8.4 31.2-197.8 2-10.8c3-19.4 19.8-33.6 39.4-33.6h24.6c160.4 0 286-65.2 322.8-253.6 13.8-71.6 8.6-132.4-22.8-177.6z", + "M831 77.2c-47.4-54-133.2-77.2-242.8-77.2h-318.2c-22.4 0-41.6 16.2-45 38.4l-132.6 840.4c-2.6 16.6 10.2 31.6 27 31.6h196.6l49.4-313-1.6 9.8c3.4-22.2 22.4-38.4 44.8-38.4h93.4c183.4 0 327-74.4 369-290 1.2-6.4 2.4-12.6 3.2-18.6 12.4-79.6 0-134-43.2-183z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "paypal", + "brand", + "donate" + ], + "defaultCode": 60120, + "grid": 16 + }, + { + "id": 473, + "paths": [ + "M258.278 446.542l-146.532-253.802c93.818-117.464 238.234-192.74 400.254-192.74 187.432 0 351.31 100.736 440.532 251h-417.77c-7.504-0.65-15.092-1-22.762-1-121.874 0-224.578 83.644-253.722 196.542zM695.306 325h293.46c22.74 57.93 35.234 121.004 35.234 187 0 280.826-226.1 508.804-506.186 511.926l209.394-362.678c29.48-42.378 46.792-93.826 46.792-149.248 0-73.17-30.164-139.42-78.694-187zM326 512c0-102.56 83.44-186 186-186s186 83.44 186 186c0 102.56-83.44 186-186 186s-186-83.44-186-186zM582.182 764.442l-146.578 253.878c-246.532-36.884-435.604-249.516-435.604-506.32 0-91.218 23.884-176.846 65.696-251.024l209.030 362.054c41.868 89.112 132.476 150.97 237.274 150.97 24.3 0 47.836-3.34 70.182-9.558z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "chrome", + "browser", + "internet", + "brand" + ], + "defaultCode": 60121, + "grid": 16 + }, + { + "id": 474, + "paths": [ + "M1022.526 334.14l-11.86 76.080c0 0-16.954-140.856-37.732-193.514-31.846-80.688-46.014-80.040-46.108-79.922 21.33 54.204 17.462 83.324 17.462 83.324s-37.792-102.998-137.712-135.768c-110.686-36.282-170.57-26.364-177.488-24.486-1.050-0.008-2.064-0.010-3.030-0.010 0.818 0.062 1.612 0.146 2.426 0.212-0.034 0.020-0.090 0.042-0.082 0.052 0.45 0.548 122.306 21.302 143.916 50.996 0 0-51.76 0-103.272 14.842-2.328 0.666 189.524 23.964 228.746 215.674 0 0-21.030-43.876-47.040-51.328 17.106 52.036 12.714 150.776-3.576 199.85-2.096 6.312-4.24-27.282-36.328-41.75 10.28 73.646-0.616 190.456-51.708 222.632-3.982 2.504 32.030-115.31 7.242-69.762-142.708 218.802-311.404 100.972-387.248 49.11 38.866 8.462 112.654-1.318 145.314-25.612 0.042-0.030 0.078-0.056 0.118-0.086 35.468-24.252 56.472-41.964 75.334-37.772 18.874 4.214 31.438-14.726 16.78-31.53-14.676-16.838-50.314-39.978-98.524-27.366-34 8.904-76.134 46.522-140.448 8.432-49.364-29.25-54.012-53.546-54.45-70.376 1.218-5.966 2.754-11.536 4.576-16.624 5.682-15.87 22.912-20.658 32.494-24.438 16.256 2.792 30.262 7.862 44.968 15.406 0.19-4.894 0.252-11.39-0.018-18.76 1.41-2.802 0.538-11.252-1.722-21.58-1.302-10.308-3.42-20.974-6.752-30.692 0.012-0.002 0.020-0.010 0.030-0.014 0.056-0.018 0.108-0.040 0.156-0.070 0.078-0.044 0.146-0.112 0.208-0.19 0.012-0.020 0.030-0.034 0.044-0.052 0.082-0.124 0.154-0.272 0.198-0.466 1.020-4.618 12.022-13.524 25.718-23.1 12.272-8.58 26.702-17.696 38.068-24.752 10.060-6.248 17.72-10.882 19.346-12.098 0.618-0.466 1.358-1.012 2.164-1.636 0.15-0.116 0.3-0.232 0.454-0.354 0.094-0.074 0.19-0.148 0.286-0.226 5.41-4.308 13.484-12.448 15.178-29.578 0.004-0.042 0.010-0.080 0.012-0.122 0.050-0.504 0.092-1.014 0.13-1.534 0.028-0.362 0.050-0.726 0.072-1.096 0.014-0.284 0.032-0.566 0.044-0.856 0.030-0.674 0.050-1.364 0.060-2.064 0-0.040 0.002-0.076 0.004-0.116 0.022-1.658-0.006-3.386-0.104-5.202-0.054-1.014-0.126-1.93-0.298-2.762-0.008-0.044-0.018-0.092-0.028-0.136-0.018-0.082-0.036-0.164-0.058-0.244-0.036-0.146-0.076-0.292-0.122-0.43-0.006-0.018-0.010-0.032-0.016-0.046-0.052-0.16-0.112-0.314-0.174-0.464-0.004-0.006-0.004-0.010-0.006-0.016-1.754-4.108-8.32-5.658-35.442-6.118-0.026-0.002-0.050-0.002-0.076-0.002v0c-11.066-0.188-25.538-0.194-44.502-0.118-33.25 0.134-51.628-32.504-57.494-45.132 8.040-44.46 31.276-76.142 69.45-97.626 0.722-0.406 0.58-0.742-0.274-0.978 7.464-4.514-90.246-0.124-135.186 57.036-39.888-9.914-74.654-9.246-104.616-2.214-5.754-0.162-12.924-0.88-21.434-2.652-19.924-18.056-48.448-51.402-49.976-91.208 0 0-0.092 0.072-0.252 0.204-0.020-0.382-0.056-0.76-0.072-1.142 0 0-60.716 46.664-51.628 173.882-0.022 2.036-0.064 3.986-0.12 5.874-16.432 22.288-24.586 41.020-25.192 45.156-14.56 29.644-29.334 74.254-41.356 141.98 0 0 8.408-26.666 25.284-56.866-12.412 38.022-22.164 97.156-16.436 185.856 0 0 1.514-19.666 6.874-47.994 4.186 55.010 22.518 122.924 68.858 202.788 88.948 153.32 225.67 230.74 376.792 242.616 26.836 2.212 54.050 2.264 81.424 0.186 2.516-0.178 5.032-0.364 7.55-0.574 30.964-2.174 62.134-6.852 93.238-14.366 425.172-102.798 378.942-616.198 378.942-616.198z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "firefox", + "browser", + "internet", + "brand" + ], + "defaultCode": 60122, + "grid": 16 + }, + { + "id": 475, + "paths": [ + "M734.202 628.83h236.050c1.82-16.37 2.548-33.098 2.548-50.196 0-80.224-21.534-155.468-59.124-220.266 38.88-103.308 37.492-190.988-14.556-243.39-49.496-49.28-182.29-41.28-332.412 25.198-11.104-0.84-22.318-1.272-33.638-1.272-206.048 0-378.926 141.794-426.708 332.85 64.638-82.754 132.638-142.754 223.478-186.448-8.26 7.74-56.454 55.652-64.56 63.764-239.548 239.478-315.090 552.306-233.806 633.604 61.786 61.774 173.758 51.342 302.376-11.648 59.806 30.458 127.5 47.63 199.218 47.63 193.134 0 356.804-124.316 416.090-297.448h-237.868c-32.734 60.382-96.748 101.48-170.218 101.48-73.468 0-137.484-41.098-170.216-101.48-14.55-27.274-22.914-58.554-22.914-91.656v-0.722h386.26zM348.302 512.804c5.456-97.11 86.2-174.584 184.766-174.584s179.312 77.472 184.766 174.584h-369.532zM896.966 163.808c33.526 33.88 32.688 96.214 4.012 174.022-49.136-74.908-120.518-133.936-204.792-167.64 90.106-38.638 163.406-43.756 200.78-6.382zM93.482 967.256c-42.782-42.796-29.884-132.618 25.23-240.832 34.308 96.27 101.156 177.090 187.336 229.154-95.43 43.318-173.536 50.674-212.566 11.678z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "IE", + "browser", + "internet-explorer", + "brand" + ], + "defaultCode": 60123, + "grid": 16 + }, + { + "id": 476, + "paths": [ + "M15.4 454.6c30-236.8 191.6-451.6 481.2-454.6 174.8 3.4 318.6 82.6 404.2 233.6 43 78.8 56.4 161.6 59.2 253v107.4h-642.6c3 265 390 256 556.6 139.2v215.8c-97.6 58.6-319 111-490.4 43.6-146-54.8-250-207.6-249.4-354.6-4.8-190.6 94.8-316.8 249.4-388.6-32.8 40.6-57.8 85.4-70.8 163h362.8c0 0 21.2-216.8-205.4-216.8-213.6 7.4-367.6 131.6-454.8 259v0z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "edge", + "browser", + "brand" + ], + "defaultCode": 60124, + "grid": 16 + }, + { + "id": 477, + "paths": [ + "M512 0c-282.8 0-512 229.2-512 512s229.2 512 512 512 512-229.2 512-512-229.2-512-512-512zM958.4 472.8l-1-10.6c0.2 3.6 0.6 7 1 10.6zM888.4 268.8l-7.2-10.8c2.4 3.6 4.8 7.2 7.2 10.8zM860.6 230.6l-4.4-5.4c1.6 1.8 3 3.6 4.4 5.4zM798.6 167.6l-5.4-4.4c2 1.6 3.6 3 5.4 4.4zM766 142.8l-10.8-7.2c3.6 2.4 7.2 4.8 10.8 7.2zM561.8 66.8l-10.8-1c3.6 0.2 7.2 0.6 10.8 1zM472.8 65.6l-10.8 1c3.6-0.2 7.2-0.6 10.8-1zM268.8 135.6l-10.8 7.2c3.6-2.4 7.2-4.8 10.8-7.2zM230.6 163.4l-5.2 4.2c1.8-1.4 3.4-2.8 5.2-4.2zM167.6 225.4l-4.4 5.4c1.6-1.8 3-3.6 4.4-5.4zM142.8 258l-7.2 10.8c2.4-3.6 4.8-7.2 7.2-10.8zM66.8 462.2l-1 10.8c0.2-3.6 0.6-7.2 1-10.8zM65.6 551.2l1 10.8c-0.2-3.6-0.6-7.2-1-10.8zM135.6 755l7.2 10.8c-2.4-3.4-4.8-7-7.2-10.8zM144 767.6l79.8-53.4-8.8-13.4-79.8 53.4c-36.2-56.2-60-120.8-68-190.4l47.8-4.8-1.6-16-47.8 4.8c-0.8-9.2-1.2-18.6-1.4-28h96v-16h-96c0.2-9.4 0.6-18.6 1.4-28l47.8 4.6 1.6-16-47.8-4.6c8-69.6 32-134.2 68.2-190.4l79.8 53.4 8.8-13.4-80-53c5.4-7.6 10.8-15.2 16.6-22.4l37 30.4 10.2-12.4-37-30.4c6-7.2 12.4-14 18.8-20.8l67.8 67.8 11.4-11.4-67.8-67.8c6.8-6.4 13.6-12.8 20.6-18.8l30.4 37.2 12.4-10.2-30.4-37c7.4-5.8 14.8-11.4 22.4-16.8l53.4 79.8 13.4-8.8-53.4-79.8c56.2-36.2 120.8-60 190.4-68l4.8 47.8 16-1.6-4.8-47.8c9.2-0.8 18.6-1.2 28-1.4v96h16v-96c9.4 0.2 18.6 0.6 28 1.4l-4.6 47.8 16 1.6 4.6-47.8c69.6 8 134.2 32 190.4 68.2l-53.4 79.8 13.4 8.8 53.4-79.8c7.6 5.4 15.2 10.8 22.4 16.6l-30.4 37 12.4 10.2 30.4-37c7.2 6 14 12.4 20.8 18.8l-25.6 25-350 233.4-233.4 350-25 25c-6.4-6.8-12.8-13.6-18.8-20.6l37-30.4-10.2-12.4-37 30.4c-5.8-7.2-11.2-14.8-16.6-22.4zM167.6 798.6c-1.4-1.8-2.8-3.4-4.2-5.2l4.2 5.2zM225.4 856.4l5.2 4.2c-1.8-1.4-3.4-2.8-5.2-4.2zM258 881l10.8 7.2c-3.6-2.2-7.2-4.6-10.8-7.2zM462.2 957.2l10.8 1c-3.6-0.2-7.2-0.6-10.8-1zM551.2 958.4l10.6-1c-3.6 0.2-7 0.6-10.6 1zM755.2 888.4l10.8-7.2c-3.6 2.4-7.2 4.8-10.8 7.2zM793.4 860.6l5.4-4.4c-1.8 1.6-3.6 3-5.4 4.4zM828.4 829.2l0.8-0.8c-0.2 0.2-0.6 0.6-0.8 0.8zM856.4 798.6l4.4-5.4c-1.6 1.8-3 3.6-4.4 5.4zM863.4 790l-37-30.4-10.2 12.4 37 30.4c-6 7.2-12.4 14-18.8 20.8l-67.8-67.8-11.4 11.4 67.8 67.8c-6.8 6.4-13.6 12.8-20.6 18.8l-30.4-37.2-12.4 10.2 30.4 37c-7.4 5.8-14.8 11.4-22.4 16.8l-53.4-79.8-13.4 8.8 53.4 79.8c-56.2 36.2-120.8 60-190.4 68l-4.8-47.8-16 1.6 4.8 47.8c-9.2 0.8-18.6 1.2-28 1.4v-96h-16v96c-9.4-0.2-18.6-0.6-28-1.4l4.6-47.8-16-1.6-4.6 47.8c-69.6-8-134.2-32-190.4-68.2l53.4-79.8-13.4-8.8-53 79.8c-7.6-5.4-15.2-10.8-22.4-16.6l30.4-37-12.4-10.2-30.4 37c-7.2-6-14-12.4-20.8-18.8l25.2-25 350-233.4 233.4-350 25-25c6.4 6.8 12.8 13.6 18.8 20.6l-37 30.4 10.2 12.4 37-30.4c5.8 7.4 11.4 14.8 16.8 22.4l-79.8 53.4 8.8 13.4 79.8-53.4c36.2 56.2 60 120.8 68 190.4l-47.8 4.8 1.6 16 47.8-4.8c0.8 9.2 1.2 18.6 1.4 28h-96v16h96c-0.2 9.4-0.6 18.6-1.4 28l-47.8-4.6-1.6 16 47.8 4.6c-8 69.6-32 134.2-68.2 190.4l-79.8-53.4-8.8 13.4 79.8 53.4c-5.2 7.2-10.8 14.6-16.6 22zM958.4 551c-0.4 3.6-0.6 7.2-1 10.8l1-10.8zM888.4 755.2c-2.4 3.6-4.8 7.2-7.2 10.8l7.2-10.8z", + "M432.535 71.075l18.73 94.157-15.693 3.122-18.73-94.157 15.693-3.122z", + "M591.656 952.95l-18.73-94.157 15.693-3.122 18.73 94.157-15.693 3.122z", + "M389.628 80.89l13.939 45.931-15.31 4.646-13.939-45.931 15.31-4.646z", + "M634.434 942.887l-13.939-45.931 15.31-4.646 13.939 45.931-15.31 4.646z", + "M348.014 95.099l36.739 88.694-14.782 6.123-36.739-88.694 14.782-6.123z", + "M676.123 928.965l-36.739-88.694 14.782-6.123 36.739 88.694-14.782 6.123z", + "M293.62 120.659l14.11-7.544 22.632 42.331-14.11 7.544-22.632-42.331z", + "M730.101 903.289l-14.11 7.544-22.632-42.331 14.11-7.544 22.632 42.331z", + "M120.601 293.826l42.336 22.622-7.541 14.112-42.336-22.622 7.541-14.112z", + "M903.244 730.195l-42.336-22.622 7.541-14.112 42.336 22.622-7.541 14.112z", + "M183.811 384.623l-88.694-36.739 6.123-14.782 88.694 36.739-6.123 14.782z", + "M840.32 639.301l88.694 36.739-6.123 14.782-88.694-36.739 6.123-14.782z", + "M85.543 374.387l45.936 13.93-4.643 15.312-45.936-13.93 4.643-15.312z", + "M938.308 649.667l-45.936-13.93 4.643-15.312 45.936 13.93-4.643 15.312z", + "M74.069 416.782l94.157 18.73-3.122 15.693-94.157-18.73 3.122-15.693z", + "M949.741 607.243l-94.157-18.73 3.122-15.693 94.157 18.73-3.122 15.693z", + "M70.965 591.548l94.157-18.73 3.122 15.693-94.157 18.73-3.122-15.693z", + "M952.842 432.427l-94.157 18.73-3.122-15.693 94.157-18.73 3.122 15.693z", + "M80.974 634.514l45.931-13.939 4.646 15.31-45.931 13.939-4.646-15.31z", + "M942.969 389.707l-45.931 13.939-4.646-15.31 45.931-13.939 4.646 15.31z", + "M101.142 690.912l-6.123-14.782 88.694-36.739 6.123 14.782-88.694 36.739z", + "M922.794 333.231l6.122 14.782-88.694 36.73-6.122-14.782 88.694-36.73z", + "M120.824 730.267l-7.544-14.11 42.331-22.632 7.544 14.11-42.331 22.632z", + "M903.455 293.785l7.544 14.11-42.331 22.632-7.544-14.11 42.331-22.632z", + "M307.878 910.846l-14.11-7.542 22.627-42.331 14.11 7.542-22.627 42.331z", + "M716.073 113.074l14.112 7.541-22.622 42.336-14.112-7.541 22.622-42.336z", + "M333.267 922.799l36.739-88.694 14.782 6.123-36.739 88.694-14.782-6.123z", + "M690.884 101.11l-36.739 88.694-14.782-6.123 36.739-88.694 14.782 6.123z", + "M389.634 943.028l-15.31-4.645 13.934-45.931 15.31 4.645-13.934 45.931z", + "M634.349 80.882l15.312 4.642-13.925 45.936-15.312-4.642 13.925-45.936z", + "M432.472 952.839l-15.693-3.122 18.73-94.157 15.693 3.122-18.73 94.157z", + "M591.536 70.969l15.693 3.122-18.73 94.157-15.693-3.122 18.73-94.157z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "safari", + "browser", + "internet", + "brand" + ], + "defaultCode": 60125, + "grid": 16 + }, + { + "id": 478, + "paths": [ + "M1024 512v0 0c0 151.6-66 288-170.8 381.6-131.4 64-253.8 19.2-294.2-8.8 129-28.2 226.4-184.2 226.4-372.8s-97.4-344.6-226.4-373c40.6-28 163-72.8 294.2-8.8 104.8 93.8 170.8 230.2 170.8 381.8v0 0z", + "M343.4 223.4c-56.6 66.8-93.2 165.6-95.6 276.6 0 0.2 0 23.8 0 24.2 2.4 110.8 39.2 209.6 95.8 276.4 73.4 95.4 182.6 155.8 304.6 155.8 75 0 145.2-22.8 205.2-62.6-90.8 81-210.4 130.2-341.4 130.2-8.2 0-16.4-0.2-24.4-0.6-271.4-12.8-487.6-236.8-487.6-511.4 0-282.8 229.2-512 512-512 0.6 0 1.2 0 2 0 130.4 0.4 249.2 49.6 339.4 130.4-60-39.8-130.2-62.8-205.2-62.8-122 0-231.2 60.4-304.8 155.8z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "opera", + "browser", + "internet", + "brand" + ], + "defaultCode": 60126, + "grid": 16 + }, + { + "id": 479, + "paths": [ + "M842.012 589.48c-13.648-13.446-43.914-20.566-89.972-21.172-31.178-0.344-68.702 2.402-108.17 7.928-17.674-10.198-35.892-21.294-50.188-34.658-38.462-35.916-70.568-85.772-90.576-140.594 1.304-5.12 2.414-9.62 3.448-14.212 0 0 21.666-123.060 15.932-164.666-0.792-5.706-1.276-7.362-2.808-11.796l-1.882-4.834c-5.894-13.592-17.448-27.994-35.564-27.208l-10.916-0.344c-20.202 0-36.664 10.332-40.986 25.774-13.138 48.434 0.418 120.892 24.98 214.738l-6.288 15.286c-17.588 42.876-39.63 86.060-59.078 124.158l-2.528 4.954c-20.46 40.040-39.026 74.028-55.856 102.822l-17.376 9.188c-1.264 0.668-31.044 16.418-38.028 20.644-59.256 35.38-98.524 75.542-105.038 107.416-2.072 10.17-0.53 23.186 10.014 29.212l16.806 8.458c7.292 3.652 14.978 5.502 22.854 5.502 42.206 0 91.202-52.572 158.698-170.366 77.93-25.37 166.652-46.458 244.412-58.090 59.258 33.368 132.142 56.544 178.142 56.544 8.168 0 15.212-0.78 20.932-2.294 8.822-2.336 16.258-7.368 20.792-14.194 8.926-13.432 10.734-31.932 8.312-50.876-0.72-5.622-5.21-12.574-10.068-17.32zM211.646 814.048c7.698-21.042 38.16-62.644 83.206-99.556 2.832-2.296 9.808-8.832 16.194-14.902-47.104 75.124-78.648 105.066-99.4 114.458zM478.434 199.686c13.566 0 21.284 34.194 21.924 66.254s-6.858 54.56-16.158 71.208c-7.702-24.648-11.426-63.5-11.426-88.904 0 0-0.566-48.558 5.66-48.558v0zM398.852 637.494c9.45-16.916 19.282-34.756 29.33-53.678 24.492-46.316 39.958-82.556 51.478-112.346 22.91 41.684 51.444 77.12 84.984 105.512 4.186 3.542 8.62 7.102 13.276 10.65-68.21 13.496-127.164 29.91-179.068 49.862v0zM828.902 633.652c-4.152 2.598-16.052 4.1-23.708 4.1-24.708 0-55.272-11.294-98.126-29.666 16.468-1.218 31.562-1.838 45.102-1.838 24.782 0 32.12-0.108 56.35 6.072 24.228 6.18 24.538 18.734 20.382 21.332v0z", + "M917.806 229.076c-22.21-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.592-42.194-90.924-42.194h-496c-44.112 0-80 35.888-80 80v864c0 44.112 35.886 80 80 80h736c44.112 0 80-35.888 80-80v-624c0-14.332-4.372-39.35-42.194-90.924v0zM785.374 174.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.982 17.78 50.678 41.878 81.374 72.572v0zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16 0 0 495.956-0.002 496 0v224c0 17.672 14.324 32 32 32h224v624z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "file-pdf", + "file", + "file-format" + ], + "defaultCode": 60127, + "grid": 16 + }, + { + "id": 480, + "paths": [ + "M690.22 471.682c-60.668-28.652-137.97-34.42-194.834 6.048 69.14-6.604 144.958 4.838 195.106 57.124 48-55.080 124.116-65.406 192.958-59.732-57.488-38.144-133.22-33.024-193.23-3.44v0zM665.646 605.75c-68.376-1.578-134.434 23.172-191.1 60.104-107.176-45.588-242.736-37.124-334.002 38.982 26.33-0.934 52.006-7.446 78.056-10.792 95.182-9.488 196.588 14.142 268.512 79.824 29.772-43.542 71.644-78.242 119.652-99.922 63.074-30.52 134.16-33.684 202.82-34.52-41.688-28.648-94.614-33.954-143.938-33.676z", + "M917.806 229.076c-22.21-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.592-42.194-90.924-42.194h-496c-44.112 0-80 35.888-80 80v864c0 44.112 35.886 80 80 80h736c44.112 0 80-35.888 80-80v-624c0-14.332-4.372-39.35-42.194-90.924v0zM785.374 174.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.982 17.78 50.678 41.878 81.374 72.572v0zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16 0 0 495.956-0.002 496 0v224c0 17.672 14.324 32 32 32h224v624z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "file-openoffice", + "file", + "file-format" + ], + "defaultCode": 60128, + "grid": 16 + }, + { + "id": 481, + "paths": [ + "M639.778 475.892h44.21l-51.012 226.178-66.324-318.010h-106.55l-77.114 318.010-57.816-318.010h-111.394l113.092 511.88h108.838l76.294-302.708 68.256 302.708h100.336l129.628-511.88h-170.446v91.832z", + "M917.806 229.076c-22.21-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.592-42.194-90.924-42.194h-496c-44.112 0-80 35.888-80 80v864c0 44.112 35.886 80 80 80h736c44.112 0 80-35.888 80-80v-624c0-14.332-4.372-39.35-42.194-90.924v0zM785.374 174.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.982 17.78 50.678 41.878 81.374 72.572v0zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16 0 0 495.956-0.002 496 0v224c0 17.672 14.324 32 32 32h224v624z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "file-word", + "file", + "file-format", + "word", + "docx" + ], + "defaultCode": 60129, + "grid": 16 + }, + { + "id": 482, + "paths": [ + "M743.028 384h-135.292l-95.732 141.032-95.742-141.032h-135.29l162.162 242.464-182.972 269.536h251.838v-91.576h-50.156l50.156-74.994 111.396 166.57h140.444l-182.976-269.536 162.164-242.464z", + "M917.806 229.076c-22.21-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.592-42.194-90.924-42.194h-496c-44.112 0-80 35.888-80 80v864c0 44.112 35.886 80 80 80h736c44.112 0 80-35.888 80-80v-624c0-14.332-4.372-39.35-42.194-90.924v0zM785.374 174.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.982 17.78 50.678 41.878 81.374 72.572v0zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16 0 0 495.956-0.002 496 0v224c0 17.672 14.324 32 32 32h224v624z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "file-excel", + "file", + "file-format", + "xlc" + ], + "defaultCode": 60130, + "grid": 16 + }, + { + "id": 483, + "paths": [ + "M534.626 22.628c-12.444-12.444-37.026-22.628-54.626-22.628h-384c-17.6 0-32 14.4-32 32v960c0 17.6 14.4 32 32 32h768c17.6 0 32-14.4 32-32v-576c0-17.6-10.182-42.182-22.626-54.626l-338.748-338.746zM832 960h-704v-896h351.158c2.916 0.48 8.408 2.754 10.81 4.478l337.556 337.554c1.722 2.402 3.996 7.894 4.476 10.81v543.158zM864 0h-192c-17.6 0-21.818 10.182-9.374 22.626l210.746 210.746c12.446 12.446 22.628 8.228 22.628-9.372v-192c0-17.6-14.4-32-32-32z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "libreoffice", + "file", + "file-format" + ], + "defaultCode": 60131, + "grid": 16 + }, + { + "id": 484, + "paths": [ + "M60.538 0l82.144 921.63 368.756 102.37 369.724-102.524 82.3-921.476h-902.924zM784.63 301.428h-432.54l10.302 115.75h411.968l-31.042 347.010-231.844 64.254-231.572-64.254-15.83-177.512h113.494l8.048 90.232 125.862 33.916 0.278-0.078 125.934-33.992 13.070-146.55h-391.74l-30.494-341.8h566.214l-10.108 113.024z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "html-five", + "w3c" + ], + "defaultCode": 60132, + "grid": 16 + }, + { + "id": 485, + "paths": [ + "M60.538 0l82.144 921.63 368.756 102.37 369.724-102.524 82.3-921.476h-902.924zM810.762 862.824l-297.226 82.376v0.466l-0.776-0.234-0.782 0.234v-0.466l-297.222-82.376-70.242-787.486h736.496l-70.248 787.486zM650.754 530.204l-13.070 146.552-126.21 34.070-125.862-33.916-8.050-90.234h-113.49l15.83 177.512 232.076 64.176 231.342-64.176 31.040-347.012h-411.966l-10.302-115.748h432.534l10.112-113.026h-566.218l30.498 341.802z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "html-five", + "w3c" + ], + "defaultCode": 60133, + "grid": 16 + }, + { + "id": 486, + "paths": [ + "M152.388 48.522l-34.36 171.926h699.748l-21.884 111.054h-700.188l-33.892 171.898h699.684l-39.018 196.064-282.012 93.422-244.4-93.422 16.728-85.042h-171.898l-40.896 206.352 404.226 154.704 466.006-154.704 153.768-772.252z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "css3", + "w3c" + ], + "defaultCode": 60134, + "grid": 16 + }, + { + "id": 487, + "paths": [ + "M1004.692 466.394l-447.096-447.080c-25.738-25.754-67.496-25.754-93.268 0l-103.882 103.876 78.17 78.17c12.532-5.996 26.564-9.36 41.384-9.36 53.020 0 96 42.98 96 96 0 14.82-3.364 28.854-9.362 41.386l127.976 127.974c12.532-5.996 26.566-9.36 41.386-9.36 53.020 0 96 42.98 96 96s-42.98 96-96 96-96-42.98-96-96c0-14.82 3.364-28.854 9.362-41.386l-127.976-127.974c-3.042 1.456-6.176 2.742-9.384 3.876v266.968c37.282 13.182 64 48.718 64 90.516 0 53.020-42.98 96-96 96s-96-42.98-96-96c0-41.796 26.718-77.334 64-90.516v-266.968c-37.282-13.18-64-48.72-64-90.516 0-14.82 3.364-28.852 9.36-41.384l-78.17-78.17-295.892 295.876c-25.75 25.776-25.75 67.534 0 93.288l447.12 447.080c25.738 25.75 67.484 25.75 93.268 0l445.006-445.006c25.758-25.762 25.758-67.54-0.002-93.29z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "git", + "brand" + ], + "defaultCode": 60135, + "grid": 16 + }, + { + "id": 488, + "paths": [ + "M945.75 368.042l-448-298.666c-10.748-7.166-24.752-7.166-35.5 0l-448 298.666c-8.902 5.934-14.25 15.926-14.25 26.624v298.666c0 10.7 5.348 20.692 14.25 26.624l448 298.666c5.374 3.584 11.562 5.376 17.75 5.376s12.376-1.792 17.75-5.376l448-298.666c8.902-5.934 14.25-15.926 14.25-26.624v-298.666c0-10.698-5.348-20.69-14.25-26.624zM480 654.876l-166.312-110.876 166.312-110.874 166.312 110.874-166.312 110.876zM512 377.542v-221.75l358.31 238.876-166.31 110.874-192-128zM448 377.542l-192 128-166.312-110.874 358.312-238.876v221.75zM198.312 544l-134.312 89.542v-179.082l134.312 89.54zM256 582.458l192 128v221.748l-358.312-238.872 166.312-110.876zM512 710.458l192-128 166.312 110.876-358.312 238.874v-221.75zM761.688 544l134.312-89.54v179.084l-134.312-89.544z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "codepen", + "brand" + ], + "defaultCode": 60136, + "grid": 16 + }, + { + "id": 489, + "paths": [ + "M928 416c-28.428 0-53.958 12.366-71.536 32h-189.956l134.318-134.318c26.312 1.456 53.11-7.854 73.21-27.956 37.49-37.49 37.49-98.274 0-135.764s-98.274-37.49-135.766 0c-20.102 20.102-29.41 46.898-27.956 73.21l-134.314 134.318v-189.954c19.634-17.578 32-43.108 32-71.536 0-53.020-42.98-96-96-96s-96 42.98-96 96c0 28.428 12.366 53.958 32 71.536v189.954l-134.318-134.318c1.454-26.312-7.856-53.11-27.958-73.21-37.49-37.49-98.274-37.49-135.764 0-37.49 37.492-37.49 98.274 0 135.764 20.102 20.102 46.898 29.412 73.212 27.956l134.32 134.318h-189.956c-17.578-19.634-43.108-32-71.536-32-53.020 0-96 42.98-96 96s42.98 96 96 96c28.428 0 53.958-12.366 71.536-32h189.956l-134.318 134.318c-26.314-1.456-53.11 7.854-73.212 27.956-37.49 37.492-37.49 98.276 0 135.766 37.492 37.49 98.274 37.49 135.764 0 20.102-20.102 29.412-46.898 27.958-73.21l134.316-134.32v189.956c-19.634 17.576-32 43.108-32 71.536 0 53.020 42.98 96 96 96s96-42.98 96-96c0-28.428-12.366-53.958-32-71.536v-189.956l134.318 134.318c-1.456 26.312 7.854 53.11 27.956 73.21 37.492 37.49 98.276 37.49 135.766 0s37.49-98.274 0-135.766c-20.102-20.102-46.898-29.41-73.21-27.956l-134.32-134.316h189.956c17.576 19.634 43.108 32 71.536 32 53.020 0 96-42.98 96-96s-42.982-96-96.002-96z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "svg" + ], + "defaultCode": 60137, + "grid": 16 + }, + { + "id": 490, + "paths": [ + "M259.544 511.998c0-65.416 53.030-118.446 118.446-118.446s118.446 53.030 118.446 118.446c0 65.416-53.030 118.446-118.446 118.446s-118.446-53.030-118.446-118.446zM512.004 0c-282.774 0-512.004 229.232-512.004 512s229.226 512 512.004 512c282.764 0 511.996-229.23 511.996-512 0-282.768-229.23-512-511.996-512zM379.396 959.282c-153.956-89.574-257.468-256.324-257.468-447.282s103.512-357.708 257.462-447.282c154.010 89.562 257.59 256.288 257.59 447.282 0 190.988-103.58 357.718-257.584 447.282z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "IcoMoon", + "icomoon", + "brand" + ], + "defaultCode": 60138, + "grid": 16 + } + ] + }, { "selection": [ { @@ -13,7 +11443,7 @@ "name": "database", "prevSize": 32, "code": 59649, - "tempChar": "" + "tempChar": "" } ], "id": 2, diff --git a/deploy.sh b/bin/azure-deploy.sh similarity index 98% rename from deploy.sh rename to bin/azure-deploy.sh index 710cbb14d3f..5ffbee022ab 100755 --- a/deploy.sh +++ b/bin/azure-deploy.sh @@ -103,7 +103,7 @@ echo "\"$SCM_COMMIT_ID\"" > $DEPLOYMENT_SOURCE/scm-commit-id.json # 1. KuduSync if [[ "$IN_PLACE_DEPLOYMENT" -ne "1" ]]; then - "$KUDU_SYNC_CMD" -v 50 -f "$DEPLOYMENT_SOURCE" -t "$DEPLOYMENT_TARGET" -n "$NEXT_MANIFEST_PATH" -p "$PREVIOUS_MANIFEST_PATH" -i ".git;.hg;.deployment;deploy.sh" + "$KUDU_SYNC_CMD" -v 50 -f "$DEPLOYMENT_SOURCE" -t "$DEPLOYMENT_TARGET" -n "$NEXT_MANIFEST_PATH" -p "$PREVIOUS_MANIFEST_PATH" -i ".git;.hg;.deployment;bin/azure-deploy.sh" exitWithMessageOnError "Kudu Sync failed" fi diff --git a/bin/generateRandomString.js b/bin/generateRandomString.js new file mode 100644 index 00000000000..deb307ab26d --- /dev/null +++ b/bin/generateRandomString.js @@ -0,0 +1,5 @@ + +require('crypto').randomBytes(1024, function(err, buffer) { + var token = buffer.toString('hex'); + console.log(token); +}); diff --git a/prep_repo_release.sh b/bin/prep_repo_release.sh similarity index 100% rename from prep_repo_release.sh rename to bin/prep_repo_release.sh diff --git a/setup.sh b/bin/setup.sh similarity index 100% rename from setup.sh rename to bin/setup.sh diff --git a/bin/testdatarunner.js b/bin/testdatarunner.js new file mode 100644 index 00000000000..a5043a67c83 --- /dev/null +++ b/bin/testdatarunner.js @@ -0,0 +1,117 @@ + +'use strict'; + +const axios = require('axios'); +const moment = require('moment'); +const crypto = require('crypto'); +const shasum = crypto.createHash('sha1'); + +const FIVE_MINUTES = 1000 * 60 * 5; + +if (process.argv.length < 4) { + console.error('This is an utility to send continuous CGM entry data to a test Nightscout server') + console.error('USAGE: node testdatarunner.js '); + process.exit(); +} + +const URL = process.argv[2]; +const SECRET = process.argv[3]; +shasum.update(SECRET); +const SECRET_SHA1 = shasum.digest('hex'); + +const HEADERS = {'api-secret': SECRET_SHA1}; + +const ENTRIES_URL = URL + '/api/v1/entries'; + +var done = (function wait () { if (!done) setTimeout(wait, 1000); })(); + +console.log('NS data filler active'); + +const entry = { + device: 'Dev simulator', + date: 1609061083612, + dateString: '2020-12-27T09:24:43.612Z', + sgv: 100, + delta: 0, + direction: 'Flat', + type: 'sgv' +}; + +function addEntry () { + console.log('Sending add new entry'); + sendEntry(Date.now()); + setTimeout(addEntry, FIVE_MINUTES); +} + +function oscillator(time, frequency = 1, amplitude = 1, phase = 0, offset = 0){ + return Math.sin(time * frequency * Math.PI * 2 + phase * Math.PI * 2) * amplitude + offset; +} + +async function sendFail() { + try { + console.log('Sending fail'); + const response = await axios.post(ENTRIES_URL, entry, {headers: {'api-secret': 'incorrect' }}); + } catch (e) { } +} + +async function sendEntry (date) { + const m = moment(date); + entry.date = date; + entry.dateString = m.toISOString(); + entry.sgv = 100 + Math.round(oscillator(date / 1000, 1/(60*60), 30)); + + console.log('Adding entry', entry); + const response = await axios.post(ENTRIES_URL, entry, {headers: HEADERS}); + + if (date > Date.now() - 5000) sendFail(); +} + +(async () => { + try { + console.log('GETTING', ENTRIES_URL); + const response = await axios.get(ENTRIES_URL, {headers: HEADERS} ); + const latestEntry = response.data ? response.data[0] : null; + + if (!latestEntry) { + // Fill in history + console.log('I would fill in history'); + const totalToSave = 24; + const now = Date.now(); + const start = now - ( totalToSave * FIVE_MINUTES); + let current = start; + while (current <= now) { + await sendEntry(current); + current += FIVE_MINUTES; + } + + setTimeout(addEntry, 1000*60*5); + + } else { + let latestDate = latestEntry.date; + const now = Date.now(); + if ((now - latestDate) > FIVE_MINUTES) { + console.log('We got data but it is older than 5 minutes, makign a partial fill'); + + let current = latestDate + FIVE_MINUTES; + + while (current < now) { + await sendEntry(current); + current += FIVE_MINUTES; + } + + latestDate = current; + + } else { + console.log('Looks like we got history, not filling'); + } + setTimeout(addEntry, Date.now() - latestDate); + } + + sendFail(); + sendFail(); + + } catch (error) { + console.log(error.response.data); + } + })(); + diff --git a/bundle/bundle.reports.source.js b/bundle/bundle.reports.source.js index 27d67e9fb82..265cf87e34b 100644 --- a/bundle/bundle.reports.source.js +++ b/bundle/bundle.reports.source.js @@ -1,11 +1,16 @@ import './bundle.source'; -window.Nightscout.report_plugins = require('../lib/report_plugins/')(); +console.info('Nightscout report bundle start'); + +window.Nightscout.report_plugins_preinit = require('../lib/report_plugins/'); window.Nightscout.predictions = require('../lib/report/predictions'); +window.Nightscout.reportclient = require('../lib/report/reportclient'); +window.Nightscout.profileclient = require('../lib/profile/profileeditor'); +window.Nightscout.foodclient = require('../lib/food/food'); console.info('Nightscout report bundle ready'); // Needed for Hot Module Replacement if(typeof(module.hot) !== 'undefined') { module.hot.accept() - } +} diff --git a/bundle/bundle.source.js b/bundle/bundle.source.js index db61af947bf..85d68097387 100644 --- a/bundle/bundle.source.js +++ b/bundle/bundle.source.js @@ -28,9 +28,15 @@ window.Nightscout = { admin_plugins: require('../lib/admin_plugins/')() }; +window.Nightscout.report_plugins_preinit = require('../lib/report_plugins/'); +window.Nightscout.predictions = require('../lib/report/predictions'); +window.Nightscout.reportclient = require('../lib/report/reportclient'); +window.Nightscout.profileclient = require('../lib/profile/profileeditor'); +window.Nightscout.foodclient = require('../lib/food/food'); + console.info('Nightscout bundle ready'); // Needed for Hot Module Replacement if(typeof(module.hot) !== 'undefined') { module.hot.accept() - } +} diff --git a/crowdin.yml b/crowdin.yml new file mode 100644 index 00000000000..fb25b791ec4 --- /dev/null +++ b/crowdin.yml @@ -0,0 +1,3 @@ +files: + - source: /translations/en/*.json + translation: /translations/%locale_with_underscore%.json diff --git a/database_configuration.json b/database_configuration.json deleted file mode 100644 index d768358bbb1..00000000000 --- a/database_configuration.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "url": null, - "collection": null -} diff --git a/my.env.template b/docs/example-template.env similarity index 92% rename from my.env.template rename to docs/example-template.env index 0ca76ea5209..da73b065fb2 100644 --- a/my.env.template +++ b/docs/example-template.env @@ -11,4 +11,5 @@ ALARM_TYPES="predict" LANGUAGE=en INSECURE_USE_HTTP=true PORT=1337 -NODE_ENV=development \ No newline at end of file +NODE_ENV=development +AUTH_FAIL_DELAY=50 \ No newline at end of file diff --git a/docs/plugins/alexa-plugin.md b/docs/plugins/alexa-plugin.md index 87117affd46..97f522ed632 100644 --- a/docs/plugins/alexa-plugin.md +++ b/docs/plugins/alexa-plugin.md @@ -88,7 +88,7 @@ If you use Authentication Roles, you will need to add a token to the end of your 1. In your Nightscout Admin Tools, add a new subject and give it the "readable" role. - If you **really** would like to be super specific, you could create a new role and set the permissions to `api:*:read`. 1. After the new subject is created, copy the "Access Token" value for the new row in your subject table (**don't** copy the link, just copy the text). -1. At the end of your Nighscout URL, add `?token={yourtoken}`, where `{yourtoken}` is the Access Token you just copied. Your new URL should look like `https://{yourdomain}/api/v1/googlehome?token={yourtoken}`. +1. At the end of your Nighscout URL, add `?token={yourtoken}`, where `{yourtoken}` is the Access Token you just copied. Your new URL should look like `https://{yourdomain}/api/v1/alexa?token={yourtoken}`. ### Test your skill out with the test tool diff --git a/docs/plugins/alexa-templates/es-es.json b/docs/plugins/alexa-templates/es-es.json new file mode 100644 index 00000000000..dd705d91bd9 --- /dev/null +++ b/docs/plugins/alexa-templates/es-es.json @@ -0,0 +1,320 @@ +{ + "interactionModel": { + "languageModel": { + "invocationName": "mi monitor", + "intents": [ + { + "name": "NSStatus", + "slots": [], + "samples": [ + "Como lo estoy haciendo" + ] + }, + { + "name": "LastLoop", + "slots": [], + "samples": [ + "Cuando fue mi ultimo bucle" + ] + }, + { + "name": "MetricNow", + "slots": [ + { + "name": "metric", + "type": "LIST_OF_METRICS", + "samples": [ + "que es {pwd} {metric}", + "cual es mi {metric}", + "como es {pwd} {metric}", + "como es {metric}", + "cuanta {metric} tiene {pwd}", + "cuanta {metric} tengo", + "cuanta {metric}", + "{pwd} {metric}", + "{metric}", + "mi {metric}" + ] + }, + { + "name": "pwd", + "type": "AMAZON.FirstName" + } + ], + "samples": [ + "cuanto {metric} le queda a {pwd}", + "cual es mi {metric}", + "cuanta {metric} queda", + "Cuanta {metric}", + "como es {metric}", + "como es mi {metric}", + "como es {pwd} {metric}", + "como esta mi {metric}", + "que es {metric}", + "cuanta {metric} tengo", + "cuanta {metric} tiene {pwd}", + "que es {pwd} {metric}" + ] + }, + { + "name": "AMAZON.NavigateHomeIntent", + "samples": [] + }, + { + "name": "AMAZON.StopIntent", + "samples": [] + }, + { + "name": "AMAZON.CancelIntent", + "samples": [] + }, + { + "name": "AMAZON.HelpIntent", + "samples": [] + } + ], + "types": [ + { + "name": "LIST_OF_METRICS", + "values": [ + { + "name": { + "value": "delta", + "synonyms": [ + "delta de glucosa en sangre", + "delta de azucar en sangre", + "delta azucar", + "delta glucosa" + ] + } + }, + { + "name": { + "value": "uploader battery", + "synonyms": [ + "bateria restante del cargador", + "carga de la batera" + ] + } + }, + { + "name": { + "value": "pump reservoir", + "synonyms": [ + "insulina restante", + "queda insulina", + "insulina que queda", + "insulina en mi bomba", + "insulina" + ] + } + }, + { + "name": { + "value": "pump battery", + "synonyms": [ + "bateria de la bomba restante", + "bomba de energia de la bateria" + ] + } + }, + { + "name": { + "value": "bg", + "synonyms": [ + "numero", + "glucosa", + "azucar en sangre", + "glucosa en sangre" + ] + } + }, + { + "name": { + "value": "iob", + "synonyms": [ + "insulina que tengo", + "insulina a bordo" + ] + } + }, + { + "name": { + "value": "basal", + "synonyms": [ + "basal que tengo", + "basal", + "basal actual" + ] + } + }, + { + "name": { + "value": "cob", + "synonyms": [ + "carbohidratos", + "carbohidratos a bordo", + "carbo hidratos", + "carbohidratos que tengo" + ] + } + }, + { + "name": { + "value": "forecast", + "synonyms": [ + "prevision ar2", + "prevision del bucle" + ] + } + }, + { + "name": { + "value": "raw bg", + "synonyms": [ + "numero bruto", + "azucar en sangre en bruto", + "glucosa en sangre en bruto" + ] + } + }, + { + "name": { + "value": "cgm noise", + "synonyms": [ + "ruido cgm", + "ruido del cgm" + ] + } + }, + { + "name": { + "value": "cgm tx age", + "synonyms": [ + "edad del transmisor", + "transmisor edad", + "edad del transmisor cgm" + ] + } + }, + { + "name": { + "value": "cgm tx status", + "synonyms": [ + "estado del transmisor", + "estado transmisor", + "estado del transmisor cgm" + ] + } + }, + { + "name": { + "value": "cgm battery", + "synonyms": [ + "nivel de bateria cgm", + "niveles de bateria cgm", + "bateria del cgm", + "bateria del transmisor cgm", + "nivel de bateria del transmisor cgm", + "nivel bateria transmisor cgm", + "nivel bateria del transmisor cgm", + "bateria transmisor", + "nivel bateria transmisor", + "niveles de bateria del transmisor", + "baterias del transmisor" + ] + } + }, + { + "name": { + "value": "cgm session age", + "synonyms": [ + "edad de la sesion" + ] + } + }, + { + "name": { + "value": "cgm status", + "synonyms": [ + "estado cgm", + "estado del cgm" + ] + } + }, + { + "name": { + "value": "cgm mode", + "synonyms": [ + "modo cgm", + "modo del cgm" + ] + } + }, + { + "name": { + "value": "db size", + "synonyms": [ + "ocupacion de la base de datos", + "ocupacion de datos", + "ocupacion fichero" + ] + } + } + ] + } + ] + }, + "dialog": { + "intents": [ + { + "name": "MetricNow", + "confirmationRequired": false, + "prompts": {}, + "slots": [ + { + "name": "metric", + "type": "LIST_OF_METRICS", + "confirmationRequired": false, + "elicitationRequired": true, + "prompts": { + "elicitation": "Elicit.Slot.1421281086569.34001419564" + } + }, + { + "name": "pwd", + "type": "AMAZON.FirstName", + "confirmationRequired": false, + "elicitationRequired": false, + "prompts": {} + } + ] + } + ], + "delegationStrategy": "ALWAYS" + }, + "prompts": [ + { + "id": "Elicit.Slot.1421281086569.34001419564", + "variations": [ + { + "type": "PlainText", + "value": "¿Que metrica estas buscando?" + }, + { + "type": "PlainText", + "value": "¿Que valor buscas?" + }, + { + "type": "PlainText", + "value": "¿Que metrica quieres saber?" + }, + { + "type": "PlainText", + "value": "¿Que valor quieres saber?" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/example-profiles.md b/docs/plugins/example-profiles.md similarity index 100% rename from example-profiles.md rename to docs/plugins/example-profiles.md diff --git a/docs/plugins/google-home-templates/de-DE.zip b/docs/plugins/google-home-templates/de-DE.zip new file mode 100644 index 00000000000..760a24b95bc Binary files /dev/null and b/docs/plugins/google-home-templates/de-DE.zip differ diff --git a/update.png b/docs/update.png similarity index 100% rename from update.png rename to docs/update.png diff --git a/lib/admin_plugins/roles.js b/lib/admin_plugins/roles.js index f99c4344449..ee3bc30b89c 100644 --- a/lib/admin_plugins/roles.js +++ b/lib/admin_plugins/roles.js @@ -17,7 +17,7 @@ module.exports = init; var $status = null; roles.actions = [{ - description: 'Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a seperator.' + description: 'Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.' , buttonLabel: 'Add new Role' , init: function init (client, callback) { $status = $('#admin_' + roles.name + '_0_status'); @@ -46,7 +46,7 @@ function createOrSaveRole (role, client, callback) { reload(client, callback); }).fail(function fail (err) { console.error('Unable to ' + method + ' Role', err.responseText); - window.alert(client.translate('Unable to %1 Role', { params: [method] })); + window.alert(client.translate('Unable to save Role')); if (callback) { callback(err); } diff --git a/lib/admin_plugins/subjects.js b/lib/admin_plugins/subjects.js index 828011f88e0..b1123029eaf 100644 --- a/lib/admin_plugins/subjects.js +++ b/lib/admin_plugins/subjects.js @@ -45,7 +45,7 @@ function createOrSaveSubject (subject, client, callback) { reload(client, callback); }).fail(function fail (err) { console.error('Unable to ' + method + ' Subject', err.responseText); - window.alert(client.translate('Unable to ' + method + ' Subject')); + window.alert(client.translate('Unable to save Subject')); if (callback) { callback(); } diff --git a/lib/adminnotifies.js b/lib/adminnotifies.js new file mode 100644 index 00000000000..7c3603609f6 --- /dev/null +++ b/lib/adminnotifies.js @@ -0,0 +1,57 @@ +'use strict'; + +const _ = require('lodash'); + +function init (ctx) { + + const adminnotifies = {}; + + adminnotifies.addNotify = function addnotify (notify) { + if (!ctx.settings.adminNotifiesEnabled) { + console.log('Admin notifies disabled, skipping notify', notify); + return; + } + + if (!notify) return; + + notify.title = notify.title || 'No title'; + notify.message = notify.message || 'No message'; + + const existingMessage = _.find(adminnotifies.notifies, function findExisting (obj) { + return obj.message == notify.message; + }); + + if (existingMessage) { + existingMessage.count += 1; + existingMessage.lastRecorded = Date.now(); + } else { + notify.count = 1; + notify.lastRecorded = Date.now(); + adminnotifies.notifies.push(notify); + } + } + + adminnotifies.getNotifies = function getNotifies () { + return adminnotifies.notifies; + } + + ctx.bus.on('admin-notify', adminnotifies.addNotify); + + adminnotifies.clean = function cleanNotifies () { + adminnotifies.notifies = _.filter(adminnotifies.notifies, function findExisting (obj) { + return obj.persistent || ((Date.now() - obj.lastRecorded) < 1000 * 60 * 60 * 12); + }); + } + + adminnotifies.cleanAll = function cleanAll() { + adminnotifies.notifies = []; + } + + adminnotifies.cleanAll(); + + ctx.bus.on('tick', adminnotifies.clean); + + return adminnotifies; +} + +module.exports = init; diff --git a/lib/api/activity/index.js b/lib/api/activity/index.js index c42e73570c6..95416437ed7 100644 --- a/lib/api/activity/index.js +++ b/lib/api/activity/index.js @@ -22,6 +22,7 @@ function configure(app, wares, ctx) { // json body types get handled as parsed json api.use(wares.bodyParser.json({ limit: 1048576 + , extended: true })); // also support url-encoded content-type api.use(wares.bodyParser.urlencoded({ diff --git a/lib/api/adminnotifiesapi.js b/lib/api/adminnotifiesapi.js new file mode 100644 index 00000000000..7579d8e3a79 --- /dev/null +++ b/lib/api/adminnotifiesapi.js @@ -0,0 +1,35 @@ +'use strict'; + +const _ = require('lodash'); +const consts = require('../constants'); + +function configure (ctx) { + const express = require('express') + , api = express.Router(); + + api.get('/adminnotifies', function(req, res) { + ctx.authorization.resolveWithRequest(req, function resolved (err, result) { + + const isAdmin = ctx.authorization.checkMultiple('*:*:admin', result.shiros); //full admin permissions + const response = { + notifies: [] + , notifyCount: 0 + }; + + if (ctx.adminnotifies) { + const notifies = _.filter(ctx.adminnotifies.getNotifies(), function isOld (obj) { + return (obj.persistent || (Date.now() - obj.lastRecorded) < 1000 * 60 * 60 * 8); + }); + + if (isAdmin) { response.notifies = notifies } + response.notifyCount = notifies.length; + } + + res.sendJSONStatus(res, consts.HTTP_OK, response); + }); + }); + + return api; +} + +module.exports = configure; diff --git a/lib/api/alexa/index.js b/lib/api/alexa/index.js index 3c31bf1ce00..4c351eb2d0d 100644 --- a/lib/api/alexa/index.js +++ b/lib/api/alexa/index.js @@ -13,7 +13,10 @@ function configure (app, wares, ctx, env) { // text body types get handled as raw buffer stream api.use(wares.bodyParser.raw()); // json body types get handled as parsed json - api.use(wares.bodyParser.json()); + api.use(wares.bodyParser.json({ + limit: 1048576 + , extended: true + })); ctx.virtAsstBase.setupVirtAsstHandlers(ctx.alexa); diff --git a/lib/api/devicestatus/index.js b/lib/api/devicestatus/index.js index 94dfb1c9385..f36b8d07815 100644 --- a/lib/api/devicestatus/index.js +++ b/lib/api/devicestatus/index.js @@ -15,7 +15,10 @@ function configure (app, wares, ctx, env) { // text body types get handled as raw buffer stream api.use(wares.bodyParser.raw()); // json body types get handled as parsed json - api.use(wares.bodyParser.json()); + api.use(wares.bodyParser.json({ + limit: 1048576 + , extended: true + })); // also support url-encoded content-type api.use(wares.bodyParser.urlencoded({ extended: true })); @@ -67,6 +70,9 @@ function configure (app, wares, ctx, env) { function doPost (req, res) { var obj = req.body; + + ctx.purifier.purifyObject(obj); + ctx.devicestatus.create(obj, function(err, created) { if (err) { res.sendJSONStatus(res, consts.HTTP_INTERNAL_ERROR, 'Mongo Error', err); diff --git a/lib/api/entries/index.js b/lib/api/entries/index.js index 5075df6eded..fd80c51670c 100644 --- a/lib/api/entries/index.js +++ b/lib/api/entries/index.js @@ -43,7 +43,10 @@ function configure (app, wares, ctx, env) { // text body types get handled as raw buffer stream api.use(wares.bodyParser.raw()); // json body types get handled as parsed json - api.use(wares.bodyParser.json()); + api.use(wares.bodyParser.json({ + limit: 1048576 + , extended: true + })); // shortcut to use extension to specify output content-type api.use(wares.extensions([ 'json', 'svg', 'csv', 'txt', 'png', 'html', 'tsv' @@ -274,6 +277,11 @@ function configure (app, wares, ctx, env) { incoming = incoming.concat(req.body); } + for (let i = 0; i < incoming.length; i++) { + const e = incoming[i]; + ctx.purifier.purifyObject(e); + } + /** * @function persist * @returns {WritableStream} a writable persistent storage stream diff --git a/lib/api/food/index.js b/lib/api/food/index.js index 9094d3f7ebf..1917198165b 100644 --- a/lib/api/food/index.js +++ b/lib/api/food/index.js @@ -11,7 +11,10 @@ function configure (app, wares, ctx) { // text body types get handled as raw buffer stream api.use(wares.bodyParser.raw( )); // json body types get handled as parsed json - api.use(wares.bodyParser.json( )); + api.use(wares.bodyParser.json({ + limit: 1048576 + , extended: true + })); // also support url-encoded content-type api.use(wares.bodyParser.urlencoded({ extended: true })); diff --git a/lib/api/index.js b/lib/api/index.js index 4b3d6a4fcb6..3eb16ac826a 100644 --- a/lib/api/index.js +++ b/lib/api/index.js @@ -13,11 +13,13 @@ function create (env, ctx) { app.set('version', env.version); app.set('units', env.DISPLAY_UNITS); - // Only allow access to the API if API_SECRET is set on the server. + // Only allow access to the API if API KEY is set on the server. app.disable('api'); - if (env.api_secret) { - console.log('API_SECRET', env.api_secret); + if (env.enclave.isApiKeySet()) { + console.log('API KEY present, enabling API'); app.enable('api'); + } else { + console.log('API KEY has not been set, API disabled'); } if (env.settings.enable) { @@ -56,6 +58,9 @@ function create (env, ctx) { app.all('/activity*', require('./activity/')(app, wares, ctx)); app.use('/', wares.sendJSONStatus, require('./verifyauth')(ctx)); + + app.use('/', wares.sendJSONStatus, require('./adminnotifiesapi')(ctx)); + app.all('/food*', require('./food/')(app, wares, ctx)); // Status first diff --git a/lib/api/profile/index.js b/lib/api/profile/index.js index d00122f16bd..a4a297898a7 100644 --- a/lib/api/profile/index.js +++ b/lib/api/profile/index.js @@ -11,7 +11,10 @@ function configure (app, wares, ctx) { // text body types get handled as raw buffer stream api.use(wares.bodyParser.raw( )); // json body types get handled as parsed json - api.use(wares.bodyParser.json( )); + api.use(wares.bodyParser.json({ + limit: 1048576 + , extended: true + })); // also support url-encoded content-type api.use(wares.bodyParser.urlencoded({ extended: true })); @@ -61,6 +64,7 @@ function configure (app, wares, ctx) { // create new record api.post('/profile/', ctx.authorization.isPermitted('api:profile:create'), function(req, res) { var data = req.body; + ctx.purifier.purifyObject(data); ctx.profile.create(data, function (err, created) { if (err) { res.sendJSONStatus(res, consts.HTTP_INTERNAL_ERROR, 'Mongo Error', err); diff --git a/lib/api/status.js b/lib/api/status.js index 56196114a07..b1a15952970 100644 --- a/lib/api/status.js +++ b/lib/api/status.js @@ -20,6 +20,10 @@ function configure (app, wares, env, ctx) { var authToken = req.query.token || req.query.secret || ''; + function getRemoteIP (req) { + return req.headers['x-forwarded-for'] || req.connection.remoteAddress; + } + var date = new Date(); var info = { status: 'ok' , name: app.get('name') @@ -31,7 +35,7 @@ function configure (app, wares, env, ctx) { , boluscalcEnabled: app.enabled('api') && env.settings.enable.indexOf('boluscalc') > -1 , settings: settings , extendedSettings: extended - , authorized: ctx.authorization.authorize(authToken) + , authorized: ctx.authorization.authorize(authToken, getRemoteIP(req)) , runtimeState: ctx.runtimeState }; diff --git a/lib/api/treatments/index.js b/lib/api/treatments/index.js index 0e1d8a0ede8..e867f139461 100644 --- a/lib/api/treatments/index.js +++ b/lib/api/treatments/index.js @@ -15,6 +15,7 @@ function configure (app, wares, ctx, env) { api.use(wares.compression()); api.use(wares.bodyParser({ limit: 1048576 * 50 + , extended: true })); // text body types get handled as raw buffer stream api.use(wares.bodyParser.raw({ @@ -23,6 +24,7 @@ function configure (app, wares, ctx, env) { // json body types get handled as parsed json api.use(wares.bodyParser.json({ limit: 1048576 + , extended: true })); // also support url-encoded content-type api.use(wares.bodyParser.urlencoded({ @@ -119,6 +121,8 @@ function configure (app, wares, ctx, env) { t.created_at = new Date().toISOString(); } + ctx.purifier.purifyObject(t); + /* if (!t.created_at) { console.log('Trying to create treatment without created_at field', t); diff --git a/lib/api/verifyauth.js b/lib/api/verifyauth.js index a4eb2edf4ee..849ce9bef9a 100644 --- a/lib/api/verifyauth.js +++ b/lib/api/verifyauth.js @@ -8,15 +8,24 @@ function configure (ctx) { api.get('/verifyauth', function(req, res) { ctx.authorization.resolveWithRequest(req, function resolved (err, result) { - // this is used to see if req has api-secret equivalent authorization - var authorized = !err && - ctx.authorization.checkMultiple('*:*:create,update,delete', result.shiros) && //can write to everything - ctx.authorization.checkMultiple('admin:*:*:*', result.shiros); //full admin permissions too + var canRead = !err && + ctx.authorization.checkMultiple('*:*:read', result.shiros); + var canWrite = !err && + ctx.authorization.checkMultiple('*:*:write', result.shiros); + var isAdmin = !err && + ctx.authorization.checkMultiple('*:*:admin', result.shiros); + var authorized = canRead && !result.defaults; + var response = { + canRead, + canWrite, + isAdmin, message: authorized ? 'OK' : 'UNAUTHORIZED', - rolefound: result.subject ? 'FOUND' : 'NOTFOUND' - } + rolefound: result.subject ? 'FOUND' : 'NOTFOUND', + permissions: result.defaults ? 'DEFAULT' : 'ROLE' + }; + res.sendJSONStatus(res, consts.HTTP_OK, response); }); diff --git a/lib/api3/const.json b/lib/api3/const.json index fd874a1175a..5f63c63679a 100644 --- a/lib/api3/const.json +++ b/lib/api3/const.json @@ -1,7 +1,6 @@ { - "API3_VERSION": "3.0.0-alpha", + "API3_VERSION": "3.0.3-alpha", "API3_SECURITY_ENABLE": true, - "API3_TIME_SKEW_TOLERANCE": 5, "API3_DEDUP_FALLBACK_ENABLED": true, "API3_CREATED_AT_FALLBACK_ENABLED": true, "API3_MAX_LIMIT": 1000, @@ -34,13 +33,11 @@ "HTTP_400_SORT_SORT_DESC": "Parameters sort and sort_desc cannot be combined", "HTTP_400_UNSUPPORTED_FILTER_OPERATOR": "Unsupported filter operator {0}", "HTTP_400_IMMUTABLE_FIELD": "Field {0} cannot be modified by the client", - "HTTP_401_BAD_DATE": "Bad Date header", "HTTP_401_BAD_TOKEN": "Bad access token or JWT", - "HTTP_401_DATE_OUT_OF_TOLERANCE": "Date header out of tolerance", - "HTTP_401_MISSING_DATE": "Missing Date header", "HTTP_401_MISSING_OR_BAD_TOKEN": "Missing or bad access token or JWT", "HTTP_403_MISSING_PERMISSION": "Missing permission {0}", "HTTP_403_NOT_USING_HTTPS": "Not using SSL/TLS", + "HTTP_404_BAD_OPERATION": "Bad operation or collection", "HTTP_406_UNSUPPORTED_FORMAT": "Unsupported output format requested", "HTTP_422_READONLY_MODIFICATION": "Trying to modify read-only document", "HTTP_500_INTERNAL_ERROR": "Internal Server Error", @@ -52,4 +49,4 @@ "MIN_TIMESTAMP": 946684800000, "MIN_UTC_OFFSET": -1440, "MAX_UTC_OFFSET": 1440 -} \ No newline at end of file +} diff --git a/lib/api3/doc/formats.md b/lib/api3/doc/formats.md index 5a01a802f3e..a0c9f73b3fa 100644 --- a/lib/api3/doc/formats.md +++ b/lib/api3/doc/formats.md @@ -18,31 +18,34 @@ The server replies with `406 Not Acceptable` HTTP status in case of not supporte Default content type is JSON, output can look like this: -``` -[ - { - "type":"sgv", - "sgv":"171", - "dateString":"2014-07-19T02:44:15.000-07:00", - "date":1405763055000, - "device":"dexcom", - "direction":"Flat", - "identifier":"5c5a2404e0196f4d3d9a718a", - "srvModified":1405763055000, - "srvCreated":1405763055000 - }, - { - "type":"sgv", - "sgv":"176", - "dateString":"2014-07-19T03:09:15.000-07:00", - "date":1405764555000, - "device":"dexcom", - "direction":"Flat", - "identifier":"5c5a2404e0196f4d3d9a7187", - "srvModified":1405764555000, - "srvCreated":1405764555000 - } -] +```json +{ + "status": 200, + "result": [ + { + "type": "sgv", + "sgv": "171", + "dateString": "2014-07-19T02:44:15.000-07:00", + "date": 1405763055000, + "device": "dexcom", + "direction": "Flat", + "identifier": "5c5a2404e0196f4d3d9a718a", + "srvModified": 1405763055000, + "srvCreated": 1405763055000 + }, + { + "type": "sgv", + "sgv": "176", + "dateString": "2014-07-19T03:09:15.000-07:00", + "date": 1405764555000, + "device": "dexcom", + "direction": "Flat", + "identifier": "5c5a2404e0196f4d3d9a7187", + "srvModified": 1405764555000, + "srvCreated": 1405764555000 + } + ] +} ``` ### XML diff --git a/lib/api3/doc/security.md b/lib/api3/doc/security.md index 0fdf4c7d2aa..49a2505ca0e 100644 --- a/lib/api3/doc/security.md +++ b/lib/api3/doc/security.md @@ -27,22 +27,6 @@ There are two ways to authorize API calls: - then, to each secure API operation attach a JWT token in the HTTP header, eg. `Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2Nlc3NUb2tlbiI6InRlc3RyZWFkYWItNzZlYWZmMjQxOGJmYjdlMCIsImlhdCI6MTU2NTAzOTczMSwiZXhwIjoxNTY1MDQzMzMxfQ.Y-OFtFJ-gZNJcnZfm9r4S7085Z7YKVPiaQxuMMnraVk` (until the JWT expires) - ---- -### Client timestamps -As previously mentioned, a potential attacker cannot decrypt the captured messages, but he can send them back to the client/server at any later time. APIv3 is partially preventing this by the temporal validity of each secured API call. - - -The client must include his current timestamp to each call so that the server can compare it against its clock. If the timestamp difference is not within the limit, the request is considered invalid. The tolerance limit is set in minutes in the `API3_TIME_SKEW_TOLERANCE` environment variable. - -There are two ways to include the client timestamp to the call: -- use `now` query parameter with UNIX epoch millisecond timestamp, eg. `now=1565041446908` -- add HTTP `Date` header to the request, eg. `Date: Sun, 12 May 2019 07:49:58 GMT` - - -The client can check each server response in the same way, because each response contains a server timestamp in the HTTP *Date* header as well. - - --- APIv3 security is enabled by default, but it can be completely disabled for development and debugging purposes by setting the web environment variable `API3_SECURITY_ENABLE=false`. This setting is hazardous and it is strongly discouraged to be used for production purposes! diff --git a/lib/api3/doc/tutorial.md b/lib/api3/doc/tutorial.md index d69e95ef4a4..50ab57c5b93 100644 --- a/lib/api3/doc/tutorial.md +++ b/lib/api3/doc/tutorial.md @@ -22,15 +22,18 @@ request('https://nsapiv3.herokuapp.com/api/v3/version', (error, response, body) => console.log(body)); ``` Sample result: -```javascript -{ - "version":"0.12.2", - "apiVersion":"3.0.0-alpha", - "srvDate":1564386001772, - "storage":{ - "storage":"mongodb", - "version":"3.6.12" - } +```json +{ + "status": 200, + "result": { + "version": "14.1.0", + "apiVersion": "3.0.2-alpha", + "srvDate": 1609402081548, + "storage": { + "storage": "mongodb", + "version": "4.2.11" + } + } } ``` @@ -44,28 +47,31 @@ It is public (there is no need to add authorization parameters/headers). Sample GET `/status` client code (to get my actual permissions): ```javascript const request = require('request'); -const auth = `token=testadmin-ad3b1f9d7b3f59d5&now=${new Date().getTime()}`; +const auth = `token=testadmin-ad3b1f9d7b3f59d5`; request(`https://nsapiv3.herokuapp.com/api/v3/status?${auth}`, (error, response, body) => console.log(body)); ``` Sample result: -```javascript -{ - "version":"0.12.2", - "apiVersion":"3.0.0-alpha", - "srvDate":1564391740738, - "storage":{ - "storage":"mongodb", - "version":"3.6.12" - }, - "apiPermissions":{ - "devicestatus":"crud", - "entries":"crud", - "food":"crud", - "profile":"crud", - "settings":"crud", - "treatments":"crud" +```json +{ + "status": 200, + "result": { + "version": "14.1.0", + "apiVersion": "3.0.2-alpha", + "srvDate": 1609427571833, + "storage": { + "storage": "mongodb", + "version": "4.2.11" + }, + "apiPermissions": { + "devicestatus": "crud", + "entries": "crud", + "food": "crud", + "profile": "crud", + "settings": "crud", + "treatments": "crud" + } } } ``` @@ -80,30 +86,33 @@ Sample result: Sample GET `/entries` client code (to retrieve last 3 BG values): ```javascript const request = require('request'); -const auth = `token=testadmin-ad3b1f9d7b3f59d5&now=${new Date().getTime()}`; +const auth = `token=testadmin-ad3b1f9d7b3f59d5`; request(`https://nsapiv3.herokuapp.com/api/v3/entries?${auth}&sort$desc=date&limit=3&fields=dateString,sgv,direction`, (error, response, body) => console.log(body)); ``` Sample result: -``` -[ - { - "dateString":"2019-07-30T02:24:50.434+0200", - "sgv":115, - "direction":"FortyFiveDown" - }, - { - "dateString":"2019-07-30T02:19:50.374+0200", - "sgv":121, - "direction":"FortyFiveDown" - }, - { - "dateString":"2019-07-30T02:14:50.450+0200", - "sgv":129, - "direction":"FortyFiveDown" - } -] +```json +{ + "status": 200, + "result": [ + { + "dateString": "2019-07-30T02:24:50.434+0200", + "sgv": 115, + "direction": "FortyFiveDown" + }, + { + "dateString": "2019-07-30T02:19:50.374+0200", + "sgv": 121, + "direction": "FortyFiveDown" + }, + { + "dateString": "2019-07-30T02:14:50.450+0200", + "sgv": 129, + "direction": "FortyFiveDown" + } + ] +} ``` @@ -115,7 +124,7 @@ Sample result: Sample POST `/treatments` client code: ```javascript const request = require('request'); -const auth = `token=testadmin-ad3b1f9d7b3f59d5&now=${new Date().getTime()}`; +const auth = `token=testadmin-ad3b1f9d7b3f59d5`; const doc = { date: 1564591511232, // (new Date()).getTime(), app: 'AndroidAPS', @@ -129,11 +138,15 @@ request({ json: true, url: `https://nsapiv3.herokuapp.com/api/v3/treatments?${auth}` }, - (error, response, body) => console.log(response.headers.location)); + (error, response, body) => console.log(body)); ``` Sample result: -``` -/api/v3/treatments/95e1a6e3-1146-5d6a-a3f1-41567cae0895 +```json +{ + "status": 201, + "identifier": "95e1a6e3-1146-5d6a-a3f1-41567cae0895", + "lastModified": 1564591511711 +} ``` @@ -145,26 +158,29 @@ Sample result: Sample GET `/treatments/{identifier}` client code: ```javascript const request = require('request'); -const auth = `token=testadmin-ad3b1f9d7b3f59d5&now=${new Date().getTime()}`; +const auth = `token=testadmin-ad3b1f9d7b3f59d5`; const identifier = '95e1a6e3-1146-5d6a-a3f1-41567cae0895'; request(`https://nsapiv3.herokuapp.com/api/v3/treatments/${identifier}?${auth}`, (error, response, body) => console.log(body)); ``` Sample result: -``` -{ - "date":1564591511232, - "app":"AndroidAPS", - "device":"Samsung XCover 4-861536030196001", - "eventType":"Correction Bolus", - "insulin":0.3, - "identifier":"95e1a6e3-1146-5d6a-a3f1-41567cae0895", - "utcOffset":0, - "created_at":"2019-07-31T16:45:11.232Z", - "srvModified":1564591627732, - "srvCreated":1564591511711, - "subject":"test-admin" +```json +{ + "status": 200, + "result": { + "date": 1564591511232, + "app": "AndroidAPS", + "device": "Samsung XCover 4-861536030196001", + "eventType": "Correction Bolus", + "insulin": 0.3, + "identifier": "95e1a6e3-1146-5d6a-a3f1-41567cae0895", + "utcOffset": 0, + "created_at": "2019-07-31T16:45:11.232Z", + "srvModified": 1564591627732, + "srvCreated": 1564591511711, + "subject": "test-admin" + } } ``` @@ -177,20 +193,23 @@ Sample result: Sample GET `/lastModified` client code (to get latest modification dates): ```javascript const request = require('request'); -const auth = `token=testadmin-ad3b1f9d7b3f59d5&now=${new Date().getTime()}`; +const auth = `token=testadmin-ad3b1f9d7b3f59d5`; request(`https://nsapiv3.herokuapp.com/api/v3/lastModified?${auth}`, (error, response, body) => console.log(body)); ``` Sample result: -```javascript +```json { - "srvDate":1564591783202, - "collections":{ - "devicestatus":1564591490074, - "entries":1564591486801, - "profile":1548524042744, - "treatments":1564591627732 + "status": 200, + "result": { + "srvDate": 1564591783202, + "collections": { + "devicestatus": 1564591490074, + "entries": 1564591486801, + "profile": 1548524042744, + "treatments": 1564591627732 + } } } ``` @@ -204,7 +223,7 @@ Sample result: Sample PUT `/treatments/{identifier}` client code (to update `insulin` from 0.3 to 0.4): ```javascript const request = require('request'); -const auth = `token=testadmin-ad3b1f9d7b3f59d5&now=${new Date().getTime()}`; +const auth = `token=testadmin-ad3b1f9d7b3f59d5`; const identifier = '95e1a6e3-1146-5d6a-a3f1-41567cae0895'; const doc = { date: 1564591511232, @@ -220,11 +239,13 @@ request({ json: true, url: `https://nsapiv3.herokuapp.com/api/v3/treatments/${identifier}?${auth}` }, - (error, response, body) => console.log(response.statusCode)); + (error, response, body) => console.log(body)); ``` Sample result: -``` -204 +```json +{ + "status": 200 +} ``` @@ -236,7 +257,7 @@ Sample result: Sample PATCH `/treatments/{identifier}` client code (to update `insulin` from 0.4 to 0.5): ```javascript const request = require('request'); -const auth = `token=testadmin-ad3b1f9d7b3f59d5&now=${new Date().getTime()}`; +const auth = `token=testadmin-ad3b1f9d7b3f59d5`; const identifier = '95e1a6e3-1146-5d6a-a3f1-41567cae0895'; const doc = { insulin: 0.5 @@ -248,11 +269,13 @@ request({ json: true, url: `https://nsapiv3.herokuapp.com/api/v3/treatments/${identifier}?${auth}` }, - (error, response, body) => console.log(response.statusCode)); + (error, response, body) => console.log(body)); ``` Sample result: -``` -204 +```json +{ + "status": 200 +} ``` @@ -264,18 +287,20 @@ Sample result: Sample DELETE `/treatments/{identifier}` client code (to update `insulin` from 0.4 to 0.5): ```javascript const request = require('request'); -const auth = `token=testadmin-ad3b1f9d7b3f59d5&now=${new Date().getTime()}`; +const auth = `token=testadmin-ad3b1f9d7b3f59d5`; const identifier = '95e1a6e3-1146-5d6a-a3f1-41567cae0895'; request({ method: 'delete', url: `https://nsapiv3.herokuapp.com/api/v3/treatments/${identifier}?${auth}` }, - (error, response, body) => console.log(response.statusCode)); + (error, response, body) => console.log(body)); ``` Sample result: -``` -204 +```json +{ + "status": 200 +} ``` @@ -287,43 +312,46 @@ Sample result: Sample HISTORY `/treatments/history/{lastModified}` client code: ```javascript const request = require('request'); -const auth = `token=testadmin-ad3b1f9d7b3f59d5&now=${new Date().getTime()}`; +const auth = `token=testadmin-ad3b1f9d7b3f59d5`; const lastModified = 1564521267421; request(`https://nsapiv3.herokuapp.com/api/v3/treatments/history/${lastModified}?${auth}`, (error, response, body) => console.log(response.body)); ``` Sample result: -``` -[ - { - "date":1564521267421, - "app":"AndroidAPS", - "device":"Samsung XCover 4-861536030196001", - "eventType":"Correction Bolus", - "insulin":0.5, - "utcOffset":0, - "created_at":"2019-07-30T21:14:27.421Z", - "identifier":"95e1a6e3-1146-5d6a-a3f1-41567cae0895", - "srvModified":1564592440416, - "srvCreated":1564592334853, - "subject":"test-admin", - "modifiedBy":"test-admin", - "isValid":false - }, - { - "date":1564592545299, - "app":"AndroidAPS", - "device":"Samsung XCover 4-861536030196001", - "eventType":"Snack Bolus", - "carbs":10, - "identifier":"267c43c2-f629-5191-a542-4f410c69e486", - "utcOffset":0, - "created_at":"2019-07-31T17:02:25.299Z", - "srvModified":1564592545781, - "srvCreated":1564592545781, - "subject":"test-admin" - } -] +```json +{ + "status": 200, + "result": [ + { + "date": 1564521267421, + "app": "AndroidAPS", + "device": "Samsung XCover 4-861536030196001", + "eventType": "Correction Bolus", + "insulin": 0.5, + "utcOffset": 0, + "created_at": "2019-07-30T21:14:27.421Z", + "identifier": "95e1a6e3-1146-5d6a-a3f1-41567cae0895", + "srvModified": 1564592440416, + "srvCreated": 1564592334853, + "subject": "test-admin", + "modifiedBy": "test-admin", + "isValid": false + }, + { + "date": 1564592545299, + "app": "AndroidAPS", + "device": "Samsung XCover 4-861536030196001", + "eventType": "Snack Bolus", + "carbs": 10, + "identifier": "267c43c2-f629-5191-a542-4f410c69e486", + "utcOffset": 0, + "created_at": "2019-07-31T17:02:25.299Z", + "srvModified": 1564592545781, + "srvCreated": 1564592545781, + "subject": "test-admin" + } + ] +} ``` Notice the `"isValid":false` field marking the deletion of the document. diff --git a/lib/api3/generic/collection.js b/lib/api3/generic/collection.js index 0a1a29b3915..015af2a13f4 100644 --- a/lib/api3/generic/collection.js +++ b/lib/api3/generic/collection.js @@ -5,7 +5,8 @@ const apiConst = require('../const.json') , dateTools = require('../shared/dateTools') , opTools = require('../shared/operationTools') , stringTools = require('../shared/stringTools') - , CollectionStorage = require('../storage/mongoCollection') + , MongoCollectionStorage = require('../storage/mongoCollection') + , CachedCollectionStorage = require('../storage/mongoCachedCollection') , searchOperation = require('./search/operation') , createOperation = require('./create/operation') , readOperation = require('./read/operation') @@ -26,13 +27,16 @@ function Collection ({ ctx, env, app, colName, storageColName, fallbackGetDate, fallbackDateField }) { const self = this; - + self.colName = colName; self.fallbackGetDate = fallbackGetDate; self.dedupFallbackFields = app.get('API3_DEDUP_FALLBACK_ENABLED') ? dedupFallbackFields : []; self.autoPruneDays = app.setENVTruthy('API3_AUTOPRUNE_' + colName.toUpperCase()); self.nextAutoPrune = new Date(); - self.storage = new CollectionStorage(ctx, env, storageColName); + + const baseStorage = new MongoCollectionStorage(ctx, env, storageColName); + self.storage = new CachedCollectionStorage(ctx, env, colName, baseStorage); + self.fallbackDateField = fallbackDateField; self.mapRoutes = function mapRoutes () { @@ -89,9 +93,9 @@ function Collection ({ ctx, env, app, colName, storageColName, fallbackGetDate, }; - + /** - * Fetch modified date from document (with possible fallback and back-fill to srvModified/srvCreated) + * Fetch modified date from document (with possible fallback and back-fill to srvModified/srvCreated) * @param {Object} doc - document loaded from database */ self.resolveDates = function resolveDates (doc) { @@ -125,12 +129,12 @@ function Collection ({ ctx, env, app, colName, storageColName, fallbackGetDate, * in the background (asynchronously) * */ self.autoPrune = function autoPrune () { - + if (!stringTools.isNumberInString(self.autoPruneDays)) return; - + const autoPruneDays = parseFloat(self.autoPruneDays); - if (autoPruneDays <= 0) + if (autoPruneDays <= 0) return; if (new Date() > self.nextAutoPrune) { @@ -190,4 +194,4 @@ function Collection ({ ctx, env, app, colName, storageColName, fallbackGetDate, } } -module.exports = Collection; \ No newline at end of file +module.exports = Collection; diff --git a/lib/api3/generic/create/insert.js b/lib/api3/generic/create/insert.js index b643818569a..56cb608cdf2 100644 --- a/lib/api3/generic/create/insert.js +++ b/lib/api3/generic/create/insert.js @@ -4,6 +4,7 @@ const apiConst = require('../../const.json') , security = require('../../security') , validate = require('./validate.js') , path = require('path') + , opTools = require('../../shared/operationTools') ; /** @@ -35,7 +36,13 @@ async function insert (opCtx, doc) { res.setHeader('Last-Modified', now.toUTCString()); res.setHeader('Location', path.posix.join(req.baseUrl, req.path, identifier)); - res.status(apiConst.HTTP.CREATED).send({ }); + + + const fields = { + identifier: identifier, + lastModified: now.getTime() + }; + opTools.sendJSON({ res, status: apiConst.HTTP.CREATED, fields: fields }); ctx.bus.emit('storage-socket-create', { colName: col.colName, doc }); col.autoPrune(); @@ -43,4 +50,4 @@ async function insert (opCtx, doc) { } -module.exports = insert; \ No newline at end of file +module.exports = insert; diff --git a/lib/api3/generic/delete/operation.js b/lib/api3/generic/delete/operation.js index 8f9463f3ef9..f5e8c3b5b27 100644 --- a/lib/api3/generic/delete/operation.js +++ b/lib/api3/generic/delete/operation.js @@ -36,7 +36,7 @@ async function validateDelete (opCtx) { throw new Error('empty result'); if (result.length === 0) { - return res.status(apiConst.HTTP.NOT_FOUND).end(); + return opTools.sendJSON({ res, status: apiConst.HTTP.NOT_FOUND }); } else { const storageDoc = result[0]; @@ -62,13 +62,13 @@ async function deletePermanently (opCtx) { throw new Error('empty result'); if (!result.deleted) { - return res.status(apiConst.HTTP.NOT_FOUND).end(); + return opTools.sendJSON({ res, status: apiConst.HTTP.NOT_FOUND }); } col.autoPrune(); ctx.bus.emit('storage-socket-delete', { colName: col.colName, identifier }); ctx.bus.emit('data-received'); - return res.status(apiConst.HTTP.NO_CONTENT).end(); + return opTools.sendJSON({ res, status: apiConst.HTTP.OK }); } @@ -89,13 +89,13 @@ async function markAsDeleted (opCtx) { throw new Error('empty result'); if (!result.updated) { - return res.status(apiConst.HTTP.NOT_FOUND).end(); + return opTools.sendJSON({ res, status: apiConst.HTTP.NOT_FOUND }); } ctx.bus.emit('storage-socket-delete', { colName: col.colName, identifier }); col.autoPrune(); ctx.bus.emit('data-received'); - return res.status(apiConst.HTTP.NO_CONTENT).end(); + return opTools.sendJSON({ res, status: apiConst.HTTP.OK }); } @@ -119,4 +119,4 @@ function deleteOperation (ctx, env, app, col) { }; } -module.exports = deleteOperation; \ No newline at end of file +module.exports = deleteOperation; diff --git a/lib/api3/generic/history/operation.js b/lib/api3/generic/history/operation.js index 5151c8b2749..47bd41b2056 100644 --- a/lib/api3/generic/history/operation.js +++ b/lib/api3/generic/history/operation.js @@ -27,19 +27,20 @@ async function history (opCtx, fieldsProjector) { if (filter !== null && limit !== null && projection !== null) { - const result = await col.storage.findMany(filter + const result = await col.storage.findMany({ filter , sort , limit , skip , projection , onlyValid - , logicalOperator); + , logicalOperator }); if (!result) throw new Error('empty result'); if (result.length === 0) { - return res.status(apiConst.HTTP.NO_CONTENT).end(); + res.status(apiConst.HTTP.OK); + return renderer.render(res, result); } _.each(result, col.resolveDates); @@ -150,4 +151,4 @@ function historyOperation (ctx, env, app, col) { }; } -module.exports = historyOperation; \ No newline at end of file +module.exports = historyOperation; diff --git a/lib/api3/generic/patch/operation.js b/lib/api3/generic/patch/operation.js index d7bb5fc2b4d..1e5cd0f129b 100644 --- a/lib/api3/generic/patch/operation.js +++ b/lib/api3/generic/patch/operation.js @@ -36,7 +36,7 @@ async function patch (opCtx) { const storageDoc = result[0]; if (storageDoc.isValid === false) { - return res.status(apiConst.HTTP.GONE).end(); + return opTools.sendJSONStatus(res, apiConst.HTTP.GONE); } const modifiedDate = col.resolveDates(storageDoc) @@ -44,13 +44,13 @@ async function patch (opCtx) { if (ifUnmodifiedSince && dateTools.floorSeconds(modifiedDate) > dateTools.floorSeconds(new Date(ifUnmodifiedSince))) { - return res.status(apiConst.HTTP.PRECONDITION_FAILED).end(); + return opTools.sendJSONStatus(res, apiConst.HTTP.PRECONDITION_FAILED); } await applyPatch(opCtx, identifier, doc, storageDoc); } else { - return res.status(apiConst.HTTP.NOT_FOUND).end(); + return opTools.sendJSONStatus(res, apiConst.HTTP.NOT_FOUND); } } @@ -82,7 +82,7 @@ async function applyPatch (opCtx, identifier, doc, storageDoc) { throw new Error('matchedCount empty'); res.setHeader('Last-Modified', now.toUTCString()); - res.status(apiConst.HTTP.NO_CONTENT).send({ }); + opTools.sendJSONStatus(res, apiConst.HTTP.OK); const fieldsProjector = new FieldsProjector('_all'); const patchedDocs = await col.storage.findOne(identifier, fieldsProjector); @@ -115,4 +115,4 @@ function patchOperation (ctx, env, app, col) { }; } -module.exports = patchOperation; \ No newline at end of file +module.exports = patchOperation; diff --git a/lib/api3/generic/read/operation.js b/lib/api3/generic/read/operation.js index c2e65a4afcc..3f4efb75dd9 100644 --- a/lib/api3/generic/read/operation.js +++ b/lib/api3/generic/read/operation.js @@ -26,12 +26,12 @@ async function read (opCtx) { throw new Error('empty result'); if (result.length === 0) { - return res.status(apiConst.HTTP.NOT_FOUND).end(); + return opTools.sendJSON({ res, status: apiConst.HTTP.NOT_FOUND }); } const doc = result[0]; if (doc.isValid === false) { - return res.status(apiConst.HTTP.GONE).end(); + return opTools.sendJSON({ res, status: apiConst.HTTP.GONE }); } @@ -74,4 +74,4 @@ function readOperation (ctx, env, app, col) { }; } -module.exports = readOperation; \ No newline at end of file +module.exports = readOperation; diff --git a/lib/api3/generic/search/operation.js b/lib/api3/generic/search/operation.js index c24f978dc27..179f357b503 100644 --- a/lib/api3/generic/search/operation.js +++ b/lib/api3/generic/search/operation.js @@ -35,13 +35,12 @@ async function search (opCtx) { if (filter !== null && sort !== null && limit !== null && skip !== null && projection !== null) { - - const result = await col.storage.findMany(filter + const result = await col.storage.findMany({ filter , sort , limit , skip , projection - , onlyValid); + , onlyValid }); if (!result) throw new Error('empty result'); @@ -76,4 +75,4 @@ function searchOperation (ctx, env, app, col) { }; } -module.exports = searchOperation; \ No newline at end of file +module.exports = searchOperation; diff --git a/lib/api3/generic/update/operation.js b/lib/api3/generic/update/operation.js index 3e517a32d11..5098ffa1773 100644 --- a/lib/api3/generic/update/operation.js +++ b/lib/api3/generic/update/operation.js @@ -48,7 +48,7 @@ async function updateConditional (opCtx, doc, storageDoc) { const { col, req, res } = opCtx; if (storageDoc.isValid === false) { - return res.status(apiConst.HTTP.GONE).end(); + return opTools.sendJSONStatus(res, apiConst.HTTP.GONE); } const modifiedDate = col.resolveDates(storageDoc) @@ -56,7 +56,7 @@ async function updateConditional (opCtx, doc, storageDoc) { if (ifUnmodifiedSince && dateTools.floorSeconds(modifiedDate) > dateTools.floorSeconds(new Date(ifUnmodifiedSince))) { - return res.status(apiConst.HTTP.PRECONDITION_FAILED).end(); + return opTools.sendJSONStatus(res, apiConst.HTTP.PRECONDITION_FAILED); } await replace(opCtx, doc, storageDoc); @@ -83,4 +83,4 @@ function updateOperation (ctx, env, app, col) { }; } -module.exports = updateOperation; \ No newline at end of file +module.exports = updateOperation; diff --git a/lib/api3/generic/update/replace.js b/lib/api3/generic/update/replace.js index fdf803ed16f..c0c76c4b6eb 100644 --- a/lib/api3/generic/update/replace.js +++ b/lib/api3/generic/update/replace.js @@ -4,6 +4,7 @@ const apiConst = require('../../const.json') , security = require('../../security') , validate = require('./validate.js') , path = require('path') + , opTools = require('../../shared/operationTools') ; /** @@ -37,12 +38,20 @@ async function replace (opCtx, doc, storageDoc, options) { throw new Error('empty matchedCount'); res.setHeader('Last-Modified', now.toUTCString()); + const fields = { + lastModified: now.getTime() + } if (storageDoc.identifier !== doc.identifier || isDeduplication) { res.setHeader('Location', path.posix.join(req.baseUrl, req.path, doc.identifier)); + fields.identifier = doc.identifier; + fields.isDeduplication = true; + if (storageDoc.identifier !== doc.identifier) { + fields.deduplicatedIdentifier = storageDoc.identifier; + } } - res.status(apiConst.HTTP.NO_CONTENT).send({ }); + opTools.sendJSON({ res, status: apiConst.HTTP.OK, fields }); ctx.bus.emit('storage-socket-update', { colName: col.colName, doc }); col.autoPrune(); @@ -50,4 +59,4 @@ async function replace (opCtx, doc, storageDoc, options) { } -module.exports = replace; \ No newline at end of file +module.exports = replace; diff --git a/lib/api3/index.js b/lib/api3/index.js index bff0899536f..83db322a452 100644 --- a/lib/api3/index.js +++ b/lib/api3/index.js @@ -7,6 +7,7 @@ const express = require('express') , apiConst = require('./const.json') , security = require('./security') , genericSetup = require('./generic/setup') + , opTools = require('./shared/operationTools') ; function configure (env, ctx) { @@ -65,7 +66,6 @@ function configure (env, ctx) { app.set('enabledCollections', ['devicestatus', 'entries', 'food', 'profile', 'settings', 'treatments']); self.setENVTruthy('API3_SECURITY_ENABLE', apiConst.API3_SECURITY_ENABLE); - self.setENVTruthy('API3_TIME_SKEW_TOLERANCE', apiConst.API3_TIME_SKEW_TOLERANCE); self.setENVTruthy('API3_DEDUP_FALLBACK_ENABLED', apiConst.API3_DEDUP_FALLBACK_ENABLED); self.setENVTruthy('API3_CREATED_AT_FALLBACK_ENABLED', apiConst.API3_CREATED_AT_FALLBACK_ENABLED); self.setENVTruthy('API3_MAX_LIMIT', apiConst.API3_MAX_LIMIT); @@ -104,6 +104,10 @@ function configure (env, ctx) { res.redirect(307, '../../../api3-docs'); }); + app.use((req, res) => { + opTools.sendJSONStatus(res, apiConst.HTTP.NOT_FOUND, apiConst.MSG.HTTP_404_BAD_OPERATION); + }) + ctx.storageSocket = new StorageSocket(app, env, ctx); return app; diff --git a/lib/api3/security.js b/lib/api3/security.js index 33099d88f12..7adeefbc76b 100644 --- a/lib/api3/security.js +++ b/lib/api3/security.js @@ -1,43 +1,14 @@ 'use strict'; -const moment = require('moment') - , apiConst = require('./const.json') +const apiConst = require('./const.json') , _ = require('lodash') , shiroTrie = require('shiro-trie') - , dateTools = require('./shared/dateTools') , opTools = require('./shared/operationTools') ; -/** - * Check if Date header in HTTP request (or 'now' query parameter) is present and valid (with error response sending) - */ -function checkDateHeader (opCtx) { - - const { app, req, res } = opCtx; - - let dateString = req.header('Date'); - if (!dateString) { - dateString = req.query.now; - } - - if (!dateString) { - return opTools.sendJSONStatus(res, apiConst.HTTP.UNAUTHORIZED, apiConst.MSG.HTTP_401_MISSING_DATE); - } - - let dateMoment = dateTools.parseToMoment(dateString); - if (!dateMoment) { - return opTools.sendJSONStatus(res, apiConst.HTTP.UNAUTHORIZED, apiConst.MSG.HTTP_401_BAD_DATE); - } - - let nowMoment = moment(new Date()); - let diffMinutes = moment.duration(nowMoment.diff(dateMoment)).asMinutes(); - - if (Math.abs(diffMinutes) > app.get('API3_TIME_SKEW_TOLERANCE')) { - return opTools.sendJSONStatus(res, apiConst.HTTP.UNAUTHORIZED, apiConst.MSG.HTTP_401_DATE_OUT_OF_TOLERANCE); - } - - return true; +function getRemoteIP (req) { + return req.headers['x-forwarded-for'] || req.connection.remoteAddress; } @@ -52,23 +23,13 @@ function authenticate (opCtx) { return resolve({ shiros: [ adminShiro ] }); } - if (req.protocol !== 'https') { - return reject( - opTools.sendJSONStatus(res, apiConst.HTTP.FORBIDDEN, apiConst.MSG.HTTP_403_NOT_USING_HTTPS)); - } - - const checkDateResult = checkDateHeader(opCtx); - if (checkDateResult !== true) { - return checkDateResult; - } - let token = ctx.authorization.extractToken(req); if (!token) { return reject( opTools.sendJSONStatus(res, apiConst.HTTP.UNAUTHORIZED, apiConst.MSG.HTTP_401_MISSING_OR_BAD_TOKEN)); } - ctx.authorization.resolve({ token }, function resolveFinish (err, result) { + ctx.authorization.resolve({ token, ip: getRemoteIP(req) }, function resolveFinish (err, result) { if (err) { return reject( opTools.sendJSONStatus(res, apiConst.HTTP.UNAUTHORIZED, apiConst.MSG.HTTP_401_BAD_TOKEN)); @@ -119,4 +80,4 @@ module.exports = { authenticate, checkPermission, demandPermission -}; \ No newline at end of file +}; diff --git a/lib/api3/shared/operationTools.js b/lib/api3/shared/operationTools.js index 1955b9c2068..6b2e62e12e7 100644 --- a/lib/api3/shared/operationTools.js +++ b/lib/api3/shared/operationTools.js @@ -6,18 +6,41 @@ const apiConst = require('../const.json') , uuidNamespace = [...Buffer.from("NightscoutRocks!", "ascii")] // official namespace for NS :-) ; + +function sendJSON ({ res, result, status, fields }) { + + const json = { + status: status || apiConst.HTTP.OK, + result: result + }; + + if (result) { + json.result = result + } + + if (fields) { + Object.assign(json, fields); + } + + res.status(json.status).json(json); +} + + function sendJSONStatus (res, status, title, description, warning) { const json = { - status: status, - message: title, - description: description + status: status }; + if (title) { json.message = title } + + if (description) { json.description = description } + // Add optional warning message. if (warning) { json.warning = warning; } - res.status(status).json(json); + res.status(status) + .json(json); return title; } @@ -104,8 +127,9 @@ function resolveIdentifier (doc) { module.exports = { + sendJSON, sendJSONStatus, validateCommon, calculateIdentifier, resolveIdentifier -}; \ No newline at end of file +}; diff --git a/lib/api3/shared/renderer.js b/lib/api3/shared/renderer.js index a3588819a72..842785709b6 100644 --- a/lib/api3/shared/renderer.js +++ b/lib/api3/shared/renderer.js @@ -53,7 +53,7 @@ function extension2accept (req, res, next) { */ function render (res, data) { res.format({ - 'json': () => res.send(data), + 'json': () => renderJson(res, data), 'csv': () => renderCsv(res, data), 'xml': () => renderXml(res, data), 'default': () => @@ -62,6 +62,19 @@ function render (res, data) { } +/** + * Format data to output as JSON + * @param {Object} res + * @param {any} data + */ +function renderJson (res, data) { + res.send({ + status: apiConst.HTTP.OK, + result: data + }); +} + + /** * Format data to output as .csv * @param {Object} res @@ -96,4 +109,4 @@ function renderXml (res, data) { module.exports = { extension2accept, render -}; \ No newline at end of file +}; diff --git a/lib/api3/specific/lastModified.js b/lib/api3/specific/lastModified.js index b27ecaca852..f550d56f89c 100644 --- a/lib/api3/specific/lastModified.js +++ b/lib/api3/specific/lastModified.js @@ -38,7 +38,7 @@ function configure (app, ctx, env) { return { colName: col.colName, lastModified: result }; } - + async function collectionsAsync (auth) { const cols = app.get('collections') @@ -77,7 +77,7 @@ function configure (app, ctx, env) { info.collections = await collectionsAsync(auth); - res.json(info); + opTools.sendJSON({ res, result: info }); } diff --git a/lib/api3/specific/status.js b/lib/api3/specific/status.js index 7b70b24ab71..5ec28929fbe 100644 --- a/lib/api3/specific/status.js +++ b/lib/api3/specific/status.js @@ -47,7 +47,7 @@ function configure (app, ctx, env) { } } - res.json(info); + opTools.sendJSON({ res, result: info }); } diff --git a/lib/api3/specific/version.js b/lib/api3/specific/version.js index 25392fe99d7..ba7685fe486 100644 --- a/lib/api3/specific/version.js +++ b/lib/api3/specific/version.js @@ -13,7 +13,7 @@ function configure (app) { try { const versionInfo = await storageTools.getVersionInfo(app); - res.json(versionInfo); + opTools.sendJSON({ res, result: versionInfo }); } catch(error) { console.error(error); diff --git a/lib/api3/storage/mongoCachedCollection/index.js b/lib/api3/storage/mongoCachedCollection/index.js new file mode 100644 index 00000000000..b2fd8f21a55 --- /dev/null +++ b/lib/api3/storage/mongoCachedCollection/index.js @@ -0,0 +1,147 @@ +'use strict'; + +const _ = require('lodash') + +/** + * Storage implementation which wraps mongo baseStorage with caching + * @param {Object} ctx + * @param {Object} env + * @param {string} colName - name of the collection in mongo database + * @param {Object} baseStorage - wrapped mongo storage implementation + */ +function MongoCachedCollection (ctx, env, colName, baseStorage) { + + const self = this; + + self.colName = colName; + + self.identifyingFilter = baseStorage.identifyingFilter; + + self.findOne = (...args) => baseStorage.findOne(...args); + + self.findOneFilter = (...args) => baseStorage.findOneFilter(...args); + + self.findMany = (...args) => baseStorage.findMany(...args); + + + self.insertOne = async (doc) => { + const result = await baseStorage.insertOne(doc, { normalize: false }); + + if (cacheSupported()) { + updateInCache([doc]); + } + + if (doc._id) { + delete doc._id; + } + return result; + } + + + self.replaceOne = async (identifier, doc) => { + const result = await baseStorage.replaceOne(identifier, doc); + + if (cacheSupported()) { + const rawDocs = await baseStorage.findOne(identifier, null, { normalize: false }) + updateInCache([rawDocs[0]]) + } + + return result; + } + + + self.updateOne = async (identifier, setFields) => { + const result = await baseStorage.updateOne(identifier, setFields); + + if (cacheSupported()) { + const rawDocs = await baseStorage.findOne(identifier, null, { normalize: false }) + + if (rawDocs[0].isValid === false) { + deleteInCache(rawDocs) + } + else { + updateInCache([rawDocs[0]]) + } + } + + return result; + } + + self.deleteOne = async (identifier) => { + let invalidateDocs + if (cacheSupported()) { + invalidateDocs = await baseStorage.findOne(identifier, { _id: 1 }, { normalize: false }) + } + + const result = await baseStorage.deleteOne(identifier); + + if (cacheSupported()) { + deleteInCache(invalidateDocs) + } + + return result; + } + + self.deleteManyOr = async (filter) => { + let invalidateDocs + if (cacheSupported()) { + invalidateDocs = await baseStorage.findMany({ filter, + limit: 1000, + skip: 0, + projection: { _id: 1 }, + options: { normalize: false } }); + } + + const result = await baseStorage.deleteManyOr(filter); + + if (cacheSupported()) { + deleteInCache(invalidateDocs) + } + + return result; + } + + self.version = (...args) => baseStorage.version(...args); + + self.getLastModified = (...args) => baseStorage.getLastModified(...args); + + function cacheSupported () { + return ctx.cache + && ctx.cache[colName] + && _.isArray(ctx.cache[colName]); + } + + function updateInCache (doc) { + if (doc && doc.isValid === false) { + deleteInCache([doc._id]) + } + else { + ctx.bus.emit('data-update', { + type: colName + , op: 'update' + , changes: doc + }); + } + } + + function deleteInCache (docs) { + let changes + if (_.isArray(docs)) { + if (docs.length === 0) { + return + } + else if (docs.length === 1 && docs[0]._id) { + const _id = docs[0]._id.toString() + changes = [ _id ] + } + } + + ctx.bus.emit('data-update', { + type: colName + , op: 'remove' + , changes + }); + } +} + +module.exports = MongoCachedCollection; diff --git a/lib/api3/storage/mongoCollection/find.js b/lib/api3/storage/mongoCollection/find.js index bc399dbce98..013d008ec98 100644 --- a/lib/api3/storage/mongoCollection/find.js +++ b/lib/api3/storage/mongoCollection/find.js @@ -10,8 +10,9 @@ const utils = require('./utils') * @param {Object} col * @param {string} identifier * @param {Object} projection + * @param {Object} options */ -function findOne (col, identifier, projection) { +function findOne (col, identifier, projection, options) { return new Promise(function (resolve, reject) { @@ -25,7 +26,9 @@ function findOne (col, identifier, projection) { if (err) { reject(err); } else { - _.each(result, utils.normalizeDoc); + if (!options || options.normalize !== false) { + _.each(result, utils.normalizeDoc); + } resolve(result); } }); @@ -38,8 +41,9 @@ function findOne (col, identifier, projection) { * @param {Object} col * @param {Object} filter specific filter * @param {Object} projection + * @param {Object} options */ -function findOneFilter (col, filter, projection) { +function findOneFilter (col, filter, projection, options) { return new Promise(function (resolve, reject) { @@ -51,7 +55,9 @@ function findOneFilter (col, filter, projection) { if (err) { reject(err); } else { - _.each(result, utils.normalizeDoc); + if (!options || options.normalize !== false) { + _.each(result, utils.normalizeDoc); + } resolve(result); } }); @@ -62,23 +68,25 @@ function findOneFilter (col, filter, projection) { /** * Find many documents matching the filtering criteria */ -function findMany (col, filterDef, sort, limit, skip, projection, onlyValid, logicalOperator = 'and') { - +function findMany (col, args) { + const logicalOperator = args.logicalOperator || 'and'; return new Promise(function (resolve, reject) { - const filter = utils.parseFilter(filterDef, logicalOperator, onlyValid); + const filter = utils.parseFilter(args.filter, logicalOperator, args.onlyValid); col.find(filter) - .sort(sort) - .limit(limit) - .skip(skip) - .project(projection) + .sort(args.sort) + .limit(args.limit) + .skip(args.skip) + .project(args.projection) .toArray(function mongoDone (err, result) { if (err) { reject(err); } else { - _.each(result, utils.normalizeDoc); + if (!args.options || args.options.normalize !== false) { + _.each(result, utils.normalizeDoc); + } resolve(result); } }); @@ -90,4 +98,4 @@ module.exports = { findOne, findOneFilter, findMany -}; \ No newline at end of file +}; diff --git a/lib/api3/storage/mongoCollection/index.js b/lib/api3/storage/mongoCollection/index.js index e6ad0a6cf8b..ef041ce9c1f 100644 --- a/lib/api3/storage/mongoCollection/index.js +++ b/lib/api3/storage/mongoCollection/index.js @@ -18,7 +18,7 @@ function MongoCollection (ctx, env, colName) { self.col = ctx.store.collection(colName); - ctx.store.ensureIndexes(self.col, [ 'identifier', + ctx.store.ensureIndexes(self.col, [ 'identifier', 'srvModified', 'isValid' ]); @@ -64,10 +64,10 @@ function MongoCollection (ctx, env, colName) { /** - * Get timestamp (e.g. srvModified) of the last modified document + * Get timestamp (e.g. srvModified) of the last modified document */ self.getLastModified = function getLastModified (fieldName) { - + return new Promise(function (resolve, reject) { self.col.find() @@ -87,4 +87,4 @@ function MongoCollection (ctx, env, colName) { } } -module.exports = MongoCollection; \ No newline at end of file +module.exports = MongoCollection; diff --git a/lib/api3/storage/mongoCollection/modify.js b/lib/api3/storage/mongoCollection/modify.js index 6552fe40e8c..7183f1c971a 100644 --- a/lib/api3/storage/mongoCollection/modify.js +++ b/lib/api3/storage/mongoCollection/modify.js @@ -1,14 +1,15 @@ 'use strict'; -const utils = require('./utils'); - +const utils = require('./utils') + ; /** * Insert single document * @param {Object} col * @param {Object} doc + * @param {Object} options */ -function insertOne (col, doc) { +function insertOne (col, doc, options) { return new Promise(function (resolve, reject) { @@ -18,7 +19,10 @@ function insertOne (col, doc) { reject(err); } else { const identifier = doc.identifier || result.insertedId.toString(); - delete doc._id; + + if (!options || options.normalize !== false) { + delete doc._id; + } resolve(identifier); } }); @@ -38,7 +42,7 @@ function replaceOne (col, identifier, doc) { const filter = utils.filterForOne(identifier); - col.replaceOne(filter, doc, { }, function mongoDone(err, result) { + col.replaceOne(filter, doc, { upsert: true }, function mongoDone(err, result) { if (err) { reject(err); } else { @@ -120,4 +124,4 @@ module.exports = { updateOne, deleteOne, deleteManyOr -}; \ No newline at end of file +}; diff --git a/lib/api3/storage/mongoCollection/utils.js b/lib/api3/storage/mongoCollection/utils.js index 1b2ab5610d7..a2f7b16520c 100644 --- a/lib/api3/storage/mongoCollection/utils.js +++ b/lib/api3/storage/mongoCollection/utils.js @@ -26,7 +26,6 @@ function normalizeDoc (doc) { * @param {bool} onlyValid */ function parseFilter (filterDef, logicalOperator, onlyValid) { - let filter = { }; if (!filterDef) return filter; @@ -175,4 +174,4 @@ module.exports = { parseFilter, filterForOne, identifyingFilter -}; \ No newline at end of file +}; diff --git a/lib/api3/swagger.json b/lib/api3/swagger.json index b20bb0e6761..67a54d97d95 100644 --- a/lib/api3/swagger.json +++ b/lib/api3/swagger.json @@ -2,7 +2,7 @@ "openapi": "3.0.0", "info": { "title": "Nightscout API", - "description": "Nightscout API v3 is a component of cgm-remote-monitor project. It aims to provide lightweight, secured and HTTP REST compliant interface for your T1D treatment data exchange.\n\nAPI v3 uses these environment variables, among other things:\n- Security switch (optional, default = `true`)
API3_SECURITY_ENABLE=true
You can turn the whole security mechanism off, e.g. for debugging or development purposes, but this should never be set to false in production.\n\n- Number of minutes of acceptable time skew between client's and server's clock (optional, default = 5)
API3_TIME_SKEW_TOLERANCE=5
This security parameter is used for preventing anti-replay attacks, specifically when checking the time from `Date` header.\n\n- Maximum limit count of documents retrieved from single query
API3_MAX_LIMIT=1000
\n\n- Autopruning of obsolete documents (optional, default is only `DEVICESTATUS`=60)
API3_AUTOPRUNE_DEVICESTATUS=60\nAPI3_AUTOPRUNE_ENTRIES=365\nAPI3_AUTOPRUNE_TREATMENTS=120 
You can specify for which collections autopruning will be activated and length of retention period in days, e.g. \"Hold 60 days of devicestatus, automatically delete older documents, hold 365 days of treatments and entries, automatically delete older documents.\"\n\n- Fallback deduplication switch (optional, default = true)
API3_DEDUP_FALLBACK_ENABLED=true
API3 uses the `identifier` field for document identification and mutual distinction within a single collection. There is automatic deduplication implemented matching the equal `identifier` field. E.g. `CREATE` operation for document having the same `identifier` as another one existing in the database is automatically transformed into `UPDATE` operation of the document found in the database.\nDocuments not created via API v3 usually does not have any `identifier` field, but we would like to have some form of deduplication for them, too. This fallback deduplication is turned on by having set `API3_DEDUP_FALLBACK_ENABLED` to `true`. When searching the collection in database, the document is found to be a duplicate only when either he has equal `identifier` or he has no `identifier` and meets:
`devicestatus` collection: equal combination of `created_at` and `device`\n`entries` collection:      equal combination of `date` and `type`\n`food` collection:         equal `created_at`\n`profile` collection:      equal `created_at`\n`treatments` collection:   equal combination of `created_at` and `eventType` 
\n\n- Fallback switch for adding `created_at` field along the `date` field (optional, default = true)
API3_CREATED_AT_FALLBACK_ENABLED=true
Standard APIv3 document model uses only `date` field for storing a timestamp of the event recorded by the document. But there is a fallback option to fill `created_at` field as well automatically on each insert/update, just to keep all older components working.", + "description": "Nightscout API v3 is a component of cgm-remote-monitor project. It aims to provide lightweight, secured and HTTP REST compliant interface for your T1D treatment data exchange.\n\nAPI v3 uses these environment variables, among other things:\n- Security switch (optional, default = `true`)
API3_SECURITY_ENABLE=true
You can turn the whole security mechanism off, e.g. for debugging or development purposes, but this should never be set to false in production.\n\n- Maximum limit count of documents retrieved from single query
API3_MAX_LIMIT=1000
\n\n- Autopruning of obsolete documents (optional, default is only `DEVICESTATUS`=60)
API3_AUTOPRUNE_DEVICESTATUS=60\nAPI3_AUTOPRUNE_ENTRIES=365\nAPI3_AUTOPRUNE_TREATMENTS=120 
You can specify for which collections autopruning will be activated and length of retention period in days, e.g. \"Hold 60 days of devicestatus, automatically delete older documents, hold 365 days of treatments and entries, automatically delete older documents.\"\n\n- Fallback deduplication switch (optional, default = true)
API3_DEDUP_FALLBACK_ENABLED=true
API3 uses the `identifier` field for document identification and mutual distinction within a single collection. There is automatic deduplication implemented matching the equal `identifier` field. E.g. `CREATE` operation for document having the same `identifier` as another one existing in the database is automatically transformed into `UPDATE` operation of the document found in the database.\nDocuments not created via API v3 usually does not have any `identifier` field, but we would like to have some form of deduplication for them, too. This fallback deduplication is turned on by having set `API3_DEDUP_FALLBACK_ENABLED` to `true`. When searching the collection in database, the document is found to be a duplicate only when either he has equal `identifier` or he has no `identifier` and meets:
`devicestatus` collection: equal combination of `created_at` and `device`\n`entries` collection:      equal combination of `date` and `type`\n`food` collection:         equal `created_at`\n`profile` collection:      equal `created_at`\n`treatments` collection:   equal combination of `created_at` and `eventType` 
\n\n- Fallback switch for adding `created_at` field along the `date` field (optional, default = true)
API3_CREATED_AT_FALLBACK_ENABLED=true
Standard APIv3 document model uses only `date` field for storing a timestamp of the event recorded by the document. But there is a fallback option to fill `created_at` field as well automatically on each insert/update, just to keep all older components working.", "contact": { "name": "NS development discussion channel", "url": "https://gitter.im/nightscout/public" @@ -11,7 +11,7 @@ "name": "AGPL 3", "url": "https://www.gnu.org/licenses/agpl.txt" }, - "version": "3.0.1" + "version": "3.0.3" }, "servers": [ { @@ -35,7 +35,7 @@ "generic" ], "summary": "SEARCH: Search documents from the collection", - "description": "General search operation through documents of one collection, matching the specified filtering criteria. You can apply:\n\n1) filtering - combining any number of filtering parameters\n\n2) ordering - using `sort` or `sort$desc` parameter\n\n3) paging - using `limit` and `skip` parameters\n\nWhen there is no document matching the filtering criteria, HTTP status 204 is returned with empty response content. Otherwise HTTP 200 code is returned with JSON array of matching documents as a response content.\n\nThis operation requires `read` permission for the API and the collection (e.g. `*:*:read`, `api:*:read`, `*:treatments:read`, `api:treatments:read`).\n\nThe only exception is the `settings` collection which requires `admin` permission (`api:settings:admin`), because the settings of each application should be isolated and kept secret. You need to know the concrete identifier to access the app's settings.", + "description": "General search operation through documents of one collection, matching the specified filtering criteria. You can apply:\n\n1) filtering - combining any number of filtering parameters\n\n2) ordering - using `sort` or `sort$desc` parameter\n\n3) paging - using `limit` and `skip` parameters\n\nIf successful, HTTP 200 code is returned with JSON array of matching documents as a response content (it may be empty).\n\nThis operation requires `read` permission for the API and the collection (e.g. `*:*:read`, `api:*:read`, `*:treatments:read`, `api:treatments:read`).\n\nThe only exception is the `settings` collection which requires `admin` permission (`api:settings:admin`), because the settings of each application should be isolated and kept secret. You need to know the concrete identifier to access the app's settings.", "operationId": "SEARCH", "parameters": [ { @@ -49,29 +49,6 @@ "$ref": "#/components/schemas/paramCollection" } }, - { - "name": "Date", - "in": "header", - "description": "Timestamp (defined by client's clock) when the HTTP request was constructed on client. This mandatory header serves as an anti-replay precaution. After a period of time (specified by `API3_TIME_SKEW_TOLERANCE`) the message won't be valid any more and it will be denied with HTTP 401 Unauthorized code. This can be set alternatively in `now` query parameter.\nExample:\n\n
Date: Wed, 17 Oct 2018 05:13:00 GMT
", - "required": false, - "style": "simple", - "explode": false, - "schema": { - "type": "string" - } - }, - { - "name": "now", - "in": "query", - "description": "Timestamp (defined by client's clock) when the HTTP request was constructed on client. This mandatory parameter serves as an anti-replay precaution. After a period of time (specified by `API3_TIME_SKEW_TOLERANCE`) the message won't be valid any more and it will be denied with HTTP 401 Unauthorized code. This can be set alternatively in `Date` header.\n\nExample:\n\n
now=1525383610088
", - "required": false, - "style": "form", - "explode": true, - "schema": { - "type": "integer", - "format": "int64" - } - }, { "name": "token", "in": "query", @@ -172,7 +149,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentArray" + "$ref": "#/components/schemas/inline_response_200" } }, "text/csv": { @@ -187,28 +164,63 @@ } } }, - "204": { - "description": "Successful operation - no documents matching the filtering criteria" - }, "400": { - "description": "The request is malformed. There may be some required parameters missing or there are unrecognized parameters present." + "description": "The request is malformed. There may be some required parameters missing or there are unrecognized parameters present.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400" + } + } + } }, "401": { - "description": "The request was not successfully authenticated using access token or JWT, or the request has missing `Date` header or it contains an expired timestamp, so that the request cannot continue due to the security policy." + "description": "The request was not successfully authenticated using access token or JWT, so that the request cannot continue due to the security policy.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_401" + } + } + } }, "403": { - "description": "Insecure HTTP scheme used or the request has been successfully authenticated, but the security subject is not authorized for the operation." + "description": "Insecure HTTP scheme used or the request has been successfully authenticated, but the security subject is not authorized for the operation.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_403" + } + } + } }, "404": { - "description": "The collection or document specified was not found." + "description": "The collection or document specified was not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_404" + } + } + } }, "406": { - "description": "The requested content type (in `Accept` header) is not supported." + "description": "The requested content type (in `Accept` header) is not supported.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_406" + } + } + } } }, "security": [ { - "apiKeyAuth": [] + "accessToken": [] + }, + { + "jwtoken": [] } ] }, @@ -217,7 +229,7 @@ "generic" ], "summary": "CREATE: Inserts a new document into the collection", - "description": "Using this operation you can insert new documents into collection. Normally the operation ends with 201 HTTP status code, `Last-Modified` and `Location` headers specified and with an empty response content. `identifier` can be parsed from the `Location` response header.\n\nWhen the document to post is marked as a duplicate (using rules described at `API3_DEDUP_FALLBACK_ENABLED` switch), the update operation takes place instead of inserting. In this case the original document in the collection is found and it gets updated by the actual operation POST body. Finally the operation ends with 204 HTTP status code along with `Last-Modified` and correct `Location` headers.\n\nThis operation provides autopruning of the collection (if autopruning is enabled).\n\nThis operation requires `create` (and/or `update` for deduplication) permission for the API and the collection (e.g. `api:treatments:create` and `api:treatments:update`)", + "description": "Using this operation you can insert new documents into collection. Normally the operation ends with 201 HTTP status code, `Last-Modified` and `Location` headers specified. `identifier` is included in response body or it can be parsed from the `Location` response header.\n\nWhen the document to post is marked as a duplicate (using rules described at `API3_DEDUP_FALLBACK_ENABLED` switch), the update operation takes place instead of inserting. In this case the original document in the collection is found and it gets updated by the actual operation POST body. Finally the operation ends with 200 HTTP status code along with `Last-Modified` and correct `Location` headers. The response body then includes `isDeduplication`=`true` and `deduplicatedIdentifier` fields.\n\nThis operation provides autopruning of the collection (if autopruning is enabled).\n\nThis operation requires `create` (and/or `update` for deduplication) permission for the API and the collection (e.g. `api:treatments:create` and `api:treatments:update`)", "parameters": [ { "name": "collection", @@ -230,29 +242,6 @@ "$ref": "#/components/schemas/paramCollection" } }, - { - "name": "Date", - "in": "header", - "description": "Timestamp (defined by client's clock) when the HTTP request was constructed on client. This mandatory header serves as an anti-replay precaution. After a period of time (specified by `API3_TIME_SKEW_TOLERANCE`) the message won't be valid any more and it will be denied with HTTP 401 Unauthorized code. This can be set alternatively in `now` query parameter.\nExample:\n\n
Date: Wed, 17 Oct 2018 05:13:00 GMT
", - "required": false, - "style": "simple", - "explode": false, - "schema": { - "type": "string" - } - }, - { - "name": "now", - "in": "query", - "description": "Timestamp (defined by client's clock) when the HTTP request was constructed on client. This mandatory parameter serves as an anti-replay precaution. After a period of time (specified by `API3_TIME_SKEW_TOLERANCE`) the message won't be valid any more and it will be denied with HTTP 401 Unauthorized code. This can be set alternatively in `Date` header.\n\nExample:\n\n
now=1525383610088
", - "required": false, - "style": "form", - "explode": true, - "schema": { - "type": "integer", - "format": "int64" - } - }, { "name": "token", "in": "query", @@ -277,8 +266,8 @@ "required": true }, "responses": { - "201": { - "description": "Successfully created a new document in collection", + "200": { + "description": "Successfully updated a duplicate document in the collection", "headers": { "Last-Modified": { "$ref": "#/components/schemas/headerLastModified" @@ -286,10 +275,17 @@ "Location": { "$ref": "#/components/schemas/headerLocation" } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_1" + } + } } }, - "204": { - "description": "Successfully finished operation", + "201": { + "description": "Successfully created a new document in collection", "headers": { "Last-Modified": { "$ref": "#/components/schemas/headerLastModified" @@ -297,27 +293,72 @@ "Location": { "$ref": "#/components/schemas/headerLocation" } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_201" + } + } } }, "400": { - "description": "The request is malformed. There may be some required parameters missing or there are unrecognized parameters present." + "description": "The request is malformed. There may be some required parameters missing or there are unrecognized parameters present.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400" + } + } + } }, "401": { - "description": "The request was not successfully authenticated using access token or JWT, or the request has missing `Date` header or it contains an expired timestamp, so that the request cannot continue due to the security policy." + "description": "The request was not successfully authenticated using access token or JWT, so that the request cannot continue due to the security policy.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_401" + } + } + } }, "403": { - "description": "Insecure HTTP scheme used or the request has been successfully authenticated, but the security subject is not authorized for the operation." + "description": "Insecure HTTP scheme used or the request has been successfully authenticated, but the security subject is not authorized for the operation.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_403" + } + } + } }, "404": { - "description": "The collection or document specified was not found." + "description": "The collection or document specified was not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_404" + } + } + } }, "422": { - "description": "The client request is well formed but a server validation error occured. Eg. when trying to modify or delete a read-only document (having `isReadOnly=true`)." + "description": "The client request is well formed but a server validation error occured. Eg. when trying to modify or delete a read-only document (having `isReadOnly=true`).", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_422" + } + } + } } }, "security": [ { - "apiKeyAuth": [] + "accessToken": [] + }, + { + "jwtoken": [] } ] } @@ -328,7 +369,7 @@ "generic" ], "summary": "READ: Retrieves a single document from the collection", - "description": "Basically this operation looks for a document matching the `identifier` field returning 200 or 404 HTTP status code.\n\nIf the document has been found in the collection but it had already been deleted, 410 HTTP status code with empty response content is to be returned.\n\nWhen `If-Modified-Since` header is used and its value is greater than the timestamp of the document in the collection, 304 HTTP status code with empty response content is returned. It means that the document has not been modified on server since the last retrieval to client side. With `If-Modified-Since` header and less or equal timestamp `srvModified` a normal 200 HTTP status with full response is returned.\n\nThis operation requires `read` permission for the API and the collection (e.g. `api:treatments:read`)", + "description": "Basically this operation looks for a document matching the `identifier` field returning 200 or 404 HTTP status code.\n\nIf the document has been found in the collection but it had already been deleted, 410 HTTP status code is to be returned.\n\nWhen `If-Modified-Since` header is used and its value is greater than the timestamp of the document in the collection, 304 HTTP status code with empty response content is returned. It means that the document has not been modified on server since the last retrieval to client side. With `If-Modified-Since` header and less or equal timestamp `srvModified` a normal 200 HTTP status with full response is returned.\n\nThis operation requires `read` permission for the API and the collection (e.g. `api:treatments:read`)", "parameters": [ { "name": "collection", @@ -352,29 +393,6 @@ "$ref": "#/components/schemas/paramIdentifier" } }, - { - "name": "Date", - "in": "header", - "description": "Timestamp (defined by client's clock) when the HTTP request was constructed on client. This mandatory header serves as an anti-replay precaution. After a period of time (specified by `API3_TIME_SKEW_TOLERANCE`) the message won't be valid any more and it will be denied with HTTP 401 Unauthorized code. This can be set alternatively in `now` query parameter.\nExample:\n\n
Date: Wed, 17 Oct 2018 05:13:00 GMT
", - "required": false, - "style": "simple", - "explode": false, - "schema": { - "type": "string" - } - }, - { - "name": "now", - "in": "query", - "description": "Timestamp (defined by client's clock) when the HTTP request was constructed on client. This mandatory parameter serves as an anti-replay precaution. After a period of time (specified by `API3_TIME_SKEW_TOLERANCE`) the message won't be valid any more and it will be denied with HTTP 401 Unauthorized code. This can be set alternatively in `Date` header.\n\nExample:\n\n
now=1525383610088
", - "required": false, - "style": "form", - "explode": true, - "schema": { - "type": "integer", - "format": "int64" - } - }, { "name": "token", "in": "query", @@ -431,7 +449,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Document" + "$ref": "#/components/schemas/inline_response_200_2" } }, "text/csv": { @@ -455,24 +473,62 @@ } }, "401": { - "description": "The request was not successfully authenticated using access token or JWT, or the request has missing `Date` header or it contains an expired timestamp, so that the request cannot continue due to the security policy." + "description": "The request was not successfully authenticated using access token or JWT, so that the request cannot continue due to the security policy.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_401" + } + } + } }, "403": { - "description": "Insecure HTTP scheme used or the request has been successfully authenticated, but the security subject is not authorized for the operation." + "description": "Insecure HTTP scheme used or the request has been successfully authenticated, but the security subject is not authorized for the operation.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_403" + } + } + } }, "404": { - "description": "The collection or document specified was not found." + "description": "The collection or document specified was not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_404" + } + } + } }, "406": { - "description": "The requested content type (in `Accept` header) is not supported." + "description": "The requested content type (in `Accept` header) is not supported.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_406" + } + } + } }, "410": { - "description": "The requested document has already been deleted." + "description": "The requested document has already been deleted.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_410" + } + } + } } }, "security": [ { - "apiKeyAuth": [] + "accessToken": [] + }, + { + "jwtoken": [] } ] }, @@ -481,7 +537,7 @@ "generic" ], "summary": "UPDATE: Updates a document in the collection", - "description": "Normally the document with the matching `identifier` will be replaced in the collection by the whole JSON request body and 204 HTTP status code will be returned with empty response body.\n\nIf the document has been found in the collection but it had already been deleted, 410 HTTP status code with empty response content is to be returned.\n\nWhen no document with `identifier` has been found in the collection, then an insert operation takes place instead of updating. Finally 201 HTTP status code is returned with only `Last-Modified` header (`identifier` is already known from the path parameter).\n\nYou can also specify `If-Unmodified-Since` request header including your timestamp of document's last modification. If the document has been modified by somebody else on the server afterwards (and you do not know about it), the 412 HTTP status code is returned cancelling the update operation. You can use this feature to prevent race condition problems.\n\nThis operation provides autopruning of the collection (if autopruning is enabled).\n\nThis operation requires `update` (and/or `create`) permission for the API and the collection (e.g. `api:treatments:update` and `api:treatments:create`)", + "description": "Normally the document with the matching `identifier` will be replaced in the collection by the whole JSON request body and 200 HTTP status code will be returned.\n\nIf the document has been found in the collection but it had already been deleted, 410 HTTP status code is to be returned.\n\nWhen no document with `identifier` has been found in the collection, then an insert operation takes place instead of updating. Finally 201 HTTP status code is returned with only `Last-Modified` header (`identifier` is already known from the path parameter).\n\nYou can also specify `If-Unmodified-Since` request header including your timestamp of document's last modification. If the document has been modified by somebody else on the server afterwards (and you do not know about it), the 412 HTTP status code is returned cancelling the update operation. You can use this feature to prevent race condition problems.\n\nThis operation provides autopruning of the collection (if autopruning is enabled).\n\nThis operation requires `update` (and/or `create`) permission for the API and the collection (e.g. `api:treatments:update` and `api:treatments:create`)", "parameters": [ { "name": "collection", @@ -505,29 +561,6 @@ "$ref": "#/components/schemas/paramIdentifier" } }, - { - "name": "Date", - "in": "header", - "description": "Timestamp (defined by client's clock) when the HTTP request was constructed on client. This mandatory header serves as an anti-replay precaution. After a period of time (specified by `API3_TIME_SKEW_TOLERANCE`) the message won't be valid any more and it will be denied with HTTP 401 Unauthorized code. This can be set alternatively in `now` query parameter.\nExample:\n\n
Date: Wed, 17 Oct 2018 05:13:00 GMT
", - "required": false, - "style": "simple", - "explode": false, - "schema": { - "type": "string" - } - }, - { - "name": "now", - "in": "query", - "description": "Timestamp (defined by client's clock) when the HTTP request was constructed on client. This mandatory parameter serves as an anti-replay precaution. After a period of time (specified by `API3_TIME_SKEW_TOLERANCE`) the message won't be valid any more and it will be denied with HTTP 401 Unauthorized code. This can be set alternatively in `Date` header.\n\nExample:\n\n
now=1525383610088
", - "required": false, - "style": "form", - "explode": true, - "schema": { - "type": "integer", - "format": "int64" - } - }, { "name": "token", "in": "query", @@ -563,50 +596,108 @@ "required": true }, "responses": { - "201": { - "description": "Successfully created a new document in collection", - "headers": { - "Last-Modified": { - "$ref": "#/components/schemas/headerLastModified" + "200": { + "description": "The request was successfully processed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_3" + } } } }, - "204": { - "description": "Successfully finished operation", + "201": { + "description": "Successfully created a new document in collection", "headers": { "Last-Modified": { "$ref": "#/components/schemas/headerLastModified" - }, - "Location": { - "$ref": "#/components/schemas/headerLocation" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_201" + } } } }, "400": { - "description": "The request is malformed. There may be some required parameters missing or there are unrecognized parameters present." + "description": "The request is malformed. There may be some required parameters missing or there are unrecognized parameters present.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400" + } + } + } }, "401": { - "description": "The request was not successfully authenticated using access token or JWT, or the request has missing `Date` header or it contains an expired timestamp, so that the request cannot continue due to the security policy." + "description": "The request was not successfully authenticated using access token or JWT, so that the request cannot continue due to the security policy.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_401" + } + } + } }, "403": { - "description": "Insecure HTTP scheme used or the request has been successfully authenticated, but the security subject is not authorized for the operation." + "description": "Insecure HTTP scheme used or the request has been successfully authenticated, but the security subject is not authorized for the operation.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_403" + } + } + } }, "404": { - "description": "The collection or document specified was not found." + "description": "The collection or document specified was not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_404" + } + } + } }, "410": { - "description": "The requested document has already been deleted." + "description": "The requested document has already been deleted.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_410" + } + } + } }, "412": { - "description": "The document has already been modified on the server since specified timestamp (in If-Unmodified-Since header)." + "description": "The document has already been modified on the server since specified timestamp (in If-Unmodified-Since header).", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_412" + } + } + } }, "422": { - "description": "The client request is well formed but a server validation error occured. Eg. when trying to modify or delete a read-only document (having `isReadOnly=true`)." + "description": "The client request is well formed but a server validation error occured. Eg. when trying to modify or delete a read-only document (having `isReadOnly=true`).", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_422" + } + } + } } }, "security": [ { - "apiKeyAuth": [] + "accessToken": [] + }, + { + "jwtoken": [] } ] }, @@ -639,29 +730,6 @@ "$ref": "#/components/schemas/paramIdentifier" } }, - { - "name": "Date", - "in": "header", - "description": "Timestamp (defined by client's clock) when the HTTP request was constructed on client. This mandatory header serves as an anti-replay precaution. After a period of time (specified by `API3_TIME_SKEW_TOLERANCE`) the message won't be valid any more and it will be denied with HTTP 401 Unauthorized code. This can be set alternatively in `now` query parameter.\nExample:\n\n
Date: Wed, 17 Oct 2018 05:13:00 GMT
", - "required": false, - "style": "simple", - "explode": false, - "schema": { - "type": "string" - } - }, - { - "name": "now", - "in": "query", - "description": "Timestamp (defined by client's clock) when the HTTP request was constructed on client. This mandatory parameter serves as an anti-replay precaution. After a period of time (specified by `API3_TIME_SKEW_TOLERANCE`) the message won't be valid any more and it will be denied with HTTP 401 Unauthorized code. This can be set alternatively in `Date` header.\n\nExample:\n\n
now=1525383610088
", - "required": false, - "style": "form", - "explode": true, - "schema": { - "type": "integer", - "format": "int64" - } - }, { "name": "token", "in": "query", @@ -686,25 +754,63 @@ } ], "responses": { - "204": { - "description": "Successful operation - empty response" + "200": { + "description": "The request was successfully processed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_3" + } + } + } }, "401": { - "description": "The request was not successfully authenticated using access token or JWT, or the request has missing `Date` header or it contains an expired timestamp, so that the request cannot continue due to the security policy." + "description": "The request was not successfully authenticated using access token or JWT, so that the request cannot continue due to the security policy.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_401" + } + } + } }, "403": { - "description": "Insecure HTTP scheme used or the request has been successfully authenticated, but the security subject is not authorized for the operation." + "description": "Insecure HTTP scheme used or the request has been successfully authenticated, but the security subject is not authorized for the operation.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_403" + } + } + } }, "404": { - "description": "The collection or document specified was not found." + "description": "The collection or document specified was not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_404" + } + } + } }, "422": { - "description": "The client request is well formed but a server validation error occured. Eg. when trying to modify or delete a read-only document (having `isReadOnly=true`)." + "description": "The client request is well formed but a server validation error occured. Eg. when trying to modify or delete a read-only document (having `isReadOnly=true`).", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_422" + } + } + } } }, "security": [ { - "apiKeyAuth": [] + "accessToken": [] + }, + { + "jwtoken": [] } ] }, @@ -713,7 +819,7 @@ "generic" ], "summary": "PATCH: Partially updates document in the collection", - "description": "Normally the document with the matching `identifier` will be retrieved from the collection and it will be patched by all specified fields from the JSON request body. Finally 204 HTTP status code will be returned with empty response body.\n\nIf the document has been found in the collection but it had already been deleted, 410 HTTP status code with empty response content is to be returned.\n\nWhen no document with `identifier` has been found in the collection, then the operation ends with 404 HTTP status code.\n\nYou can also specify `If-Unmodified-Since` request header including your timestamp of document's last modification. If the document has been modified by somebody else on the server afterwards (and you do not know about it), the 412 HTTP status code is returned cancelling the update operation. You can use this feature to prevent race condition problems.\n\n`PATCH` operation can save some bandwidth for incremental document updates in comparison with `GET` - `UPDATE` operation sequence.\n\nWhile patching the document, the field `modifiedBy` is automatically set to the authorized subject's name.\n\nThis operation provides autopruning of the collection (if autopruning is enabled).\n\nThis operation requires `update` permission for the API and the collection (e.g. `api:treatments:update`)", + "description": "Normally the document with the matching `identifier` will be retrieved from the collection and it will be patched by all specified fields from the JSON request body. Finally 200 HTTP status code will be returned.\n\nIf the document has been found in the collection but it had already been deleted, 410 HTTP status code is to be returned.\n\nWhen no document with `identifier` has been found in the collection, then the operation ends with 404 HTTP status code.\n\nYou can also specify `If-Unmodified-Since` request header including your timestamp of document's last modification. If the document has been modified by somebody else on the server afterwards (and you do not know about it), the 412 HTTP status code is returned cancelling the update operation. You can use this feature to prevent race condition problems.\n\n`PATCH` operation can save some bandwidth for incremental document updates in comparison with `GET` - `UPDATE` operation sequence.\n\nWhile patching the document, the field `modifiedBy` is automatically set to the authorized subject's name.\n\nThis operation provides autopruning of the collection (if autopruning is enabled).\n\nThis operation requires `update` permission for the API and the collection (e.g. `api:treatments:update`)", "parameters": [ { "name": "collection", @@ -737,29 +843,6 @@ "$ref": "#/components/schemas/paramIdentifier" } }, - { - "name": "Date", - "in": "header", - "description": "Timestamp (defined by client's clock) when the HTTP request was constructed on client. This mandatory header serves as an anti-replay precaution. After a period of time (specified by `API3_TIME_SKEW_TOLERANCE`) the message won't be valid any more and it will be denied with HTTP 401 Unauthorized code. This can be set alternatively in `now` query parameter.\nExample:\n\n
Date: Wed, 17 Oct 2018 05:13:00 GMT
", - "required": false, - "style": "simple", - "explode": false, - "schema": { - "type": "string" - } - }, - { - "name": "now", - "in": "query", - "description": "Timestamp (defined by client's clock) when the HTTP request was constructed on client. This mandatory parameter serves as an anti-replay precaution. After a period of time (specified by `API3_TIME_SKEW_TOLERANCE`) the message won't be valid any more and it will be denied with HTTP 401 Unauthorized code. This can be set alternatively in `Date` header.\n\nExample:\n\n
now=1525383610088
", - "required": false, - "style": "form", - "explode": true, - "schema": { - "type": "integer", - "format": "int64" - } - }, { "name": "token", "in": "query", @@ -795,42 +878,93 @@ "required": true }, "responses": { - "204": { - "description": "Successfully finished operation", - "headers": { - "Last-Modified": { - "$ref": "#/components/schemas/headerLastModified" - }, - "Location": { - "$ref": "#/components/schemas/headerLocation" + "200": { + "description": "The request was successfully processed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_3" + } } } }, "400": { - "description": "The request is malformed. There may be some required parameters missing or there are unrecognized parameters present." + "description": "The request is malformed. There may be some required parameters missing or there are unrecognized parameters present.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400" + } + } + } }, "401": { - "description": "The request was not successfully authenticated using access token or JWT, or the request has missing `Date` header or it contains an expired timestamp, so that the request cannot continue due to the security policy." + "description": "The request was not successfully authenticated using access token or JWT, so that the request cannot continue due to the security policy.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_401" + } + } + } }, "403": { - "description": "Insecure HTTP scheme used or the request has been successfully authenticated, but the security subject is not authorized for the operation." + "description": "Insecure HTTP scheme used or the request has been successfully authenticated, but the security subject is not authorized for the operation.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_403" + } + } + } }, "404": { - "description": "The collection or document specified was not found." + "description": "The collection or document specified was not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_404" + } + } + } }, "410": { - "description": "The requested document has already been deleted." + "description": "The requested document has already been deleted.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_410" + } + } + } }, "412": { - "description": "The document has already been modified on the server since specified timestamp (in If-Unmodified-Since header)." + "description": "The document has already been modified on the server since specified timestamp (in If-Unmodified-Since header).", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_412" + } + } + } }, "422": { - "description": "The client request is well formed but a server validation error occured. Eg. when trying to modify or delete a read-only document (having `isReadOnly=true`)." + "description": "The client request is well formed but a server validation error occured. Eg. when trying to modify or delete a read-only document (having `isReadOnly=true`).", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_422" + } + } + } } }, "security": [ { - "apiKeyAuth": [] + "accessToken": [] + }, + { + "jwtoken": [] } ] } @@ -841,7 +975,7 @@ "generic" ], "summary": "HISTORY: Retrieves incremental changes since timestamp", - "description": "HISTORY operation is intended for continuous data synchronization with other systems.\nEvery insertion, update and deletion will be included in the resulting JSON array of documents (since timestamp in `Last-Modified` request header value). All changes are listed chronologically in response with 200 HTTP status code. The maximum listed `srvModified` timestamp is also stored in `Last-Modified` and `ETag` response headers that you can use for future, directly following synchronization. You can also limit the array's length using `limit` parameter.\n\nDeleted documents will appear with `isValid` = `false` field.\n\nWhen there is no change detected since the timestamp the operation ends with 204 HTTP status code and empty response content.\n\nHISTORY operation has a fallback mechanism in place for documents, which were not created by API v3. For such documents `srvModified` is virtually assigned from the `date` field (for `entries` collection) or from the `created_at` field (for other collections).\n\nThis operation requires `read` permission for the API and the collection (e.g. `api:treatments:read`)\n\nThe only exception is the `settings` collection which requires `admin` permission (`api:settings:admin`), because the settings of each application should be isolated and kept secret. You need to know the concrete identifier to access the app's settings.", + "description": "HISTORY operation is intended for continuous data synchronization with other systems.\nEvery insertion, update and deletion will be included in the resulting JSON array of documents (since timestamp in `Last-Modified` request header value). All changes are listed chronologically in response with 200 HTTP status code. The maximum listed `srvModified` timestamp is also stored in `Last-Modified` and `ETag` response headers that you can use for future, directly following synchronization. You can also limit the array's length using `limit` parameter.\n\nDeleted documents will appear with `isValid` = `false` field.\n\nHISTORY operation has a fallback mechanism in place for documents, which were not created by API v3. For such documents `srvModified` is virtually assigned from the `date` field (for `entries` collection) or from the `created_at` field (for other collections).\n\nThis operation requires `read` permission for the API and the collection (e.g. `api:treatments:read`)\n\nThe only exception is the `settings` collection which requires `admin` permission (`api:settings:admin`), because the settings of each application should be isolated and kept secret. You need to know the concrete identifier to access the app's settings.", "operationId": "HISTORY", "parameters": [ { @@ -855,29 +989,6 @@ "$ref": "#/components/schemas/paramCollection" } }, - { - "name": "Date", - "in": "header", - "description": "Timestamp (defined by client's clock) when the HTTP request was constructed on client. This mandatory header serves as an anti-replay precaution. After a period of time (specified by `API3_TIME_SKEW_TOLERANCE`) the message won't be valid any more and it will be denied with HTTP 401 Unauthorized code. This can be set alternatively in `now` query parameter.\nExample:\n\n
Date: Wed, 17 Oct 2018 05:13:00 GMT
", - "required": false, - "style": "simple", - "explode": false, - "schema": { - "type": "string" - } - }, - { - "name": "now", - "in": "query", - "description": "Timestamp (defined by client's clock) when the HTTP request was constructed on client. This mandatory parameter serves as an anti-replay precaution. After a period of time (specified by `API3_TIME_SKEW_TOLERANCE`) the message won't be valid any more and it will be denied with HTTP 401 Unauthorized code. This can be set alternatively in `Date` header.\n\nExample:\n\n
now=1525383610088
", - "required": false, - "style": "form", - "explode": true, - "schema": { - "type": "integer", - "format": "int64" - } - }, { "name": "token", "in": "query", @@ -950,7 +1061,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentArray" + "$ref": "#/components/schemas/inline_response_200" } }, "text/csv": { @@ -965,28 +1076,63 @@ } } }, - "204": { - "description": "No changes detected" - }, "400": { - "description": "The request is malformed. There may be some required parameters missing or there are unrecognized parameters present." + "description": "The request is malformed. There may be some required parameters missing or there are unrecognized parameters present.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400" + } + } + } }, "401": { - "description": "The request was not successfully authenticated using access token or JWT, or the request has missing `Date` header or it contains an expired timestamp, so that the request cannot continue due to the security policy." + "description": "The request was not successfully authenticated using access token or JWT, so that the request cannot continue due to the security policy.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_401" + } + } + } }, "403": { - "description": "Insecure HTTP scheme used or the request has been successfully authenticated, but the security subject is not authorized for the operation." + "description": "Insecure HTTP scheme used or the request has been successfully authenticated, but the security subject is not authorized for the operation.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_403" + } + } + } }, "404": { - "description": "The collection or document specified was not found." + "description": "The collection or document specified was not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_404" + } + } + } }, "406": { - "description": "The requested content type (in `Accept` header) is not supported." + "description": "The requested content type (in `Accept` header) is not supported.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_406" + } + } + } } }, "security": [ { - "apiKeyAuth": [] + "accessToken": [] + }, + { + "jwtoken": [] } ] } @@ -1023,29 +1169,6 @@ "format": "int64" } }, - { - "name": "Date", - "in": "header", - "description": "Timestamp (defined by client's clock) when the HTTP request was constructed on client. This mandatory header serves as an anti-replay precaution. After a period of time (specified by `API3_TIME_SKEW_TOLERANCE`) the message won't be valid any more and it will be denied with HTTP 401 Unauthorized code. This can be set alternatively in `now` query parameter.\nExample:\n\n
Date: Wed, 17 Oct 2018 05:13:00 GMT
", - "required": false, - "style": "simple", - "explode": false, - "schema": { - "type": "string" - } - }, - { - "name": "now", - "in": "query", - "description": "Timestamp (defined by client's clock) when the HTTP request was constructed on client. This mandatory parameter serves as an anti-replay precaution. After a period of time (specified by `API3_TIME_SKEW_TOLERANCE`) the message won't be valid any more and it will be denied with HTTP 401 Unauthorized code. This can be set alternatively in `Date` header.\n\nExample:\n\n
now=1525383610088
", - "required": false, - "style": "form", - "explode": true, - "schema": { - "type": "integer", - "format": "int64" - } - }, { "name": "token", "in": "query", @@ -1107,7 +1230,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentArray" + "$ref": "#/components/schemas/inline_response_200" } }, "text/csv": { @@ -1122,28 +1245,63 @@ } } }, - "204": { - "description": "No changes detected" - }, "400": { - "description": "The request is malformed. There may be some required parameters missing or there are unrecognized parameters present." + "description": "The request is malformed. There may be some required parameters missing or there are unrecognized parameters present.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400" + } + } + } }, "401": { - "description": "The request was not successfully authenticated using access token or JWT, or the request has missing `Date` header or it contains an expired timestamp, so that the request cannot continue due to the security policy." + "description": "The request was not successfully authenticated using access token or JWT, so that the request cannot continue due to the security policy.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_401" + } + } + } }, "403": { - "description": "Insecure HTTP scheme used or the request has been successfully authenticated, but the security subject is not authorized for the operation." + "description": "Insecure HTTP scheme used or the request has been successfully authenticated, but the security subject is not authorized for the operation.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_403" + } + } + } }, "404": { - "description": "The collection or document specified was not found." + "description": "The collection or document specified was not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_404" + } + } + } }, "406": { - "description": "The requested content type (in `Accept` header) is not supported." + "description": "The requested content type (in `Accept` header) is not supported.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_406" + } + } + } } }, "security": [ { - "apiKeyAuth": [] + "accessToken": [] + }, + { + "jwtoken": [] } ] } @@ -1188,15 +1346,32 @@ } }, "401": { - "description": "The request was not successfully authenticated using access token or JWT, or the request has missing `Date` header or it contains an expired timestamp, so that the request cannot continue due to the security policy." + "description": "The request was not successfully authenticated using access token or JWT, so that the request cannot continue due to the security policy.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_401" + } + } + } }, "403": { - "description": "Insecure HTTP scheme used or the request has been successfully authenticated, but the security subject is not authorized for the operation." + "description": "Insecure HTTP scheme used or the request has been successfully authenticated, but the security subject is not authorized for the operation.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_403" + } + } + } } }, "security": [ { - "apiKeyAuth": [] + "accessToken": [] + }, + { + "jwtoken": [] } ] } @@ -1210,29 +1385,6 @@ "description": "LAST MODIFIED operation inspects collections separately (in parallel) and for each of them it finds the date of any last modification (insertion, update, deletion).\nNot only `srvModified`, but also `date` and `created_at` fields are inspected (as a fallback to previous API).\n\nThis operation requires `read` permission for the API and the collections (e.g. `api:treatments:read`). For each collection the permission is checked separately, you will get timestamps only for those collections that you have access to.", "operationId": "LAST-MODIFIED", "parameters": [ - { - "name": "Date", - "in": "header", - "description": "Timestamp (defined by client's clock) when the HTTP request was constructed on client. This mandatory header serves as an anti-replay precaution. After a period of time (specified by `API3_TIME_SKEW_TOLERANCE`) the message won't be valid any more and it will be denied with HTTP 401 Unauthorized code. This can be set alternatively in `now` query parameter.\nExample:\n\n
Date: Wed, 17 Oct 2018 05:13:00 GMT
", - "required": false, - "style": "simple", - "explode": false, - "schema": { - "type": "string" - } - }, - { - "name": "now", - "in": "query", - "description": "Timestamp (defined by client's clock) when the HTTP request was constructed on client. This mandatory parameter serves as an anti-replay precaution. After a period of time (specified by `API3_TIME_SKEW_TOLERANCE`) the message won't be valid any more and it will be denied with HTTP 401 Unauthorized code. This can be set alternatively in `Date` header.\n\nExample:\n\n
now=1525383610088
", - "required": false, - "style": "form", - "explode": true, - "schema": { - "type": "integer", - "format": "int64" - } - }, { "name": "token", "in": "query", @@ -1251,21 +1403,38 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LastModifiedResult" + "$ref": "#/components/schemas/inline_response_200_4" } } } }, "401": { - "description": "The request was not successfully authenticated using access token or JWT, or the request has missing `Date` header or it contains an expired timestamp, so that the request cannot continue due to the security policy." + "description": "The request was not successfully authenticated using access token or JWT, so that the request cannot continue due to the security policy.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_401" + } + } + } }, "403": { - "description": "Insecure HTTP scheme used or the request has been successfully authenticated, but the security subject is not authorized for the operation." + "description": "Insecure HTTP scheme used or the request has been successfully authenticated, but the security subject is not authorized for the operation.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_403" + } + } + } } }, "security": [ { - "apiKeyAuth": [] + "accessToken": [] + }, + { + "jwtoken": [] } ] } @@ -1301,9 +1470,35 @@ "treatments" ] }, - "paramIdentifier": { + "paramIdentifier": { + "type": "string", + "example": "53409478-105f-11e9-ab14-d663bd873d93" + }, + "identifierField": { + "type": "string", + "description": "Identifier of created or modified document", + "example": "53409478-105f-11e9-ab14-d663bd873d93" + }, + "lastModifiedField": { + "type": "integer", + "description": "Timestamp of the last document modification on the server, formatted as\nUnix epoch in milliseconds (1525383610088)", + "format": "int64", + "example": 1525383610088 + }, + "statusField": { + "type": "integer", + "description": "HTTP response status code. The status appears also in response body's field for those clients that are unable to process standard HTTP status code.", + "example": 200 + }, + "isDeduplicationField": { + "type": "boolean", + "description": "Flag whether the operation found a duplicate document (to update)", + "example": true + }, + "deduplicatedIdentifierField": { "type": "string", - "example": "53409478-105f-11e9-ab14-d663bd873d93" + "description": "The original document that has been marked as a duplicate document and which has been updated", + "example": "abc09478-105f-11e9-ab14-d663bd873d93" }, "DocumentBase": { "required": [ @@ -1795,6 +1990,18 @@ ] }, "Version": { + "type": "object", + "properties": { + "status": { + "$ref": "#/components/schemas/statusField" + }, + "result": { + "$ref": "#/components/schemas/VersionResult" + } + }, + "description": "Information about versions" + }, + "VersionResult": { "type": "object", "properties": { "version": { @@ -1813,56 +2020,31 @@ "example": 1532936118000 }, "storage": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "Type of storage engine used", - "example": "mongodb" - }, - "version": { - "type": "string", - "description": "Version of the storage engine", - "example": "4.0.6" - } - } + "$ref": "#/components/schemas/VersionResult_storage" } - }, - "description": "Information about versions" + } }, "Status": { - "description": "Information about versions and API permissions", + "properties": { + "status": { + "$ref": "#/components/schemas/statusField" + }, + "result": { + "$ref": "#/components/schemas/StatusResult" + } + }, + "description": "Information about versions and API permissions" + }, + "StatusResult": { "allOf": [ { - "$ref": "#/components/schemas/Version" + "$ref": "#/components/schemas/VersionResult" }, { "type": "object", "properties": { "apiPermissions": { - "type": "object", - "properties": { - "devicestatus": { - "type": "string", - "example": "crud" - }, - "entries": { - "type": "string", - "example": "r" - }, - "food": { - "type": "string", - "example": "crud" - }, - "profile": { - "type": "string", - "example": "r" - }, - "treatments": { - "type": "string", - "example": "crud" - } - } + "$ref": "#/components/schemas/StatusResult_apiPermissions" } } } @@ -1877,50 +2059,231 @@ "example": 1556260878776 }, "collections": { - "type": "object", - "properties": { - "devicestatus": { - "type": "integer", - "description": "Timestamp of the last modification (Unix epoch in ms), `null` when there is no timestamp found.", - "format": "int64", - "example": 1556260760974 - }, - "treatments": { - "type": "integer", - "description": "Timestamp of the last modification (Unix epoch in ms), `null` when there is no timestamp found.", - "format": "int64", - "example": 1553374184169 - }, - "entries": { - "type": "integer", - "description": "Timestamp of the last modification (Unix epoch in ms), `null` when there is no timestamp found.", - "format": "int64", - "example": 1556260758768 - }, - "profile": { - "type": "integer", - "description": "Timestamp of the last modification (Unix epoch in ms), `null` when there is no timestamp found.", - "format": "int64", - "example": 1548524042744 - } - }, - "description": "Collections which the user have read access to." + "$ref": "#/components/schemas/LastModifiedResult_collections" } }, "description": "Result of LAST MODIFIED operation" + }, + "inline_response_200": { + "properties": { + "status": { + "type": "integer", + "example": 200 + }, + "result": { + "$ref": "#/components/schemas/DocumentArray" + } + } + }, + "inline_response_400": { + "properties": { + "status": { + "type": "integer", + "example": 400 + } + } + }, + "inline_response_401": { + "properties": { + "status": { + "type": "integer", + "example": 401 + } + } + }, + "inline_response_403": { + "properties": { + "status": { + "type": "integer", + "example": 403 + } + } + }, + "inline_response_404": { + "properties": { + "status": { + "type": "integer", + "example": 404 + } + } + }, + "inline_response_406": { + "properties": { + "status": { + "type": "integer", + "example": 406 + } + } + }, + "inline_response_200_1": { + "properties": { + "status": { + "type": "integer", + "example": 200 + }, + "identifier": { + "$ref": "#/components/schemas/identifierField" + }, + "isDeduplication": { + "$ref": "#/components/schemas/isDeduplicationField" + }, + "deduplicatedIdentifier": { + "$ref": "#/components/schemas/deduplicatedIdentifierField" + } + } + }, + "inline_response_201": { + "properties": { + "status": { + "type": "integer", + "example": 201 + }, + "identifier": { + "$ref": "#/components/schemas/identifierField" + }, + "lastModified": { + "$ref": "#/components/schemas/lastModifiedField" + } + } + }, + "inline_response_422": { + "properties": { + "status": { + "type": "integer", + "example": 422 + } + } + }, + "inline_response_200_2": { + "properties": { + "status": { + "type": "integer", + "example": 200 + }, + "result": { + "$ref": "#/components/schemas/Document" + } + } + }, + "inline_response_410": { + "properties": { + "status": { + "type": "integer", + "example": 410 + } + } + }, + "inline_response_200_3": { + "properties": { + "status": { + "type": "integer", + "example": 200 + } + } + }, + "inline_response_412": { + "properties": { + "status": { + "type": "integer", + "example": 412 + } + } + }, + "inline_response_200_4": { + "properties": { + "status": { + "type": "integer", + "example": 200 + }, + "result": { + "$ref": "#/components/schemas/LastModifiedResult" + } + } + }, + "VersionResult_storage": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "Type of storage engine used", + "example": "mongodb" + }, + "version": { + "type": "string", + "description": "Version of the storage engine", + "example": "4.0.6" + } + } + }, + "StatusResult_apiPermissions": { + "type": "object", + "properties": { + "devicestatus": { + "type": "string", + "example": "crud" + }, + "entries": { + "type": "string", + "example": "r" + }, + "food": { + "type": "string", + "example": "crud" + }, + "profile": { + "type": "string", + "example": "r" + }, + "treatments": { + "type": "string", + "example": "crud" + } + } + }, + "LastModifiedResult_collections": { + "type": "object", + "properties": { + "devicestatus": { + "type": "integer", + "description": "Timestamp of the last modification (Unix epoch in ms), `null` when there is no timestamp found.", + "format": "int64", + "example": 1556260760974 + }, + "treatments": { + "type": "integer", + "description": "Timestamp of the last modification (Unix epoch in ms), `null` when there is no timestamp found.", + "format": "int64", + "example": 1553374184169 + }, + "entries": { + "type": "integer", + "description": "Timestamp of the last modification (Unix epoch in ms), `null` when there is no timestamp found.", + "format": "int64", + "example": 1556260758768 + }, + "profile": { + "type": "integer", + "description": "Timestamp of the last modification (Unix epoch in ms), `null` when there is no timestamp found.", + "format": "int64", + "example": 1548524042744 + } + }, + "description": "Collections which the user have read access to." } }, "responses": { - "201Created": { - "description": "Successfully created a new document in collection", - "headers": { - "Last-Modified": { - "$ref": "#/components/schemas/headerLastModified" + "200Ok": { + "description": "The request was successfully processed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_3" + } } } }, - "201CreatedLocation": { - "description": "Successfully created a new document in collection", + "200Deduplication": { + "description": "Successfully updated a duplicate document in the collection", "headers": { "Last-Modified": { "$ref": "#/components/schemas/headerLastModified" @@ -1928,18 +2291,32 @@ "Location": { "$ref": "#/components/schemas/headerLocation" } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_1" + } + } } }, - "204NoContent": { - "description": "Successfully finished operation", + "201Created": { + "description": "Successfully created a new document in collection", "headers": { "Last-Modified": { "$ref": "#/components/schemas/headerLastModified" } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_201" + } + } } }, - "204NoContentLocation": { - "description": "Successfully finished operation", + "201CreatedLocation": { + "description": "Successfully created a new document in collection", "headers": { "Last-Modified": { "$ref": "#/components/schemas/headerLastModified" @@ -1947,6 +2324,13 @@ "Location": { "$ref": "#/components/schemas/headerLocation" } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_201" + } + } } }, "304NotModified": { @@ -1958,35 +2342,91 @@ } }, "400BadRequest": { - "description": "The request is malformed. There may be some required parameters missing or there are unrecognized parameters present." + "description": "The request is malformed. There may be some required parameters missing or there are unrecognized parameters present.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400" + } + } + } }, "401Unauthorized": { - "description": "The request was not successfully authenticated using access token or JWT, or the request has missing `Date` header or it contains an expired timestamp, so that the request cannot continue due to the security policy." + "description": "The request was not successfully authenticated using access token or JWT, so that the request cannot continue due to the security policy.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_401" + } + } + } }, "403Forbidden": { - "description": "Insecure HTTP scheme used or the request has been successfully authenticated, but the security subject is not authorized for the operation." + "description": "Insecure HTTP scheme used or the request has been successfully authenticated, but the security subject is not authorized for the operation.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_403" + } + } + } }, "404NotFound": { - "description": "The collection or document specified was not found." + "description": "The collection or document specified was not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_404" + } + } + } }, "406NotAcceptable": { - "description": "The requested content type (in `Accept` header) is not supported." + "description": "The requested content type (in `Accept` header) is not supported.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_406" + } + } + } }, "412PreconditionFailed": { - "description": "The document has already been modified on the server since specified timestamp (in If-Unmodified-Since header)." + "description": "The document has already been modified on the server since specified timestamp (in If-Unmodified-Since header).", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_412" + } + } + } }, "410Gone": { - "description": "The requested document has already been deleted." + "description": "The requested document has already been deleted.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_410" + } + } + } }, "422UnprocessableEntity": { - "description": "The client request is well formed but a server validation error occured. Eg. when trying to modify or delete a read-only document (having `isReadOnly=true`)." + "description": "The client request is well formed but a server validation error occured. Eg. when trying to modify or delete a read-only document (having `isReadOnly=true`).", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_422" + } + } + } }, "search200": { "description": "Successful operation returning array of documents matching the filtering criteria", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentArray" + "$ref": "#/components/schemas/inline_response_200" } }, "text/csv": { @@ -2001,9 +2441,6 @@ } } }, - "search204": { - "description": "Successful operation - no documents matching the filtering criteria" - }, "read200": { "description": "The document has been succesfully found and its JSON form returned in the response content.", "headers": { @@ -2014,7 +2451,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Document" + "$ref": "#/components/schemas/inline_response_200_2" } }, "text/csv": { @@ -2042,7 +2479,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentArray" + "$ref": "#/components/schemas/inline_response_200" } }, "text/csv": { @@ -2057,44 +2494,18 @@ } } }, - "history204": { - "description": "No changes detected" - }, "lastModified200": { "description": "Successful operation returning the timestamps", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LastModifiedResult" + "$ref": "#/components/schemas/inline_response_200_4" } } } } }, "parameters": { - "dateHeader": { - "name": "Date", - "in": "header", - "description": "Timestamp (defined by client's clock) when the HTTP request was constructed on client. This mandatory header serves as an anti-replay precaution. After a period of time (specified by `API3_TIME_SKEW_TOLERANCE`) the message won't be valid any more and it will be denied with HTTP 401 Unauthorized code. This can be set alternatively in `now` query parameter.\nExample:\n\n
Date: Wed, 17 Oct 2018 05:13:00 GMT
", - "required": false, - "style": "simple", - "explode": false, - "schema": { - "type": "string" - } - }, - "nowParam": { - "name": "now", - "in": "query", - "description": "Timestamp (defined by client's clock) when the HTTP request was constructed on client. This mandatory parameter serves as an anti-replay precaution. After a period of time (specified by `API3_TIME_SKEW_TOLERANCE`) the message won't be valid any more and it will be denied with HTTP 401 Unauthorized code. This can be set alternatively in `Date` header.\n\nExample:\n\n
now=1525383610088
", - "required": false, - "style": "form", - "explode": true, - "schema": { - "type": "integer", - "format": "int64" - } - }, "tokenParam": { "name": "token", "in": "query", diff --git a/lib/api3/swagger.yaml b/lib/api3/swagger.yaml index 5cbb2a05544..c9b764a7409 100644 --- a/lib/api3/swagger.yaml +++ b/lib/api3/swagger.yaml @@ -2,7 +2,7 @@ openapi: 3.0.0 servers: - url: '/api/v3' info: - version: "3.0.1" + version: 3.0.3 title: Nightscout API contact: name: NS development discussion channel @@ -22,11 +22,6 @@ info: but this should never be set to false in production. - - Number of minutes of acceptable time skew between client's and server's clock (optional, default = 5) -
API3_TIME_SKEW_TOLERANCE=5
- This security parameter is used for preventing anti-replay attacks, specifically when checking the time from `Date` header. - - - Maximum limit count of documents retrieved from single query
API3_MAX_LIMIT=1000
@@ -80,8 +75,6 @@ paths: schema: $ref: '#/components/schemas/paramCollection' - - $ref: '#/components/parameters/dateHeader' - - $ref: '#/components/parameters/nowParam' - $ref: '#/components/parameters/tokenParam' ###################################################################################### @@ -102,7 +95,7 @@ paths: 3) paging - using `limit` and `skip` parameters - When there is no document matching the filtering criteria, HTTP status 204 is returned with empty response content. Otherwise HTTP 200 code is returned with JSON array of matching documents as a response content. + If successful, HTTP 200 code is returned with JSON array of matching documents as a response content (it may be empty). This operation requires `read` permission for the API and the collection (e.g. `*:*:read`, `api:*:read`, `*:treatments:read`, `api:treatments:read`). @@ -120,13 +113,12 @@ paths: - $ref: '#/components/parameters/fieldsParam' security: - - apiKeyAuth: [] + - accessToken: [] + - jwtoken: [] responses: 200: $ref: '#/components/responses/search200' - 204: - $ref: '#/components/responses/search204' 400: $ref: '#/components/responses/400BadRequest' 401: @@ -145,10 +137,11 @@ paths: - generic summary: 'CREATE: Inserts a new document into the collection' description: - Using this operation you can insert new documents into collection. Normally the operation ends with 201 HTTP status code, `Last-Modified` and `Location` headers specified and with an empty response content. `identifier` can be parsed from the `Location` response header. + Using this operation you can insert new documents into collection. Normally the operation ends with 201 HTTP status code, `Last-Modified` and `Location` headers specified. + `identifier` is included in response body or it can be parsed from the `Location` response header. - When the document to post is marked as a duplicate (using rules described at `API3_DEDUP_FALLBACK_ENABLED` switch), the update operation takes place instead of inserting. In this case the original document in the collection is found and it gets updated by the actual operation POST body. Finally the operation ends with 204 HTTP status code along with `Last-Modified` and correct `Location` headers. + When the document to post is marked as a duplicate (using rules described at `API3_DEDUP_FALLBACK_ENABLED` switch), the update operation takes place instead of inserting. In this case the original document in the collection is found and it gets updated by the actual operation POST body. Finally the operation ends with 200 HTTP status code along with `Last-Modified` and correct `Location` headers. The response body then includes `isDeduplication`=`true` and `deduplicatedIdentifier` fields. This operation provides autopruning of the collection (if autopruning is enabled). @@ -165,13 +158,14 @@ paths: $ref: '#/components/schemas/DocumentToPost' security: - - apiKeyAuth: [] + - accessToken: [] + - jwtoken: [] responses: + 200: + $ref: '#/components/responses/200Deduplication' 201: $ref: '#/components/responses/201CreatedLocation' - 204: - $ref: '#/components/responses/204NoContentLocation' 400: $ref: '#/components/responses/400BadRequest' 401: @@ -202,8 +196,6 @@ paths: schema: $ref: '#/components/schemas/paramIdentifier' - - $ref: '#/components/parameters/dateHeader' - - $ref: '#/components/parameters/nowParam' - $ref: '#/components/parameters/tokenParam' ###################################################################################### @@ -215,7 +207,7 @@ paths: Basically this operation looks for a document matching the `identifier` field returning 200 or 404 HTTP status code. - If the document has been found in the collection but it had already been deleted, 410 HTTP status code with empty response content is to be returned. + If the document has been found in the collection but it had already been deleted, 410 HTTP status code is to be returned. When `If-Modified-Since` header is used and its value is greater than the timestamp of the document in the collection, 304 HTTP status code with empty response content is returned. It means that the document has not been modified on server since the last retrieval to client side. @@ -229,7 +221,8 @@ paths: - $ref: '#/components/parameters/fieldsParam' security: - - apiKeyAuth: [] + - accessToken: [] + - jwtoken: [] responses: 200: @@ -254,10 +247,10 @@ paths: - generic summary: 'UPDATE: Updates a document in the collection' description: - Normally the document with the matching `identifier` will be replaced in the collection by the whole JSON request body and 204 HTTP status code will be returned with empty response body. + Normally the document with the matching `identifier` will be replaced in the collection by the whole JSON request body and 200 HTTP status code will be returned. - If the document has been found in the collection but it had already been deleted, 410 HTTP status code with empty response content is to be returned. + If the document has been found in the collection but it had already been deleted, 410 HTTP status code is to be returned. When no document with `identifier` has been found in the collection, then an insert operation takes place instead of updating. Finally 201 HTTP status code is returned with only `Last-Modified` header (`identifier` is already known from the path parameter). @@ -283,13 +276,14 @@ paths: $ref: '#/components/schemas/DocumentToPost' security: - - apiKeyAuth: [] + - accessToken: [] + - jwtoken: [] responses: + 200: + $ref: '#/components/responses/200Ok' 201: $ref: '#/components/responses/201Created' - 204: - $ref: '#/components/responses/204NoContentLocation' 400: $ref: '#/components/responses/400BadRequest' 401: @@ -312,10 +306,10 @@ paths: - generic summary: 'PATCH: Partially updates document in the collection' description: - Normally the document with the matching `identifier` will be retrieved from the collection and it will be patched by all specified fields from the JSON request body. Finally 204 HTTP status code will be returned with empty response body. + Normally the document with the matching `identifier` will be retrieved from the collection and it will be patched by all specified fields from the JSON request body. Finally 200 HTTP status code will be returned. - If the document has been found in the collection but it had already been deleted, 410 HTTP status code with empty response content is to be returned. + If the document has been found in the collection but it had already been deleted, 410 HTTP status code is to be returned. When no document with `identifier` has been found in the collection, then the operation ends with 404 HTTP status code. @@ -347,11 +341,12 @@ paths: $ref: '#/components/schemas/DocumentToPost' security: - - apiKeyAuth: [] + - accessToken: [] + - jwtoken: [] responses: - 204: - $ref: '#/components/responses/204NoContentLocation' + 200: + $ref: '#/components/responses/200Ok' 400: $ref: '#/components/responses/400BadRequest' 401: @@ -360,10 +355,10 @@ paths: $ref: '#/components/responses/403Forbidden' 404: $ref: '#/components/responses/404NotFound' - 412: - $ref: '#/components/responses/412PreconditionFailed' 410: $ref: '#/components/responses/410Gone' + 412: + $ref: '#/components/responses/412PreconditionFailed' 422: $ref: '#/components/responses/422UnprocessableEntity' @@ -387,11 +382,12 @@ paths: - $ref: '#/components/parameters/permanentParam' security: - - apiKeyAuth: [] + - accessToken: [] + - jwtoken: [] responses: - 204: - description: Successful operation - empty response + 200: + $ref: '#/components/responses/200Ok' 401: $ref: '#/components/responses/401Unauthorized' 403: @@ -412,8 +408,6 @@ paths: schema: $ref: '#/components/schemas/paramCollection' - - $ref: '#/components/parameters/dateHeader' - - $ref: '#/components/parameters/nowParam' - $ref: '#/components/parameters/tokenParam' get: @@ -430,9 +424,6 @@ paths: Deleted documents will appear with `isValid` = `false` field. - When there is no change detected since the timestamp the operation ends with 204 HTTP status code and empty response content. - - HISTORY operation has a fallback mechanism in place for documents, which were not created by API v3. For such documents `srvModified` is virtually assigned from the `date` field (for `entries` collection) or from the `created_at` field (for other collections). @@ -448,13 +439,12 @@ paths: - $ref: '#/components/parameters/fieldsParam' security: - - apiKeyAuth: [] + - accessToken: [] + - jwtoken: [] responses: 200: $ref: '#/components/responses/history200' - 204: - $ref: '#/components/responses/history204' 400: $ref: '#/components/responses/400BadRequest' 401: @@ -485,8 +475,6 @@ paths: type: integer format: int64 - - $ref: '#/components/parameters/dateHeader' - - $ref: '#/components/parameters/nowParam' - $ref: '#/components/parameters/tokenParam' get: @@ -509,13 +497,12 @@ paths: - $ref: '#/components/parameters/fieldsParam' security: - - apiKeyAuth: [] + - accessToken: [] + - jwtoken: [] responses: 200: $ref: '#/components/responses/history200' - 204: - $ref: '#/components/responses/history204' 400: $ref: '#/components/responses/400BadRequest' 401: @@ -556,7 +543,8 @@ paths: This operation requires authorization in contrast with VERSION operation. security: - - apiKeyAuth: [] + - accessToken: [] + - jwtoken: [] responses: 200: @@ -573,8 +561,6 @@ paths: ###################################################################################### /lastModified: parameters: - - $ref: '#/components/parameters/dateHeader' - - $ref: '#/components/parameters/nowParam' - $ref: '#/components/parameters/tokenParam' get: @@ -591,7 +577,8 @@ paths: This operation requires `read` permission for the API and the collections (e.g. `api:treatments:read`). For each collection the permission is checked separately, you will get timestamps only for those collections that you have access to. security: - - apiKeyAuth: [] + - accessToken: [] + - jwtoken: [] responses: 200: @@ -606,41 +593,6 @@ components: parameters: - dateHeader: - in: header - name: Date - schema: - type: string - required: false - description: - Timestamp (defined by client's clock) when the HTTP request was constructed on client. - This mandatory header serves as an anti-replay precaution. After a period of time (specified by `API3_TIME_SKEW_TOLERANCE`) the message won't be valid any more and it will be denied with HTTP 401 Unauthorized code. - This can be set alternatively in `now` query parameter. - - Example: - - -
Date: Wed, 17 Oct 2018 05:13:00 GMT
- - - nowParam: - in: query - name: now - schema: - type: integer - format: int64 - required: false - description: - Timestamp (defined by client's clock) when the HTTP request was constructed on client. - This mandatory parameter serves as an anti-replay precaution. After a period of time (specified by `API3_TIME_SKEW_TOLERANCE`) the message won't be valid any more and it will be denied with HTTP 401 Unauthorized code. - This can be set alternatively in `Date` header. - - - Example: - - -
now=1525383610088
- tokenParam: in: query @@ -850,33 +802,73 @@ components: ###################################################################################### responses: - 201Created: - description: Successfully created a new document in collection - headers: - 'Last-Modified': - $ref: '#/components/schemas/headerLastModified' + 200Ok: + description: The request was successfully processed + content: + application/json: + schema: + properties: + status: + type: integer + example: 200 - 201CreatedLocation: - description: Successfully created a new document in collection + 200Deduplication: + description: Successfully updated a duplicate document in the collection headers: 'Last-Modified': $ref: '#/components/schemas/headerLastModified' 'Location': $ref: '#/components/schemas/headerLocation' + content: + application/json: + schema: + properties: + status: + type: integer + example: 200 + identifier: + $ref: '#/components/schemas/identifierField' + isDeduplication: + $ref: '#/components/schemas/isDeduplicationField' + deduplicatedIdentifier: + $ref: '#/components/schemas/deduplicatedIdentifierField' - 204NoContent: - description: Successfully finished operation + + 201Created: + description: Successfully created a new document in collection headers: 'Last-Modified': $ref: '#/components/schemas/headerLastModified' + content: + application/json: + schema: + properties: + status: + type: integer + example: 201 + identifier: + $ref: '#/components/schemas/identifierField' + lastModified: + $ref: '#/components/schemas/lastModifiedField' - 204NoContentLocation: - description: Successfully finished operation + 201CreatedLocation: + description: Successfully created a new document in collection headers: 'Last-Modified': $ref: '#/components/schemas/headerLastModified' 'Location': $ref: '#/components/schemas/headerLocation' + content: + application/json: + schema: + properties: + status: + type: integer + example: 201 + identifier: + $ref: '#/components/schemas/identifierField' + lastModified: + $ref: '#/components/schemas/lastModifiedField' 304NotModified: description: The document has not been modified on the server since timestamp specified in If-Modified-Since header @@ -886,34 +878,95 @@ components: 400BadRequest: description: The request is malformed. There may be some required parameters missing or there are unrecognized parameters present. + content: + application/json: + schema: + properties: + status: + type: integer + example: 400 401Unauthorized: - description: The request was not successfully authenticated using access token or JWT, or the request has missing `Date` header or it contains an expired timestamp, so that the request cannot continue due to the security policy. + description: The request was not successfully authenticated using access token or JWT, so that the request cannot continue due to the security policy. + content: + application/json: + schema: + properties: + status: + type: integer + example: 401 403Forbidden: description: Insecure HTTP scheme used or the request has been successfully authenticated, but the security subject is not authorized for the operation. + content: + application/json: + schema: + properties: + status: + type: integer + example: 403 404NotFound: description: The collection or document specified was not found. + content: + application/json: + schema: + properties: + status: + type: integer + example: 404 406NotAcceptable: description: The requested content type (in `Accept` header) is not supported. + content: + application/json: + schema: + properties: + status: + type: integer + example: 406 412PreconditionFailed: description: The document has already been modified on the server since specified timestamp (in If-Unmodified-Since header). + content: + application/json: + schema: + properties: + status: + type: integer + example: 412 410Gone: description: The requested document has already been deleted. + content: + application/json: + schema: + properties: + status: + type: integer + example: 410 422UnprocessableEntity: description: The client request is well formed but a server validation error occured. Eg. when trying to modify or delete a read-only document (having `isReadOnly=true`). + content: + application/json: + schema: + properties: + status: + type: integer + example: 422 search200: description: Successful operation returning array of documents matching the filtering criteria content: application/json: schema: - $ref: '#/components/schemas/DocumentArray' + properties: + status: + type: integer + example: 200 + result: + $ref: '#/components/schemas/DocumentArray' text/csv: schema: $ref: '#/components/schemas/DocumentArray' @@ -921,15 +974,17 @@ components: schema: $ref: '#/components/schemas/DocumentArray' - search204: - description: Successful operation - no documents matching the filtering criteria - read200: description: The document has been succesfully found and its JSON form returned in the response content. content: application/json: schema: - $ref: '#/components/schemas/Document' + properties: + status: + type: integer + example: 200 + result: + $ref: '#/components/schemas/Document' text/csv: schema: $ref: '#/components/schemas/Document' @@ -946,7 +1001,12 @@ components: content: application/json: schema: - $ref: '#/components/schemas/DocumentArray' + properties: + status: + type: integer + example: 200 + result: + $ref: '#/components/schemas/DocumentArray' text/csv: schema: $ref: '#/components/schemas/DocumentArray' @@ -959,15 +1019,18 @@ components: 'ETag': $ref: '#/components/schemas/headerEtagLastModifiedMaximum' - history204: - description: No changes detected - lastModified200: description: Successful operation returning the timestamps content: application/json: schema: - $ref: '#/components/schemas/LastModifiedResult' + properties: + status: + type: integer + example: 200 + result: + $ref: '#/components/schemas/LastModifiedResult' + ###################################################################################### schemas: @@ -1025,6 +1088,44 @@ components: example: '53409478-105f-11e9-ab14-d663bd873d93' + identifierField: + description: + Identifier of created or modified document + type: string + example: '53409478-105f-11e9-ab14-d663bd873d93' + + + lastModifiedField: + type: integer + format: int64 + description: + Timestamp of the last document modification on the server, formatted as + + Unix epoch in milliseconds (1525383610088) + example: 1525383610088 + + statusField: + type: integer + description: + HTTP response status code. The status appears also in response body's field for those clients + that are unable to process standard HTTP status code. + example: 200 + + + isDeduplicationField: + type: boolean + description: + Flag whether the operation found a duplicate document (to update) + example: true + + + deduplicatedIdentifierField: + type: string + description: + The original document that has been marked as a duplicate document and which has been updated + example: 'abc09478-105f-11e9-ab14-d663bd873d93' + + DocumentBase: description: Shared base for all documents properties: @@ -1527,6 +1628,17 @@ components: Version: description: Information about versions + type: object + properties: + + status: + $ref: '#/components/schemas/statusField' + + result: + $ref: '#/components/schemas/VersionResult' + + + VersionResult: type: object properties: @@ -1562,8 +1674,17 @@ components: Status: description: Information about versions and API permissions + properties: + status: + $ref: '#/components/schemas/statusField' + + result: + $ref: '#/components/schemas/StatusResult' + + + StatusResult: allOf: - - $ref: '#/components/schemas/Version' + - $ref: '#/components/schemas/VersionResult' - type: object properties: @@ -1586,7 +1707,6 @@ components: type: string example: 'crud' - LastModifiedResult: description: Result of LAST MODIFIED operation properties: @@ -1644,4 +1764,4 @@ components: type: http scheme: bearer description: Use this if you know the temporary json webtoken. - bearerFormat: JWT \ No newline at end of file + bearerFormat: JWT diff --git a/lib/authorization/delaylist.js b/lib/authorization/delaylist.js new file mode 100644 index 00000000000..fe6c8096153 --- /dev/null +++ b/lib/authorization/delaylist.js @@ -0,0 +1,58 @@ +'use strict'; + +const _ = require('lodash'); + +function init (env) { + + const ipDelayList = {}; + + const DELAY_ON_FAIL = _.get(env, 'settings.authFailDelay') || 5000; + const FAIL_AGE = 60000; + + ipDelayList.addFailedRequest = function addFailedRequest (ip) { + const ipString = String(ip); + let entry = ipDelayList[ipString]; + const now = Date.now(); + if (!entry) { + ipDelayList[ipString] = now + DELAY_ON_FAIL; + return; + } + if (now >= entry) { entry = now; } + ipDelayList[ipString] = entry + DELAY_ON_FAIL; + }; + + ipDelayList.shouldDelayRequest = function shouldDelayRequest (ip) { + const ipString = String(ip); + const entry = ipDelayList[ipString]; + let now = Date.now(); + if (entry) { + if (now < entry) { + return entry - now; + } + } + return false; + }; + + ipDelayList.requestSucceeded = function requestSucceeded (ip) { + const ipString = String(ip); + if (ipDelayList[ipString]) { + delete ipDelayList[ipString]; + } + }; + + // Clear items older than a minute + + setTimeout(function clearList () { + for (var key in ipDelayList) { + if (ipDelayList.hasOwnProperty(key)) { + if (Date.now() > ipDelayList[key] + FAIL_AGE) { + delete ipDelayList[key]; + } + } + } + }, 30000); + + return ipDelayList; +} + +module.exports = init; diff --git a/lib/authorization/index.js b/lib/authorization/index.js index b81578e0dca..410536dd19c 100644 --- a/lib/authorization/index.js +++ b/lib/authorization/index.js @@ -1,96 +1,85 @@ 'use strict'; -var _ = require('lodash'); -var jwt = require('jsonwebtoken'); -var shiroTrie = require('shiro-trie'); - -var consts = require('./../constants'); - -var log_green = '\x1B[32m'; -var log_red = '\x1b[31m'; -var log_reset = '\x1B[0m'; -var LOG_GRANTED = log_green + 'GRANTED: ' + log_reset; -var LOG_DENIED = log_red + 'DENIED: ' + log_reset; - -function mkopts (opts) { - var options = opts && !_.isEmpty(opts) ? opts : { }; - if (!options.redirectDeniedURL) { - options.redirectDeniedURL = null; - } - return options; -} +const _ = require('lodash'); +const jwt = require('jsonwebtoken'); +const shiroTrie = require('shiro-trie'); + +const consts = require('./../constants'); +const sleep = require('util').promisify(setTimeout); function getRemoteIP (req) { return req.headers['x-forwarded-for'] || req.connection.remoteAddress; } function init (env, ctx) { - var authorization = { }; + + const ipdelaylist = require('./delaylist')(env, ctx); + const addFailedRequest = ipdelaylist.addFailedRequest; + const shouldDelayRequest = ipdelaylist.shouldDelayRequest; + const requestSucceeded = ipdelaylist.requestSucceeded; + + var authorization = {}; var storage = authorization.storage = require('./storage')(env, ctx); var defaultRoles = (env.settings.authDefaultRoles || '').split(/[, :]/); - function extractToken (req) { - var token; - var authorization = req.header('Authorization'); + /** + * Loads JWT from request + * + * @param {*} req + */ + function extractJWTfromRequest (req) { - if (authorization) { - var parts = authorization.split(' '); + if (req.auth_token) return req.auth_token; + + let token; + + if (req.header('Authorization')) { + const parts = req.header('Authorization').split(' '); if (parts.length === 2 && parts[0] === 'Bearer') { token = parts[1]; } } - if (!token && req.auth_token) { - token = req.auth_token; - } - if (!token) { - token = authorizeAccessToken(req); - } + let accessToken = req.query.token; + if (!accessToken && req.body) { + if (_.isArray(req.body) && req.body.length > 0 && req.body[0].token) { + accessToken = req.body[0].token; + delete req.body[0].token; + } else if (req.body.token) { + accessToken = req.body.token; + delete req.body.token; + } + } - if (token) { - req.auth_token = token; + if (accessToken) { + // validate and parse the token + const authed = authorization.authorize(accessToken); + if (authed && authed.token) { + token = authed.token; + } + } } + if (token) { req.auth_token = token; } + return token; } - authorization.extractToken = extractToken; + authorization.extractToken = extractJWTfromRequest; - function authorizeAccessToken (req) { + /** + * Fetches the API_SECRET from the request + * + * @param {*} req Express request object + */ + function apiSecretFromRequest (req) { - var accessToken = req.query.token; + if (req.api_secret) return req.api_secret; - if (!accessToken && req.body) { - if (_.isArray(req.body) && req.body.length > 0 && req.body[0].token) { - accessToken = req.body[0].token; - delete req.body[0].token; - } else if (req.body.token) { - accessToken = req.body.token; - delete req.body.token; - } - } - - var authToken = null; - - if (accessToken) { - // make an auth token on the fly, based on an access token - var authed = authorization.authorize(accessToken); - if (authed && authed.token) { - authToken = authed.token; - } - } - - return authToken; - } - - function adminSecretFromRequest (req) { - var secret = req.query && req.query.secret ? req.query.secret : req.header('api-secret'); + let secret = req.query && req.query.secret ? req.query.secret : req.header('api-secret'); - if (!secret && req.api_secret) { - //see if we already got the secret from the body, since it gets deleted - secret = req.api_secret; - } else if (!secret && req.body) { + if (!secret && req.body) { // try to get the secret from the body, but don't leave it there if (_.isArray(req.body) && req.body.length > 0 && req.body[0].secret) { secret = req.body[0].secret; @@ -101,71 +90,131 @@ function init (env, ctx) { } } - if (secret) { - // store the secret hash on the request since the req may get processed again - req.api_secret = secret; - } - + // store the secret hash on the request since the req may get processed again + if (secret) { req.api_secret = secret; } return secret; } - function authorizeAdminSecretWithRequest (req) { - return authorizeAdminSecret(adminSecretFromRequest(req)); - } - function authorizeAdminSecret (secret) { - return (env.api_secret && env.api_secret.length > 12) ? (secret === env.api_secret) : false; + return env.enclave.isApiKey(secret); } - authorization.seenPermissions = [ ]; + authorization.seenPermissions = []; - authorization.expandedPermissions = function expandedPermissions ( ) { + authorization.expandedPermissions = function expandedPermissions () { var permissions = shiroTrie.new(); permissions.add(authorization.seenPermissions); return permissions; }; authorization.resolveWithRequest = function resolveWithRequest (req, callback) { - authorization.resolve({ - api_secret: adminSecretFromRequest(req) - , token: extractToken(req) - }, callback); + const resolveData = { + api_secret: apiSecretFromRequest(req) + , token: extractJWTfromRequest(req) + , ip: getRemoteIP(req) + }; + authorization.resolve(resolveData, callback); }; - authorization.checkMultiple = function checkMultiple(permission, shiros) { + /** + * Check if the Apache Shiro-style permission object includes the permission. + * + * Returns a boolean true / false depending on if the permission is found. + * + * @param {*} permission Desired permission + * @param {*} shiros Shiros + */ + + authorization.checkMultiple = function checkMultiple (permission, shiros) { var found = _.find(shiros, function checkEach (shiro) { return shiro && shiro.check(permission); }); return _.isObject(found); }; - authorization.resolve = function resolve (data, callback) { + /** + * Resolve an API secret or token and return the permissions associated with + * the secret / token + * + * @param {*} data + * @param {*} callback + */ + authorization.resolve = async function resolve (data, callback) { + + if (!data.ip) { + console.error('Trying to authorize without IP information'); + return callback(null, { shiros: [] }); + } - var defaultShiros = storage.rolesToShiros(defaultRoles); + data.api_secret = data.api_secret || null; - if (storage.doesAccessTokenExist(data.api_secret)) { - authorization.resolveAccessToken (data.api_secret, callback, defaultShiros); - return; + if (data.api_secret == 'null') { // TODO find what's sending this anomaly + data.api_secret = null; } - if (authorizeAdminSecret(data.api_secret)) { + const requestDelay = shouldDelayRequest(data.ip); + + if (requestDelay) { + await sleep(requestDelay); + } + + const authAttempted = (data.api_secret || data.token) ? true : false; + const defaultShiros = storage.rolesToShiros(defaultRoles); + + // If there is no token or secret, return default permissions + if (!authAttempted) { + const result = { shiros: defaultShiros, defaults: true }; + if (callback) { callback(null, result); } + return result; + } + + // Check for API_SECRET first as that allows bailing out fast + + if (data.api_secret && authorizeAdminSecret(data.api_secret)) { + requestSucceeded(data.ip); var admin = shiroTrie.new(); admin.add(['*']); - return callback(null, { shiros: [ admin ] }); + const result = { shiros: [admin] }; + if (callback) { callback(null, result); } + return result; } - if (data.token) { - jwt.verify(data.token, env.api_secret, function result(err, verified) { - if (err) { - return callback(err, { shiros: [ ] }); - } else { - authorization.resolveAccessToken (verified.accessToken, callback, defaultShiros); - } - }); - } else { - return callback(null, { shiros: defaultShiros }); + // If we reach this point, we must be dealing with a role based token + + let token = null; + + // Tokens have to be well formed JWTs + try { + const verified = env.enclave.verifyJWT(data.token); + token = verified.accessToken; + } catch (err) {} + + // Check if there's a token in the secret + + if (!token && data.api_secret) { + if (storage.doesAccessTokenExist(data.api_secret)) { + token = data.api_secret; + } + } + + if (token) { + requestSucceeded(data.ip); + const results = authorization.resolveAccessToken(token, null, defaultShiros); + if (callback) { callback(null, results); } + return results; } + console.error('Resolving secret/token to permissions failed'); + addFailedRequest(data.ip); + + ctx.bus.emit('admin-notify', { + title: ctx.language.translate('Failed authentication') + , message: ctx.language.translate('A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?', data.ip) + }); + + if (callback) { callback('All validation failed', {}); } + return {}; + }; authorization.resolveAccessToken = function resolveAccessToken (accessToken, callback, defaultShiros) { @@ -176,105 +225,82 @@ function init (env, ctx) { let resolved = storage.resolveSubjectAndPermissions(accessToken); if (!resolved || !resolved.subject) { - return callback('Subject not found', null); + if (callback) { callback('Subject not found', null); } + return null; } let shiros = resolved.shiros.concat(defaultShiros); - return callback(null, { shiros: shiros, subject: resolved.subject }); + const result = { shiros, subject: resolved.subject }; + if (callback) { callback(null, result); } + return result; }; - authorization.isPermitted = function isPermitted (permission, opts) { + /** + * Check if the client has a permission execute an action, + * based on an API KEY or JWT in the request. + * + * Used to authorize API calls + * + * @param {*} permission Permission being checked + */ + authorization.isPermitted = function isPermitted (permission) { - - mkopts(opts); authorization.seenPermissions = _.chain(authorization.seenPermissions) .push(permission) .sort() .uniq() .value(); - function check(req, res, next) { + async function check (req, res, next) { var remoteIP = getRemoteIP(req); + var secret = apiSecretFromRequest(req); + var token = extractJWTfromRequest(req); - var secret = adminSecretFromRequest(req); - var defaultShiros = storage.rolesToShiros(defaultRoles); - - if (storage.doesAccessTokenExist(secret)) { - var resolved = storage.resolveSubjectAndPermissions (secret); - - if (authorization.checkMultiple(permission, resolved.shiros)) { - console.log(LOG_GRANTED, remoteIP, resolved.accessToken , permission); - next(); - } else if (authorization.checkMultiple(permission, defaultShiros)) { - console.log(LOG_GRANTED, remoteIP, resolved.accessToken, permission, 'default'); - next( ); - } else { - console.log(LOG_DENIED, remoteIP, resolved.accessToken, permission); - res.sendJSONStatus(res, consts.HTTP_UNAUTHORIZED, 'Unauthorized', 'Invalid/Missing'); - } - return; - } + const data = { api_secret: secret, token, ip: remoteIP }; - if (authorizeAdminSecretWithRequest(req)) { - console.log(LOG_GRANTED, remoteIP, 'api-secret', permission); - next( ); - return; - } + const permissions = await authorization.resolve(data); + const permitted = authorization.checkMultiple(permission, permissions.shiros); - var token = extractToken(req); - - if (token) { - jwt.verify(token, env.api_secret, function result(err, verified) { - if (err) { - console.info('Error verifying Authorized Token', err); - res.status(consts.HTTP_UNAUTHORIZED).send('Unauthorized - Invalid/Missing'); - } else { - var resolved = storage.resolveSubjectAndPermissions(verified.accessToken); - if (authorization.checkMultiple(permission, resolved.shiros)) { - console.log(LOG_GRANTED, remoteIP, verified.accessToken , permission); - next(); - } else if (authorization.checkMultiple(permission, defaultShiros)) { - console.log(LOG_GRANTED, remoteIP, verified.accessToken, permission, 'default'); - next( ); - } else { - console.log(LOG_DENIED, remoteIP, verified.accessToken, permission); - res.sendJSONStatus(res, consts.HTTP_UNAUTHORIZED, 'Unauthorized', 'Invalid/Missing'); - } - } - }); - } else { - if (authorization.checkMultiple(permission, defaultShiros)) { - console.log(LOG_GRANTED, remoteIP, 'no-token', permission, 'default'); - return next( ); - } - console.log(LOG_DENIED, remoteIP, 'no-token', permission); - res.sendJSONStatus(res, consts.HTTP_UNAUTHORIZED, 'Unauthorized', 'Invalid/Missing'); + if (permitted) { + next(); + return; } + res.sendJSONStatus(res, consts.HTTP_UNAUTHORIZED, 'Unauthorized', 'Invalid/Missing'); } return check; + }; + /** + * Generates a JWT based on an access token / authorizes an existing token + * + * @param {*} accessToken token to be used for generating a JWT for the client + */ authorization.authorize = function authorize (accessToken) { - var subject = storage.findSubject(accessToken); + + let userToken = accessToken; + const decodedToken = env.enclave.verifyJWT(accessToken); + + if (decodedToken && decodedToken.accessToken) { + userToken = decodedToken.accessToken; + } + + var subject = storage.findSubject(userToken); var authorized = null; if (subject) { - var token = jwt.sign( { accessToken: subject.accessToken }, env.api_secret, { expiresIn: '1h' } ); - - //decode so we can tell the client the issued and expired times - var decoded = jwt.decode(token); + const token = env.enclave.signJWT({ accessToken: subject.accessToken }); + const decoded = env.enclave.verifyJWT(token); var roles = _.uniq(subject.roles.concat(defaultRoles)); authorized = { - token: token + token , sub: subject.name - // not sending roles to client to prevent us from treating them as magic - // instead group permissions by role so the we can create correct shiros on the client , permissionGroups: _.map(roles, storage.roleToPermissions) , iat: decoded.iat , exp: decoded.exp diff --git a/lib/authorization/storage.js b/lib/authorization/storage.js index d602470add6..054f9a07b0d 100644 --- a/lib/authorization/storage.js +++ b/lib/authorization/storage.js @@ -151,12 +151,9 @@ function init (env, ctx) { } storage.subjects = _.map(results, function eachSubject (subject) { - if (env.api_secret) { - var shasum = crypto.createHash('sha1'); - shasum.update(env.api_secret); - shasum.update(subject._id.toString()); + if (env.enclave.isApiKeySet()) { + subject.digest = env.enclave.getSubjectHash(subject._id.toString()); var abbrev = subject.name.toLowerCase().replace(/[\W]/g, '').substring(0, 10); - subject.digest = shasum.digest('hex'); subject.accessToken = abbrev + '-' + subject.digest.substring(0, 16); subject.accessTokenDigest = storage.getSHA1(subject.accessToken); } @@ -210,7 +207,6 @@ function init (env, ctx) { if (!accessToken) return null; - function checkToken(accessToken) { var split_token = accessToken.split('-'); var prefix = split_token ? _.last(split_token) : ''; diff --git a/lib/client/adminnotifiesclient.js b/lib/client/adminnotifiesclient.js new file mode 100644 index 00000000000..e301d6c7c5b --- /dev/null +++ b/lib/client/adminnotifiesclient.js @@ -0,0 +1,103 @@ +'use strict'; + +function init (client, $) { + + var notifies = {}; + + client.notifies = notifies; + + notifies.notifies = []; + notifies.drawer = $('#adminNotifiesDrawer'); + notifies.button = $('#adminnotifies'); + + notifies.updateAdminNotifies = function updateAdminNotifies() { + + var src = '/api/v1/adminnotifies?t=' + new Date().getTime(); + + $.ajax({ + method: 'GET' + , url: src + , headers: client.headers() + }).done(function success (results) { + if (results.message) { + var m = results.message; + client.notifies.notifies = m.notifies; + client.notifies.notifyCount = m.notifyCount; + if (m.notifyCount > 0) { + notifies.button.show(); + } + } + window.setTimeout(notifies.updateAdminNotifies, 1000*60); + }).fail(function fail () { + console.error('Failed to load notifies'); + window.setTimeout(notifies.updateAdminNotifies, 1000*60); + }); + } + + notifies.updateAdminNotifies(); + + function wrapmessage(title, message, count, ago, persistent) { + let html = '

' + title + '

' + message + '

'; + + let additional = ''; + + if (count > 1) additional += client.translate('Event repeated %1 times.', count) + ' '; + let units = client.translate('minutes'); + if (ago > 60) { + ago = ago / 60; + ago = Math.round((ago + Number.EPSILON) * 10) / 10; + units = client.translate('hours'); + } + if (ago == 0) { ago = client.translate('less than 1'); } + if (!persistent && ago) additional += client.translate('Last recorded %1 %2 ago.', ago, units); + + if (additional) html += '

' + additional + '

' + return html; + } + + notifies.prepare = function prepare() { + + var translate = client.translate; + + var html = '
'; + var messages = client.notifies.notifies; + var messageCount = client.notifies.notifyCount; + + if (messages && messages.length > 0) { + html += '

' + translate('You have administration messages') + '

'; + for(var i = 0 ; i < messages.length; i++) { + /* eslint-disable-next-line security/detect-object-injection */ // verified false positive + var m = messages[i]; + const ago = Math.round((Date.now() - m.lastRecorded) / 60000); + html += wrapmessage(translate(m.title), translate(m.message), m.count, ago, m.persistent); + } + } else { + if (messageCount > 0) { + html = wrapmessage(translate('Admin messages in queue'), translate('Please sign in using the API_SECRET to see your administration messages')); + } else { + html = wrapmessage(translate('Queue empty'), translate('There are no admin messages in queue')); + } + } + html += '
'; + notifies.drawer.html(html); + } + + function maybePrevent (event) { + if (event) { + event.preventDefault(); + } + } + + notifies.toggleDrawer = function toggleDrawer (event) { + client.browserUtils.toggleDrawer('#adminNotifiesDrawer', notifies.prepare); + maybePrevent(event); + }; + + notifies.button.click(notifies.toggleDrawer); + notifies.button.css('color','red'); + + return notifies; + +} + +module.exports = init; diff --git a/lib/client/boluscalc.js b/lib/client/boluscalc.js index ae019ebdfef..da61e983616 100644 --- a/lib/client/boluscalc.js +++ b/lib/client/boluscalc.js @@ -252,6 +252,7 @@ function init (client, $) { var html = ''; var carbs = 0; for (var fi = 0; fi < record.foods.length; fi++) { + /* eslint-disable-next-line security/detect-object-injection */ // verified false positive var f = record.foods[fi]; carbs += f.carbs * f.portions; html += ''; @@ -426,6 +427,7 @@ function init (client, $) { if (record.foods.length) { var gisum = 0; for (var fi = 0; fi < record.foods.length; fi++) { + /* eslint-disable-next-line security/detect-object-injection */ // verified false positive var f = record.foods[fi]; record.carbs += f.carbs * f.portions; gisum += f.carbs * f.portions * f.gi; @@ -576,7 +578,7 @@ function init (client, $) { foods = []; $('#bc_addfoodarea').css('display', ''); } else { - var qp = quickpicks[qpiselected]; + var qp = quickpicks[parseInt(qpiselected)]; foods = _.cloneDeep(qp.foods); $('#bc_addfoodarea').css('display', 'none'); } @@ -589,18 +591,20 @@ function init (client, $) { var qpiselected = $('#bc_quickpick').val(); if (qpiselected >= 0) { - var qp = quickpicks[qpiselected]; + var qp = quickpicks[parseInt(qpiselected)]; if (qp.hideafteruse) { qp.hidden = true; - var apisecrethash = localStorage.getItem('apisecrethash'); - var dataJson = JSON.stringify(qp, null, ' '); - - var xhr = new XMLHttpRequest(); - xhr.open('PUT', '/api/v1/food/', true); - xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8'); - xhr.setRequestHeader('api-secret', apisecrethash); - xhr.send(dataJson); + $.ajax({ + method: 'PUT' + , url: '/api/v1/food/' + , headers: client.headers() + , data: qp + }).done(function treatmentSaved (response) { + console.info('quick pick saved', response); + }).fail(function treatmentSaveFail (response) { + console.info('quick pick failed to save', response); + }); } } @@ -650,6 +654,7 @@ function init (client, $) { }); $('#bc_quickpick').empty().append(''); for (var i = 0; i < records.length; i++) { + /* eslint-disable-next-line security/detect-object-injection */ // verified false positive var r = records[i]; $('#bc_quickpick').append(''); } @@ -694,6 +699,7 @@ function init (client, $) { } $('#bc_data').empty(); for (var i = 0; i < foodlist.length; i++) { + /* eslint-disable security/detect-object-injection */ // verified false positive if (filter.category !== '' && foodlist[i].category !== filter.category) { continue; } if (filter.subcategory !== '' && foodlist[i].subcategory !== filter.subcategory) { continue; } if (filter.name !== '' && foodlist[i].name.toLowerCase().indexOf(filter.name.toLowerCase()) < 0) { continue; } @@ -703,6 +709,7 @@ function init (client, $) { o += foodlist[i].unit + ' | '; o += 'Carbs: ' + foodlist[i].carbs + ' g'; $('#bc_data').append(''); + /* eslint-enable security/detect-object-injection */ // verified false positive } $('#bc_addportions').val('1'); @@ -726,8 +733,11 @@ function init (client, $) { var index = $('#bc_data').val(); var portions = parseFloat($('#bc_addportions').val().replace(',', '.')); if (index !== null && !isNaN(portions) && portions > 0) { + index = parseInt(index); + /* eslint-disable security/detect-object-injection */ // verified false positive foodlist[index].portions = portions; foods.push(_.cloneDeep(foodlist[index])); + /* eslint-enable security/detect-object-injection */ // verified false positive $(this).dialog('close'); boluscalc.calculateInsulin(); } diff --git a/lib/client/browser-settings.js b/lib/client/browser-settings.js index 0a8e1469a11..d2cb675a100 100644 --- a/lib/client/browser-settings.js +++ b/lib/client/browser-settings.js @@ -13,10 +13,32 @@ function init (client, serverSettings, $) { var storage = Storages.localStorage; var settings = require('../settings')(); + function updateBolusRender () { + var bolusSettings = client.settings.extendedSettings.bolus || {}; + + var allRenderOverOptions = [5, 1, 0.5, 0.1]; + if (_.isNumber(bolusSettings.renderOver) && bolusSettings.renderOver > 0 && bolusSettings.renderOver < Number.MAX_SAFE_INTEGER) { + allRenderOverOptions.push(_.toNumber(bolusSettings.renderOver)); + } + var sortedRenderOverOptions = _.chain(allRenderOverOptions).uniq().sort().reverse().value(); + + _.forEach(sortedRenderOverOptions, function (optionValue) { + $('#bolusRenderOver').append( + $('') + .attr('value', optionValue) + .text(client.translate('%1 U and Over', { params: [optionValue] })) + ); + }); + + $('#bolusRenderOver').val(String(bolusSettings.renderOver || 0.5)); + $('#bolusRenderFormat').val(bolusSettings.renderFormat ? bolusSettings.renderFormat : 'default'); + $('#bolusRenderFormatSmall').val(bolusSettings.renderFormatSmall ? bolusSettings.renderFormatSmall : 'default'); + + } + function loadForm () { var utils = client.utils; - var language = require('../language')(); - language.set(settings.language); + var language = client.language; var translate = language.translate; function appendThresholdValue (threshold) { @@ -71,7 +93,7 @@ function init (client, serverSettings, $) { $('#basalrender').val(settings.extendedSettings.basal ? settings.extendedSettings.basal.render : 'none'); - $('#bolusrender').val(settings.extendedSettings.bolus ? settings.extendedSettings.bolus.render : 'all'); + updateBolusRender(); if (settings.timeFormat === 24) { $('#24-browser').prop('checked', true); @@ -115,12 +137,12 @@ function init (client, serverSettings, $) { if (settings.showPlugins.indexOf(e.plugin.name) > -1) { const label = e.plugin.label; const dl = $('
'); - dl.append(`
${label}
`); + dl.append(`
` + translate(label) + `
`); e.prefs.forEach(function(p) { const id = e.plugin.name + "-" + p.id; const label = p.label; if (p.type == 'boolean') { - const html = $(`
`); + const html = $(`
`); dl.append(html); if (storage.get(id) == true) { toggleCheckboxes.push(id); @@ -148,6 +170,7 @@ function init (client, serverSettings, $) { }); //if there is a token, append it to each of the links in the hamburger menu + /* eslint-disable security/detect-possible-timing-attacks */ // verified false positive if (token != '') { token = '?token=' + token; $('#reportlink').attr('href', 'report' + token); @@ -163,7 +186,7 @@ function init (client, serverSettings, $) { storage.remove(name); }); storage.remove('basalrender'); - storage.remove('bolusrender'); + storage.remove('bolus'); event.preventDefault(); client.browserUtils.reload(); }); @@ -193,6 +216,7 @@ function init (client, serverSettings, $) { function storeInBrowser (data) { Object.keys(data).forEach(k => { + /* eslint-disable-next-line security/detect-object-injection */ // verified false positive storage.set(k, data[k]); }); } @@ -216,7 +240,11 @@ function init (client, serverSettings, $) { , language: $('#language').val() , scaleY: $('#scaleY').val() , basalrender: $('#basalrender').val() - , bolusrender: $('#bolusrender').val() + , bolus: { + renderOver: $('#bolusRenderOver').val() + , renderFormat: $('#bolusRenderFormat').val() + , renderFormatSmall: $('#bolusRenderFormatSmall').val() + } , showPlugins: checkedPluginNames() , storageVersion: STORAGE_VERSION }); @@ -253,6 +281,7 @@ function init (client, serverSettings, $) { try { settings.eachSetting(function setEach (name) { var stored = storage.get(name); + /* eslint-disable-next-line security/detect-object-injection */ // verified false positive return stored !== undefined && stored !== null ? stored : serverSettings.settings[name]; }); @@ -277,11 +306,17 @@ function init (client, serverSettings, $) { settings.extendedSettings.basal.render = basalStored !== null ? basalStored : settings.extendedSettings.basal.render; if (!settings.extendedSettings.bolus) { - settings.extendedSettings.bolus = {}; + settings.extendedSettings.bolus = { + renderOver: 0 + , renderFormat: 'default' + , renderFormatSmall: 'default' + }; } - var bolusStored = storage.get('bolusrender'); - settings.extendedSettings.bolus.render = bolusStored !== null ? bolusStored : settings.extendedSettings.bolus.render; + var bolusStored = storage.get('bolus'); + settings.extendedSettings.bolus.renderOver = bolusStored !== null ? _.toNumber(bolusStored.renderOver) : settings.extendedSettings.bolus.renderOver; + settings.extendedSettings.bolus.renderFormat = bolusStored !== null ? bolusStored.renderFormat : settings.extendedSettings.bolus.renderFormat; + settings.extendedSettings.bolus.renderFormatSmall = bolusStored !== null ? bolusStored.renderFormatSmall : settings.extendedSettings.bolus.renderFormatSmall; } catch (err) { console.error(err); diff --git a/lib/client/browser-utils.js b/lib/client/browser-utils.js index 634afb2ab40..e587480a6f2 100644 --- a/lib/client/browser-utils.js +++ b/lib/client/browser-utils.js @@ -18,16 +18,6 @@ function init ($) { , opacity: 0.75 }; - var querystring = queryParms(); - - if (querystring.notify) { - showNotification(querystring.notify, querystring.notifytype); - } - - if (querystring.drawer) { - openDrawer('#drawer'); - } - $('#drawerToggle').click(function(event) { toggleDrawer('#drawer'); event.preventDefault(); diff --git a/lib/client/careportal.js b/lib/client/careportal.js index a6edfe3ec22..9c18609ce1f 100644 --- a/lib/client/careportal.js +++ b/lib/client/careportal.js @@ -52,7 +52,7 @@ function init (client, $) { submitHooks = {}; _.forEach(careportal.allEventTypes, function each (event) { - inputMatrix[event.val] = _.pick(event, ['otp','remoteCarbs', 'remoteAbsorption', 'remoteBolus', 'bg', 'insulin', 'carbs', 'protein', 'fat', 'prebolus', 'duration', 'percent', 'absolute', 'profile', 'split', 'reasons', 'targets']); + inputMatrix[event.val] = _.pick(event, ['otp','remoteCarbs', 'remoteAbsorption', 'remoteBolus', 'bg', 'insulin', 'carbs', 'protein', 'fat', 'prebolus', 'duration', 'percent', 'absolute', 'profile', 'split', 'sensor', 'reasons', 'targets']); submitHooks[event.val] = event.submitHook; }); } @@ -76,6 +76,13 @@ function init (client, $) { } } + // validate the eventType input - should never hit this but bail if we do + if (!Object.prototype.hasOwnProperty.call(inputMatrix, eventType)) { + maybePrevent(event); + return; + } + + /* eslint-disable security/detect-object-injection */ // verified false positive by check above var reasons = inputMatrix[eventType]['reasons']; $('#reasonLabel').css('display', displayType(reasons && reasons.length > 0)); $('#targets').css('display', displayType(inputMatrix[eventType]['targets'])); @@ -92,6 +99,8 @@ function init (client, $) { $('#proteinGivenLabel').css('display', displayType(inputMatrix[eventType]['protein'])); $('#fatGivenLabel').css('display', displayType(inputMatrix[eventType]['fat'])); + $('#sensorInfo').css('display', displayType(inputMatrix[eventType]['sensor'])); + $('#durationLabel').css('display', displayType(inputMatrix[eventType]['duration'])); $('#percentLabel').css('display', displayType(inputMatrix[eventType]['percent'] && $('#absolute').val() === '')); $('#absoluteLabel').css('display', displayType(inputMatrix[eventType]['absolute'] && $('#percent').val() === '')); @@ -115,19 +124,28 @@ function init (client, $) { resetIfHidden(inputMatrix[eventType]['carbs'], '#carbsGiven'); resetIfHidden(inputMatrix[eventType]['protein'], '#proteinGiven'); resetIfHidden(inputMatrix[eventType]['fat'], '#fatGiven'); + resetIfHidden(inputMatrix[eventType]['sensor'], '#sensorCode'); + resetIfHidden(inputMatrix[eventType]['sensor'], '#transmitterId'); resetIfHidden(inputMatrix[eventType]['duration'], '#duration'); resetIfHidden(inputMatrix[eventType]['absolute'], '#absolute'); resetIfHidden(inputMatrix[eventType]['percent'], '#percent'); resetIfHidden(inputMatrix[eventType]['prebolus'], '#preBolus'); resetIfHidden(inputMatrix[eventType]['split'], '#insulinSplitNow'); resetIfHidden(inputMatrix[eventType]['split'], '#insulinSplitExt'); + /* eslint-enable security/detect-object-injection */ // verified false positive maybePrevent(event); }; careportal.reasonable = function reasonable () { var eventType = $('#eventType').val(); - var reasons = inputMatrix[eventType]['reasons']; + var reasons = []; + + // validate the eventType input before getting the reasons list + if (Object.prototype.hasOwnProperty.call(inputMatrix, eventType)) { + /* eslint-disable-next-line security/detect-object-injection */ // verified false positive + reasons = inputMatrix[eventType]['reasons']; + } var selected = $('#reason').val(); var reason = _.find(reasons, function matches (r) { @@ -213,6 +231,8 @@ function init (client, $) { $('#carbsGiven').val(''); $('#proteinGiven').val(''); $('#fatGiven').val(''); + $('#sensorCode').val(''); + $('#transmitterId').val(''); $('#insulinGiven').val(''); $('#duration').val(''); $('#percent').val(''); @@ -244,6 +264,8 @@ function init (client, $) { , carbs: $('#carbsGiven').val() , protein: $('#proteinGiven').val() , fat: $('#fatGiven').val() + , sensorCode: $('#sensorCode').val() + , transmitterId: $('#transmitterId').val() , insulin: $('#insulinGiven').val() , duration: times.msecs(parse_duration($('#duration').val())).mins < 1 ? $('#duration').val() : times.msecs(parse_duration($('#duration').val())).mins , percent: $('#percent').val() @@ -259,7 +281,13 @@ function init (client, $) { delete data.preBolus; } - var reasons = inputMatrix[eventType]['reasons']; + var reasons = []; + + // validate the eventType input before getting the reasons list + if (Object.prototype.hasOwnProperty.call(inputMatrix, eventType)) { + /* eslint-disable-next-line security/detect-object-injection */ // verified false positive + reasons = inputMatrix[eventType]['reasons']; + } var reason = _.find(reasons, function matches (r) { return r.name === selectedReason; }); @@ -307,9 +335,11 @@ function init (client, $) { let d = {}; Object.keys(data).forEach(function(key) { + /* eslint-disable security/detect-object-injection */ // verified false positive if (data[key] !== "" && data[key] !== null) { - d[key] = data[key] - } + d[key] = data[key] + } + /* eslint-enable security/detect-object-injection */ // verified false positive }); return d; @@ -415,6 +445,8 @@ function init (client, $) { pushIf(data.carbs, translate('Carbs Given') + ': ' + data.carbs); pushIf(data.protein, translate('Protein Given') + ': ' + data.protein); pushIf(data.fat, translate('Fat Given') + ': ' + data.fat); + pushIf(data.sensorCode, translate('Sensor Code') + ': ' + data.sensorCode); + pushIf(data.transmitterId, translate('Transmitter ID') + ': ' + data.transmitterId); pushIf(data.insulin, translate('Insulin Given') + ': ' + data.insulin); pushIf(data.eventType === 'Combo Bolus', translate('Combo Bolus') + ': ' + data.splitNow + '% : ' + data.splitExt + '%'); pushIf(data.duration, translate('Duration') + ': ' + data.duration + ' ' + translate('mins')); diff --git a/lib/client/chart.js b/lib/client/chart.js index d84dd0998b5..5c417916bc2 100644 --- a/lib/client/chart.js +++ b/lib/client/chart.js @@ -703,6 +703,7 @@ function init (client, d3, $) { var pointTypes = client.settings.showForecast.split(' '); var points = pointTypes.reduce( function (points, type) { + /* eslint-disable-next-line security/detect-object-injection */ // verified false positive return points.concat(client.sbx.pluginBase.forecastPoints[type] || []); }, [] ); diff --git a/lib/client/clock-client.js b/lib/client/clock-client.js index 73ac9c3baca..e5294e9bd6f 100644 --- a/lib/client/clock-client.js +++ b/lib/client/clock-client.js @@ -4,8 +4,6 @@ var browserSettings = require('./browser-settings'); var client = {}; var latestProperties = {}; -client.settings = browserSettings(client, window.serverSettings, $); - client.query = function query () { var parts = (location.search || '?').substring(1).split('&'); var token = ''; @@ -92,16 +90,19 @@ client.render = function render () { for (let param in faceParams) { if (param === '0') { - bgColor = (faceParams[param].substr(0, 1) === 'c'); // do we want colorful background? - alwaysShowTime = (faceParams[param].substr(1, 1) === 'y'); // always show "stale time" text? - staleMinutes = (faceParams[param].substr(2, 2) - 0 >= 0) ? faceParams[param].substr(2, 2) : 13; // threshold value (0=never) + /* eslint-disable-next-line security/detect-object-injection */ // verified false positive + let faceParam = faceParams[param]; + bgColor = (faceParam.substr(0, 1) === 'c'); // do we want colorful background? + alwaysShowTime = (faceParam.substr(1, 1) === 'y'); // always show "stale time" text? + staleMinutes = (faceParam.substr(2, 2) - 0 >= 0) ? faceParam.substr(2, 2) : 13; // threshold value (0=never) } else if (!clockCreated) { - let div = '
0) ? ' style="' + ((faceParams[param].substr(0, 2) === 'ar') ? 'height' : 'font-size') + ':' + faceParams[param].substr(2, 2) + 'vmin"' : '') + '>
'; + /* eslint-disable-next-line security/detect-object-injection */ // verified false positive + let faceParam = faceParams[param]; + let div = '
0) ? ' style="' + ((faceParam.substr(0, 2) === 'ar') ? 'height' : 'font-size') + ':' + faceParam.substr(2, 2) + 'vmin"' : '') + '>
'; $inner.append(div); } } - // Convert BG to mmol/L if necessary. let displayValue = rec.scaled; // Insert the delta value text. @@ -202,7 +203,9 @@ function updateClock () { } client.init = function init () { + console.log('Initializing clock'); + client.settings = browserSettings(client, window.serverSettings, $); client.query(); setInterval(client.query, 20 * 1000); // update every 20 seconds diff --git a/lib/client/d3locales.js b/lib/client/d3locales.js index 1af15ba3fb6..0e050edf380 100644 --- a/lib/client/d3locales.js +++ b/lib/client/d3locales.js @@ -234,9 +234,14 @@ d3locales.locale = function locale (language) { ,bg: 'bg_BG' }; var loc = 'en_US'; - if (mapper[language]) { + + // validate the eventType input before getting the reasons list + if (Object.prototype.hasOwnProperty.call(mapper, language)) { + /* eslint-disable-next-line security/detect-object-injection */ // verified false positive loc = mapper[language]; } + + /* eslint-disable-next-line security/detect-object-injection */ // verified false positive return d3locales[loc]; }; diff --git a/lib/hashauth.js b/lib/client/hashauth.js similarity index 57% rename from lib/hashauth.js rename to lib/client/hashauth.js index 8848ca08ef0..99d867e9212 100644 --- a/lib/hashauth.js +++ b/lib/client/hashauth.js @@ -4,21 +4,22 @@ var crypto = require('crypto'); var Storages = require('js-storage'); var hashauth = { - apisecret: '' - , storeapisecret: false - , apisecrethash: null - , authenticated: false - , initialized: false - , tokenauthenticated: false + initialized: false }; -hashauth.init = function init(client, $) { +hashauth.init = function init (client, $) { - if (hashauth.initialized) { - return hashauth; - } + hashauth.apisecret = ''; + hashauth.storeapisecret = false; + hashauth.apisecrethash = null; + hashauth.authenticated = false; + hashauth.tokenauthenticated = false; + hashauth.hasReadPermission = false; + hashauth.isAdmin = false; + hashauth.hasWritePermission = false; + hashauth.permissionlevel = 'NONE'; - hashauth.verifyAuthentication = function verifyAuthentication(next) { + hashauth.verifyAuthentication = function verifyAuthentication (next) { hashauth.authenticated = false; $.ajax({ method: 'GET' @@ -26,50 +27,57 @@ hashauth.init = function init(client, $) { , headers: client.headers() }).done(function verifysuccess (response) { - if (response.message.rolefound == 'FOUND') { + + var message = response.message; + + if (message.canRead) { hashauth.hasReadPermission = true; } + if (message.canWrite) { hashauth.hasWritePermission = true; } + if (message.isAdmin) { hashauth.isAdmin = true; } + if (message.permissions) { hashauth.permissionlevel = message.permissions; } + + if (message.rolefound == 'FOUND') { hashauth.tokenauthenticated = true; console.log('Token Authentication passed.'); - client.authorizeSocket(); next(true); return; } - if (response.message.message === 'OK') { + if (response.message === 'OK' || message.message === 'OK') { hashauth.authenticated = true; console.log('Authentication passed.'); next(true); return; } - console.log('Authentication failed.', response); - hashauth.removeAuthentication(); - next(false); - return; - + console.log('Authentication failed!', response); + hashauth.removeAuthentication(); + next(false); + return; + }).fail(function verifyfail (err) { - console.log('Authentication failed.', err); + console.log('Authentication failure', err); hashauth.removeAuthentication(); next(false); }); }; - hashauth.injectHtml = function injectHtml ( ) { + hashauth.injectHtml = function injectHtml () { if (!hashauth.injectedHtml) { $('#authentication_placeholder').html(hashauth.inlineCode()); hashauth.injectedHtml = true; } }; - hashauth.initAuthentication = function initAuthentication(next) { + hashauth.initAuthentication = function initAuthentication (next) { hashauth.apisecrethash = hashauth.apisecrethash || Storages.localStorage.get('apisecrethash') || null; - hashauth.verifyAuthentication(function () { + hashauth.verifyAuthentication(function() { hashauth.injectHtml(); - if (next) { next( hashauth.isAuthenticated() ); } + if (next) { next(hashauth.isAuthenticated()); } }); return hashauth; }; - hashauth.removeAuthentication = function removeAuthentication(event) { + hashauth.removeAuthentication = function removeAuthentication (event) { Storages.localStorage.remove('apisecrethash'); @@ -92,20 +100,20 @@ hashauth.init = function init(client, $) { var translate = client.translate; hashauth.injectHtml(); - var clientWidth = window.innerWidth - || document.documentElement.clientWidth - || document.body.clientWidth; + var clientWidth = window.innerWidth || + document.documentElement.clientWidth || + document.body.clientWidth; clientWidth = Math.min(400, clientWidth); - $( '#requestauthenticationdialog' ).dialog({ - width: clientWidth + $('#requestauthenticationdialog').dialog({ + width: clientWidth , height: 270 , closeText: '' , buttons: [ { id: 'requestauthenticationdialog-btn' - , text: translate('Update') + , text: translate('Authenticate') , click: function() { var dialog = this; hashauth.processSecret($('#apisecret').val(), $('#storeapisecret').is(':checked'), function done (close) { @@ -115,7 +123,7 @@ hashauth.init = function init(client, $) { } else { client.afterAuth(true); } - $( dialog ).dialog( 'close' ); + $(dialog).dialog('close'); } else { $('#apisecret').val('').focus(); } @@ -123,8 +131,8 @@ hashauth.init = function init(client, $) { } } ] - , open: function open ( ) { - $('#apisecret').off('keyup').on('keyup' ,function pressed (e) { + , open: function open () { + $('#apisecret').off('keyup').on('keyup', function pressed (e) { if (e.keyCode === $.ui.keyCode.ENTER) { $('#requestauthenticationdialog-btn').trigger('click'); } @@ -140,7 +148,7 @@ hashauth.init = function init(client, $) { return false; }; - hashauth.processSecret = function processSecret(apisecret, storeapisecret, callback) { + hashauth.processSecret = function processSecret (apisecret, storeapisecret, callback) { var translate = client.translate; hashauth.apisecret = apisecret; @@ -155,10 +163,10 @@ hashauth.init = function init(client, $) { shasum.update(hashauth.apisecret); hashauth.apisecrethash = shasum.digest('hex'); - hashauth.verifyAuthentication( function(isok) { + hashauth.verifyAuthentication(function(isok) { if (isok) { if (hashauth.storeapisecret) { - Storages.localStorage.set('apisecrethash',hashauth.apisecrethash); + Storages.localStorage.set('apisecrethash', hashauth.apisecrethash); // TODO show dialog first, then reload if (hashauth.tokenauthenticated) client.browserUtils.reload(); } @@ -176,43 +184,57 @@ hashauth.init = function init(client, $) { } }; - hashauth.inlineCode = function inlineCode() { + hashauth.inlineCode = function inlineCode () { var translate = client.translate; var status = null; + if (!hashauth.isAdmin) { + $('.needsadminaccess').hide(); + } else { + $('.needsadminaccess').show(); + } + + if (client.updateAdminMenu) client.updateAdminMenu(); + if (client.authorized || hashauth.tokenauthenticated) { status = translate('Authorized by token'); if (client.authorized && client.authorized.sub) { - status += '
' + client.authorized.sub + ': ' + client.authorized.permissionGroups.join(', ') + ''; + status += '
' + translate('Auth role') + ': ' + client.authorized.sub; + if (hashauth.hasReadPermission) { status += '
' + translate('Data reads enabled'); } + if (hashauth.hasWritePermission) { status += '
' + translate('Data writes enabled'); } + if (!hashauth.hasWritePermission) { status += '
' + translate('Data writes not enabled'); } } - if (hashauth.apisecrethash) - { + if (hashauth.apisecrethash) { status += '
(' + translate('Remove stored token') + ')'; } else { - status += '
(' + translate('view without token') + ')'; + status += '
(' + translate('view without token') + ')'; } } else if (hashauth.isAuthenticated()) { - console.info('status isAuthenticated', hashauth); status = translate('Admin authorized') + ' (' + translate('Remove') + ')'; } else { - status = translate('Unauthorized') + ' (' + translate('Authenticate') + ')'; + status = translate('Unauthorized') + + '
' + + translate('Reads enabled in default permissions') + + '
' + + ' (' + + translate('Authenticate') + ')'; } var html = - ''+ + '' + '
' + status + '
'; return html; }; - hashauth.updateSocketAuth = function updateSocketAuth() { + hashauth.updateSocketAuth = function updateSocketAuth () { client.socket.emit( 'authorize' , { @@ -220,8 +242,7 @@ hashauth.init = function init(client, $) { , secret: client.authorized && client.authorized.token ? null : client.hashauth.hash() , token: client.authorized && client.authorized.token } - , function authCallback(data) { - console.log('Client rights: ',data); + , function authCallback (data) { if (!data.read && !client.authorized) { hashauth.requestAuthentication(); } @@ -229,16 +250,17 @@ hashauth.init = function init(client, $) { ); }; - hashauth.hash = function hash() { + hashauth.hash = function hash () { return hashauth.apisecrethash; }; - hashauth.isAuthenticated = function isAuthenticated() { + hashauth.isAuthenticated = function isAuthenticated () { return hashauth.authenticated || hashauth.tokenauthenticated; }; hashauth.initialized = true; + return hashauth; -}; +} module.exports = hashauth; diff --git a/lib/client/index.js b/lib/client/index.js index 53515e3b943..a60b7c624ad 100644 --- a/lib/client/index.js +++ b/lib/client/index.js @@ -17,11 +17,14 @@ var receiveDData = require('./receiveddata'); var brushing = false; +var browserSettings; + var client = {}; -$('#loadingMessageText').html('Connecting to server'); +var hashauth = require('./hashauth'); +client.hashauth = hashauth.init(client, $); -client.hashauth = require('../hashauth').init(client, $); +$('#loadingMessageText').html('Connecting to server'); client.headers = function headers () { if (client.authorized) { @@ -65,13 +68,11 @@ client.init = function init (callback) { if (serverSettings.runtimeState !== 'loaded') { console.log('Server is still loading data'); $('#loadingMessageText').html('Server is starting and still loading data, retrying load in 5 seconds'); - window.setTimeout(window.Nightscout.client.init(), 5000); + window.setTimeout(window.Nightscout.client.init, 5000); return; } client.settingsFailed = false; - console.log('Application appears to be online'); - $('#centerMessagePanel').hide(); - client.load(serverSettings, callback); + client.loadLanguage(serverSettings, callback); }).fail(function fail (jqXHR) { // check if we couldn't reach the server at all, show offline message @@ -105,13 +106,40 @@ client.init = function init (callback) { // auth failed, hide loader and request for key $('#centerMessagePanel').hide(); client.hashauth.requestAuthentication(function afterRequest () { - client.init(callback); + window.setTimeout(client.init(callback), 5000); }); } }); }; +client.loadLanguage = function loadLanguage (serverSettings, callback) { + + $('#loadingMessageText').html('Loading language file'); + + browserSettings = require('./browser-settings'); + client.settings = browserSettings(client, serverSettings, $); + console.log('language is', client.settings.language); + + let filename = language.getFilename(client.settings.language); + + $.ajax({ + method: 'GET' + , url: '/translations/' + filename + }).done(function success (localization) { + language.offerTranslations(localization); + console.log('Application appears to be online'); + $('#centerMessagePanel').hide(); + client.load(serverSettings, callback); + }).fail(function fail () { + console.error('Loading localization failed, continuing with English'); + console.log('Application appears to be online'); + $('#centerMessagePanel').hide(); + client.load(serverSettings, callback); + }); + +} + client.load = function load (serverSettings, callback) { var FORMAT_TIME_12 = '%-I:%M %p' @@ -142,6 +170,8 @@ client.load = function load (serverSettings, callback) { }; client.now = Date.now(); + client.dataLastUpdated = 0; + client.lastPluginUpdateTime = 0; client.ddata = require('../data/ddata')(); client.defaultForecastTime = times.mins(30).msecs; client.forecastTime = client.now + client.defaultForecastTime; @@ -162,7 +192,6 @@ client.load = function load (serverSettings, callback) { .attr('class', 'tooltip') .style('opacity', 0); - var browserSettings = require('./browser-settings'); client.settings = browserSettings(client, serverSettings, $); language.set(client.settings.language).DOMtranslate($); @@ -173,6 +202,7 @@ client.load = function load (serverSettings, callback) { settings: client.settings , extendedSettings: client.settings.extendedSettings , language: language + , levels: levels }).registerClientDefaults(); browserSettings.loadPluginSettings(client); @@ -192,7 +222,6 @@ client.load = function load (serverSettings, callback) { data: {} , bus: require('../bus')(client.settings, client.ctx) , settings: client.settings - , notifications: require('../notifications')(client.settings, client.ctx) , pluginBase: client.plugins.base(majorPills, minorPills, statusPills, bgStatus, client.tooltip, Storages.localStorage) }; @@ -200,12 +229,16 @@ client.load = function load (serverSettings, callback) { levels.translate = language.translate; client.ctx.levels = levels; + client.ctx.notifications = require('../notifications')(client.settings, client.ctx); + client.sbx = sandbox.clientInit(client.ctx, client.now); client.renderer = require('./renderer')(client, d3, $); //After plugins are initialized with browser settings; browserSettings.loadAndWireForm(); + client.adminnotifies = require('./adminnotifiesclient')(client, $); + if (serverSettings && serverSettings.authorized) { client.authorized = serverSettings.authorized; client.authorized.lat = Date.now(); @@ -235,6 +268,8 @@ client.load = function load (serverSettings, callback) { $('#treatmentDrawerToggle').toggle(treatmentCreateAllowed && client.settings.showPlugins.indexOf('careportal') > -1); $('#boluscalcDrawerToggle').toggle(treatmentCreateAllowed && client.settings.showPlugins.indexOf('boluscalc') > -1); + if (isAuthenticated) client.notifies.updateAdminNotifies(); + // Edit mode editButton.toggle(client.settings.editMode && treatmentUpdateAllowed); editButton.click(function editModeClick (event) { @@ -410,11 +445,6 @@ client.load = function load (serverSettings, callback) { } } - function updateBolusRenderOver () { - var bolusRenderOver = (client.settings.bolusRenderOver || 1) + ' U and Over'; - $('#bolusRenderOver').text(bolusRenderOver); - } - function alarmingNow () { return container.hasClass('alarming'); } @@ -512,6 +542,13 @@ client.load = function load (serverSettings, callback) { function updatePlugins (time) { + if (time > client.lastPluginUpdateTime && time > client.dataLastUpdated) { + if ((time - client.lastPluginUpdateTime) < 1000) { + return; // Don't update the plugins more than once a second + } + client.lastPluginUpdateTime = time; + } + //TODO: doing a clone was slow, but ok to let plugins muck with data? //var ddata = client.ddata.clone(); @@ -776,12 +813,13 @@ client.load = function load (serverSettings, callback) { } function refreshAuthIfNeeded () { - var token = client.browserUtils.queryParms().token; + var clientToken = client.authorized ? client.authorized.token : null; + var token = client.browserUtils.queryParms().token || clientToken; if (token && client.authorized) { var renewTime = (client.authorized.exp * 1000) - times.mins(15).msecs - Math.abs((client.authorized.iat * 1000) - client.authorized.lat); var refreshIn = Math.round((renewTime - client.now) / 1000); if (client.now > renewTime) { - console.info('Refreshing authorization'); + console.info('Refreshing authorization renewal'); $.ajax('/api/v2/authorization/request/' + token, { success: function(authorized) { if (authorized) { @@ -833,9 +871,15 @@ client.load = function load (serverSettings, callback) { function getClientAlarm (level, group) { var key = level + '-' + group; - var alarm = clientAlarms[key]; + var alarm = null; + // validate the key before getting the alarm + if (Object.prototype.hasOwnProperty.call(clientAlarms, key)) { + /* eslint-disable-next-line security/detect-object-injection */ // verified false positive + alarm = clientAlarms[key]; + } if (!alarm) { alarm = { level: level, group: group }; + /* eslint-disable-next-line security/detect-object-injection */ // verified false positive clientAlarms[key] = alarm; } return alarm; @@ -925,6 +969,7 @@ client.load = function load (serverSettings, callback) { document.addEventListener(visibilityChange, function visibilityChanged () { var prevHidden = client.documentHidden; + /* eslint-disable-next-line security/detect-object-injection */ // verified false positive client.documentHidden = document[hidden]; if (prevHidden && !client.documentHidden) { @@ -964,6 +1009,7 @@ client.load = function load (serverSettings, callback) { $('.bgButton').click(function(e) { if (alarmingNow()) { + /* eslint-disable-next-line security/detect-non-literal-fs-filename */ // verified false positive silenceDropdown.open(e); } }); @@ -978,6 +1024,7 @@ client.load = function load (serverSettings, callback) { Storages.localStorage.set('focusHours', hours); refreshChart(); } else { + /* eslint-disable-next-line security/detect-non-literal-fs-filename */ // verified false positive viewDropdown.open(e); } }); @@ -1035,8 +1082,7 @@ client.load = function load (serverSettings, callback) { // Alarms and Text handling //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - client.authorizeSocket = function authorizeSocket() { + client.authorizeSocket = function authorizeSocket () { console.log('Authorizing socket'); var auth_data = { @@ -1050,9 +1096,6 @@ client.load = function load (serverSettings, callback) { 'authorize' , auth_data , function authCallback (data) { - - console.log('Socket auth response', data); - if (!data) { console.log('Crashed!'); client.crashed(); @@ -1103,7 +1146,6 @@ client.load = function load (serverSettings, callback) { socket.on('notification', function(notify) { console.log('notification from server:', notify); - if (notify.timestamp && previousNotifyTimestamp !== notify.timestamp) { previousNotifyTimestamp = notify.timestamp; client.plugins.visualizeAlarm(client.sbx, notify, notify.title + ' ' + notify.message); @@ -1114,7 +1156,6 @@ client.load = function load (serverSettings, callback) { socket.on('announcement', function(notify) { console.info('announcement received from server'); - console.log('notify:', notify); currentAnnouncement = notify; currentAnnouncement.received = Date.now(); updateTitle(); @@ -1122,7 +1163,6 @@ client.load = function load (serverSettings, callback) { socket.on('alarm', function(notify) { console.info('alarm received from server'); - console.log('notify:', notify); var enabled = (isAlarmForHigh() && client.settings.alarmHigh) || (isAlarmForLow() && client.settings.alarmLow); if (enabled) { console.log('Alarm raised!'); @@ -1135,8 +1175,6 @@ client.load = function load (serverSettings, callback) { socket.on('urgent_alarm', function(notify) { console.info('urgent alarm received from server'); - console.log('notify:', notify); - var enabled = (isAlarmForHigh() && client.settings.alarmUrgentHigh) || (isAlarmForLow() && client.settings.alarmUrgentLow); if (enabled) { console.log('Urgent alarm raised!'); @@ -1148,7 +1186,6 @@ client.load = function load (serverSettings, callback) { }); socket.on('clear_alarm', function(notify) { - console.info('got clear_alarm', notify); if (alarmInProgress) { console.log('clearing alarm'); stopAlarm(false, null, notify); @@ -1183,10 +1220,15 @@ client.load = function load (serverSettings, callback) { } } - // hide food control if not enabled - $('.foodcontrol').toggle(client.settings.enable.indexOf('food') > -1); - // hide cob control if not enabled - $('.cobcontrol').toggle(client.settings.enable.indexOf('cob') > -1); + client.updateAdminMenu = function updateAdminMenu() { + // hide food control if not enabled + $('.foodcontrol').toggle(client.settings.enable.indexOf('food') > -1); + // hide cob control if not enabled + $('.cobcontrol').toggle(client.settings.enable.indexOf('cob') > -1); +} + + client.updateAdminMenu(); + container.toggleClass('has-minor-pills', client.plugins.hasShownType('pill-minor', client.settings)); function prepareEntries () { @@ -1236,6 +1278,8 @@ client.load = function load (serverSettings, callback) { console.info('got dataUpdate', new Date(client.now)); var lastUpdated = Date.now(); + client.dataLastUpdated = lastUpdated; + receiveDData(received, client.ddata, client.settings); // Resend new treatments to profile @@ -1265,7 +1309,6 @@ client.load = function load (serverSettings, callback) { prepareEntries(); updateTitle(); - updateBolusRenderOver(); // Don't invoke D3 in headless mode diff --git a/lib/client/receiveddata.js b/lib/client/receiveddata.js index 6f542b89b03..e1d2cab88dd 100644 --- a/lib/client/receiveddata.js +++ b/lib/client/receiveddata.js @@ -7,20 +7,33 @@ var TWO_DAYS = 172800000; function mergeDataUpdate (isDelta, cachedDataArray, receivedDataArray, maxAge) { function nsArrayDiff (oldArray, newArray) { - var seen = []; + var knownMills = []; + var l = oldArray.length; for (var i = 0; i < l; i++) { + /* eslint-disable security/detect-object-injection */ // verified false positive if (oldArray[i] !== null) { - seen.push(oldArray[i].mills); + knownMills.push(oldArray[i].mills); } + /* eslint-enable security/detect-object-injection */ // verified false positive } - var result = []; + var result = { + updates: [], + new: [] + }; + l = newArray.length; for (var j = 0; j < l; j++) { - if (!seen.includes(newArray[j].mills)) { - result.push(newArray[j]); //console.log('delta data found'); + /* eslint-disable security/detect-object-injection */ // verified false positive + var item = newArray[j]; + var millsSeen = knownMills.includes(item.mills); + + if (!millsSeen) { + result.new.push(item); + } else { + result.updates.push(item); } } return result; @@ -40,16 +53,33 @@ function mergeDataUpdate (isDelta, cachedDataArray, receivedDataArray, maxAge) { var mAge = (isNaN(maxAge) || maxAge == null) ? TWO_DAYS : maxAge; var twoDaysAgo = new Date().getTime() - mAge; - for (var i = 0; i < cachedDataArray.length; i++) { + var i; + + for (i = cachedDataArray.length -1; i >= 0; i--) { + /* eslint-disable-next-line security/detect-object-injection */ // verified false positive var element = cachedDataArray[i]; if (element !== null && element !== undefined && element.mills <= twoDaysAgo) { - cachedDataArray.splice(i, 0); + cachedDataArray.splice(i, 1); } } // If this is delta, calculate the difference, merge and sort var diff = nsArrayDiff(cachedDataArray, receivedDataArray); - return cachedDataArray.concat(diff).sort(function(a, b) { + + // if there's updated elements, replace those in place + if (diff.updates.length > 0) { + for (i = 0; i < diff.updates.length; i++) { + var e = diff.updates[i]; + for (var j = 0; j < cachedDataArray.length; j++) { + if (e.mills == cachedDataArray[j].mills) { + cachedDataArray.splice(j,1,e); + } + } + } + } + + // merge new items in + return cachedDataArray.concat(diff.new).sort(function(a, b) { return a.mills - b.mills; }); } @@ -70,12 +100,14 @@ function mergeTreatmentUpdate (isDelta, cachedDataArray, receivedDataArray) { var l = receivedDataArray.length; var m = cachedDataArray.length; for (var i = 0; i < l; i++) { + /* eslint-disable-next-line security/detect-object-injection */ // verified false positive var no = receivedDataArray[i]; if (!no.action) { cachedDataArray.push(no); continue; } for (var j = 0; j < m; j++) { + /* eslint-disable security/detect-object-injection */ // verified false positive if (no._id === cachedDataArray[j]._id) { if (no.action === 'remove') { cachedDataArray.splice(j, 1); diff --git a/lib/client/renderer.js b/lib/client/renderer.js index a3841695060..ba848303a9f 100644 --- a/lib/client/renderer.js +++ b/lib/client/renderer.js @@ -255,6 +255,8 @@ function init (client, d3) { (durationText ? '' + translate('Duration') + ': ' + durationText + '
' : '') + (d.insulinNeedsScaleFactor ? '' + translate('Insulin Scale Factor') + ': ' + d.insulinNeedsScaleFactor * 100 + '%
' : '') + (correctionRangeText ? '' + translate('Correction Range') + ': ' + correctionRangeText + '
' : '') + + (d.transmitterId ? '' + translate('Transmitter ID') + ': ' + d.transmitterId + '
' : '') + + (d.sensorCode ? '' + translate('Sensor Code') + ': ' + d.sensorCode + '
' : '') + (d.notes ? '' + translate('Notes') + ': ' + d.notes : ''); } @@ -527,7 +529,7 @@ function init (client, d3) { }; } - function prepareArc (treatment, radius, renderBasal) { + function prepareArc (treatment, radius, bolusSettings) { var arc_data = [ // white carb half-circle on top { 'element': '', 'color': 'white', 'start': -1.5708, 'end': 1.5708, 'inner': 0, 'outer': radius.R1 } @@ -564,12 +566,14 @@ function init (client, d3) { if (treatment.insulin > 0) { var dosage_units = '' + Math.round(treatment.insulin * 100) / 100; + + var format = treatment.insulin < bolusSettings.renderOver ? bolusSettings.renderFormatSmall : bolusSettings.renderFormat; - if (renderBasal === 'all-remove-zero-u') { + if (_.includes(['concise', 'minimal'], format)) { dosage_units = (dosage_units + "").replace(/^0/, ""); } - var unit_of_measurement = (renderBasal === 'all-remove-zero-u' ? '' : ' U'); // One international unit of insulin (1 IU) is shown as '1 U' + var unit_of_measurement = (format === 'minimal' ? '' : ' U'); // One international unit of insulin (1 IU) is shown as '1 U' arc_data[3].element = dosage_units + unit_of_measurement; } @@ -614,6 +618,7 @@ function init (client, d3) { if (treatment.boluscalc.foods && treatment.boluscalc.foods.length) { html += '
'; for (var fi = 0; fi < treatment.boluscalc.foods.length; fi++) { + /* eslint-disable-next-line security/detect-object-injection */ // verified false positive var f = treatment.boluscalc.foods[fi]; html += ''; html += ''; @@ -630,7 +635,7 @@ function init (client, d3) { var glucose = treatment.glucose; if (client.settings.units != client.ddata.profile.getUnits()) { glucose *= (client.settings.units === 'mmol' ? (1 / consts.MMOL_TO_MGDL) : consts.MMOL_TO_MGDL); - var decimals = (client.settings.units === 'mmol' ? 10 : 1); + const decimals = (client.settings.units === 'mmol' ? 10 : 1); glucose = Math.round(glucose * decimals) / decimals; } @@ -641,7 +646,7 @@ function init (client, d3) { (treatment.protein ? '' + translate('Protein') + ': ' + treatment.protein + '
' : '') + (treatment.fat ? '' + translate('Fat') + ': ' + treatment.fat + '
' : '') + (treatment.absorptionTime > 0 ? '' + translate('Absorption Time') + ': ' + (Math.round(treatment.absorptionTime / 60.0 * 10) / 10) + 'h' + '
' : '') + - (treatment.insulin ? '' + translate('Insulin') + ': ' + treatment.insulin + '
' : '') + + (treatment.insulin ? '' + translate('Insulin') + ': ' + utils.toRoundedStr(treatment.insulin, 2) + '
' : '') + (treatment.enteredinsulin ? '' + translate('Combo Bolus') + ': ' + treatment.enteredinsulin + 'U, ' + treatment.splitNow + '% : ' + treatment.splitExt + '%, ' + translate('Duration') + ': ' + treatment.duration + '
' : '') + (treatment.glucose ? '' + translate('BG') + ': ' + glucose + (treatment.glucoseType ? ' (' + translate(treatment.glucoseType) + ')' : '') + '
' : '') + (treatment.enteredBy ? '' + translate('Entered By') + ': ' + treatment.enteredBy + '
' : '') + @@ -990,7 +995,8 @@ function init (client, d3) { renderer.drawTreatments = function drawTreatments (client) { var treatmentCount = 0; - var renderBasal = client.settings.extendedSettings.bolus.render; + var bolusSettings = client.settings.extendedSettings.bolus || {}; + chart().focus.selectAll('.draggable-treatment').remove(); _.forEach(client.ddata.treatments, function eachTreatment (d) { @@ -999,17 +1005,21 @@ function init (client, d3) { // add treatment bubbles _.forEach(client.ddata.treatments, function eachTreatment (d) { - var showLabels = ( !d.carbs && ( ( renderBasal == 'none') || ( renderBasal === 'over' && d.insulin < client.settings.bolusRenderOver) ) ) ? false : true; + var showLabels = d.carbs || d.insulin; + if (d.insulin && d.insulin < bolusSettings.renderOver && bolusSettings.renderFormatSmall == 'hidden') { + showLabels = false; + } renderer.drawTreatment(d, { scale: renderer.bubbleScale() , showLabels: showLabels , treatments: treatmentCount - }, client.sbx.data.profile.getCarbRatio(new Date()), - renderBasal); + } + , client.sbx.data.profile.getCarbRatio(new Date()) + , bolusSettings); }); }; - renderer.drawTreatment = function drawTreatment (treatment, opts, carbratio, renderBasal) { + renderer.drawTreatment = function drawTreatment (treatment, opts, carbratio, bolusSettings) { if (!treatment.carbs && !treatment.protein && !treatment.fat && !treatment.insulin) { return; } @@ -1027,7 +1037,7 @@ function init (client, d3) { return; } - var arc = prepareArc(treatment, radius, renderBasal); + var arc = prepareArc(treatment, radius, bolusSettings); var treatmentDots = appendTreatments(treatment, arc); appendLabels(treatmentDots, arc, opts); }; diff --git a/lib/constants.json b/lib/constants.json index 38e36040d42..b8077cf5311 100644 --- a/lib/constants.json +++ b/lib/constants.json @@ -15,5 +15,11 @@ "ONE_HOUR": 3600000, "THREE_HOURS": 10800000, "FOUR_HOURS": 14400000, - "SIX_HOURS": 21600000 + "SIX_HOURS": 21600000, + "LEVEL_URGENT": 2, + "LEVEL_WARN": 1, + "LEVEL_INFO": 0, + "LEVEL_LOW": -1, + "LEVEL_LOWEST": -2, + "LEVEL_NONE": -3 } diff --git a/lib/data/calcdelta.js b/lib/data/calcdelta.js index c991bd8d602..d58cca21c6f 100644 --- a/lib/data/calcdelta.js +++ b/lib/data/calcdelta.js @@ -66,16 +66,23 @@ module.exports = function calcDelta (oldData, newData) { return result; } + function genKey(o) { + let r = o.mills; + r += o.sgv ? 'sgv' + o.sgv : ''; + r += o.mgdl ? 'sgv' + o.mgdl : ''; + return r; + } + function nsArrayDiff(oldArray, newArray) { var seen = {}; var l = oldArray.length; for (var i = 0; i < l; i++) { - seen[oldArray[i].mills] = true; + seen[genKey(oldArray[i])] = true; } var result = []; l = newArray.length; for (var j = 0; j < l; j++) { - if (!Object.prototype.hasOwnProperty.call(seen, newArray[j].mills)) { + if (!Object.prototype.hasOwnProperty.call(seen, genKey(newArray[j]))) { result.push(newArray[j]); } } diff --git a/static/food/js/food.js b/lib/food/food.js similarity index 98% rename from static/food/js/food.js rename to lib/food/food.js index 2ffc78d2623..299418d5b1a 100644 --- a/static/food/js/food.js +++ b/lib/food/food.js @@ -1,13 +1,13 @@ 'use strict'; +var init = function init () { + //for the tests window isn't the global object var $ = window.$; var _ = window._; var Nightscout = window.Nightscout; var client = Nightscout.client; -(function () { - client.init(function loaded () { var translate = client.translate; @@ -146,7 +146,7 @@ client.init(function loaded () { $('#fe_filter_subcategory').empty().append(new Option(translate('(none)'),'')); if (filter.category !== '') { for (s in categories[filter.category]) { - if (categories[filter.category].hasOwnProperty(s)) { + if (Object.prototype.hasOwnProperty.call(categories[filter.category],s)) { $('#fe_filter_subcategory').append(new Option(s,s)); } } @@ -162,7 +162,7 @@ client.init(function loaded () { $('#fe_subcategory_list').empty().append(new Option(translate('(none)'),'')); if (foodrec.category !== '') { for (s in categories[foodrec.category]) { - if (categories[foodrec.category].hasOwnProperty(s)) { + if (Object.prototype.hasOwnProperty.call(categories[foodrec.category],s)) { $('#fe_subcategory_list').append(new Option(s,s)); } } @@ -198,7 +198,7 @@ client.init(function loaded () { $('#fe_filter_category').empty().append(new Option(translate('(none)'),'')); $('#fe_category_list').empty().append(new Option(translate('(none)'),'')); for (var s in categories) { - if (categories.hasOwnProperty(s)) { + if (Object.prototype.hasOwnProperty.call(categories,s)) { $('#fe_filter_category').append(new Option(s,s)); $('#fe_category_list').append(new Option(s,s)); } @@ -398,7 +398,7 @@ client.init(function loaded () { function savePortions(event) { var index = $(this).attr('index'); var findex = $(this).attr('findex'); - var val = parseFloat($(this).val().replace(/\,/g,'.')); + var val = parseFloat($(this).val().replace(/,/g,'.')); foodquickpick[index].foods[findex].portions=val; calculateCarbs(index); drawQuickpick(); @@ -677,4 +677,6 @@ client.init(function loaded () { } } }); -})(); \ No newline at end of file +}; + +module.exports = init; diff --git a/lib/language.js b/lib/language.js index 5246208ff1c..43752869783 100644 --- a/lib/language.js +++ b/lib/language.js @@ -2,9 +2,9 @@ var _ = require('lodash'); -function init() { +function init (fs) { - function language() { + function language () { return language; } @@ -12,15861 +12,168 @@ function init() { language.lang = 'en'; language.languages = [ - { code: 'bg', language: 'Български', speechCode: 'bg-BG' } - , { code: 'cs', language: 'Čeština', speechCode: 'cs-CZ' } - , { code: 'de', language: 'Deutsch', speechCode: 'de-DE' } - , { code: 'dk', language: 'Dansk', speechCode: 'dk-DK' } - , { code: 'el', language: 'Ελληνικά', speechCode: 'el-GR'} - , { code: 'en', language: 'English', speechCode: 'en-US' } - , { code: 'es', language: 'Español', speechCode: 'es-ES' } - , { code: 'fi', language: 'Suomi', speechCode: 'fi-FI' } - , { code: 'fr', language: 'Français', speechCode: 'fr-FR' } - , { code: 'he', language: 'עברית', speechCode: 'he-IL' } - , { code: 'hr', language: 'Hrvatski', speechCode: 'hr-HR' } - , { code: 'hu', language: 'Magyar', speechCode: 'hu-HU' } - , { code: 'it', language: 'Italiano', speechCode: 'it-IT' } - , { code: 'ja', language: '日本語', speechCode: 'ja-JP' } - , { code: 'ko', language: '한국어', speechCode: 'ko-KR' } - , { code: 'nb', language: 'Norsk (Bokmål)', speechCode: 'no-NO' } - , { code: 'nl', language: 'Nederlands', speechCode: 'nl-NL' } - , { code: 'pl', language: 'Polski', speechCode: 'pl-PL' } - , { code: 'pt', language: 'Português (Brasil)', speechCode: 'pt-BR' } - , { code: 'ro', language: 'Română', speechCode: 'ro-RO' } - , { code: 'ru', language: 'Русский', speechCode: 'ru-RU' } - , { code: 'sk', language: 'Slovenčina', speechCode: 'sk-SK' } - , { code: 'sv', language: 'Svenska', speechCode: 'sv-SE' } - , { code: 'tr', language: 'Türkçe', speechCode: 'tr-TR' } - , { code: 'zh_cn', language: '中文(简体)', speechCode: 'cmn-Hans-CN' } - , { code: 'zh_tw', language: '中文(繁體)', speechCode: 'cmn-Hant-TW' } + { code: 'bg', file: 'bg_BG', language: 'Български', speechCode: 'bg-BG' } + , { code: 'cs', file: 'cs_CZ', language: 'Čeština', speechCode: 'cs-CZ' } + , { code: 'de', file: 'de_DE', language: 'Deutsch', speechCode: 'de-DE' } + , { code: 'dk', file: 'da_DK', language: 'Dansk', speechCode: 'dk-DK' } + , { code: 'el', file: 'el_GR', language: 'Ελληνικά', speechCode: 'el-GR' } + , { code: 'en', file: 'en_US', language: 'English', speechCode: 'en-US' } + , { code: 'es', file: 'es_ES', language: 'Español', speechCode: 'es-ES' } + , { code: 'fi', file: 'fi_FI', language: 'Suomi', speechCode: 'fi-FI' } + , { code: 'fr', file: 'fr_FR', language: 'Français', speechCode: 'fr-FR' } + , { code: 'he', file: 'he_IL', language: 'עברית', speechCode: 'he-IL' } + , { code: 'hr', file: 'hr_HR', language: 'Hrvatski', speechCode: 'hr-HR' } + , { code: 'hu', file: 'hu_HU', language: 'Magyar', speechCode: 'hu-HU' } + , { code: 'it', file: 'it_IT', language: 'Italiano', speechCode: 'it-IT' } + , { code: 'ja', file: 'ja_JP', language: '日本語', speechCode: 'ja-JP' } + , { code: 'ko', file: 'ko_KR', language: '한국어', speechCode: 'ko-KR' } + , { code: 'nb', file: 'nb_NO', language: 'Norsk (Bokmål)', speechCode: 'no-NO' } + , { code: 'nl', file: 'nl_NL', language: 'Nederlands', speechCode: 'nl-NL' } + , { code: 'pl', file: 'pl_PL', language: 'Polski', speechCode: 'pl-PL' } + , { code: 'pt', file: 'pt_PT', language: 'Português', speechCode: 'pt-PT' } + , { code: 'br', file: 'pt_BR', language: 'Português (Brasil)', speechCode: 'pt-BR' } + , { code: 'ro', file: 'ro_RO', language: 'Română', speechCode: 'ro-RO' } + , { code: 'ru', file: 'ru_RU', language: 'Русский', speechCode: 'ru-RU' } + , { code: 'sk', file: 'sk_SK', language: 'Slovenčina', speechCode: 'sk-SK' } + , { code: 'sl', file: 'sl_SL', language: 'Slovenščina', speechCode: 'sl-SL' } + , { code: 'sv', file: 'sv_SE', language: 'Svenska', speechCode: 'sv-SE' } + , { code: 'tr', file: 'tr_TR', language: 'Türkçe', speechCode: 'tr-TR' } + , { code: 'zh_cn', file: 'zh_CN', language: '中文(简体)', speechCode: 'cmn-Hans-CN' } +// , { code: 'zh_tw', file: 'zh_TW', language: '中文(繁體)', speechCode: 'cmn-Hant-TW' } ]; - var translations = { - // Server - 'Listening on port' : { - cs: 'Poslouchám na portu' - ,es: 'Escuchando en el puerto' - ,dk: 'Lytter på port' - ,fr: 'Ecoute sur port' - ,pt: 'Escutando porta' - ,sv: 'Lyssnar på port' - ,ro: 'Activ pe portul' - ,el: 'Σύνδεση στην πόρτα' - ,bg: 'Активиране на порта' - ,hr: 'Slušanje na portu' - ,it: 'Porta in ascolto' - ,ja: '接続可能' - ,fi: 'Kuuntelen porttia' - ,nb: 'Lytter på port' - ,he: 'מקשיב על פתחה' - ,pl: 'Słucham na porcie' - ,ru: 'Прослушивание порта' - ,sk: 'Načúvam na porte' - ,de: 'Lauscht auf Port' - ,nl: 'Luistert op poort' - ,ko: '포트에서 수신' - ,tr: 'Port dinleniyor' - ,zh_cn: '正在监听端口' - ,hu: 'Port figyelése' - } - // Client - ,'Mo' : { - cs: 'Po' - ,de: 'Mo' - ,es: 'Lu' - ,fr: 'Lu' - ,el: 'Δε' - ,pt: 'Seg' - ,sv: 'Mån' - ,ro: 'Lu' - ,bg: 'Пон' - ,hr: 'Pon' - ,it: 'Lun' - ,ja: '月' - ,dk: 'Man' - ,fi: 'Ma' - ,nb: 'Man' - ,he: 'ב' - ,pl: 'Pn' - ,ru: 'Пон' - ,sk: 'Po' - ,nl: 'Ma' - ,ko: '월' - ,tr: 'Pzt' - ,zh_cn: '一' - ,hu: 'Hé' - } - ,'Tu' : { - cs: 'Út' - ,de: 'Di' - ,es: 'Mar' - ,fr: 'Ma' - ,el: 'Τρ' - ,pt: 'Ter' - ,sv: 'Tis' - ,ro: 'Ma' - ,bg: 'Вт' - ,hr: 'Uto' - ,it: 'Mar' - ,ja: '火' - ,dk: 'Tir' - ,fi: 'Ti' - ,nb: 'Tir' - ,he: 'ג' - ,pl: 'Wt' - ,ru: 'Вт' - ,sk: 'Ut' - ,nl: 'Di' - ,ko: '화' - ,tr: 'Sal' - ,zh_cn: '二' - ,hu: 'Ke' - } - ,'We' : { - cs: 'St' - ,de: 'Mi' - ,es: 'Mie' - ,fr: 'Me' - ,el: 'Τε' - ,pt: 'Qua' - ,sv: 'Ons' - ,ro: 'Mie' - ,bg: 'Ср' - ,hr: 'Sri' - ,it: 'Mer' - ,ja: '水' - ,dk: 'Ons' - ,fi: 'Ke' - ,nb: 'Ons' - ,he: 'ד' - ,pl: 'Śr' - ,ru: 'Ср' - ,sk: 'St' - ,nl: 'Wo' - ,ko: '수' - ,tr: 'Çar' - ,zh_cn: '三' - ,hu: 'Sze' - } - ,'Th' : { - cs: 'Čt' - ,de: 'Do' - ,es: 'Jue' - ,fr: 'Je' - ,el: 'Πε' - ,pt: 'Qui' - ,sv: 'Tor' - ,ro: 'Jo' - ,bg: 'Четв' - ,hr: 'Čet' - ,it: 'Gio' - ,ja: '木' - ,dk: 'Tor' - ,fi: 'To' - ,nb: 'Tor' - ,he: 'ה' - ,pl: 'Cz' - ,ru: 'Чт' - ,sk: 'Št' - ,nl: 'Do' - ,ko: '목' - ,tr: 'Per' - ,zh_cn: '四' - ,hu: 'Csü' - } - ,'Fr' : { - cs: 'Pá' - ,de: 'Fr' - ,es: 'Vie' - ,fr: 'Ve' - ,el: 'Πα' - ,pt: 'Sex' - ,sv: 'Fre' - ,ro: 'Vi' - ,bg: 'Пет' - ,hr: 'Pet' - ,it: 'Ven' - ,ja: '金' - ,dk: 'Fre' - ,fi: 'Pe' - ,nb: 'Fre' - ,he: 'ו' - ,pl: 'Pt' - ,ru: 'Пт' - ,sk: 'Pi' - ,nl: 'Vr' - ,ko: '금' - ,tr: 'Cum' - ,zh_cn: '五' - ,hu: 'Pé' - } - ,'Sa' : { - cs: 'So' - ,de: 'Sa' - ,es: 'Sab' - ,fr: 'Sa' - ,el: 'Σα' - ,pt: 'Sab' - ,sv: 'Lör' - ,ro: 'Sa' - ,bg: 'Съб' - ,hr: 'Sub' - ,it: 'Sab' - ,ja: '土' - ,dk: 'Lør' - ,fi: 'La' - ,nb: 'Lør' - ,he: 'ש' - ,pl: 'So' - ,ru: 'Сб' - ,sk: 'So' - ,nl: 'Za' - ,ko: '토' - ,tr: 'Cmt' - ,zh_cn: '六' - ,hu: 'Szo' - } - ,'Su' : { - cs: 'Ne' - ,de: 'So' - ,es: 'Dom' - ,fr: 'Di' - ,el: 'Κυ' - ,pt: 'Dom' - ,sv: 'Sön' - ,ro: 'Du' - ,bg: 'Нед' - ,hr: 'Ned' - ,it: 'Dom' - ,ja: '日' - ,dk: 'Søn' - ,fi: 'Su' - ,nb: 'Søn' - ,he: 'א' - ,pl: 'Nd' - ,ru: 'Вс' - ,sk: 'Ne' - ,nl: 'Zo' - ,ko: '일' - ,tr: 'Paz' - ,zh_cn: '日' - ,hu: 'Vas' - } - ,'Monday' : { - cs: 'Pondělí' - ,de: 'Montag' - ,es: 'Lunes' - ,fr: 'Lundi' - ,el: 'Δευτέρα' - ,pt: 'Segunda' - ,sv: 'Måndag' - ,ro: 'Luni' - ,bg: 'Понеделник' - ,hr: 'Ponedjeljak' - ,it: 'Lunedì' - ,ja: '月曜日' - ,dk: 'Mandag' - ,fi: 'Maanantai' - ,nb: 'Mandag' - ,he: 'שני' - ,pl: 'Poniedziałek' - ,ru: 'Понедельник' - ,sk: 'Pondelok' - ,nl: 'Maandag' - ,ko: '월요일' - ,tr: 'Pazartesi' - ,zh_cn: '星期一' - ,hu: 'Hétfő' - } - ,'Tuesday' : { - cs: 'Úterý' - ,de: 'Dienstag' - ,es: 'Martes' - ,fr: 'Mardi' - ,el: 'Τρίτη' - ,pt: 'Terça' - ,ro: 'Marți' - ,bg: 'Вторник' - ,hr: 'Utorak' - ,sv: 'Tisdag' - ,it: 'Martedì' - ,ja: '火曜日' - ,dk: 'Tirsdag' - ,fi: 'Tiistai' - ,nb: 'Tirsdag' - ,he: 'שלישי' - ,pl: 'Wtorek' - ,ru: 'Вторник' - ,sk: 'Utorok' - ,nl: 'Dinsdag' - ,ko: '화요일' - ,tr: 'Salı' - ,zh_cn: '星期二' - ,hu: 'Kedd' - } - ,'Wednesday' : { - cs: 'Středa' - ,de: 'Mittwoch' - ,es: 'Miércoles' - ,fr: 'Mercredi' - ,el: 'Τετάρτη' - ,pt: 'Quarta' - ,sv: 'Onsdag' - ,ro: 'Miercuri' - ,bg: 'Сряда' - ,hr: 'Srijeda' - ,it: 'Mercoledì' - ,ja: '水曜日' - ,dk: 'Onsdag' - ,fi: 'Keskiviikko' - ,nb: 'Onsdag' - ,he: 'רביעי' - ,pl: 'Środa' - ,ru: 'Среда' - ,sk: 'Streda' - ,nl: 'Woensdag' - ,ko: '수요일' - ,tr: 'Çarşamba' - ,zh_cn: '星期三' - ,hu: 'Szerda' - } - ,'Thursday' : { - cs: 'Čtvrtek' - ,de: 'Donnerstag' - ,es: 'Jueves' - ,fr: 'Jeudi' - ,el: 'Πέμπτη' - ,pt: 'Quinta' - ,sv: 'Torsdag' - ,ro: 'Joi' - ,bg: 'Четвъртък' - ,hr: 'Četvrtak' - ,it: 'Giovedì' - ,ja: '木曜日' - ,dk: 'Torsdag' - ,fi: 'Torstai' - ,nb: 'Torsdag' - ,he: 'חמישי' - ,pl: 'Czwartek' - ,ru: 'Четверг' - ,sk: 'Štvrtok' - ,nl: 'Donderdag' - ,ko: '목요일' - ,tr: 'Perşembe' - ,zh_cn: '星期四' - ,hu: 'Csütörtök' - } - ,'Friday' : { - cs: 'Pátek' - ,de: 'Freitag' - ,fr: 'Vendredi' - ,el: 'Παρασκευή' - ,pt: 'Sexta' - ,sv: 'Fredag' - ,ro: 'Vineri' - ,es: 'Viernes' - ,bg: 'Петък' - ,hr: 'Petak' - ,it: 'Venerdì' - ,ja: '金曜日' - ,dk: 'Fredag' - ,fi: 'Perjantai' - ,nb: 'Fredag' - ,he: 'שישי' - ,pl: 'Piątek' - ,ru: 'Пятница' - ,sk: 'Piatok' - ,nl: 'Vrijdag' - ,ko: '금요일' - ,tr: 'Cuma' - ,zh_cn: '星期五' - ,hu: 'Péntek' - } - ,'Saturday' : { - cs: 'Sobota' - ,de: 'Samstag' - ,es: 'Sábado' - ,fr: 'Samedi' - ,el: 'Σάββατο' - ,pt: 'Sábado' - ,ro: 'Sâmbătă' - ,bg: 'Събота' - ,hr: 'Subota' - ,sv: 'Lördag' - ,it: 'Sabato' - ,ja: '土曜日' - ,dk: 'Lørdag' - ,fi: 'Lauantai' - ,nb: 'Lørdag' - ,he: 'שבת' - ,pl: 'Sobota' - ,ru: 'Суббота' - ,sk: 'Sobota' - ,nl: 'Zaterdag' - ,ko: '토요일' - ,tr: 'Cumartesi' - ,zh_cn: '星期六' - ,hu: 'Szombat' - } - ,'Sunday' : { - cs: 'Neděle' - ,de: 'Sonntag' - ,es: 'Domingo' - ,fr: 'Dimanche' - ,el: 'Κυριακή' - ,pt: 'Domingo' - ,ro: 'Duminică' - ,bg: 'Неделя' - ,hr: 'Nedjelja' - ,sv: 'Söndag' - ,it: 'Domenica' - ,ja: '日曜日' - ,dk: 'Søndag' - ,fi: 'Sunnuntai' - ,nb: 'Søndag' - ,he: 'ראשון' - ,pl: 'Niedziela' - ,ru: 'Воскресенье' - ,sk: 'Nedeľa' - ,nl: 'Zondag' - ,ko: '일요일' - ,tr: 'Pazar' - ,zh_cn: '星期日' - ,hu: 'Vasárnap' - } - ,'Category' : { - cs: 'Kategorie' - ,de: 'Kategorie' - ,es: 'Categoría' - ,fr: 'Catégorie' - ,el: 'Κατηγορία' - ,pt: 'Categoria' - ,sv: 'Kategori' - ,ro: 'Categorie' - ,bg: 'Категория' - ,hr: 'Kategorija' - ,it:'Categoria' - ,ja: 'カテゴリー' - ,dk: 'Kategori' - ,fi: 'Luokka' - ,nb: 'Kategori' - ,he: 'קטגוריה' - ,pl: 'Kategoria' - ,ru: 'Категория' - ,sk: 'Kategória' - ,nl: 'Categorie' - ,ko: '분류' - ,tr: 'Kategori' - ,zh_cn: '类别' - ,hu: 'Kategória' - } - ,'Subcategory' : { - cs: 'Podkategorie' - ,de: 'Unterkategorie' - ,es: 'Subcategoría' - ,fr: 'Sous-catégorie' - ,el: 'Υποκατηγορία' - ,pt: 'Subcategoria' - ,sv: 'Underkategori' - ,ro: 'Subcategorie' - ,bg: 'Подкатегория' - ,hr: 'Podkategorija' - ,it: 'Sottocategoria' - ,ja: 'サブカテゴリー' - ,dk: 'Underkategori' - ,fi: 'Alaluokka' - ,nb: 'Underkategori' - ,he: 'תת-קטגוריה' - ,pl: 'Podkategoria' - ,ru: 'Подкатегория' - ,sk: 'Podkategória' - ,nl: 'Subcategorie' - ,ko: '세부 분류' - ,tr: 'Altkategori' - ,zh_cn: '子类别' - ,hu: 'Alkategória' - } - ,'Name' : { - cs: 'Jméno' - ,de: 'Name' - ,es: 'Nombre' - ,fr: 'Nom' - ,el: 'Όνομα' - ,pt: 'Nome' - ,sv: 'Namn' - ,ro: 'Nume' - ,bg: 'Име' - ,hr: 'Ime' - ,it: 'Nome' - ,ja: '名前' - ,dk: 'Navn' - ,fi: 'Nimi' - ,nb: 'Navn' - ,he: 'שם' - ,pl: 'Imie' - ,ru: 'Имя' - ,sk: 'Meno' - ,nl: 'Naam' - ,ko: '프로파일 명' - ,tr: 'İsim' - ,zh_cn: '名称' - ,hu: 'Név' - } - ,'Today' : { - cs: 'Dnes' - ,de: 'Heute' - ,es: 'Hoy' - ,fr: 'Aujourd\'hui' - ,el: 'Σήμερα' - ,pt: 'Hoje' - ,ro: 'Astăzi' - ,bg: 'Днес' - ,hr: 'Danas' - ,sv: 'Idag' - ,it: 'Oggi' - ,ja: '今日' - ,dk: 'I dag' - ,fi: 'Tänään' - ,nb: 'Idag' - ,he: 'היום' - ,pl: 'Dziś' - ,ru: 'Сегодня' - ,sk: 'Dnes' - ,nl: 'Vandaag' - ,ko: '오늘' - ,tr: 'Bugün' - ,zh_cn: '今天' - ,hu: 'Ma' - } - ,'Last 2 days' : { - cs: 'Poslední 2 dny' - ,de: 'Letzten 2 Tage' - ,es: 'Últimos 2 días' - ,fr: '2 derniers jours' - ,el: 'Τελευταίες 2 μέρες' - ,pt: 'Últimos 2 dias' - ,ro: 'Ultimele 2 zile' - ,bg: 'Последните 2 дни' - ,hr: 'Posljednja 2 dana' - ,sv: 'Senaste 2 dagarna' - ,it: 'Ultimi 2 giorni' - ,ja: '直近の2日間' - ,dk: 'Sidste 2 dage' - ,fi: 'Edelliset 2 päivää' - ,nb: 'Siste 2 dager' - ,he: 'יומיים אחרונים' - ,pl: 'Ostatnie 2 dni' - ,ru: 'Прошедшие 2 дня' - ,sk: 'Posledné 2 dni' - ,nl: 'Afgelopen 2 dagen' - ,ko: '지난 2일' - ,tr: 'Son 2 gün' - ,zh_cn: '过去2天' - ,hu: 'Utolsó 2 nap' - } - ,'Last 3 days' : { - cs: 'Poslední 3 dny' - ,de: 'Letzten 3 Tage' - ,es: 'Últimos 3 días' - ,fr: '3 derniers jours' - ,el: 'Τελευταίες 3 μέρες' - ,pt: 'Últimos 3 dias' - ,sv: 'Senaste 3 dagarna' - ,ro: 'Ultimele 3 zile' - ,bg: 'Последните 3 дни' - ,hr: 'Posljednja 3 dana' - ,it: 'Ultimi 3 giorni' - ,ja: '直近の3日間' - ,dk: 'Sidste 3 dage' - ,fi: 'Edelliset 3 päivää' - ,nb: 'Siste 3 dager' - ,he: 'שלושה ימים אחרונים' - ,pl: 'Ostatnie 3 dni' - ,ru: 'Прошедшие 3 дня' - ,sk: 'Posledné 3 dni' - ,nl: 'Afgelopen 3 dagen' - ,ko: '지난 3일' - ,tr: 'Son 3 gün' - ,zh_cn: '过去3天' - ,hu: 'Utolsó 3 nap' - } - ,'Last week' : { - cs: 'Poslední týden' - ,de: 'Letzte Woche' - ,es: 'Semana pasada' - ,fr: 'Semaine Dernière' - ,el: 'Τελευταία εβδομάδα' - ,pt: 'Semana passada' - ,ro: 'Săptămâna trecută' - ,bg: 'Последната седмица' - ,hr: 'Protekli tjedan' - ,sv: 'Senaste veckan' - ,it: 'Settimana scorsa' - ,ja: '直近の1週間' - ,dk: 'Sidste uge' - ,fi: 'Viime viikko' - ,nb: 'Siste uke' - ,he: 'שבוע אחרון' - ,pl: 'Ostatni tydzień' - ,ru: 'Прошедшая неделя' - ,sk: 'Posledný týždeň' - ,nl: 'Afgelopen week' - ,ko: '지난주' - ,tr: 'Geçen Hafta' - ,zh_cn: '上周' - ,hu: 'Előző hét' - } - ,'Last 2 weeks' : { - cs: 'Poslední 2 týdny' - ,de: 'Letzten 2 Wochen' - ,es: 'Últimas 2 semanas' - ,fr: '2 dernières semaines' - ,el: 'Τελευταίες 2 εβδομάδες' - ,pt: 'Últimas 2 semanas' - ,ro: 'Ultimele 2 săptămâni' - ,bg: 'Последните 2 седмици' - ,hr: 'Protekla 2 tjedna' - ,sv: 'Senaste 2 veckorna' - ,it: 'Ultime 2 settimane' - ,ja: '直近の2週間' - ,dk: 'Sidste 2 uger' - ,fi: 'Viimeiset 2 viikkoa' - ,nb: 'Siste 2 uker' - ,he: 'שבועיים אחרונים' - ,pl: 'Ostatnie 2 tygodnie' - ,ru: 'Прошедшие 2 недели' - ,sk: 'Posledné 2 týždne' - ,nl: 'Afgelopen 2 weken' - ,ko: '지난 2주' - ,tr: 'Son 2 hafta' - ,zh_cn: '过去2周' - ,hu: 'Előző 2 hét' - } - ,'Last month' : { - cs: 'Poslední měsíc' - ,de: 'Letzter Monat' - ,es: 'Mes pasado' - ,fr: 'Mois dernier' - ,el: 'Τελευταίος μήνας' - ,pt: 'Mês passado' - ,ro: 'Ultima lună' - ,bg: 'Последният месец' - ,hr: 'Protekli mjesec' - ,sv: 'Senaste månaden' - ,it: 'Mese scorso' - ,ja: '直近の1ヶ月' - ,dk: 'Sidste måned' - ,fi: 'Viime kuu' - ,nb: 'Siste måned' - ,he: 'חודש אחרון' - ,pl: 'Ostatni miesiąc' - ,ru: 'Прошедший месяц' - ,sk: 'Posledný mesiac' - ,nl: 'Afgelopen maand' - ,ko: '지난달' - ,tr: 'Geçen Ay' - ,zh_cn: '上个月' - ,hu: 'Előző hónap' - } - ,'Last 3 months' : { - cs: 'Poslední 3 měsíce' - ,de: 'Letzten 3 Monate' - ,es: 'Últimos 3 meses' - ,fr: '3 derniers mois' - ,el: 'Τελευταίοι 3 μήνες' - ,pt: 'Últimos 3 meses' - ,ro: 'Ultimele 3 luni' - ,bg: 'Последните 3 месеца' - ,hr: 'Protekla 3 mjeseca' - ,sv: 'Senaste 3 månaderna' - ,it: 'Ultimi 3 mesi' - ,ja: '直近の3ヶ月' - ,dk: 'Sidste 3 måneder' - ,fi: 'Viimeiset 3 kuukautta' - ,nb: 'Siste 3 måneder' - ,he: 'שלושה חודשים אחרונים' - ,pl: 'Ostatnie 3 miesiące' - ,ru: 'Прошедшие 3 месяца' - ,sk: 'Posledné 3 mesiace' - ,nl: 'Afgelopen 3 maanden' - ,ko: '지난 3달' - ,tr: 'Son 3 ay' - ,zh_cn: '过去3个月' - ,hu: 'Előző 3 hónap' - } - , 'between': { - cs: 'between' - ,de: 'between' - ,es: 'between' - ,fr: 'between' - ,el: 'between' - ,pt: 'between' - ,sv: 'between' - ,ro: 'between' - ,bg: 'between' - ,hr: 'between' - ,it: 'between' - ,ja: 'between' - ,dk: 'between' - ,fi: 'between' - ,nb: 'between' - ,he: 'between' - ,pl: 'between' - ,ru: 'между' - ,sk: 'between' - ,nl: 'tussen' - ,ko: 'between' - ,tr: 'between' - ,zh_cn: 'between' - ,hu: 'között' - } - , 'around': { - cs: 'around' - ,de: 'around' - ,es: 'around' - ,fr: 'around' - ,el: 'around' - ,pt: 'around' - ,sv: 'around' - ,ro: 'around' - ,bg: 'around' - ,hr: 'around' - ,it: 'around' - ,ja: 'around' - ,dk: 'around' - ,fi: 'around' - ,nb: 'around' - ,he: 'around' - ,pl: 'around' - ,ru: 'около' - ,sk: 'around' - ,nl: 'rond' - ,ko: 'around' - ,tr: 'around' - ,zh_cn: 'around' - ,hu: 'körülbelül' - } - , 'and': { - cs: 'and' - ,de: 'and' - ,es: 'and' - ,fr: 'and' - ,el: 'and' - ,pt: 'and' - ,sv: 'and' - ,ro: 'and' - ,bg: 'and' - ,hr: 'and' - ,it: 'and' - ,ja: 'and' - ,dk: 'and' - ,fi: 'and' - ,nb: 'and' - ,he: 'and' - ,pl: 'and' - ,ru: 'и' - ,sk: 'and' - ,nl: 'en' - ,ko: 'and' - ,tr: 'and' - ,zh_cn: 'and' - ,hu: 'és' - } - ,'From' : { - cs: 'Od' - ,de: 'Von' - ,es: 'Desde' - ,fr: 'Du' - ,el: 'Από' - ,pt: 'De' - ,sv: 'Från' - ,ro: 'De la' - ,bg: 'От' - ,hr: 'Od' - ,it: 'Da' - ,ja: '開始日' - ,dk: 'Fra' - ,fi: 'Alkaen' - ,nb: 'Fra' - ,he: 'מ' - ,pl: 'Od' - ,ru: 'С' - ,sk: 'Od' - ,nl: 'Van' - ,ko: '시작일' - ,tr: 'Başlangıç' - ,zh_cn: '从' - ,hu: 'Tól' - } - ,'To' : { - cs: 'Do' - ,de: 'Bis' - ,es: 'Hasta' - ,fr: 'Au' - ,el: 'Έως' - ,pt: 'a' - ,ro: 'La' - ,bg: 'До' - ,hr: 'Do' - ,sv: 'Till' - ,it: 'A' - ,ja: '終了日' - ,dk: 'Til' - ,fi: 'Asti' - ,nb: 'Til' - ,he: 'עד' - ,pl: 'Do' - ,ru: 'По' - ,sk: 'Do' - ,nl: 'Tot' - ,ko: '종료일' - ,tr: 'Bitiş' - ,zh_cn: '到' - ,hu: 'Ig' - } - ,'Notes' : { - cs: 'Poznámky' - ,de: 'Notiz' - ,es: 'Notas' - ,fr: 'Notes' - ,el: 'Σημειώσεις' - ,pt: 'Notas' - ,sv: 'Notering' - ,ro: 'Note' - ,bg: 'Бележки' - ,hr: 'Bilješke' - ,it: 'Note' - ,ja: 'メモ' - ,dk: 'Noter' - ,fi: 'Merkinnät' - ,nb: 'Notater' - ,he: 'הערות' - ,pl: 'Uwagi' - ,ru: 'Примечания' - ,sk: 'Poznámky' - ,nl: 'Notities' - ,ko: '메모' - ,tr: 'Not' - ,zh_cn: '记录' - ,hu: 'Jegyzetek' - } - ,'Food' : { - cs: 'Jídlo' - ,de: 'Ernährung' - ,es: 'Comida' - ,fr: 'Nourriture' - ,el: 'Φαγητό' - ,pt: 'Comida' - ,sv: 'Föda' - ,ro: 'Mâncare' - ,bg: 'Храна' - ,hr: 'Hrana' - ,it: 'Cibo' - ,ja: '食事' - ,dk: 'Mad' - ,fi: 'Ruoka' - ,nb: 'Mat' - ,he: 'אוכל' - ,pl: 'Jedzenie' - ,ru: 'Еда' - ,sk: 'Jedlo' - ,nl: 'Voeding' - ,ko: '음식' - ,tr: 'Gıda' - ,zh_cn: '食物' - ,hu: 'Étel' - } - ,'Insulin' : { - cs: 'Inzulín' - ,de: 'Insulin' - ,es: 'Insulina' - ,fr: 'Insuline' - ,el: 'Ινσουλίνη' - ,pt: 'Insulina' - ,ro: 'Insulină' - ,bg: 'Инсулин' - ,hr: 'Inzulin' - ,sv: 'Insulin' - ,it: 'Insulina' - ,ja: 'インスリン' - ,dk: 'Insulin' - ,fi: 'Insuliini' - ,nb: 'Insulin' - ,he: 'אינסולין' - ,pl: 'Insulina' - ,ru: 'Инсулин' - ,sk: 'Inzulín' - ,nl: 'Insuline' - ,ko: '인슐린' - ,tr: 'İnsülin' - ,zh_cn: '胰岛素' - ,hu: 'Inzulin' - } - ,'Carbs' : { - cs: 'Sacharidy' - ,de: 'Kohlenhydrate' - ,es: 'Hidratos de carbono' - ,fr: 'Glucides' - ,el: 'Υδατάνθρακες' - ,pt: 'Carboidrato' - ,ro: 'Carbohidrați' - ,bg: 'Въглехидрати' - ,hr: 'Ugljikohidrati' - ,sv: 'Kolhydrater' - ,it: 'Carboidrati' - ,ja: '炭水化物' - ,dk: 'Kulhydrater' - ,fi: 'Hiilihydraatit' - ,nb: 'Karbohydrater' - ,he: 'פחמימות' - ,pl: 'Węglowodany' - ,ru: 'Углеводы' - ,sk: 'Sacharidy' - ,nl: 'Koolhydraten' - ,ko: '탄수화물' - ,tr: 'Karbonhidrat' - ,zh_cn: '碳水化合物' - ,hu: 'Szénhidrát' - } - ,'Notes contain' : { - cs: 'Poznámky obsahují' - ,de: 'Notizen enthalten' - ,he: 'ההערות מכילות' - ,es: 'Contenido de las notas' - ,fr: 'Notes contiennent' - ,el: 'Οι σημειώσεις περιέχουν' - ,pt: 'Notas contém' - ,ro: 'Conținut note' - ,bg: 'бележките съдържат' - ,hr: 'Sadržaj bilješki' - ,sv: 'Notering innehåller' - ,it: 'Contiene note' - ,ja: 'メモ内容' - ,dk: 'Noter indeholder' - ,fi: 'Merkinnät sisältävät' - ,nb: 'Notater inneholder' - ,pl: 'Zawierają uwagi' - ,ru: 'Примечания содержат' - ,sk: 'Poznámky obsahujú' - ,nl: 'Inhoud aantekening' - ,ko: '메모 포함' - ,tr: 'Notlar içerir' - ,zh_cn: '记录包括' - ,hu: 'Jegyzet tartalmazza' - } - ,'Target BG range bottom' : { - cs: 'Cílová glykémie spodní' - ,de: 'Vorgabe unteres BG-Ziel' - ,es: 'Objetivo inferior de glucemia' - ,fr: 'Limite inférieure glycémie' - ,el: 'Στόχος γλυκόζης - Κάτω όριο' - ,pt: 'Limite inferior de glicemia' - ,ro: 'Limită de jos a glicemiei' - ,bg: 'Долна граница на КЗ' - ,hr: 'Ciljna donja granica GUK-a' - ,sv: 'Gräns för nedre blodsockervärde' - ,it: 'Limite inferiore della glicemia' - ,ja: '目標血糖値 下限' - ,dk: 'Nedre grænse for blodsukkerværdier' - ,fi: 'Tavoitealueen alaraja' - ,nb: 'Nedre grense for blodsukkerverdier' - ,he: 'טווח מטרה סף תחתון' - ,pl: 'Docelowy zakres glikemii, dolny' - ,ru: 'Нижний порог целевых значений СК' - ,sk: 'Cieľová glykémia spodná' - ,nl: 'Ondergrens doelbereik glucose' - ,ko: '최저 목표 혈당 범위' - ,tr: 'Hedef KŞ aralığı düşük' - ,zh_cn: '目标血糖范围 下限' - ,hu: 'Alsó cukorszint határ' - } - ,'top' : { - cs: 'horní' - ,de: 'oben' - ,es: 'Superior' - ,fr: 'Supérieure' - ,el: 'Πάνω όριο' - ,pt: 'Superior' - ,ro: 'Sus' - ,bg: 'горна' - ,hr: 'Gornja' - ,sv: 'Toppen' - ,it: 'Superiore' - ,ja: '上限' - ,dk: 'Top' - ,fi: 'yläraja' - ,nb: 'Topp' - ,he: 'למעלה' - ,pl: 'górny' - ,ru: 'Верхний' - ,sk: 'horná' - ,nl: 'Top' - ,ko: '최고치' - ,tr: 'Üstü' - ,zh_cn: '上限' - ,hu: 'Felső' - } - ,'Show' : { - cs: 'Zobraz' - ,de: 'Zeigen' - ,es: 'Mostrar' - ,fr: 'Montrer' - ,el: 'Εμφάνιση' - ,pt: 'Mostrar' - ,ro: 'Arată' - ,sv: 'Visa' - ,bg: 'Покажи' - ,hr: 'Prikaži' - ,it: 'Mostra' - ,ja: '作成' - ,dk: 'Vis' - ,fi: 'Näytä' - ,nb: 'Vis' - ,he: 'הצג' - ,pl: 'Pokaż' - ,ru: 'Показать' - ,sk: 'Ukáž' - ,nl: 'Laat zien' - ,ko: '확인' - ,tr: 'Göster' - ,zh_cn: '生成' - ,hu: 'Mutasd' - } - ,'Display' : { - cs: 'Zobraz' - ,de: 'Anzeigen' - ,es: 'Visualizar' - ,fr: 'Afficher' - ,el: 'Εμφάνιση' - ,pt: 'Visualizar' - ,ro: 'Afișează' - ,bg: 'Покажи' - ,hr: 'Prikaži' - ,sv: 'Visa' - ,it: 'Schermo' - ,ja: '表示' - ,dk: 'Vis' - ,fi: 'Näyttö' - ,nb: 'Vis' - ,he: 'תצוגה' - ,pl: 'Wyświetl' - ,ru: 'Визуально' - ,sk: 'Zobraz' - ,nl: 'Weergeven' - ,ko: '출력' - ,tr: 'Görüntüle' - ,zh_cn: '显示' - ,hu: 'Ábrázol' - } - ,'Loading' : { - cs: 'Nahrávám' - ,de: 'Laden' - ,es: 'Cargando' - ,fr: 'Chargement' - ,el: 'Ανάκτηση' - ,pt: 'Carregando' - ,ro: 'Se încarcă' - ,bg: 'Зареждане' - ,hr: 'Učitavanje' - ,sv: 'Laddar' - ,it: 'Carico' - ,ja: 'ロード中' - ,dk: 'Indlæser' - ,fi: 'Lataan' - ,nb: 'Laster' - ,he: 'טוען' - ,pl: 'Ładowanie' - ,ru: 'Загрузка' - ,sk: 'Nahrávam' - ,nl: 'Laden' - ,ko: '로딩' - ,tr: 'Yükleniyor' - ,zh_cn: '载入中' - ,hu: 'Betöltés' - } - ,'Loading profile' : { - cs: 'Nahrávám profil' - ,de: 'Lade Profil' - ,es: 'Cargando perfil' - ,fr: 'Chargement du profil' - ,el: 'Ανάκτηση Προφίλ' - ,pt: 'Carregando perfil' - ,sv: 'Laddar profil' - ,ro: 'Încarc profilul' - ,bg: 'Зареждане на профил' - ,hr: 'Učitavanje profila' - ,it: 'Carico il profilo' - ,ja: 'プロフィールロード中' - ,dk: 'Indlæser profil' - ,fi: 'Lataan profiilia' - ,nb: 'Leser profil' - ,he: 'טוען פרופיל' - ,pl: 'Ładowanie profilu' - ,ru: 'Загрузка профиля' - ,sk: 'Nahrávam profil' - ,nl: 'Profiel laden' - ,ko: '프로파일 로딩' - ,tr: 'Profil yükleniyor' - ,zh_cn: '载入配置文件' - ,hu: 'Profil betöltése' - } - ,'Loading status' : { - cs: 'Nahrávám status' - ,de: 'Lade Status' - ,es: 'Cargando estado' - ,fr: 'Statut du chargement' - ,el: 'Ανάκτηση Κατάστασης' - ,pt: 'Carregando status' - ,sv: 'Laddar status' - ,ro: 'Încarc statusul' - ,bg: 'Зареждане на статус' - ,hr: 'Učitavanje statusa' - ,it: 'Stato di caricamento' - ,ja: 'ステータスロード中' - ,dk: 'Indlæsnings status' - ,fi: 'Lataan tilaa' - ,nb: 'Leser status' - ,he: 'טוען סטטוס' - ,pl: 'Status załadowania' - ,ru: 'Загрузка состояния' - ,sk: 'Nahrávam status' - ,nl: 'Laadstatus' - ,ko: '상태 로딩' - ,tr: 'Durum Yükleniyor' - ,zh_cn: '载入状态' - ,hu: 'Állapot betöltése' - } - ,'Loading food database' : { - cs: 'Nahrávám databázi jídel' - ,de: 'Lade Ernährungs-Datenbank' - ,es: 'Cargando base de datos de alimentos' - ,fr: 'Chargement de la base de données alimentaire' - ,el: 'Ανάκτηση Βάσης Δεδομένων Φαγητών' - ,pt: 'Carregando dados de alimentos' - ,sv: 'Laddar födoämnesdatabas' - ,ro: 'Încarc baza de date de alimente' - ,bg: 'Зареждане на данни с храни' - ,hr: 'Učitavanje baze podataka o hrani' - ,it: 'Carico database alimenti' - ,ja: '食事データベースロード中' - ,dk: 'Indlæser mad database' - ,fi: 'Lataan ruokatietokantaa' - ,nb: 'Leser matdatabase' - ,he: 'טוען נתוני אוכל' - ,pl: 'Ładowanie bazy posiłków' - ,ru: 'Загрузка БД продуктов' - ,sk: 'Nahrávam databázu jedál' - ,nl: 'Voeding database laden' - ,ko: '음식 데이터 베이스 로딩' - ,tr: 'Gıda veritabanı yükleniyor' - ,zh_cn: '载入食物数据库' - ,hu: 'Étel adatbázis betöltése' - } - ,'not displayed' : { - cs: 'není zobrazeno' - ,de: 'nicht angezeigt' - ,es: 'No mostrado' - ,fr: 'non affiché' - ,el: 'Δεν προβάλλεται' - ,pt: 'não mostrado' - ,ro: 'neafișat' - ,bg: 'Не се показва' - ,hr: 'Ne prikazuje se' - ,sv: 'Visas ej' - ,it: 'Non visualizzato' - ,ja: '表示できません' - ,dk: 'Vises ikke' - ,fi: 'ei näytetä' - ,nb: 'Vises ikke' - ,he: 'לא מוצג' - ,pl: 'Nie jest wyświetlany' - ,ru: 'Не показано' - ,sk: 'Nie je zobrazené' - ,nl: 'Niet weergegeven' - ,ko: '출력되지 않음' - ,tr: 'görüntülenmedi' - ,zh_cn: '未显示' - ,hu: 'nincs megjelenítve' - } - ,'Loading CGM data of' : { - cs: 'Nahrávám CGM data' - ,de: 'Lade CGM-Daten von' - ,es: 'Cargando datos de CGM de' - ,fr: 'Chargement données CGM de' - ,el: 'Ανάκτηση δεδομένων CGM' - ,pt: 'Carregando dados de CGM de' - ,sv: 'Laddar CGM-data för' - ,ro: 'Încarc datele CGM ale lui' - ,bg: 'Зареждане на CGM данни от' - ,hr: 'Učitavanja podataka CGM-a' - ,it: 'Carico dati CGM' - ,ja: 'CGMデータロード中' - ,dk: 'Indlæser CGM-data for' - ,fi: 'Lataan sensoritietoja: ' - ,nb: 'Leser CGM-data for' - ,he: 'טוען נתוני חיישן סוכר של' - ,pl: 'Ładowanie danych z CGM' - ,ru: 'Загрузка данных мониторинга' - ,sk: 'Nahrávam CGM dáta' - ,nl: 'CGM data laden van' - ,ko: 'CGM 데이터 로딩' - ,tr: 'den CGM veriler yükleniyor' - ,zh_cn: '载入CGM(连续血糖监测)数据从' - ,hu: 'CGM adatok betöltése' - } - ,'Loading treatments data of' : { - cs: 'Nahrávám data ošetření' - ,de: 'Lade Behandlungsdaten von' - ,es: 'Cargando datos de tratamientos de' - ,fr: 'Chargement données traitement de' - ,el: 'Ανάκτηση δεδομένων ενεργειών' - ,pt: 'Carregando dados de tratamento de' - ,sv: 'Laddar behandlingsdata för' - ,ro: 'Încarc datele despre tratament pentru' - ,bg: 'Зареждане на въведените лечения от' - ,hr: 'Učitavanje podataka o tretmanu' - ,it: 'Carico dati dei trattamenti' - ,ja: '治療データロード中' - ,dk: 'Indlæser behandlingsdata for' - ,fi: 'Lataan toimenpidetietoja: ' - ,nb: 'Leser behandlingsdata for' - ,he: 'טוען נתוני טיפולים של' - ,pl: 'Ładowanie danych leczenia' - ,ru: 'Загрузка данных лечения' - ,sk: 'Nahrávam dáta ošetrenia' - ,nl: 'Behandel gegevens laden van' - ,ko: '처리 데이터 로딩' - ,tr: 'dan Tedavi verilerini yükle' - ,zh_cn: '载入操作数据从' - ,hu: 'Kezelés adatainak betöltése' - } - ,'Processing data of' : { - cs: 'Zpracovávám data' - ,de: 'Verarbeite Daten von' - ,es: 'Procesando datos de' - ,fr: 'Traitement des données de' - ,el: 'Επεξεργασία Δεδομένων' - ,pt: 'Processando dados de' - ,sv: 'Behandlar data för' - ,ro: 'Procesez datele pentru' - ,bg: 'Зареждане на данни от' - ,hr: 'Obrada podataka' - ,it: 'Elaborazione dei dati' - ,ja: 'データ処理中の日付:' - ,dk: 'Behandler data for' - ,fi: 'Käsittelen tietoja: ' - ,nb: 'Behandler data for' - ,he: 'מעבד נתונים של' - ,pl: 'Przetwarzanie danych' - ,ru: 'Обработка данных от' - ,sk: 'Spracovávam dáta' - ,nl: 'Gegevens verwerken van' - ,ko: '데이터 처리 중' - ,tr: 'dan Veri işleme' - ,zh_cn: '处理数据从' - ,hu: 'Adatok feldolgozása' - } - ,'Portion' : { - cs: 'Porce' - ,de: 'Abschnitt' - ,es: 'Porción' - ,fr: 'Portion' - ,el: 'Μερίδα' - ,pt: 'Porção' - ,ro: 'Porție' - ,bg: 'Порция' - ,hr: 'Dio' - ,sv: 'Portion' - ,it: 'Porzione' - ,ja: '一食分' - ,dk: 'Portion' - ,fi: 'Annos' - ,nb: 'Porsjon' - ,he: 'מנה' - ,pl: 'Część' - ,ru: 'Порция' - ,sk: 'Porcia' - ,nl: 'Portie' - ,ko: '부분' - ,tr: 'Porsiyon' - ,zh_cn: '部分' - ,hu: 'Porció' - } - ,'Size' : { - cs: 'Rozměr' - ,de: 'Größe' - ,es: 'Tamaño' - ,fr: 'Taille' - ,el: 'Μέγεθος' - ,pt: 'Tamanho' - ,ro: 'Mărime' - ,sv: 'Storlek' - ,bg: 'Големина' - ,hr: 'Veličina' - ,it: 'Formato' - ,ja: '量' - ,dk: 'Størrelse' - ,fi: 'Koko' - ,nb: 'Størrelse' - ,he: 'גודל' - ,pl: 'Rozmiar' - ,ru: 'Объем' - ,sk: 'Veľkosť' - ,nl: 'Grootte' - ,ko: '크기' - ,tr: 'Boyut' - ,zh_cn: '大小' - ,hu: 'Méret' - } - ,'(none)' : { - cs: '(Žádný)' - ,de: '(nichts)' - ,es: '(ninguno)' - ,fr: '(aucun)' - ,el: '(κενό)' - ,pt: '(nenhum)' - ,sv: '(tom)' - ,ro: '(fără)' - ,bg: '(няма)' - ,hr: '(Prazno)' - ,it: '(Nessuno)' - ,ja: '(データなし)' - ,dk: '(ingen)' - ,fi: '(tyhjä)' - ,nb: '(ingen)' - ,he: '(ללא)' - ,pl: '(brak)' - ,ru: '(нет)' - ,sk: '(žiadny)' - ,nl: '(geen)' - ,ko: '(없음)' - ,tr: '(hiç)' - ,zh_cn: '(无)' - ,zh_tw: '(無)' - ,hu: '(semmilyen)' - } - ,'None' : { - cs: 'Žádný' - ,de: 'Nichts' - ,es: 'Ninguno' - ,fr: 'aucun' - ,el: 'Κενό' - ,pt: 'nenhum' - ,sv: 'tom' - ,ro: 'fără' - ,bg: 'няма' - ,hr: 'Prazno' - ,it: 'Nessuno' - ,ja: 'データなし' - ,dk: 'Ingen' - ,fi: 'tyhjä' - ,nb: 'ingen' - ,he: 'ללא' - ,pl: 'brak' - ,ru: 'Нет' - ,sk: 'Žiadny' - ,nl: 'geen' - ,ko: '없음' - ,tr: 'Hiç' - ,zh_cn: '无' - ,zh_tw: '無' - ,hu: 'Semmilyen' - } - ,'' : { - cs: '<Žádný>' - ,de: '' - ,es: '' - ,fr: '' - ,el: '<κενό>' - ,pt: '' - ,sv: '' - ,ro: '' - ,bg: '<няма>' - ,hr: '' - ,it: '' - ,ja: '<データなし>' - ,dk: '' - ,fi: '' - ,nb: '' - ,he: '<ללא>' - ,pl: '' - ,ru: '<нет>' - ,sk: '<žiadny>' - ,nl: '' - ,ko: '<없음>' - ,tr: '' - ,zh_cn: '<无>' - ,hu: '' - } - ,'Result is empty' : { - cs: 'Prázdný výsledek' - ,de: 'Ergebnis ist leer' - ,es: 'Resultado vacío' - ,fr: 'Pas de résultat' - ,el: 'Δεν υπάρχουν αποτελέσματα' - ,pt: 'Resultado vazio' - ,sv: 'Resultat saknas' - ,ro: 'Fără rezultat' - ,bg: 'Няма резултат' - ,hr: 'Prazan rezultat' - ,it: 'Risultato vuoto' - ,ja: '結果がありません' - ,dk: 'Tomt resultat' - ,fi: 'Ei tuloksia' - ,nb: 'Tomt resultat' - ,he: 'אין תוצאה' - ,pl: 'Brak wyniku' - ,ru: 'Результата нет ' - ,sk: 'Prázdny výsledok' - ,nl: 'Geen resultaat' - ,ko: '결과 없음' - ,tr: 'Sonuç boş' - ,zh_cn: '结果为空' - ,hu: 'Az eredmény üres' - } - ,'Day to day' : { - cs: 'Den po dni' - ,de: 'Von Tag zu Tag' - ,es: 'Día a día' - ,fr: 'jour par jour' - ,el: 'Ανά ημέρα' - ,pt: 'Dia a dia' - ,sv: 'Dag för dag' - ,ro: 'Zi cu zi' - ,bg: 'Ден за ден' - ,hr: 'Svakodnevno' - ,it: 'Giorno per giorno' - ,ja: '日差' - ,dk: 'Dag til dag' - ,fi: 'Päivittäinen' - ,nb: 'Dag til dag' - ,he: 'יום ביומו' - ,pl: 'Dzień po dniu' - ,ru: 'По дням' - ,sk: 'Deň po dni' - ,nl: 'Dag tot Dag' - ,ko: '일별 그래프' - ,tr: 'Günden Güne' - ,zh_cn: '日到日' - ,hu: 'Napi' - } - ,'Week to week' : { - cs: 'Week to week' - ,de: 'Woche zu Woche' - ,es: 'Week to week' - ,fr: 'Week to week' - ,el: 'Week to week' - ,pt: 'Week to week' - ,sv: 'Week to week' - ,ro: 'Week to week' - ,bg: 'Week to week' - ,hr: 'Tjedno' - ,it: 'Week to week' - ,dk: 'Week to week' - ,fi: 'Week to week' - ,nb: 'Week to week' - ,he: 'Week to week' - ,pl: 'Tydzień po tygodniu' - ,ru: 'По неделям' - ,sk: 'Week to week' - ,nl: 'Week to week' - ,ko: '주별 그래프' - ,zh_cn: 'Week to week' - ,hu: 'Heti' - } - ,'Daily Stats' : { - cs: 'Denní statistiky' - ,de: 'Tägliche Statistik' - ,es: 'Estadísticas diarias' - ,fr: 'Stats quotidiennes' - ,el: 'Ημερήσια Στατιστικά' - ,pt: 'Estatísticas diárias' - ,sv: 'Dygnsstatistik' - ,ro: 'Statistici zilnice' - ,bg: 'Дневна статистика' - ,hr: 'Dnevna statistika' - ,it: 'Statistiche giornaliere' - ,ja: '1日統計' - ,dk: 'Daglig statistik' - ,fi: 'Päivittäiset tilastot' - ,nb: 'Daglig statistikk' - ,he: 'סטטיסטיקה יומית' - ,pl: 'Statystyki dzienne' - ,ru: 'Ежедневная статистика' - ,sk: 'Denné štatistiky' - ,nl: 'Dagelijkse statistiek' - ,ko: '일간 통계' - ,tr: 'Günlük İstatistikler' - ,zh_cn: '每日状态' - ,hu: 'Napi statisztika' - } - ,'Percentile Chart' : { - cs: 'Percentil' - ,de: 'Perzentil-Diagramm' - ,es: 'Percentiles' - ,fr: 'Percentiles' - ,el: 'Γράφημα Εκατοστημορίων' - ,pt: 'Percentis' - ,ro: 'Grafic percentile' - ,bg: 'Процентна графика' - ,hr: 'Percentili' - ,sv: 'Procentgraf' - ,it: 'Grafico percentile' - ,ja: 'パーセント図' - ,dk: 'Procentgraf' - ,fi: 'Suhteellinen kuvaaja' - ,nb: 'Prosentgraf' - ,he: 'טבלת עשירונים' - ,pl: 'Wykres percentyl' - ,ru: 'Процентильная диаграмма' - ,sk: 'Percentil' - ,nl: 'Procentuele grafiek' - ,ko: '백분위 그래프' - ,tr: 'Yüzdelik Grafiği' - ,zh_cn: '百分位图形' - ,hu: 'Százalékos' - } - ,'Distribution' : { - cs: 'Rozložení' - ,de: 'Verteilung' - ,es: 'Distribución' - ,fr: 'Distribution' - ,el: 'Κατανομή' - ,pt: 'Distribuição' - ,ro: 'Distribuție' - ,bg: 'Разпределение' - ,hr: 'Distribucija' - ,sv: 'Distribution' - ,it: 'Distribuzione' - ,ja: '配分' - ,dk: 'Distribution' - ,fi: 'Jakauma' - ,nb: 'Distribusjon' - ,he: 'התפלגות' - ,pl: 'Dystrybucja' - ,ru: 'Распределение' - ,sk: 'Distribúcia' - ,nl: 'Verdeling' - ,ko: '분포' - ,tr: 'Dağılım' - ,zh_cn: '分布' - ,hu: 'Szétosztás' - } - ,'Hourly stats' : { - cs: 'Statistika po hodinách' - ,de: 'Stündliche Statistik' - ,es: 'Estadísticas por hora' - ,fr: 'Statistiques horaires' - ,el: 'Ωριαία Στατιστικά' - ,pt: 'Estatísticas por hora' - ,sv: 'Timmstatistik' - ,ro: 'Statistici orare' - ,bg: 'Статистика по часове' - ,hr: 'Statistika po satu' - ,it: 'Statistiche per ore' - ,ja: '1時間統計' - ,dk: 'Timestatistik' - ,fi: 'Tunneittainen tilasto' - ,nb: 'Timestatistikk' - ,he: 'סטטיסטיקה שעתית' - ,pl: 'Statystyki godzinowe' - ,ru: 'Почасовая статистика' - ,sk: 'Hodinové štatistiky' - ,nl: 'Statistieken per uur' - ,ko: '시간대별 통계' - ,tr: 'Saatlik istatistikler' - ,zh_cn: '每小时状态' - ,hu: 'Óránkra való szétosztás' - } - ,'netIOB stats': { // hourlystats.js - nl: 'netIOB stats' - ,sv: 'netIOB statistik' - ,dk: 'netIOB statistik' - ,he: 'netIOB סטטיסטיקת' - ,de: 'netIOB Statistiken' - ,fi: 'netIOB tilasto' - ,bg: 'netIOB татистика' - ,hr: 'netIOB statistika' - , pl: 'Statystyki netIOP' - ,ru: 'статистика нетто активн инс netIOB' - ,tr: 'netIOB istatistikleri' - ,hu: 'netIOB statisztika' - } - ,'temp basals must be rendered to display this report': { //hourlystats.js - nl: 'tijdelijk basaal moet zichtbaar zijn voor dit rapport' - ,sv: 'temp basal måste vara synlig för denna rapport' - ,de: 'temporäre Basalraten müssen für diesen Report sichtbar sein' - ,fi: 'tämä raportti vaatii, että basaalien piirto on päällä' - ,bg: 'временните базали трябва да са показани за да се покаже тази това' - ,hr: 'temp bazali moraju biti prikazani kako bi se vidio ovaj izvještaj' - ,he: 'חובה לאפשר רמה בזלית זמנית כדי לרות דוח זה' - , pl: 'Tymczasowa dawka podstawowa jest wymagana aby wyświetlić ten raport' - ,ru: 'для этого отчета требуется прорисовка врем базалов' - ,tr: 'Bu raporu görüntülemek için geçici bazal oluşturulmalıdır' - ,hu: 'Az átmeneti bazálnak meg kell lennie jelenítve az adott jelentls megtekintéséhez' - } - ,'Weekly success' : { - cs: 'Statistika po týdnech' - ,de: 'Wöchentlicher Erfolg' - ,es: 'Resultados semanales' - ,fr: 'Résultat hebdomadaire' - ,el: 'Εβδομαδιαία Στατιστικά' - ,pt: 'Resultados semanais' - ,ro: 'Rezultate săptămânale' - ,bg: 'Седмичен успех' - ,hr: 'Tjedni uspjeh' - ,sv: 'Veckoresultat' - ,it: 'Statistiche settimanali' - ,ja: '1週間統計' - ,dk: 'Uge resultat' - ,fi: 'Viikkotilasto' - ,he: 'הצלחה שבועית' - ,nb: 'Ukeresultat' - ,pl: 'Wyniki tygodniowe' - ,ru: 'Результаты недели' - ,sk: 'Týždenná úspešnosť' - ,nl: 'Wekelijkse successen' - ,ko: '주간 통계' - ,tr: 'Haftalık başarı' - ,zh_cn: '每周统计' - ,hu: 'Heti sikeresség' - } - ,'No data available' : { - cs: 'Žádná dostupná data' - ,de: 'Keine Daten verfügbar' - ,es: 'No hay datos disponibles' - ,fr: 'Pas de données disponibles' - ,el: 'Μη διαθέσιμα δεδομένα' - ,pt: 'Não há dados' - ,ro: 'Fără date' - ,bg: 'Няма данни за показване' - ,hr: 'Nema raspoloživih podataka' - ,sv: 'Data saknas' - ,it: 'Dati non disponibili' - ,ja: '利用できるデータがありません' - ,dk: 'Mangler data' - ,fi: 'Tietoja ei saatavilla' - ,nb: 'Mangler data' - ,he: 'אין מידע זמין' - ,pl: 'Brak danych' - ,ru: 'Нет данных' - ,sk: 'Žiadne dostupné dáta' - ,nl: 'Geen gegevens beschikbaar' - ,ko: '활용할 수 있는 데이터 없음' - ,tr: 'Veri yok' - ,zh_cn: '无可用数据' - ,hu: 'Nincs elérhető adat' - } - ,'Low' : { - cs: 'Nízká' - ,de: 'Tief' - ,es: 'Bajo' - ,fr: 'Bas' - ,el: 'Χαμηλά' - ,pt: 'Baixo' - ,sv: 'Låg' - ,ro: 'Prea jos' - ,bg: 'Ниска' - ,hr: 'Nizak' - ,it: 'Basso' - ,ja: '目標血糖値低値' - ,dk: 'Lav' - ,fi: 'Matala' - ,nb: 'Lav' - ,he: 'נמוך' - ,pl: 'Niski' - ,ru: 'Низкая ГК' - ,sk: 'Nízka' - ,nl: 'Laag' - ,ko: '낮음' - ,tr: 'Düşük' - ,zh_cn: '低血糖' - ,hu: 'Alacsony' - } - ,'In Range' : { - cs: 'V rozsahu' - ,de: 'Im Zielbereich' - ,es: 'En rango' - ,fr: 'dans la norme' - ,el: 'Στο στόχο' - ,pt: 'Na meta' - ,sv: 'Inom intervallet' - ,ro: 'În interval' - ,bg: 'В граници' - ,hr: 'U rasponu' - ,it: 'Nell\'intervallo' - ,ja: '目標血糖値範囲内' - ,dk: 'Indenfor intervallet' - ,fi: 'Tavoitealueella' - ,nb: 'Innenfor intervallet' - ,he: 'בטווח' - ,pl: 'W zakresie' - ,ru: 'В диапазоне' - ,sk: 'V rozsahu' - ,nl: 'Binnen bereik' - ,ko: '범위 안 ' - ,tr: 'Hedef alanında' - ,zh_cn: '范围内' - ,hu: 'Normális' - } - ,'Period' : { - cs: 'Období' - ,de: 'Zeitabschnitt' - ,es: 'Periodo' - ,fr: 'Période' - ,el: 'Περίοδος' - ,pt: 'Período' - ,sv: 'Period' - ,ro: 'Perioada' - ,bg: 'Период' - ,hr: 'Period' - ,it: 'Periodo' - ,ja: '期間' - ,dk: 'Periode' - ,fi: 'Aikaväli' - ,nb: 'Periode' - ,he: 'תקופה' - ,pl: 'Okres' - ,ru: 'Период' - ,sk: 'Obdobie' - ,nl: 'Periode' - ,ko: '기간 ' - ,tr: 'Periyot' - ,zh_cn: '期间' - ,hu: 'Időszak' - } - ,'High' : { - cs: 'Vysoká' - ,de: 'Hoch' - ,es: 'Alto' - ,fr: 'Haut' - ,el: 'Υψηλά' - ,pt: 'Alto' - ,sv: 'Hög' - ,ro: 'Prea sus' - ,bg: 'Висока' - ,hr: 'Visok' - ,it: 'Alto' - ,ja: '目標血糖値高値' - ,dk: 'Høj' - ,fi: 'Korkea' - ,nb: 'Høy' - ,he: 'גבוה' - ,pl: 'Wysoki' - ,ru: 'Высокая ГК' - ,sk: 'Vysoká' - ,nl: 'Hoog' - ,ko: '높음' - ,tr: 'Yüksek' - ,zh_cn: '高血糖' - ,hu: 'Magas' - } - ,'Average' : { - cs: 'Průměr' - ,de: 'Mittelwert' - ,es: 'Media' - ,fr: 'Moyenne' - ,el: 'Μέσος Όρος' - ,pt: 'Média' - ,sv: 'Genomsnittligt' - ,ro: 'Media' - ,bg: 'Средна' - ,hr: 'Prosjek' - ,it: 'Media' - ,ja: '平均値' - ,dk: 'Gennemsnit' - ,fi: 'Keskiarvo' - ,nb: 'Gjennomsnitt' - ,he: 'ממוצע' - ,pl: 'Średnia' - ,ru: 'Средняя' - ,sk: 'Priemer' - ,nl: 'Gemiddeld' - ,ko: '평균' - ,tr: 'Ortalama' - ,zh_cn: '平均' - ,hu: 'Átlagos' - } - ,'Low Quartile' : { - cs: 'Nízký kvartil' - ,de: 'Unteres Quartil' - ,es: 'Cuartil inferior' - ,fr: 'Quartile inférieur' - ,el: 'Τεταρτημόριο Χαμηλών' - ,pt: 'Quartil inferior' - ,ro: 'Pătrime inferioară' - ,bg: 'Ниска четвъртинка' - ,hr: 'Donji kvartil' - ,sv: 'Nedre kvadranten' - ,it: 'Quartile basso' - ,ja: '下四分位値' - ,dk: 'Nedre kvartil' - ,fi: 'Alin neljäsosa' - ,nb: 'Nedre kvartil' - ,he: 'רבעון תחתון' - ,pl: 'Dolny kwartyl' - ,ru: 'Нижняя четверть' - ,sk: 'Nizky kvartil' - ,nl: 'Eerste kwartiel' - ,ko: '낮은 4분위' - ,tr: 'Alt Çeyrek' - ,zh_cn: '下四分位数' - ,hu: 'Alacsony kvartil' - } - ,'Upper Quartile' : { - cs: 'Vysoký kvartil' - ,de: 'Oberes Quartil' - ,es: 'Cuartil superior' - ,fr: 'Quartile supérieur' - ,el: 'Τεταρτημόριο Υψηλών' - ,pt: 'Quartil superior' - ,ro: 'Pătrime superioară' - ,bg: 'Висока четвъртинка' - ,hr: 'Gornji kvartil' - ,sv: 'Övre kvadranten' - ,it: 'Quartile alto' - ,ja: '高四分位値' - ,dk: 'Øvre kvartil' - ,fi: 'Ylin neljäsosa' - ,nb: 'Øvre kvartil' - ,he: 'רבעון עליון' - ,pl: 'Górny kwartyl' - ,ru: 'Верхняя четверть' - ,sk: 'Vysoký kvartil' - ,nl: 'Derde kwartiel' - ,ko: '높은 4분위' - ,tr: 'Üst Çeyrek' - ,zh_cn: '上四分位数' - ,hu: 'Magas kvartil' - } - ,'Quartile' : { - cs: 'Kvartil' - ,de: 'Quartil' - ,es: 'Cuartil' - ,fr: 'Quartile' - ,el: 'Τεταρτημόριο' - ,pt: 'Quartil' - ,ro: 'Pătrime' - ,bg: 'Четвъртинка' - ,hr: 'Kvartil' - ,sv: 'Kvadrant' - ,it: 'Quartile' - ,ja: '四分位値' - ,dk: 'Kvartil' - ,fi: 'Neljäsosa' - ,nb: 'Kvartil' - ,he: 'רבעון' - ,pl: 'Kwartyl' - ,ru: 'Четверть' - ,sk: 'Kvartil' - ,nl: 'Kwartiel' - ,ko: '4분위' - ,tr: 'Çeyrek' - ,zh_cn: '四分位数' - ,hu: 'Kvartil' - } - ,'Date' : { - cs: 'Datum' - ,de: 'Datum' - ,es: 'Fecha' - ,fr: 'Date' - ,el: 'Ημερομηνία' - ,pt: 'Data' - ,sv: 'Datum' - ,ro: 'Data' - ,bg: 'Дата' - ,hr: 'Datum' - ,it: 'Data' - ,ja: '日付' - ,dk: 'Dato' - ,fi: 'Päivämäärä' - ,nb: 'Dato' - ,he: 'תאריך' - ,pl: 'Data' - ,ru: 'Дата' - ,sk: 'Dátum' - ,nl: 'Datum' - ,ko: '날짜' - ,tr: 'Tarih' - ,zh_cn: '日期' - ,hu: 'Dátum' - } - ,'Normal' : { - cs: 'Normální' - ,de: 'Normal' - ,es: 'Normal' - ,fr: 'Normale' - ,el: 'Εντός Στόχου' - ,pt: 'Normal' - ,sv: 'Normal' - ,ro: 'Normal' - ,bg: 'Нормалнa' - ,hr: 'Normalno' - ,it: 'Normale' - ,ja: '通常' - ,dk: 'Normal' - ,fi: 'Normaali' - ,nb: 'Normal' - ,he: 'נורמלי' - ,pl: 'Normalny' - ,ru: 'Норма' - ,sk: 'Normálny' - ,nl: 'Normaal' - ,ko: '보통' - ,tr: 'Normal' - ,zh_cn: '正常' - ,hu: 'Normális' - } - ,'Median' : { - cs: 'Medián' - ,de: 'Median' - ,es: 'Mediana' - ,fr: 'Médiane' - ,el: 'Διάμεσος' - ,pt: 'Mediana' - ,ro: 'Mediană' - ,bg: 'Средно' - ,hr: 'Srednje' - ,sv: 'Median' - ,it: 'Mediana' - ,ja: '中央値' - ,dk: 'Median' - ,fi: 'Mediaani' - ,nb: 'Median' - ,he: 'חציון' - ,pl: 'Mediana' - ,ru: 'Усредненный' - ,sk: 'Medián' - ,nl: 'Mediaan' - ,ko: '중간값' - ,tr: 'Orta Değer' - ,zh_cn: '中值' - ,hu: 'Medián' - } - ,'Readings' : { - cs: 'Záznamů' - ,de: 'Messwerte' - ,es: 'Valores' - ,fr: 'Valeurs' - ,el: 'Μετρήσεις' - ,pt: 'Valores' - ,sv: 'Avläsningar' - ,ro: 'Valori' - ,bg: 'Измервания' - ,hr: 'Vrijednosti' - ,it: 'Valori' - ,ja: '読み込み' - ,dk: 'Aflæsninger' - ,fi: 'Lukemia' - ,nb: 'Avlesning' - ,he: 'קריאות' - ,pl: 'Odczyty' - ,ru: 'Значения' - ,sk: 'Záznamy' - ,nl: 'Metingen' - ,ko: '혈당' - ,tr: 'Ölçüm' - ,zh_cn: '读数' - ,hu: 'Értékek' - } - ,'StDev' : { - cs: 'Směrodatná odchylka' - ,de: 'Standardabweichung' - ,es: 'Desviación estándar' - ,fr: 'Déviation St.' - ,el: 'Τυπική Απόκλιση' - ,pt: 'DesvPadr' - ,sv: 'StdDev' - ,ro: 'Standarddeviation' - ,bg: 'Стандартно отклонение' - ,hr: 'Standardna devijacija' - ,it: 'Dev.std' - ,ja: '標準偏差' - ,dk: 'Standard afvigelse' - ,fi: 'Keskijakauma' - ,nb: 'Standardavvik' - ,he: 'סטיית תקן' - ,pl: 'Stand. odchylenie' - ,nl: 'Std. deviatie' - ,ru: 'Стандартное отклонение' - ,sk: 'Štand. odch.' - ,ko: '표준 편차' - ,tr: 'Standart Sapma' - ,zh_cn: '标准偏差' - ,hu: 'Standard eltérés' - } - ,'Daily stats report' : { - cs: 'Denní statistiky' - ,de: 'Tagesstatistik Bericht' - ,es: 'Informe de estadísticas diarias' - ,fr: 'Rapport quotidien' - ,el: 'Ημερήσια Στατιστικά' - ,pt: 'Relatório diário' - ,ro: 'Raport statistică zilnică' - ,bg: 'Дневна статистика' - ,hr: 'Izvješće o dnevnim statistikama' - ,sv: 'Dygnsstatistik' - ,it: 'Statistiche giornaliere' - ,ja: '1日ごとの統計のレポート' - ,dk: 'Daglig statistik rapport' - ,fi: 'Päivittäinen tilasto' - ,nb: 'Daglig statistikkrapport' - ,he: 'דוח סטטיסטיקה יומית' - ,pl: 'Dzienne statystyki' - ,ru: 'Суточная статистика' - ,sk: 'Denné štatistiky' - ,nl: 'Dagelijkse statistieken' - ,ko: '일간 통계 보고서' - ,tr: 'Günlük istatistikler raporu' - ,zh_cn: '每日状态报表' - ,hu: 'Napi statisztikák' - } - ,'Glucose Percentile report' : { - cs: 'Tabulka percentil glykémií' - ,de: 'Glukose-Perzentil Bericht' - ,es: 'Informe de percetiles de glucemia' - ,fr: 'Rapport percentiles Glycémie' - ,el: 'Αναφορά Εκατοστημοριακής Κατάταξης τιμών Γλυκόζης' - ,pt: 'Relatório de Percentis de Glicemia' - ,sv: 'Glukosrapport i procent' - ,ro: 'Raport percentile glicemii' - ,bg: 'Графика на КЗ' - ,hr: 'Izvješće o postotku GUK-a' - ,it: 'Percentuale Glicemie' - ,ja: 'グルコース(%)レポート' - ,dk: 'Glukoserapport i procent' - ,fi: 'Verensokeriarvojen jakauma' - ,nb: 'Glukoserapport i prosent' - ,he: 'דוח אחוזון סוכר' - ,pl: 'Tabela centylowa glikemii' - ,ru: 'Процентильная ГК' - ,sk: 'Report percentilu glykémií' - ,nl: 'Glucose percentiel rapport' - ,ko: '혈당 백분위 보고서' - ,tr: 'Glikoz Yüzdelik raporu' - ,zh_cn: '血糖百分位报表' - ,hu: 'Cukorszint percentil jelentés' - } - ,'Glucose distribution' : { - cs: 'Rozložení glykémií' - ,de: 'Glukose Verteilung' - ,es: 'Distribución de glucemias' - ,fr: 'Distribution glycémies' - ,el: 'Κατανομή Τιμών Γλυκόζης' - ,pt: 'Distribuição de glicemias' - ,ro: 'Distribuție glicemie' - ,bg: 'Разпределение на КЗ' - ,hr: 'Distribucija GUK-a' - ,sv: 'Glukosdistribution' - ,it: 'Distribuzione glicemie' - ,ja: '血糖値の分布' - ,dk: 'Glukosefordeling' - ,fi: 'Glukoosijakauma' - ,nb: 'Glukosefordeling' - ,he: 'התפלגות סוכר' - ,pl: 'Rozkład glikemii' - ,ru: 'Распределение ГК' - ,sk: 'Rozloženie glykémie' - ,nl: 'Glucose verdeling' - ,ko: '혈당 분포' - ,tr: 'Glikoz dağılımı' - ,zh_cn: '血糖分布' - ,hu: 'Cukorszint szétosztása' - } - ,'days total' : { - cs: 'dní celkem' - ,de: 'Gesamttage' - ,es: 'Total de días' - ,fr: 'jours totaux' - ,el: 'ημέρες συνολικά' - ,pt: 'dias no total' - ,sv: 'antal dagar' - ,ro: 'total zile' - ,bg: 'общо за деня' - ,hr: 'ukupno dana' - ,it: 'Giorni totali' - ,ja: '合計日数' - ,dk: 'antal dage' - ,fi: 'päivän arvio' - ,nb: 'antall dager' - ,he: 'מספר ימים' - ,pl: 'dni łącznie' - ,ru: 'всего дней' - ,sk: 'dní celkom' - ,nl: 'Totaal dagen' - ,ko: '일 전체' - ,tr: 'toplam gün' - ,zh_cn: '天总计' - ,hu: 'nap összesen' - } - ,'Total per day' : { - cs: 'dní celkem' - ,de: 'Gesamt pro Tag' - ,es: 'Total de días' - ,fr: 'Total journalier' - ,el: 'ημέρες συνολικά' - ,pt: 'dias no total' - ,sv: 'antal dagar' - ,ro: 'total zile' - ,bg: 'общо за деня' - ,hr: 'Ukupno po danu' - ,it: 'Giorni totali' - ,dk: 'antal dage' - ,fi: 'päivän arvio' - ,nb: 'antall dager' - ,he: 'מספר ימים' - ,pl: 'dni łącznie' - ,ru: 'всего за сутки' - ,sk: 'dní celkom' - ,nl: 'Totaal dagen' - ,ko: '하루 총량' - ,tr: 'Günlük toplam' - ,zh_cn: '天总计' - ,hu: 'Naponta összesen' - } - ,'Overall' : { - cs: 'Celkem' - ,de: 'Insgesamt' - ,es: 'General' - ,fr: 'En général' - ,el: 'Σύνολο' - ,pt: 'Geral' - ,sv: 'Genomsnitt' - ,ro: 'General' - ,bg: 'Общо' - ,hr: 'Sveukupno' - ,it: 'Generale' - ,ja: '総合' - ,dk: 'Gennemsnit' - ,fi: 'Yhteenveto' - ,nb: 'Generelt' - ,he: 'סך הכל' - ,pl: 'Ogółem' - ,ru: 'Суммарно' - ,sk: 'Súhrn' - ,nl: 'Totaal' - ,ko: '전체' - ,tr: 'Tüm' - ,zh_cn: '概览' - ,hu: 'Összesen' - } - ,'Range' : { - cs: 'Rozsah' - ,de: 'Bereich' - ,es: 'Intervalo' - ,fr: 'Intervalle' - ,el: 'Διάστημα' - ,pt: 'intervalo' - ,sv: 'Intervall' - ,ro: 'Interval' - ,bg: 'Диапазон' - ,hr: 'Raspon' - ,it: 'Intervallo' - ,ja: '範囲' - ,dk: 'Interval' - ,fi: 'Alue' - ,nb: 'Intervall' - ,he: 'טווח' - ,pl: 'Zakres' - ,ru: 'Диапазон' - ,sk: 'Rozsah' - ,nl: 'Bereik' - ,ko: '범위' - ,tr: 'Alan' - ,zh_cn: '范围' - ,hu: 'Tartomány' - } - ,'% of Readings' : { - cs: '% záznamů' - ,de: '% der Messwerte' - ,es: '% de valores' - ,fr: '% de valeurs' - ,el: '% των μετρήσεων' - ,pt: '% de valores' - ,sv: '% av avläsningar' - ,ro: '% de valori' - ,bg: '% от измервания' - ,hr: '% očitanja' - ,it: '% dei valori' - ,ja: '%精度' - ,dk: '% af aflæsningerne' - ,fi: '% lukemista' - ,nb: '% af avlesningene' - ,he: 'אחוז קריאות' - ,pl: '% Odczytów' - ,ru: '% измерений' - ,sk: '% záznamov' - ,nl: '% metingen' - ,ko: '수신된 혈당 비율(%)' - ,tr: '% Okumaların' - ,zh_cn: '%已读取' - ,hu: '% az értékeknek' - } - ,'# of Readings' : { - cs: 'počet záznamů' - ,de: 'Anzahl der Messwerte' - ,es: 'N° de valores' - ,fr: 'nbr de valeurs' - ,el: 'Πλήθος μετρήσεων' - ,pt: 'N° de valores' - ,sv: '# av avläsningar' - ,ro: 'nr. de valori' - ,bg: '№ от измервания' - ,hr: 'broj očitanja' - ,it: '# di valori' - ,ja: '#精度' - ,dk: 'Antal aflæsninger' - ,fi: 'Lukemien määrä' - ,nb: 'Antall avlesninger' - ,he: 'מספר קריאות' - ,pl: 'Ilość Odczytów' - ,ru: 'кол-во измерений' - ,sk: 'Počet záznamov' - ,nl: 'Aantal metingen' - ,ko: '수신된 혈당 개수(#)' - ,tr: '# Okumaların' - ,zh_cn: '#已读取' - ,hu: 'Olvasott értékek száma' - } - ,'Mean' : { - cs: 'Střední hodnota' - ,de: 'Mittelwert' - ,es: 'Media' - ,fr: 'Moyenne' - ,el: 'Μέσος Όρος' - ,pt: 'Média' - ,sv: 'Genomsnitt' - ,ro: 'Medie' - ,bg: 'Средна стойност' - ,hr: 'Prosjek' - ,it: 'Media' - ,ja: '意味' - ,dk: 'Gennemsnit' - ,fi: 'Keskiarvo' - ,nb: 'Gjennomsnitt' - ,he: 'ממוצע' - ,pl: 'Wartość średnia' - ,ru: 'Среднее значение' - ,sk: 'Stred' - ,nl: 'Gemiddeld' - ,ko: '평균' - ,tr: 'ortalama' - ,zh_cn: '平均' - ,hu: 'Közép' - } - ,'Standard Deviation' : { - cs: 'Standardní odchylka' - ,de: 'Standardabweichung' - ,es: 'Desviación estándar' - ,fr: 'Déviation Standard' - ,el: 'Τυπική Απόκλιση' - ,pt: 'Desvio padrão' - ,ro: 'Deviație standard' - ,bg: 'Стандартно отклонение' - ,hr: 'Standardna devijacija' - ,sv: 'Standardavvikelse' - ,it: 'Deviazione Standard' - ,ja: '標準偏差' - ,dk: 'Standardafvigelse' - ,fi: 'Keskijakauma' - ,nb: 'Standardavvik' - ,he: 'סטיית תקן' - ,pl: 'Standardowe odchylenie' - ,ru: 'Стандартное отклонение' - ,sk: 'Štandardná odchylka' - ,nl: 'Standaard deviatie' - ,ko: '표준 편차' - ,tr: 'Standart Sapma' - ,zh_cn: '标准偏差' - ,hu: 'Átlagos eltérés' - } - ,'Max' : { - cs: 'Max' - ,de: 'Max' - ,es: 'Max' - ,fr: 'Max' - ,el: 'Μέγιστο' - ,pt: 'Máx' - ,sv: 'Max' - ,ro: 'Max' - ,bg: 'Макс.' - ,hr: 'Max' - ,it: 'Max' - ,ja: '最大値' - ,dk: 'Max' - ,fi: 'Maks' - ,nb: 'Max' - ,he: 'מקסימאלי' - ,pl: 'Max' - ,ru: 'Макс' - ,sk: 'Max' - ,nl: 'Max' - ,ko: '최대값' - ,tr: 'Max' - ,zh_cn: '最大值' - ,hu: 'Max' - } - ,'Min' : { - cs: 'Min' - ,de: 'Min' - ,es: 'Min' - ,fr: 'Min' - ,el: 'Ελάχιστο' - ,pt: 'Mín' - ,sv: 'Min' - ,ro: 'Min' - ,bg: 'Мин.' - ,hr: 'Min' - ,it: 'Min' - ,ja: '最小値' - ,dk: 'Min' - ,fi: 'Min' - ,nb: 'Min' - ,he: 'מינימאלי' - ,pl: 'Min' - ,ru: 'Мин' - ,sk: 'Min' - ,nl: 'Min' - ,ko: '최소값' - ,tr: 'Min' - ,zh_cn: '最小值' - ,hu: 'Min' - } - ,'A1c estimation*' : { - cs: 'Předpokládané HBA1c*' - ,de: 'Einschätzung HbA1c*' - ,es: 'Estimación de HbA1c*' - ,fr: 'Estimation HbA1c*' - ,el: 'Εκτίμηση HbA1c' - ,pt: 'HbA1c estimada*' - ,ro: 'HbA1C estimată' - ,bg: 'Очакван HbA1c' - ,hr: 'Procjena HbA1c-a' - ,sv: 'Beräknat A1c-värde ' - ,it: 'Stima A1c' - ,ja: '予想HbA1c' - ,dk: 'Beregnet A1c-værdi ' - ,fi: 'A1c arvio*' - ,nb: 'Beregnet HbA1c' - ,he: 'משוער A1c' - ,pl: 'HbA1c przewidywany' - ,ru: 'Ожидаемый HbA1c*' - ,sk: 'Odhadované HbA1C*' - ,nl: 'Geschatte HbA1C' - ,ko: '예상 당화혈 색소' - ,tr: 'Tahmini A1c *' - ,zh_cn: '糖化血红蛋白估算' - ,hu: 'Megközelítőleges HbA1c' - } - ,'Weekly Success' : { - cs: 'Týdenní úspěšnost' - ,de: 'Wöchtlicher Erfolg' - ,es: 'Resultados semanales' - ,fr: 'Réussite hebdomadaire' - ,el: 'Εβδομαδιαία Στατιστικά' - ,pt: 'Resultados semanais' - ,ro: 'Rezultate săptămânale' - ,bg: 'Седмичен успех' - ,hr: 'Tjedni uspjeh' - ,sv: 'Veckoresultat' - ,it: 'Risultati settimanali' - ,ja: '週間達成度' - ,dk: 'Uge resultat' - ,fi: 'Viikottainen tulos' - ,nb: 'Ukeresultat' - ,he: 'הצלחה שבועית' - ,pl: 'Wyniki tygodniowe' - ,ru: 'Итоги недели' - ,sk: 'Týždenná úspešnosť' - ,nl: 'Wekelijks succes' - ,ko: '주간 통계' - ,tr: 'Haftalık Başarı' - ,zh_cn: '每周统计' - ,hu: 'Heti sikeresség' - } - ,'There is not sufficient data to run this report. Select more days.' : { - cs: 'Není dostatek dat. Vyberte delší časové období.' - ,de: 'Für diesen Bericht sind nicht genug Daten verfügbar. Bitte weitere Tage auswählen.' - ,es: 'No hay datos suficientes para generar este informe. Seleccione más días.' - ,fr: 'Pas assez de données pour un rapport. Sélectionnez plus de jours.' - ,el: 'Μη επαρκή δεδομένα για αυτή την αναφορά.Παρακαλώ επιλέξτε περισσότερες ημέρες' - ,pt: 'Não há dados suficientes. Selecione mais dias' - ,ro: 'Nu sunt sufieciente date pentru acest raport. Selectați mai multe zile.' - ,bg: 'Няма достатъчно данни за показване. Изберете повече дни.' - ,hr: 'Nema dovoljno podataka za izvođenje izvještaja. Odaberite još dana.' - ,sv: 'Data saknas för att köra rapport. Välj fler dagar.' - ,it: 'Non ci sono dati sufficienti per eseguire questo rapporto. Selezionare più giorni.' - ,ja: 'レポートするためのデータが足りません。もっと多くの日を選択してください。' - ,dk: 'Der er utilstrækkeligt data til at generere rapporten. Vælg flere dage.' - ,fi: 'Raporttia ei voida luoda liian vähäisen tiedon vuoksi. Valitse useampia päiviä.' - ,nb: 'Der er ikke nok data til å lage rapporten. Velg flere dager.' - ,he: 'לא נמצא מספיק מידע ליצירת הדוח. בחר ימים נוספים.' - ,pl: 'Nie ma wystarczających danych dla tego raportu. Wybierz więcej dni.' - ,ru: 'Для этого отчета недостаточно данных. Выберите больше дней.' - ,sk: 'Nedostatok dát. Vyberte dlhšie časové obdobie.' - ,nl: 'Er zijn niet genoeg gegevens voor dit rapport, selecteer meer dagen.' - ,ko: '이 보고서를 실행하기 위한 데이터가 충분하지 않습니다. 더 많은 날들을 선택해 주세요.' - ,tr: 'Bu raporu çalıştırmak için yeterli veri yok. Daha fazla gün seçin.' - ,zh_cn: '没有足够的数据生成报表,请选择更长时间段。' - ,hu: 'Nincs elég adat a jelentés elkészítéséhez. Válassz több napot.' - } - // food editor - ,'Using stored API secret hash' : { - cs: 'Používám uložený hash API hesla' - ,he: 'משתמש בסיסמת ממשק תכנות יישומים הסודית ' - ,de: 'Gespeicherte API-Prüfsumme verwenden' - ,es: 'Usando hash del API secreto pre-almacenado' - ,fr: 'Utilisation du hash API existant' - ,el: 'Χρηση αποθηκευμένου συνθηματικού' - ,pt: 'Usando o hash de API existente' - ,ro: 'Utilizez cheie API secretă' - ,bg: 'Използване на запаметена API парола' - ,hr: 'Koristi se pohranjeni API tajni hash' - ,sv: 'Använd hemlig API-nyckel' - ,it: 'Stai utilizzando API hash segreta' - ,ja: '保存されたAPI secret hashを使用する' - ,dk: 'Anvender gemt API-nøgle' - ,fi: 'Tallennettu salainen API-tarkiste käytössä' - ,nb: 'Bruker lagret API nøkkel' - ,pl: 'Korzystając z zapisanego poufnego hasha API' - ,ru: 'Применение сохраненного пароля API' - ,sk: 'Používam uložený API hash heslo' - ,nl: 'Gebruik opgeslagen geheime API Hash' - ,ko: '저장된 API secret hash를 사용 중' - ,tr: 'Kaydedilmiş API secret hash kullan' - ,zh_cn: '使用已存储的API密钥哈希值' - ,zh_tw: '使用已存儲的API密鑰哈希值' - ,hu: 'Az elmentett API hash jelszót használom' - } - ,'No API secret hash stored yet. You need to enter API secret.' : { - cs: 'Není uložený žádný hash API hesla. Musíte zadat API heslo.' - ,de: 'Keine API-Prüfsumme gespeichert. Bitte API-Prüfsumme eingeben.' - ,es: 'No se ha almacenado ningún hash todavía. Debe introducir su secreto API.' - ,fr: 'Pas de secret API existant. Vous devez en entrer un.' - ,el: 'Δεν υπάρχει αποθηκευμένο συνθηματικό API. Πρέπει να εισάγετε το συνθηματικό API' - ,pt: 'Hash de segredo de API inexistente. Insira um segredo de API.' - ,ro: 'Încă nu există cheie API secretă. Aceasta trebuie introdusă.' - ,bg: 'Няма запаметена API парола. Tрябва да въведете API парола' - ,hr: 'Nema pohranjenog API tajnog hasha. Unesite tajni API' - ,sv: 'Hemlig api-nyckel saknas. Du måste ange API hemlighet' - ,it: 'API hash segreto non è ancora memorizzato. È necessario inserire API segreto.' - ,ja: 'API secret hashがまだ保存されていません。API secretの入力が必要です。' - ,dk: 'Mangler API-nøgle. Du skal indtaste API nøglen' - ,fi: 'Salainen API-tarkiste puuttuu. Syötä API tarkiste.' - ,nb: 'Mangler API nøkkel. Du må skrive inn API hemmelighet.' - ,he:'הכנס את הסיסמא הסודית של ה API' - ,pl: 'Nie ma żadnego poufnego hasha API zapisanego. Należy wprowadzić poufny hash API.' - ,ru: 'Пароля API нет в памяти. Введите пароль API' - ,sk: 'Nieje uložené žiadne API hash heslo. Musíte zadať API heslo.' - ,nl: 'Er is nog geen geheime API Hash opgeslagen. U moet eerst een geheime API code invoeren.' - ,ko: 'API secret hash가 아직 저장되지 않았습니다. API secret를 입력해 주세요.' - ,tr: 'Henüz bir API secret hash saklanmadı. API parolasını girmeniz gerekiyor.' - ,zh_cn: '没有已存储的API密钥,请输入API密钥。' - ,zh_tw: '沒有已存儲的API密鑰,請輸入API密鑰。' - ,hu: 'Még nem lett a titkos API hash elmentve. Add meg a titkos API jelszót' - } - ,'Database loaded' : { - cs: 'Databáze načtena' - ,de: 'Datenbank geladen' - ,es: 'Base de datos cargada' - ,fr: 'Base de données chargée' - ,el: 'Συνδέθηκε με τη Βάση Δεδομένων' - ,pt: 'Banco de dados carregado' - ,ro: 'Baza de date încărcată' - ,bg: 'База с данни заредена' - ,hr: 'Baza podataka je učitana' - ,sv: 'Databas laddad' - ,it: 'Database caricato' - ,ja: 'データベースロード完了' - ,dk: 'Database indlæst' - ,fi: 'Tietokanta ladattu' - ,nb: 'Database lest' - ,he: 'בסיס נתונים נטען' - ,pl: 'Baza danych załadowana' - ,ru: 'База данных загружена' - ,sk: 'Databáza načítaná' - ,nl: 'Database geladen' - ,ko: '데이터베이스 로드' - ,tr: 'Veritabanı yüklendi' - ,zh_cn: '数据库已载入' - ,hu: 'Adatbázis betöltve' - } - ,'Error: Database failed to load' : { - cs: 'Chyba při načítání databáze' - ,de: 'Fehler: Datenbank konnte nicht geladen werden' - ,es: 'Error: Carga de base de datos fallida' - ,fr: 'Erreur: le chargement de la base de données a échoué' - ,el: 'Σφάλμα:Αποτυχία σύνδεσης με τη Βάση Δεδομένων' - ,pt: 'Erro: Banco de dados não carregado' - ,ro: 'Eroare: Nu s-a încărcat baza de date' - ,bg: 'ГРЕШКА. Базата с данни не успя да се зареди' - ,hr: 'Greška: Baza podataka nije učitana' - ,sv: 'Error: Databas kan ej laddas' - ,it: 'Errore: database non è stato caricato' - ,ja: 'エラー:データベースを読み込めません' - ,dk: 'Fejl: Database kan ikke indlæses' - ,fi: 'Virhe: Tietokannan lataaminen epäonnistui' - ,nb: 'Feil: Database kan ikke leses' - ,he: 'שגיאה: לא ניתן לטעון בסיס נתונים' - ,pl: 'Błąd, baza danych nie może być załadowana' - ,ru: 'Ошибка: Не удалось загрузить базу данных' - ,sk: 'Chyba pri načítaní databázy' - ,nl: 'FOUT: Database niet geladen' - ,ko: '에러: 데이터베이스 로드 실패' - ,tr: 'Hata: Veritabanı yüklenemedi' - ,zh_cn: '错误:数据库载入失败' - ,hu: 'Hiba: Az adatbázist nem sikerült betölteni' - } - ,'Error' : { - cs: 'Error' - ,he: 'Error' - ,nb: 'Error' - ,fr: 'Error' - ,ro: 'Error' - ,el: 'Error' - ,de: 'Error' - ,es: 'Error' - ,dk: 'Error' - ,sv: 'Error' - ,bg: 'Error' - ,hr: 'Greška' - ,it: 'Error' - ,fi: 'Error' - ,pl: 'Error' - ,pt: 'Error' - ,ru: 'Ошибка' - ,sk: 'Error' - ,nl: 'Error' - ,ko: 'Error' - ,tr: 'Error' - ,zh_cn: 'Error' - ,zh_tw: 'Error' - ,hu: 'Hiba' - } - ,'Create new record' : { - cs: 'Vytvořit nový záznam' - ,de: 'Erstelle neuen Datensatz' - ,es: 'Crear nuevo registro' - ,fr: 'Créer nouvel enregistrement' - ,el: 'Δημιουργία νέας εγγραφής' - ,pt: 'Criar novo registro' - ,ro: 'Crează înregistrare nouă' - ,bg: 'Създаване на нов запис' - ,hr: 'Kreiraj novi zapis' - ,sv: 'Skapa ny post' - ,it: 'Crea nuovo registro' - ,ja: '新しい記録を作る' - ,dk: 'Opret ny post' - ,fi: 'Luo uusi tallenne' - ,nb: 'Lager ny registrering' - ,he: 'צור רשומה חדשה' - ,pl: 'Tworzenie nowego wpisu' - ,ru: 'Создайте новую запись' - ,sk: 'Vytovriť nový záznam' - ,nl: 'Opslaan' - ,ko: '새입력' - ,tr: 'Yeni kayıt oluştur' - ,zh_cn: '新增记录' - ,hu: 'Új bejegyzés' - } - ,'Save record' : { - cs: 'Uložit záznam' - ,de: 'Speichere Datensatz' - ,es: 'Guardar registro' - ,fr: 'Sauver enregistrement' - ,el: 'Αποθήκευση εγγραφής' - ,pt: 'Salvar registro' - ,ro: 'Salvează înregistrarea' - ,bg: 'Запази запис' - ,hr: 'Spremi zapis' - ,sv: 'Spara post' - ,it: 'Salva Registro' - ,ja: '保存' - ,dk: 'Gemmer post' - ,fi: 'Tallenna' - ,nb: 'Lagrer registrering' - ,he: 'שמור רשומה' - ,pl: 'Zapisz wpis' - ,ru: 'Сохраните запись' - ,sk: 'Uložiť záznam' - ,nl: 'Sla op' - ,ko: '저장' - ,tr: 'Kayıtları kaydet' - ,zh_cn: '保存记录' - ,hu: 'Bejegyzés mentése' - } - ,'Portions' : { - cs: 'Porcí' - ,de: 'Portionen' - ,es: 'Porciones' - ,fr: 'Portions' - ,el: 'Μερίδα' - ,pt: 'Porções' - ,ro: 'Porții' - ,bg: 'Порции' - ,hr: 'Dijelovi' - ,sv: 'Portion' - ,it: 'Porzioni' - ,ja: '一食分' - ,dk: 'Portioner' - ,fi: 'Annokset' - ,nb: 'Porsjoner' - ,he: 'מנות' - ,pl: 'Porcja' - ,ru: 'Порции' - ,sk: 'Porcií' - ,nl: 'Porties' - ,ko: '부분' - ,tr: 'Porsiyonlar' - ,zh_cn: '部分' - ,hu: 'Porció' - } - ,'Unit' : { - cs: 'Jedn' - ,de: 'Einheit' - ,es: 'Unidades' - ,fr: 'Unités' - ,el: 'Μονάδα' - ,pt: 'Unidade' - ,ro: 'Unități' - ,bg: 'Единици' - ,hr: 'Jedinica' - ,sv: 'Enhet' - ,it: 'Unità' - ,ja: '単位' - ,dk: 'Enheder' - ,fi: 'Yksikkö' - ,nb: 'Enhet' - ,he: 'יחידות' - ,pl: 'Jednostka' - ,ru: 'Единица' - ,sk: 'Jednot.' - ,nl: 'Eenheid' - ,ko: '단위' - ,tr: 'Birim' - ,zh_cn: '单位' - ,hu: 'Egység' - } - ,'GI' : { - cs: 'GI' - ,he: 'GI' - ,de: 'GI' - ,es: 'IG' - ,fr: 'IG' - ,el: 'GI-Γλυκαιμικός Δείκτης' - ,pt: 'IG' - ,sv: 'GI' - ,ro: 'CI' - ,bg: 'ГИ' - ,hr: 'GI' - ,it: 'IG-Ind.Glic.' - ,ja: 'GI' - ,dk: 'GI' - ,fi: 'GI' - ,nb: 'GI' - ,pl: 'IG' - ,ru: 'гл индекс ГИ' - ,sk: 'GI' - ,nl: 'Glycemische index ' - ,ko: '혈당 지수' - ,tr: 'GI-Glisemik İndeks' - ,zh_cn: 'GI(血糖生成指数)' - ,hu: 'GI' - } - ,'Edit record' : { - cs: 'Upravit záznam' - ,de: 'Bearbeite Datensatz' - ,es: 'Editar registro' - ,fr: 'Modifier enregistrement' - ,el: 'Επεξεργασία εγγραφής' - ,pt: 'Editar registro' - ,ro: 'Editează înregistrarea' - ,bg: 'Редактирай запис' - ,hr: 'Uredi zapis' - ,sv: 'Editera post' - ,it: 'Modifica registro' - ,ja: '記録編集' - ,dk: 'Rediger post' - ,fi: 'Muokkaa tallennetta' - ,nb: 'Editere registrering' - ,he: 'ערוך רשומה' - ,pl: 'Edycja wpisu' - ,ru: 'Редактировать запись' - ,sk: 'Upraviť záznam' - ,nl: 'Bewerk invoer' - ,ko: '편집기록' - ,tr: 'Kaydı düzenle' - ,zh_cn: '编辑记录' - ,hu: 'Bejegyzés szerkesztése' - } - ,'Delete record' : { - cs: 'Smazat záznam' - ,de: 'Lösche Datensatz' - ,es: 'Borrar registro' - ,fr: 'Effacer enregistrement' - ,el: 'Διαγραφή εγγραφής' - ,pt: 'Apagar registro' - ,ro: 'Șterge înregistrarea' - ,bg: 'Изтрий запис' - ,hr: 'Izbriši zapis' - ,sv: 'Radera post' - ,it: 'Cancella registro' - ,ja: '記録削除' - ,dk: 'Slet post' - ,fi: 'Tuhoa tallenne' - ,nb: 'Slette registrering' - ,he: 'מחק רשומה' - ,pl: 'Usuń wpis' - ,ru: 'Стереть запись' - ,sk: 'Zmazať záznam' - ,nl: 'Verwijder invoer' - ,ko: '삭제기록' - ,tr: 'Kaydı sil' - ,zh_cn: '删除记录' - ,hu: 'Bejegyzés törlése' - } - ,'Move to the top' : { - cs: 'Přesuň na začátek' - ,de: 'Gehe zum Anfang' - ,es: 'Mover arriba' - ,fr: 'Déplacer au sommet' - ,el: 'Μετακίνηση πάνω' - ,pt: 'Mover para o topo' - ,sv: 'Gå till toppen' - ,ro: 'Mergi la început' - ,bg: 'Преместване в началото' - ,hr: 'Premjesti na vrh' - ,it: 'Spostare verso l\'alto' - ,ja: 'トップ画面へ' - ,dk: 'Gå til toppen' - ,fi: 'Siirrä ylimmäksi' - ,nb: 'Gå til toppen' - ,he: 'עבור למעלה' - ,pl: 'Przejdź do góry' - ,ru: 'Переместить наверх' - ,sk: 'Presunúť na začiatok' - ,nl: 'Ga naar boven' - ,ko: '맨처음으로 이동' - ,tr: 'En üste taşı' - ,zh_cn: '移至顶端' - ,hu: 'Áthelyezni az elejére' - } - ,'Hidden' : { - cs: 'Skrytý' - ,de: 'Verborgen' - ,es: 'Oculto' - ,fr: 'Caché' - ,el: 'Απόκρυψη' - ,pt: 'Oculto' - ,sv: 'Dold' - ,ro: 'Ascuns' - ,bg: 'Скрити' - ,hr: 'Skriveno' - ,it: 'Nascosto' - ,ja: '隠す' - ,dk: 'Skjult' - ,fi: 'Piilotettu' - ,nb: 'Skjult' - ,he: 'מוסתר' - ,pl: 'Ukryte' - ,ru: 'Скрыт' - ,sk: 'Skrytý' - ,nl: 'Verborgen' - ,ko: '숨김' - ,tr: 'Gizli' - ,zh_cn: '隐藏' - ,hu: 'Elrejtett' - } - ,'Hide after use' : { - cs: 'Skryj po použití' - ,de: 'Verberge nach Gebrauch' - ,es: 'Ocultar después de utilizar' - ,fr: 'Cacher après utilisation' - ,el: 'Απόκρυψη μετά τη χρήση' - ,pt: 'Ocultar após uso' - ,ro: 'Ascunde după folosireaa' - ,bg: 'Скрий след употреба' - ,hr: 'Sakrij nakon korištenja' - ,sv: 'Dölj efter användning' - ,it: 'Nascondi dopo l\'uso' - ,ja: '使用後に隠す' - ,dk: 'Skjul efter brug' - ,fi: 'Piilota käytön jälkeen' - ,nb: 'Skjul etter bruk' - ,he: 'הסתר לאחר שימוש' - ,pl: 'Ukryj po użyciu' - ,ru: 'Скрыть после использования' - ,sk: 'Skryť po použití' - ,nl: 'Verberg na gebruik' - ,ko: '사용 후 숨김' - ,tr: 'Kullandıktan sonra gizle' - ,zh_cn: '使用后隐藏' - ,hu: 'Elrejteni használat után' - } - ,'Your API secret must be at least 12 characters long' : { - cs: 'Vaše API heslo musí mít alespoň 12 znaků' - ,he: 'הסיסמא חייבת להיות באורך 12 תווים לפחות' - ,de: 'Deine API-Prüfsumme muss mindestens 12 Zeichen lang sein' - ,es: 'Su API secreo debe contener al menos 12 carácteres' - ,fr: 'Votre secret API doit contenir au moins 12 caractères' - ,el: 'Το συνθηματικό πρέπει να είναι τουλάχιστον 12 χαρακτήρων' - ,pt: 'Seu segredo de API deve conter no mínimo 12 caracteres' - ,ro: 'Cheia API trebuie să aibă mai mult de 12 caractere' - ,bg: 'Вашата АPI парола трябва да е дълга поне 12 символа' - ,hr: 'Vaš tajni API mora sadržavati barem 12 znakova' - ,sv: 'Hemlig API-nyckel måsta innehålla 12 tecken' - ,it: 'il vostro API secreto deve essere lungo almeno 12 caratteri' - ,ja: 'APIシークレットは12文字以上の長さが必要です' - ,dk: 'Din API nøgle skal være mindst 12 tegn lang' - ,fi: 'API-avaimen tulee olla ainakin 12 merkin mittainen' - ,nb: 'Din API nøkkel må være minst 12 tegn lang' - ,pl: 'Twój poufny klucz API musi zawierać co majmniej 12 znaków' - ,ru: 'Ваш пароль API должен иметь не менее 12 знаков' - ,sk: 'Vaše API heslo musí mať najmenej 12 znakov' - ,nl: 'Uw API wachtwoord dient tenminste 12 karakters lang te zijn' - ,ko: 'API secret는 최소 12자 이상이여야 합니다.' - ,tr: 'PI parolanız en az 12 karakter uzunluğunda olmalıdır' - ,zh_cn: 'API密钥最少需要12个字符' - ,zh_tw: 'API密鑰最少需要12個字符' - ,hu: 'Az API jelszó több mint 12 karakterből kell hogy álljon' - } - ,'Bad API secret' : { - cs: 'Chybné API heslo' - ,de: 'Fehlerhafte API-Prüfsumme' - ,he: 'סיסמא שגויה' - ,es: 'API secreto incorrecto' - ,fr: 'Secret API erroné' - ,el: 'Λάθος συνθηματικό' - ,pt: 'Segredo de API incorreto' - ,ro: 'Cheie API greșită' - ,bg: 'Некоректна API парола' - ,hr: 'Neispravan tajni API' - ,sv: 'Felaktig API-nyckel' - ,it: 'API secreto non corretto' - ,ja: 'APIシークレットは正しくありません' - ,dk: 'Forkert API-nøgle' - ,fi: 'Väärä API-avain' - ,nb: 'Ugyldig API nøkkel' - ,pl: 'Błędny klucz API' - ,ru: 'Плохой пароль API' - ,sk: 'Nesprávne API heslo' - ,nl: 'Onjuist API wachtwoord' - ,ko: '잘못된 API secret' - ,tr: 'Hatalı API parolası' - ,zh_cn: 'API密钥错误' - ,zh_tw: 'API密鑰錯誤' - ,hu: 'Helytelen API jelszó' - } - ,'API secret hash stored' : { - cs: 'Hash API hesla uložen' - ,he: 'סיסמא אוכסנה' - ,de: 'API-Prüfsumme gespeichert' - ,es: 'Hash del API secreto guardado' - ,fr: 'Hash API secret sauvegardé' - ,el: 'Το συνθηματικό αποθηκεύτηκε' - ,pt: 'Segredo de API guardado' - ,ro: 'Cheie API înregistrată' - ,bg: 'УРА! API парола запаметена' - ,hr: 'API tajni hash je pohranjen' - ,sv: 'Lagrad hemlig API-hash' - ,it: 'Hash API secreto memorizzato' - ,ja: 'APIシークレットを保存出来ました' - ,dk: 'Hemmelig API-hash gemt' - ,fi: 'API salaisuus talletettu' - ,nb: 'API nøkkel lagret' - ,pl: 'Poufne klucz API zapisane' - ,ru: 'Хэш пароля API сохранен' - ,sk: 'Hash API hesla uložený' - ,nl: 'API wachtwoord opgeslagen' - ,ko: 'API secret hash가 저장 되었습니다.' - ,tr: 'API secret hash parolası saklandı' - ,zh_cn: 'API密钥已存储' - ,zh_tw: 'API密鑰已存儲' - ,hu: 'API jelszó elmentve' - } - ,'Status' : { - cs: 'Status' - ,de: 'Status' - ,es: 'Estado' - ,fr: 'Statut' - ,el: 'Κατάσταση' - ,pt: 'Status' - ,sv: 'Status' - ,ro: 'Status' - ,bg: 'Статус' - ,hr: 'Status' - ,it: 'Stato' - ,ja: '統計' - ,dk: 'Status' - ,fi: 'Tila' - ,nb: 'Status' - ,he: 'מצב מערכת' - ,pl: 'Status' - ,ru: 'Статус' - ,sk: 'Status' - ,nl: 'Status' - ,ko: '상태' - ,tr: 'Durum' - ,zh_cn: '状态' - ,hu: 'Állapot' - } - ,'Not loaded' : { - cs: 'Nenačtený' - ,he: 'לא נטען' - ,de: 'Nicht geladen' - ,es: 'No cargado' - ,fr: 'Non chargé' - ,el: 'Δεν έγινε μεταφόρτωση' - ,pt: 'Não carregado' - ,ro: 'Neîncărcat' - ,bg: 'Не е заредено' - ,hr: 'Nije učitano' - ,sv: 'Ej laddad' - ,it: 'Non caricato' - ,ja: '読み込めません' - ,dk: 'Ikke indlæst' - ,fi: 'Ei ladattu' - ,nb: 'Ikke lest' - ,pl: 'Nie załadowany' - ,ru: 'Не загружено' - ,sk: 'Nenačítaný' - ,nl: 'Niet geladen' - ,ko: '로드되지 않음' - ,tr: 'Yüklü değil' - ,zh_cn: '未载入' - ,hu: 'Nincs betöltve' - } - ,'Food Editor' : { - cs: 'Editor jídel' - ,he: 'עורך המזון' - ,de: 'Nahrungsmittel-Editor' - ,es: 'Editor de alimentos' - ,fr: 'Editeur aliments' - ,el: 'Επεξεργασία Δεδομένων Φαγητών' - ,pt: 'Editor de alimentos' - ,ro: 'Editor alimente' - ,bg: 'Редактор за храна' - ,hr: 'Editor hrane' - ,sv: 'Födoämneseditor' - ,it: 'NS - Database Alimenti' - ,ja: '食事編集' - ,dk: 'Mad editor' - ,fi: 'Muokkaa ruokia' - ,nb: 'Mat editor' - ,pl: 'Edytor posiłków' - ,ru: 'Редактор продуктов' - ,sk: 'Editor jedál' - ,nl: 'Voeding beheer' - ,ko: '음식 편집' - ,tr: 'Gıda Editörü' - ,zh_cn: '食物编辑器' - ,hu: 'Étel szerkesztése' - } - ,'Your database' : { - cs: 'Vaše databáze' - ,de: 'Deine Datenbank' - ,es: 'Su base de datos' - ,fr: 'Votre base de données' - ,el: 'Η Βάση Δεδομένων σας' - ,pt: 'Seu banco de dados' - ,sv: 'Din databas' - ,ro: 'Baza de date' - ,bg: 'Твоята база с данни' - ,hr: 'Vaša baza podataka' - ,it: 'Vostro database' - ,ja: 'あなたのデータベース' - ,dk: 'Din database' - ,fi: 'Tietokantasi' - ,nb: 'Din database' - ,he: 'בסיס הנתונים שלך' - ,pl: 'Twoja baza danych' - ,ru: 'Ваша база данных ' - ,sk: 'Vaša databáza' - ,nl: 'Uw database' - ,ko: '당신의 데이터베이스' - ,tr: 'Sizin Veritabanınız' - ,zh_cn: '你的数据库' - ,hu: 'Ön adatbázisa' - } - ,'Filter' : { - cs: 'Filtr' - ,de: 'Filter' - ,es: 'Filtro' - ,fr: 'Filtre' - ,el: 'Φίλτρο' - ,pt: 'Filtro' - ,sv: 'Filter' - ,ro: 'Filtru' - ,bg: 'Филтър' - ,hr: 'Filter' - ,it: 'Filtro' - ,ja: 'フィルター' - ,dk: 'Filter' - ,fi: 'Suodatin' - ,nb: 'Filter' - ,nl: 'Filter' - ,he: 'סנן' - ,pl: 'Filtr' - ,ru: 'Фильтр' - ,sk: 'Filter' - ,ko: '필터' - ,tr: 'Filtre' - ,zh_cn: '过滤器' - ,hu: 'Filter' - } - ,'Save' : { - cs: 'Ulož' - ,de: 'Speichern' - ,es: 'Salvar' - ,fr: 'Sauver' - ,el: 'Αποθήκευση' - ,pt: 'Salvar' - ,ro: 'Salvează' - ,bg: 'Запази' - ,hr: 'Spremi' - ,sv: 'Spara' - ,it: 'Salva' - ,ja: '保存' - ,dk: 'Gem' - ,fi: 'Tallenna' - ,nb: 'Lagre' - ,he: 'שמור' - ,pl: 'Zapisz' - ,ru: 'Сохранить' - ,sk: 'Uložiť' - ,nl: 'Opslaan' - ,ko: '저장' - ,tr: 'Kaydet' - ,zh_cn: '保存' - ,zh_tw: '保存' - ,hu: 'Mentés' - } - ,'Clear' : { - cs: 'Vymaž' - ,de: 'Löschen' - ,es: 'Limpiar' - ,fr: 'Effacer' - ,el: 'Καθαρισμός' - ,pt: 'Apagar' - ,ro: 'Inițializare' - ,bg: 'Изчисти' - ,hr: 'Očisti' - ,sv: 'Rensa' - ,it: 'Pulisci' - ,ja: 'クリア' - ,dk: 'Rense' - ,fi: 'Tyhjennä' - ,nb: 'Tøm' - ,he: 'נקה' - ,pl: 'Wyczyść' - ,ru: 'Очистить' - ,sk: 'Vymazať' - ,nl: 'Leeg maken' - ,ko: '취소' - ,tr: 'Temizle' - ,zh_cn: '清除' - ,hu: 'Kitöröl' - } - ,'Record' : { - cs: 'Záznam' - ,de: 'Datensatz' - ,es: 'Guardar' - ,fr: 'Enregistrement' - ,el: 'Εγγραφή' - ,pt: 'Gravar' - ,sv: 'Post' - ,ro: 'Înregistrare' - ,bg: 'Запиши' - ,hr: 'Zapis' - ,it: 'Registro' - ,ja: '記録' - ,dk: 'Post' - ,fi: 'Tietue' - ,nb: 'Registrering' - ,he: 'רשומה' - ,pl: 'Wpis' - ,ru: 'Запись' - ,sk: 'Záznam' - ,nl: 'Toevoegen' - ,ko: '기록' - ,tr: 'Kayıt' - ,zh_cn: '记录' - ,hu: 'Bejegyzés' - } - ,'Quick picks' : { - cs: 'Rychlý výběr' - ,de: 'Schnellauswahl' - ,es: 'Selección rápida' - ,fr: 'Sélection rapide' - ,el: 'Γρήγορη επιλογή' - ,pt: 'Seleção rápida' - ,ro: 'Selecție rapidă' - ,bg: 'Бърз избор' - ,hr: 'Brzi izbor' - ,sv: 'Snabbval' - ,it: 'Scelta rapida' - ,ja: 'クイック選択' - ,dk: 'Hurtig valg' - ,fi: 'Nopeat valinnat' - ,nb: 'Hurtigvalg' - ,he: 'בחירה מהירה' - ,pl: 'Szybki wybór' - ,ru: 'Быстрый отбор' - ,sk: 'Rýchly výber' - ,nl: 'Snelkeuze' - ,ko: '빠른 선택' - ,tr: 'Hızlı seçim' - ,zh_cn: '快速选择' - ,hu: 'Gyors választás' - } - ,'Show hidden' : { - cs: 'Zobraz skryté' - ,de: 'Verborgenes zeigen' - ,es: 'Mostrar ocultos' - ,fr: 'Montrer cachés' - ,el: 'Εμφάνιση κρυφών εγγραφών' - ,pt: 'Mostrar ocultos' - ,ro: 'Arată înregistrările ascunse' - ,bg: 'Покажи скритото' - ,hr: 'Prikaži skriveno' - ,sv: 'Visa dolda' - ,it: 'Mostra nascosto' - ,ja: '表示する' - ,dk: 'Vis skjulte' - ,fi: 'Näytä piilotettu' - ,nb: 'Vis skjulte' - ,he: 'הצג נתונים מוסתרים' - ,pl: 'Pokaż ukryte' - ,ru: 'Показать скрытые' - ,sk: 'Zobraziť skryté' - ,nl: 'Laat verborgen zien' - ,ko: '숨김 보기' - ,tr: 'Gizli göster' - ,zh_cn: '显示隐藏值' - ,hu: 'Eltakart mutatása' - } - ,'Your API secret or token' : { - fi: 'API salaisuus tai avain' - ,pl: 'Twój hash API lub token' - ,ru: 'Ваш пароль API или код доступа ' - ,de: 'Deine API-Prüfsumme oder Token' - ,hu: 'Az API jelszo' - } - ,'Remember this device. (Do not enable this on public computers.)' : { - fi: 'Muista tämä laite (Älä valitse julkisilla tietokoneilla)' - , pl: 'Zapamiętaj to urządzenie (Nie używaj tej opcji korzystając z publicznych komputerów.)' - ,ru: 'Запомнить это устройство (Не применяйте в общем доступе)' - ,de: 'An dieses Gerät erinnern. (Nicht auf öffentlichen Geräten verwenden)' - ,hu: 'A berendezés megjegyzése. (Csak saját berendezésen használd' - } - ,'Treatments' : { - cs: 'Ošetření' - ,de: 'Behandlungen' - ,es: 'Tratamientos' - ,fr: 'Traitements' - ,el: 'Ενέργειες' - ,pt: 'Procedimentos' - ,sv: 'Behandling' - ,ro: 'Tratamente' - ,bg: 'Събития' - ,hr: 'Tretmani' - ,it: 'Somministrazioni' - ,ja: '治療' - ,dk: 'Behandling' - ,fi: 'Hoitotoimenpiteet' - ,nb: 'Behandlinger' - ,he: 'טיפולים' - ,pl: 'Leczenie' - ,ru: 'Лечение' - ,sk: 'Ošetrenie' - ,nl: 'Behandelingen' - ,ko: '관리' - ,tr: 'Tedaviler' - ,zh_cn: '操作' - ,hu: 'Kezelések' - } - ,'Time' : { - cs: 'Čas' - ,de: 'Zeit' - ,es: 'Hora' - ,fr: 'Heure' - ,el: 'Ώρα' - ,pt: 'Hora' - ,sv: 'Tid' - ,ro: 'Ora' - ,bg: 'Време' - ,hr: 'Vrijeme' - ,it: 'Tempo' - ,ja: '時間' - ,dk: 'Tid' - ,fi: 'Aika' - ,nb: 'Tid' - ,he: 'זמן' - ,pl: 'Czas' - ,ru: 'Время' - ,sk: 'Čas' - ,nl: 'Tijd' - ,ko: '시간' - ,tr: 'Zaman' - ,zh_cn: '时间' - ,zh_tw: '時間' - ,hu: 'Idő' - } - ,'Event Type' : { - cs: 'Typ události' - ,de: 'Ereignis-Typ' - ,es: 'Tipo de evento' - ,fr: 'Type d\'événement' - ,el: 'Ενέργεια' - ,pt: 'Tipo de evento' - ,sv: 'Händelsetyp' - ,ro: 'Tip eveniment' - ,bg: 'Вид събитие' - ,hr: 'Vrsta događaja' - ,it: 'Tipo di evento' - ,ja: 'イベント' - ,dk: 'Hændelsestype' - ,fi: 'Tapahtumatyyppi' - ,nb: 'Type' - ,he: 'סוג אירוע' - ,pl: 'Typ zdarzenia' - ,ru: 'Тип события' - ,sk: 'Typ udalosti' - ,nl: 'Soort' - ,ko: '입력 유형' - ,tr: 'Etkinlik tipi' - ,zh_cn: '事件类型' - ,hu: 'Esemény típusa' - } - ,'Blood Glucose' : { - cs: 'Glykémie' - ,de: 'Blutglukose' - ,es: 'Glucemia' - ,fr: 'Glycémie' - ,el: 'Γλυκόζη Αίματος' - ,pt: 'Glicemia' - ,sv: 'Glukosvärde' - ,ro: 'Glicemie' - ,bg: 'Кръвна захар' - ,hr: 'GUK' - ,it: 'Glicemie' - ,ja: '血糖値' - ,dk: 'Glukoseværdi' - ,fi: 'Verensokeri' - ,nb: 'Blodsukker' - ,he: 'סוכר בדם' - ,pl: 'Glikemia z krwi' - ,ru: 'Гликемия' - ,sk: 'Glykémia' - ,nl: 'Bloed glucose' - ,ko: '혈당' - ,tr: 'Kan Şekeri' - ,zh_cn: '血糖值' - ,hu: 'Vércukor szint' - } - ,'Entered By' : { - cs: 'Zadal' - ,de: 'Eingabe durch' - ,es: 'Introducido por' - ,fr: 'Entré par' - ,el: 'Εισήχθη από' - ,pt: 'Inserido por' - ,sv: 'Inlagt av' - ,ro: 'Introdus de' - ,bg: 'Въведено от' - ,hr: 'Unos izvršio' - ,it: 'inserito da' - ,ja: '入力者' - ,dk: 'Indtastet af' - ,fi: 'Tiedot syötti' - ,nb: 'Lagt inn av' - ,he: 'הוזן על-ידי' - ,pl: 'Wprowadzono przez' - ,ru: 'Внесено через' - ,sk: 'Zadal' - ,nl: 'Ingevoerd door' - ,ko: '입력 내용' - ,tr: 'Tarafından girildi' - ,zh_cn: '输入人' - ,hu: 'Beírta' - } - ,'Delete this treatment?' : { - cs: 'Vymazat toto ošetření?' - ,de: 'Diese Behandlung löschen?' - ,es: '¿Borrar este tratamiento?' - ,fr: 'Effacer ce traitement?' - ,el: 'Διαγραφή ενέργειας' - ,pt: 'Apagar este procedimento?' - ,ro: 'Șterge acest eveniment?' - ,bg: 'Изтрий това събитие' - ,hr: 'Izbriši ovaj tretman?' - ,sv: 'Ta bort händelse?' - ,it: 'Eliminare questa somministrazione?' - ,ja: 'この治療データを削除しますか?' - ,dk: 'Slet denne hændelse?' - ,fi: 'Tuhoa tämä hoitotoimenpide?' - ,nb: 'Slett denne hendelsen?' - ,he: 'למחוק רשומה זו?' - ,pl: 'Usunąć te leczenie?' - ,ru: 'Удалить это событие?' - ,sk: 'Vymazať toto ošetrenie?' - ,nl: 'Verwijder' - ,ko: '이 대처를 지울까요?' - ,tr: 'Bu tedaviyi sil?' - ,zh_cn: '删除这个操作?' - ,hu: 'Kezelés törlése?' - } - ,'Carbs Given' : { - cs: 'Sacharidů' - ,de: 'Kohlenhydratgabe' - ,es: 'Hidratos de carbono dados' - ,fr: 'Glucides donnés' - ,el: 'Υδατάνθρακες' - ,pt: 'Carboidratos' - ,ro: 'Carbohidrați' - ,bg: 'ВХ' - ,hr: 'Količina UGH' - ,sv: 'Antal kolhydrater' - ,it: 'Carboidrati' - ,ja: '摂取糖質量' - ,dk: 'Antal kulhydrater' - ,fi: 'Hiilihydraatit' - ,nb: 'Karbo' - ,he: 'פחמימות שנאכלו' - ,pl: 'Węglowodany spożyte' - ,ru: 'Дано углеводов' - ,sk: 'Sacharidov' - ,nl: 'Aantal koolhydraten' - ,ko: '탄수화물 요구량' - ,tr: 'Karbonhidrat Verilen' - ,zh_cn: '碳水化合物量' - ,hu: 'Szénhidrátok' - } - ,'Inzulin Given' : { - cs: 'Inzulínu' - ,de: 'Insulingabe' - ,es: 'Insulina dada' - ,fr: 'Insuline donnée' - ,el: 'Ινσουλίνη' - ,pt: 'Insulina' - ,ro: 'Insulină administrată' - ,bg: 'Инсулин' - ,hr: 'Količina inzulina' - ,sv: 'Insulin' - ,it: 'Insulina' - ,ja: 'インスリン投与量' - ,dk: 'Insulin' - ,fi: 'Insuliiniannos' - ,nb: 'Insulin' - ,he: 'אינסולין שניתן' - ,pl: 'Insulina podana' - ,ru: 'Дано инсулина' - ,sk: 'Inzulínu' - ,nl: 'Insuline' - ,ko: '인슐린 요구량' - ,tr: 'İnsülin Verilen' - ,zh_cn: '胰岛素输注' - ,hu: 'Beadott inzulin' - } - ,'Event Time' : { - cs: 'Čas události' - ,de: 'Ereignis-Zeit' - ,es: 'Hora del evento' - ,fr: 'Heure de l\'événement' - ,el: 'Ώρα ενέργειας' - ,pt: 'Hora do evento' - ,sv: 'Klockslag' - ,ro: 'Ora evenimentului' - ,bg: 'Въвеждане' - ,hr: 'Vrijeme događaja' - ,it: 'Ora Evento' - ,ja: 'イベント時間' - ,dk: 'Tidspunkt for hændelsen' - ,fi: 'Aika' - ,nb: 'Tidspunkt for hendelsen' - ,he: 'זמן האירוע' - ,pl: 'Czas zdarzenia' - ,ru: 'Время события' - ,sk: 'Čas udalosti' - ,nl: 'Tijdstip' - ,ko: '입력 시간' - ,tr: 'Etkinliğin zamanı' - ,zh_cn: '事件时间' - ,hu: 'Időpont' - } - ,'Please verify that the data entered is correct' : { - cs: 'Prosím zkontrolujte, zda jsou údaje zadány správně' - ,de: 'Bitte Daten auf Plausibilität prüfen' - ,es: 'Por favor, verifique que los datos introducidos son correctos' - ,el: 'Παρακαλώ ελέξτε ότι τα δεδομένα είναι σωστά' - ,fr: 'Merci de vérifier la correction des données entrées' - ,pt: 'Favor verificar se os dados estão corretos' - ,ro: 'Verificați conexiunea datelor introduse' - ,bg: 'Моля проверете, че датата е въведена правилно' - ,hr: 'Molim Vas provjerite jesu li uneseni podaci ispravni' - ,sv: 'Vänligen verifiera att inlagd data är korrekt' - ,it: 'Si prega di verificare che i dati inseriti siano corretti' - ,ja: '入力したデータが正しいか確認をお願いします。' - ,dk: 'Venligst verificer at indtastet data er korrekt' - ,fi: 'Varmista, että tiedot ovat oikein' - ,nb: 'Vennligst verifiser at inntastet data er korrekt' - ,he: 'נא לוודא שהמידע שהוזן הוא נכון ומדוייק' - ,pl: 'Proszę sprawdzić, czy wprowadzone dane są prawidłowe' - ,ru: 'Проверьте правильность вводимых данных' - ,sk: 'Prosím, skontrolujte správnosť zadaných údajov' - ,nl: 'Controleer uw invoer' - ,ko: '입력한 데이터가 정확한지 확인해 주세요.' - ,tr: 'Lütfen girilen verilerin doğru olduğunu kontrol edin.' - ,zh_cn: '请验证输入的数据是否正确' - ,hu: 'Kérlek ellenőrizd, hogy az adatok helyesek.' - } - ,'BG' : { - cs: 'Glykémie' - ,he: 'סוכר בדם' - ,de: 'BG' - ,es: 'Glucemia en sangre' - ,fr: 'Glycémie' - ,el: 'Τιμή Γλυκόζης Αίματος' - ,pt: 'Glicemia' - ,sv: 'BS' - ,ro: 'Glicemie' - ,bg: 'КЗ' - ,hr: 'GUK' - ,it: 'Glicemie' - ,ja: 'BG' - ,dk: 'BS' - ,fi: 'VS' - ,nb: 'BS' - ,pl: 'BG' - ,ru: 'ГК' - ,sk: 'Glykémia' - ,nl: 'BG' - ,ko: '혈당' - ,tr: 'KŞ' - ,zh_cn: '血糖' - ,hu: 'Cukorszint' - } - ,'Use BG correction in calculation' : { - cs: 'Použij korekci na glykémii' - ,he: 'השתמש ברמת סוכר בדם לצורך החישוב' - ,de: 'Verwende BG-Korrektur zur Kalkulation' - ,es: 'Usar la corrección de glucemia en los cálculos' - ,fr: 'Utiliser la correction de glycémie dans les calculs' - ,el: 'Χρήση τη διόρθωσης της τιμής γλυκόζης για τον υπολογισμό' - ,pt: 'Usar correção de glicemia nos cálculos' - ,ro: 'Folosește corecția de glicemie în calcule' - ,bg: 'Използвай корекцията за КЗ в изчислението' - ,hr: 'Koristi korekciju GUK-a u izračunu' - ,sv: 'Använd BS-korrektion för beräkning' - ,it: 'Utilizzare la correzione nei calcoli delle Glicemie' - ,ja: 'ボーラス計算機能使用' - ,dk: 'Anvend BS-korrektion i beregning' - ,fi: 'Käytä korjausannosta laskentaan' - ,nb: 'Bruk blodsukkerkorrigering i beregning' - ,pl: 'Użyj BG w obliczeniach korekty' - ,ru: 'При расчете учитывать коррекцию ГК' - ,sk: 'Použite korekciu na glykémiu' - ,nl: 'Gebruik BG in berekeningen' - ,ko: '계산에 보정된 혈당을 사용하세요.' - ,tr: 'Hesaplamada KŞ düzeltmesini kullan' - ,zh_cn: '使用血糖值修正计算' - ,hu: 'Használj korekciót a számításban' - } - ,'BG from CGM (autoupdated)' : { - cs: 'Glykémie z CGM (automaticky aktualizovaná)' - ,he: 'רמת סוכר מהחיישן , מעודכן אוטומטית' - ,de: 'Blutglukose vom CGM (Auto-Update)' - ,es: 'Glucemia del sensor (Auto-actualizado)' - ,fr: 'Glycémie CGM (automatique)' - ,el: 'Τιμή γλυκόζης από τον αισθητήρα (αυτόματο)' - ,pt: 'Glicemia do sensor (Automático)' - ,sv: 'BS från CGM (automatiskt)' - ,ro: 'Glicemie în senzor (automat)' - ,bg: 'КЗ от сензора (автоматично)' - ,hr: 'GUK sa CGM-a (ažuriran automatski)' - ,it: 'Glicemie da CGM (aggiornamento automatico)' - ,ja: 'CGMグルコース値' - ,dk: 'BS fra CGM (automatisk)' - ,fi: 'VS sensorilta (päivitetty automaattisesti)' - ,nb: 'BS fra CGM (automatisk)' - ,pl: 'Wartość BG z CGM (automatycznie)' - ,ru: 'ГК с сенсора (автообновление)' - ,sk: 'Glykémia z CGM (automatická aktualizácia) ' - ,nl: 'BG van CGM (automatische invoer)' - ,ko: 'CGM 혈당(자동 업데이트)' - ,tr: 'CGM den KŞ (otomatik güncelleme)' - ,zh_cn: 'CGM(连续血糖监测)测量的血糖值(自动更新)' - ,hu: 'Cukorszint a CGM-ből (Automatikus frissítés)' - } - ,'BG from meter' : { - cs: 'Glykémie z glukoměru' - ,he: 'רמת סוכר ממד הסוכר' - ,de: 'Blutzucker vom Messgerät' - ,es: 'Glucemia del glucómetro' - ,fr: 'Glycémie du glucomètre' - ,el: 'Τιμή γλυκόζης από τον μετρητή' - ,pt: 'Glicemia do glicosímetro' - ,sv: 'BS från blodsockermätare' - ,ro: 'Glicemie în glucometru' - ,bg: 'КЗ от глюкомер' - ,hr: 'GUK s glukometra' - ,it: 'Glicemie da glucometro' - ,ja: '血糖測定器使用グルコース値' - ,dk: 'BS fra blodsukkerapperat' - ,fi: 'VS mittarilta' - ,nb: 'BS fra blodsukkerapparat' - ,pl: 'Wartość BG z glukometru' - ,ru: 'ГК по глюкометру' - ,sk: 'Glykémia z glukomeru' - ,nl: 'BG van meter' - ,ko: '혈당 측정기에서의 혈당' - ,tr: 'Glikometre KŞ' - ,zh_cn: '血糖仪测量的血糖值' - ,hu: 'Cukorszint a merőből' - } - ,'Manual BG' : { - cs: 'Ručně zadaná glykémie' - ,he: 'רמת סוכר ידנית' - ,de: 'BG von Hand' - ,es: 'Glucemia manual' - ,fr: 'Glycémie manuelle' - ,el: 'Χειροκίνητη εισαγωγή τιμής γλυκόζης' - ,pt: 'Glicemia Manual' - ,ro: 'Glicemie manuală' - ,bg: 'Ръчно въведена КЗ' - ,hr: 'Ručno unesen GUK' - ,sv: 'Manuellt BS' - ,it: 'Inserisci Glicemia' - ,ja: '手動入力グルコース値' - ,dk: 'Manuelt BS' - ,fi: 'Käsin syötetty VS' - ,nb: 'Manuelt BS' - ,pl: 'Ręczne wprowadzenie BG' - ,ru: 'ручной ввод ГК' - ,sk: 'Ručne zadaná glykémia' - ,nl: 'Handmatige BG' - ,ko: '수동 입력 혈당' - ,tr: 'Manuel KŞ' - ,zh_cn: '手动输入的血糖值' - ,hu: 'Kézi cukorszint' - } - ,'Quickpick' : { - cs: 'Rychlý výběr' - ,he: 'בחירה מהירה' - ,de: 'Schnellauswahl' - ,es: 'Selección rápida' - ,fr: 'Sélection rapide' - ,el: 'Γρήγορη εισαγωγή' - ,pt: 'Seleção rápida' - ,ro: 'Selecție rapidă' - ,bg: 'Бърз избор' - ,hr: 'Brzi izbor' - ,sv: 'Snabbval' - ,it: 'Scelta rapida' - ,ja: 'クイック選択' - ,dk: 'Hurtig valg' - ,fi: 'Pikavalinta' - ,nb: 'Hurtigvalg' - ,pl: 'Szybki wybór' - ,ru: 'Быстрый отбор' - ,sk: 'Rýchly výber' - ,nl: 'Snelkeuze' - ,ko: '빠른 선택' - ,tr: 'Hızlı seçim' - ,zh_cn: '快速选择' - ,hu: 'Gyors választás' - } - ,'or' : { - cs: 'nebo' - ,de: 'oder' - ,es: 'o' - ,fr: 'ou' - ,el: 'ή' - ,pt: 'ou' - ,sv: 'Eller' - ,ro: 'sau' - ,bg: 'или' - ,hr: 'ili' - ,it: 'o' - ,ja: 'または' - ,dk: 'eller' - ,fi: 'tai' - ,nb: 'eller' - ,he: 'או' - ,pl: 'lub' - ,ru: 'или' - ,sk: 'alebo' - ,nl: 'of' - ,ko: '또는' - ,tr: 'veya' - ,zh_cn: '或' - ,hu: 'vagy' - } - ,'Add from database' : { - cs: 'Přidat z databáze' - ,de: 'Ergänze aus Datenbank' - ,es: 'Añadir desde la base de datos' - ,fr: 'Ajouter à partir de la base de données' - ,el: 'Επιλογή από τη Βάση Δεδομένων' - ,pt: 'Adicionar do banco de dados' - ,ro: 'Adaugă din baza de date' - ,bg: 'Добави от базата с данни' - ,hr: 'Dodaj iz baze podataka' - ,sv: 'Lägg till från databas' - ,it: 'Aggiungi dal database' - ,ja: 'データベースから追加' - ,dk: 'Tilføj fra database' - ,fi: 'Lisää tietokannasta' - ,nb: 'Legg til fra database' - ,he: 'הוסף מבסיס נתונים' - ,pl: 'Dodaj z bazy danych' - ,ru: 'Добавить из базы данных' - ,sk: 'Pridať z databázy' - ,nl: 'Toevoegen uit database' - ,ko: '데이터베이스로 부터 추가' - ,tr: 'Veritabanından ekle' - ,zh_cn: '从数据库增加' - ,hu: 'Hozzáadás adatbázisból' - } - ,'Use carbs correction in calculation' : { - cs: 'Použij korekci na sacharidy' - ,he: 'השתמש בתיקון פחמימות במהלך החישוב' - ,de: 'Verwende Kohlenhydrate-Korrektur zur Kalkulation' - ,es: 'Usar la corrección de hidratos de carbono en los cálculos' - ,fr: 'Utiliser la correction en glucides dans les calculs' - ,el: 'Χρήση των νέων υδατανθράκων που εισήχθησαν για τον υπολογισμό' - ,pt: 'Usar correção com carboidratos no cálculo' - ,ro: 'Folosește corecția de carbohidrați în calcule' - ,bg: 'Включи корекцията чрез ВХ в изчислението' - ,hr: 'Koristi korekciju za UH u izračunu' - ,sv: 'Använd kolhydratkorrektion för beräkning' - ,it: 'Utilizzare la correzione dei carboidrati nel calcolo' - ,ja: '糖質量計算機能を使用' - ,dk: 'Benyt kulhydratkorrektion i beregning' - ,fi: 'Käytä hiilihydraattikorjausta laskennassa' - ,nb: 'Bruk karbohydratkorrigering i beregning' - ,pl: 'Użyj wartość węglowodanów w obliczeniach korekty' - ,ru: 'Пользоваться коррекцией на углеводы при расчете' - ,sk: 'Použite korekciu na sacharidy' - ,nl: 'Gebruik KH correctie in berekening' - ,ko: '계산에 보정된 탄수화물을 사용하세요.' - ,tr: 'Hesaplamada karbonhidrat düzeltmesini kullan' - ,zh_cn: '使用碳水化合物修正计算结果' - ,hu: 'Használj szénhidrát korekciót a számításban' - } - ,'Use COB correction in calculation' : { - cs: 'Použij korekci na COB' - ,he: 'השתמש בתיקון פחמימות בגוף במהלך החישוב' - ,de: 'Verwende verzehrte Kohlenhydrate zur Kalkulation' - ,es: 'Usar carbohidratos activos para los cálculos' - ,fr: 'Utiliser les COB dans les calculs' - ,el: 'Χρήση των υδατανθράκων που απομένουν για τον υπολογισμό' - ,pt: 'Usar correção de COB no cálculo' - ,ro: 'Folosește COB în calcule' - ,bg: 'Включи активните ВХ в изчислението' - ,hr: 'Koristi aktivne UGH u izračunu' - ,sv: 'Använd aktiva kolhydrater för beräkning' - ,it: 'Utilizzare la correzione COB nel calcolo' - ,ja: 'COB補正計算を使用' - ,dk: 'Benyt aktive kulhydrater i beregning' - ,fi: 'Käytä aktiivisia hiilihydraatteja laskennassa' - ,nb: 'Benytt aktive karbohydrater i beregning' - ,pl: 'Użyj COB do obliczenia korekty' - ,ru: 'Учитывать активные углеводы COB при расчете' - ,sk: 'Použite korekciu na COB' - ,nl: 'Gebruik ingenomen KH in berekening' - ,ko: '계산에 보정된 COB를 사용하세요.' - ,tr: 'Hesaplamada COB aktif karbonhidrat düzeltmesini kullan' - ,zh_cn: '使用COB(活性碳水化合物)修正计算结果' - ,hu: 'Használj COB korrekciót a számításban' - } - ,'Use IOB in calculation' : { - cs: 'Použij IOB ve výpočtu' - ,he: 'השתמש בתיקון אינסולין בגוף במהלך החישוב' - ,de: 'Verwende gespritzes Insulin zur Kalkulation' - ,es: 'Usar Insulina activa en los cálculos' - ,fr: 'Utiliser l\'IOB dans les calculs' - ,el: 'Χρήση της υπολογισθείσας ινσουλίνης που έχει απομείνει για τον υπολογισμό' - ,pt: 'Usar IOB no cálculo' - ,ro: 'Folosește IOB în calcule' - ,bg: 'Включи активния инсулин в изчислението' - ,hr: 'Koristi aktivni inzulin u izračunu' - ,sv: 'Använd aktivt insulin för beräkning' - ,it: 'Utilizzare la correzione IOB nel calcolo' - ,ja: 'IOB計算を使用' - ,dk: 'Benyt aktivt insulin i beregningen' - ,fi: 'Käytä aktiviivista insuliinia laskennassa' - ,nb: 'Bruk aktivt insulin i beregningen' - ,pl: 'Użyj IOB w obliczeniach' - ,ru: 'Учитывать активный инсулин IOB при расчете' - ,sk: 'Použite IOB vo výpočte' - ,nl: 'Gebruik IOB in berekening' - ,ko: '계산에 IOB를 사용하세요.' - ,tr: 'Hesaplamada IOB aktif insülin düzeltmesini kullan' - ,zh_cn: '使用IOB(活性胰岛素)修正计算结果' - ,hu: 'Használj IOB kalkulációt' - } - ,'Other correction' : { - cs: 'Jiná korekce' - ,he: 'תיקון אחר' - ,de: 'Weitere Korrektur' - ,es: 'Otra corrección' - ,fr: 'Autre correction' - ,el: 'Άλλη διόρθωση' - ,pt: 'Outra correção' - ,ro: 'Alte corecții' - ,bg: 'Друга корекция' - ,hr: 'Druga korekcija' - ,sv: 'Övrig korrektion' - ,it: 'Altre correzioni' - ,ja: 'その他の補正' - ,dk: 'Øvrig korrektion' - ,fi: 'Muu korjaus' - ,nb: 'Annen korrigering' - ,pl: 'Inna korekta' - ,ru: 'Иная коррекция' - ,sk: 'Iná korekcia' - ,nl: 'Andere correctie' - ,ko: '다른 보정' - ,tr: 'Diğer düzeltme' - ,zh_cn: '其它修正' - ,hu: 'Egyébb korrekció' - } - ,'Rounding' : { - cs: 'Zaokrouhlení' - ,he: 'עיגול' - ,de: 'Gerundet' - ,es: 'Redondeo' - ,fr: 'Arrondi' - ,el: 'Στρογγυλοποίηση' - ,pt: 'Arredondamento' - ,sv: 'Avrundning' - ,ro: 'Rotunjire' - ,bg: 'Закръгляне' - ,hr: 'Zaokruživanje' - ,it: 'Arrotondamento' - ,ja: '端数処理' - ,dk: 'Afrunding' - ,fi: 'Pyöristys' - ,nb: 'Avrunding' - ,pl: 'Zaokrąglanie' - ,ru: 'Округление' - ,sk: 'Zaokrúhlenie' - ,nl: 'Afgerond' - ,ko: '라운딩' - ,tr: 'yuvarlama' - ,zh_cn: '取整' - ,hu: 'Kerekítés' - } - ,'Enter insulin correction in treatment' : { - cs: 'Zahrň inzulín do záznamu ošetření' - ,he: 'הזן תיקון אינסולין בטיפול' - ,de: 'Insulin Korrektur zur Behandlung eingeben' - ,es: 'Introducir correción de insulina en tratamiento' - ,fr: 'Entrer correction insuline dans le traitement' - ,el: 'Υπολογισθείσα ποσότητα ινσουλίνης που απαιτείται' - ,pt: 'Inserir correção com insulina no tratamento' - ,ro: 'Introdu corecția de insulină în tratament' - ,bg: 'Въведи корекция с инсулин като лечение' - ,hr: 'Unesi korekciju inzulinom u tretman' - ,sv: 'Ange insulinkorrektion för händelse' - ,it: 'Inserisci correzione insulina nella somministrazione' - ,ja: '治療にインスリン補正を入力する。' - ,dk: 'Indtast insulinkorrektion' - ,fi: 'Syötä insuliinikorjaus' - ,nb: 'Task inn insulinkorrigering' - ,pl: 'Wprowadź wartość korekty w leczeniu' - ,ru: 'Внести коррекцию инсулина в лечение' - ,sk: 'Zadajte korekciu inzulínu do ošetrenia' - ,nl: 'Voer insuline correctie toe aan behandeling' - ,ko: '대처를 위해 보정된 인슐린을 입력하세요.' - ,tr: 'Tedavide insülin düzeltmesini girin' - ,zh_cn: '在操作中输入胰岛素修正' - ,hu: 'Add be az inzulin korrekciót a kezeléshez' - } - ,'Insulin needed' : { - cs: 'Potřebný inzulín' - ,de: 'Benötigtes Insulin' - ,es: 'Insulina necesaria' - ,fr: 'Insuline nécessaire' - ,el: 'Απαιτούμενη Ινσουλίνη' - ,pt: 'Insulina necessária' - ,ro: 'Necesar insulină' - ,bg: 'Необходим инсулин' - ,hr: 'Potrebno inzulina' - ,sv: 'Beräknad insulinmängd' - ,it: 'Insulina necessaria' - ,ja: '必要インスリン単位' - ,dk: 'Insulin påkrævet' - ,fi: 'Insuliinitarve' - ,nb: 'Insulin nødvendig' - ,he: 'אינסולין נדרש' - ,pl: 'Wymagana insulina' - ,ru: 'Требуется инсулин' - ,sk: 'Potrebný inzulín' - ,nl: 'Benodigde insuline' - ,ko: '인슐린 필요' - ,tr: 'İnsülin gerekli' - ,zh_cn: '需要的胰岛素量' - ,hu: 'Inzulin szükséges' - } - ,'Carbs needed' : { - cs: 'Potřebné sach' - ,de: 'Benötigte Kohlenhydrate' - ,es: 'Hidratos de carbono necesarios' - ,fr: 'Glucides nécessaires' - ,el: 'Απαιτούμενοι Υδατάνθρακες' - ,pt: 'Carboidratos necessários' - ,ro: 'Necesar carbohidrați' - ,bg: 'Необходими въглехидрати' - ,hr: 'Potrebno UGH' - ,sv: 'Beräknad kolhydratmängd' - ,it: 'Carboidrati necessari' - ,ja: '必要糖質量' - ,dk: 'Kulhydrater påkrævet' - ,fi: 'Hiilihydraattitarve' - ,nb: 'Karbohydrater nødvendig' - ,he: 'פחמימות נדרשות' - ,pl: 'Wymagane węglowodany' - ,ru: 'Требуются углеводы' - ,sk: 'Potrebné sacharidy' - ,nl: 'Benodigde koolhydraten' - ,ko: '탄수화물 필요' - ,tr: 'Karbonhidrat gerekli' - ,zh_cn: '需要的碳水量' - ,hu: 'Szenhidrát szükséges' - } - ,'Carbs needed if Insulin total is negative value' : { - cs: 'Chybějící sacharidy v případě, že výsledek je záporný' - ,he: 'פחמימות דרושות אם סך אינסולין הוא שלילי' - ,de: 'Benötigte Kohlenhydrate sofern Gesamtinsulin einen negativen Wert aufweist' - ,es: 'Carbohidratos necesarios si total insulina es un valor negativo' - ,fr: 'Glucides nécessaires si insuline totale est un valeur négative' - ,el: 'Απαιτούνται υδατάνθρακες εάν η συνολική ινσουλίνη έχει αρνητική τιμή' - ,pt: 'Carboidratos necessários se Insulina total for negativa' - ,ro: 'Carbohidrați când necesarul de insulină este negativ' - ,bg: 'Необходими въглехидрати, ако няма инсулин' - ,hr: 'Potrebno UGH ako je ukupna vrijednost inzulina negativna' - ,sv: 'Nödvändig kolhydratmängd för angiven insulinmängd' - ,it: 'Carboidrati necessari se l\'insulina totale è un valore negativo' - ,ja: 'インスリン合計値がマイナスであればカーボ値入力が必要です。' - ,dk: 'Kulhydrater er nødvendige når total insulin mængde er negativ' - ,fi: 'Hiilihydraattitarve, jos yhteenlaskettu insuliini on negatiivinen' - ,nb: 'Karbohydrater er nødvendige når total insulinmengde er negativ' - ,pl: 'Wymagane węglowodany, jeśli łączna wartość Insuliny jest ujemna' - ,ru: 'Требуются углеводы если суммарный инсулин отрицательная величина' - ,sk: 'Potrebné sacharidy, ak je celkový inzulín záporná hodnota' - ,nl: 'Benodigde KH als insuline een negatieve waarde geeft' - ,ko: '인슐린 전체가 마이너스 값이면 탄수화물이 필요합니다.' - ,tr: 'Toplam insülin negatif değer olduğunda karbonhidrat gereklidir' - ,zh_cn: '如果胰岛素总量为负时所需的碳水化合物量' - ,hu: 'Szénhidrát szükséges ha az összes inzulin negatív érték' - } - ,'Basal rate' : { - cs: 'Bazál' - ,he: 'קצב בזלי' - ,de: 'Basalrate' - ,es: 'Tasa basal' - ,fr: 'Taux basal' - ,el: 'Ρυθμός Βασικής Ινσουλίνης' - ,pt: 'Taxa basal' - ,ro: 'Rata bazală' - ,bg: 'Базален инсулин' - ,hr: 'Bazal' - ,sv: 'Basaldos' - ,it: 'Velocità basale' - ,ja: '基礎インスリン割合' - ,dk: 'Basal rate' - ,fi: 'Perusannos' - ,nb: 'Basal' - ,pl: 'Dawka bazowa' - ,ru: 'Скорость базала' - ,sk: 'Bazál' - ,nl: 'Basaal snelheid' - ,ko: 'Basal 단위' - ,tr: 'Basal oranı' - ,zh_cn: '基础率' - ,hu: 'Bazál arány' - } - ,'60 minutes earlier' : { - cs: '60 min předem' - ,he: 'שישים דקות מוקדם יותר' - ,de: '60 Minuten früher' - ,es: '60 min antes' - ,fr: '60 min plus tôt' - ,el: '60 λεπτά πριν' - ,pt: '60 min antes' - ,sv: '60 min tidigare' - ,ro: 'acum 60 min' - ,bg: 'Преди 60 минути' - ,hr: 'Prije 60 minuta' - ,it: '60 minuti prima' - ,ja: '60分前' - ,dk: '60 min tidligere' - ,fi: '60 minuuttia aiemmin' - ,nb: '60 min tidligere' - ,pl: '60 minut wcześniej' - ,ru: 'на 60 минут ранее' - ,sk: '60 min. pred' - ,nl: '60 minuten eerder' - ,ko: '60분 더 일찍' - ,tr: '60 dak. önce' //erken önce ??? - ,zh_cn: '60分钟前' - ,hu: '60 perccel korábban' - } - ,'45 minutes earlier' : { - cs: '45 min předem' - ,he: 'ארבעים דקות מוקדם יותר' - ,de: '45 Minuten früher' - ,es: '45 min antes' - ,fr: '45 min plus tôt' - ,el: '45 λεπτά πριν' - ,pt: '45 min antes' - ,sv: '45 min tidigare' - ,ro: 'acum 45 min' - ,bg: 'Преди 45 минути' - ,hr: 'Prije 45 minuta' - ,it: '45 minuti prima' - ,ja: '45分前' - ,dk: '45 min tidligere' - ,fi: '45 minuuttia aiemmin' - ,nb: '45 min tidligere' - ,pl: '45 minut wcześniej' - ,ru: 'на 45 минут ранее' - ,sk: '45 min. pred' - ,nl: '45 minuten eerder' - ,ko: '45분 더 일찍' - ,tr: '45 dak. önce' - ,zh_cn: '45分钟前' - ,hu: '45 perccel korábban' - } - ,'30 minutes earlier' : { - cs: '30 min předem' - ,he: 'שלושים דקות מוקדם יותר' - ,de: '30 Minuten früher' - ,es: '30 min antes' - ,fr: '30 min plus tôt' - ,el: '30 λεπτά πριν' - ,pt: '30 min antes' - ,sv: '30 min tidigare' - ,ro: 'acum 30 min' - ,bg: 'Преди 30 минути' - ,hr: 'Prije 30 minuta' - ,it: '30 minuti prima' - ,ja: '30分前' - ,dk: '30 min tidigere' - ,fi: '30 minuuttia aiemmin' - ,nb: '30 min tidigere' - ,pl: '30 minut wcześniej' - ,ru: 'на 30 минут ранее' - ,sk: '30 min. pred' - ,nl: '30 minuten eerder' - ,ko: '30분 더 일찍' - ,tr: '30 dak. önce' - ,zh_cn: '30分钟前' - ,hu: '30 perccel korábban' - } - ,'20 minutes earlier' : { - cs: '20 min předem' - ,he: 'עשרים דקות מוקדם יותר' - ,de: '20 Minuten früher' - ,es: '20 min antes' - ,fr: '20 min plus tôt' - ,el: '20 λεπτά πριν' - ,pt: '20 min antes' - ,sv: '20 min tidigare' - ,ro: 'acum 20 min' - ,bg: 'Преди 20 минути' - ,hr: 'Prije 20 minuta' - ,it: '20 minuti prima' - ,ja: '20分前' - ,dk: '20 min tidligere' - ,fi: '20 minuuttia aiemmin' - ,nb: '20 min tidligere' - ,pl: '20 minut wcześniej' - ,ru: 'на 20 минут ранее' - ,sk: '20 min. pred' - ,nl: '20 minuten eerder' - ,ko: '20분 더 일찍' - ,tr: '20 dak. önce' - ,zh_cn: '20分钟前' - ,hu: '20 perccel korábban' - } - ,'15 minutes earlier' : { - cs: '15 min předem' - ,he: 'חמש עשרה דקות מוקדם יותר' - ,de: '15 Minuten früher' - ,es: '15 min antes' - ,fr: '15 min plus tôt' - ,el: '15 λεπτά πριν' - ,pt: '15 min antes' - ,sv: '15 min tidigare' - ,ro: 'acum 15 min' - ,bg: 'Преди 15 минути' - ,hr: 'Prije 15 minuta' - ,it: '15 minuti prima' - ,ja: '15分前' - ,dk: '15 min tidligere' - ,fi: '15 minuuttia aiemmin' - ,nb: '15 min tidligere' - ,pl: '15 minut wcześniej' - ,ru: 'на 15 минут ранее' - ,sk: '15 min. pred' - ,nl: '15 minuten eerder' - ,ko: '15분 더 일찍' - ,tr: '15 dak. önce' - ,zh_cn: '15分钟前' - ,hu: '15 perccel korábban' - } - ,'Time in minutes' : { - cs: 'Čas v minutách' - ,de: 'Zeit in Minuten' - ,es: 'Tiempo en minutos' - ,fr: 'Durée en minutes' - ,el: 'Χρόνος σε λεπτά' - ,pt: 'Tempo em minutos' - ,sv: 'Tid i minuter' - ,ro: 'Timp în minute' - ,bg: 'Времето в минути' - ,hr: 'Vrijeme u minutama' - ,it: 'Tempo in minuti' - ,dk: 'Tid i minutter' - ,fi: 'Aika minuuteissa' - ,nb: 'Tid i minutter' - ,he: 'זמן בדקות' - ,pl: 'Czas w minutach' - ,ru: 'Время в минутах' - ,sk: 'Čas v minútach' - ,nl: 'Tijd in minuten' - ,ko: '분' - ,tr: 'Dakika cinsinden süre' - ,zh_cn: '1分钟前' - ,hu: 'Idő percekben' - } - ,'15 minutes later' : { - cs: '15 min po' - ,de: '15 Minuten später' - ,es: '15 min más tarde' - ,fr: '15 min plus tard' - ,el: '15 λεπτά αργότερα' - ,pt: '15 min depois' - ,ro: 'după 15 min' - ,bg: 'След 15 минути' - ,hr: '15 minuta kasnije' - ,sv: '15 min senare' - ,it: '15 minuti più tardi' - ,ja: '15分後' - ,dk: '15 min senere' - ,fi: '15 minuuttia myöhemmin' - ,nb: '15 min senere' - ,he: 'רבע שעה מאוחר יותר' - ,pl: '15 minut później' - ,ru: 'на 15 мин позже' - ,sk: '15 min. po' - ,nl: '15 minuten later' - ,ko: '15분 더 나중에' - ,tr: '15 dak. sonra' //sonra daha sonra - ,zh_cn: '15分钟后' - ,hu: '15 perccel később' - } - ,'20 minutes later' : { - cs: '20 min po' - ,de: '20 Minuten später' - ,es: '20 min más tarde' - ,fr: '20 min plus tard' - ,el: '20 λεπτά αργότερα' - ,pt: '20 min depois' - ,ro: 'după 20 min' - ,bg: 'След 20 минути' - ,hr: '20 minuta kasnije' - ,sv: '20 min senare' - ,it: '20 minuti più tardi' - ,ja: '20分後' - ,dk: '20 min senere' - ,fi: '20 minuuttia myöhemmin' - ,nb: '20 min senere' - ,he: 'עשרים דקות מאוחר יותר' - ,pl: '20 minut później' - ,ru: 'на 20 мин позже' - ,sk: '20 min. po' - ,nl: '20 minuten later' - ,ko: '20분 더 나중에' - ,tr: '20 dak. sonra' - ,zh_cn: '20分钟后' - ,hu: '20 perccel később' - } - ,'30 minutes later' : { - cs: '30 min po' - ,de: '30 Minuten später' - ,es: '30 min más tarde' - ,fr: '30 min plus tard' - ,el: '30 λεπτά αργότερα' - ,pt: '30 min depois' - ,ro: 'după 30 min' - ,bg: 'След 30 минути' - ,hr: '30 minuta kasnije' - ,sv: '30 min senare' - ,it: '30 minuti più tardi' - ,ja: '30分後' - ,dk: '30 min senere' - ,fi: '30 minuuttia myöhemmin' - ,nb: '30 min senere' - ,he: 'חצי שעה מאוחר יותר' - ,pl: '30 minut później' - ,ru: 'на 30 мин позже' - ,sk: '30 min. po' - ,nl: '30 minuten later' - ,ko: '30분 더 나중에' - ,tr: '30 dak. sonra' - ,zh_cn: '30分钟后' - ,hu: '30 perccel kesőbb' - } - ,'45 minutes later' : { - cs: '45 min po' - ,de: '45 Minuten später' - ,es: '45 min más tarde' - ,fr: '45 min plus tard' - ,el: '45 λεπτά αργότερα' - ,pt: '45 min depois' - ,ro: 'după 45 min' - ,bg: 'След 45 минути' - ,hr: '45 minuta kasnije' - ,sv: '45 min senare' - ,it: '45 minuti più tardi' - ,ja: '45分後' - ,dk: '45 min senere' - ,fi: '45 minuuttia myöhemmin' - ,nb: '45 min senere' - ,he: 'שלושת רבעי שעה מאוחר יותר' - ,pl: '45 minut później' - ,ru: 'на 45 мин позже' - ,sk: '45 min. po' - ,nl: '45 minuten later' - ,ko: '45분 더 나중에' - ,tr: '45 dak. sonra' - ,zh_cn: '45分钟后' - ,hu: '45 perccel később' - } - ,'60 minutes later' : { - cs: '60 min po' - ,de: '60 Minuten später' - ,es: '60 min más tarde' - ,fr: '60 min plus tard' - ,el: '60 λεπτά αργότερα' - ,pt: '60 min depois' - ,ro: 'după 60 min' - ,bg: 'След 60 минути' - ,hr: '60 minuta kasnije' - ,sv: '60 min senare' - ,it: '60 minuti più tardi' - ,ja: '60分後' - ,dk: '60 min senere' - ,fi: '60 minuuttia myöhemmin' - ,nb: '60 min senere' - ,he: 'שעה מאוחר יותר' - ,pl: '60 minut później' - ,ru: 'на 60 мин позже' - ,sk: '60 min. po' - ,nl: '60 minuten later' - ,ko: '60분 더 나중에' - ,tr: '60 dak. sonra' - ,zh_cn: '60分钟后' - ,hu: '60 perccel később' - } - ,'Additional Notes, Comments' : { - cs: 'Dalši poznámky, komentáře' - ,de: 'Ergänzende Hinweise/Kommentare' - ,es: 'Notas adicionales, Comentarios' - ,fr: 'Notes additionnelles, commentaires' - ,el: 'Επιπλέον σημειώσεις/σχόλια' - ,pt: 'Notas adicionais e comentários' - ,ro: 'Note adiționale, comentarii' - ,bg: 'Допълнителни бележки, коментари' - ,hr: 'Dodatne bilješke, komentari' - ,sv: 'Notering, övrigt' - ,it: 'Note aggiuntive, commenti' - ,ja: '追加メモ、コメント' - ,dk: 'Ekstra noter, kommentarer' - ,fi: 'Lisähuomiot, kommentit' - ,nb: 'Ekstra notater, kommentarer' - ,he: 'הערות נוספות' - ,pl: 'Uwagi dodatkowe' - ,ru: 'Дополнительные примечания' - ,sk: 'Ďalšie poznámky, komentáre' - ,nl: 'Extra aantekeningen' - ,ko: '추가 메모' - ,tr: 'Ek Notlar, Yorumlar' - ,zh_cn: '备注' - ,hu: 'Feljegyzések, hozzászólások' - } - ,'RETRO MODE' : { - cs: 'V MINULOSTI' - ,he: 'מצב רטרו' - ,de: 'Retro-Modus' - ,es: 'Modo Retrospectivo' - ,fr: 'MODE RETROSPECTIF' - ,el: 'Αναδρομική Λειτουργία' - ,pt: 'Modo Retrospectivo' - ,sv: 'Retroläge' - ,ro: 'MOD RETROSPECTIV' - ,bg: 'МИНАЛО ВРЕМЕ' - ,hr: 'Retrospektivni način' - ,it: 'Modalità retrospettiva' - ,ja: '振り返りモード' - ,dk: 'Retro mode' - ,fi: 'VANHENTUNEET TIEDOT' - ,nb: 'Retro mode' - ,nl: 'Retro mode' - ,pl: 'Tryb RETRO' - ,ru: 'режим РЕТРО' - ,sk: 'V MINULOSTI' - ,ko: 'PETRO MODE' - ,tr: 'RETRO MODE' - ,zh_cn: '历史模式' - ,hu: 'RETRO mód' - } - ,'Now' : { - cs: 'Nyní' - ,de: 'Jetzt' - ,es: 'Ahora' - ,fr: 'Maintenant' - ,el: 'Τώρα' - ,pt: 'Agora' - ,sv: 'Nu' - ,ro: 'Acum' - ,bg: 'Сега' - ,hr: 'Sad' - ,it: 'Ora' - ,ja: '今' - ,dk: 'Nu' - ,fi: 'Nyt' - ,nb: 'Nå' - ,he: 'עכשיו' - ,pl: 'Teraz' - ,ru: 'Сейчас' - ,sk: 'Teraz' - ,nl: 'Nu' - ,ko: '현재' - ,tr: 'Şimdi' - ,zh_cn: '现在' - ,hu: 'Most' - } - ,'Other' : { - cs: 'Jiný' - ,de: 'Weitere' - ,es: 'Otro' - ,fr: 'Autre' - ,el: 'Άλλο' - ,pt: 'Outro' - ,sv: 'Övrigt' - ,ro: 'Altul' - ,bg: 'Друго' - ,hr: 'Drugo' - ,it: 'Altro' - ,ja: '他の' - ,dk: 'Øvrige' - ,fi: 'Muu' - ,nb: 'Annet' - ,he: 'אחר' - ,pl: 'Inny' - ,ru: 'Другое' - ,sk: 'Iný' - ,nl: 'Andere' - ,ko: '다른' - ,tr: 'Diğer' - ,zh_cn: '其它' - ,hu: 'Más' - } - ,'Submit Form' : { - cs: 'Odeslat formulář' - ,de: 'Formular absenden' - ,es: 'Enviar formulario' - ,fr: 'Suomettre le formulaire' - ,el: 'Υποβολή Φόρμας' - ,pt: 'Enviar formulário' - ,sv: 'Överför händelse' - ,ro: 'Trimite formularul' - ,bg: 'Въвеждане на данните' - ,hr: 'Spremi' - ,it: 'Invia il modulo' - ,ja: 'フォームを投稿する' - ,dk: 'Gem hændelsen' - ,fi: 'Lähetä tiedot' - ,nb: 'Lagre' - ,he: 'שמור' - ,pl: 'Zatwierdź' - ,ru: 'Ввести форму' - ,sk: 'Odoslať formulár' - ,nl: 'Formulier opslaan' - ,ko: '양식 제출' - ,tr: 'Formu gönder' - ,zh_cn: '提交' - ,hu: 'Elküldés' - } - ,'Profile Editor' : { - cs: 'Editor profilu' - ,de: 'Profil-Editor' - ,es: 'Editor de perfil' - ,fr: 'Editeur de profil' - ,el: 'Επεξεργασία Προφίλ' - ,pt: 'Editor de perfil' - ,sv: 'Editera profil' - ,ro: 'Editare profil' - ,bg: 'Редактор на профила' - ,hr: 'Editor profila' - ,it: 'NS - Dati Personali' - ,ja: 'プロフィール編集' - ,dk: 'Profil editor' - ,fi: 'Profiilin muokkaus' - ,nb: 'Profileditor' - ,he: 'ערוך פרופיל' - ,pl: 'Edytor profilu' - ,ru: 'Редактор профиля' - ,sk: 'Editor profilu' - ,nl: 'Profiel beheer' - ,ko: '프로파일 편집' - ,tr: 'Profil Düzenleyicisi' - ,zh_cn: '配置文件编辑器' - ,zh_tw: '配置文件編輯器' - ,hu: 'Profil Szerkesztő' - } - ,'Reports' : { - cs: 'Výkazy' - ,he: 'דוחות' - ,de: 'Berichte' - ,es: 'Herramienta de informes' - ,fr: 'Outil de rapport' - ,el: 'Αναφορές' - ,pt: 'Relatórios' - ,sv: 'Rapportverktyg' - ,ro: 'Instrumente raportare' - ,bg: 'Статистика' - ,hr: 'Izvještaji' - ,it: 'NS - Statistiche' - ,ja: '報告' - ,dk: 'Rapporteringsværktøj' - ,fi: 'Raportointityökalu' - ,nb: 'Rapporteringsverktøy' - ,pl: 'Raporty' - ,ru: 'Отчеты' - ,sk: 'Správy' - ,nl: 'Rapporten' - ,ko: '보고서' - ,tr: 'Raporlar' - ,zh_cn: '生成报表' - ,zh_tw: '生成報表' - ,hu: 'Jelentések' - } - ,'Add food from your database' : { - cs: 'Přidat jidlo z Vaší databáze' - ,he: 'הוסף אוכל מבסיס הנתונים שלך' - ,de: 'Ergänze Nahrung aus Deiner Datenbank' - ,es: 'Añadir alimento a su base de datos' - ,fr: 'Ajouter aliment de votre base de données' - ,el: 'Προσθήκη φαγητού από τη Βάση Δεδομένων' - ,pt: 'Incluir alimento do seu banco de dados' - ,ro: 'Adaugă alimente din baza de date' - ,bg: 'Добави храна от твоята база с данни' - ,hr: 'Dodajte hranu iz svoje baze podataka' - ,sv: 'Lägg till livsmedel från databas' - ,it: 'Aggiungere cibo al database' - ,ja: 'データベースから食べ物を追加' - ,dk: 'Tilføj mad fra din database' - ,fi: 'Lisää ruoka tietokannasta' - ,nb: 'Legg til mat fra din database' - ,pl: 'Dodaj posiłek z twojej bazy danych' - ,ru: 'Добавить продукт из вашей базы данных' - ,sk: 'Pridať jedlo z Vašej databázy' - ,nl: 'Voeg voeding toe uit uw database' - ,ko: '데이터베이스에서 음식을 추가하세요.' - ,tr: 'Veritabanınızdan yemek ekleyin' - ,zh_cn: '从数据库增加食物' - ,hu: 'Étel hozzáadása az adatbázisból' - } - ,'Reload database' : { - cs: 'Znovu nahraj databázi' - ,he: 'טען בסיס נתונים שוב' - ,de: 'Datenbank nachladen' - ,es: 'Recargar base de datos' - ,fr: 'Recharger la base de données' - ,el: 'Επαναφόρτωση Βάσης Δεδομένων' - ,pt: 'Recarregar banco de dados' - ,ro: 'Reîncarcă baza de date' - ,bg: 'Презареди базата с данни' - ,hr: 'Ponovo učitajte bazu podataka' - ,sv: 'Ladda om databas' - ,it: 'Ricarica database' - ,ja: 'データベース再読み込み' - ,dk: 'Genindlæs databasen' - ,fi: 'Lataa tietokanta uudelleen' - ,nb: 'Last inn databasen på nytt' - ,pl: 'Odśwież bazę danych' - ,ru: 'Перезагрузить базу данных' - ,sk: 'Obnoviť databázu' - ,nl: 'Database opnieuw laden' - ,ko: '데이터베이스 재로드' - ,tr: 'Veritabanını yeniden yükle' - ,zh_cn: '重新载入数据库' - ,hu: 'Adatbázis újratöltése' - } - ,'Add' : { - cs: 'Přidej' - ,he: 'הוסף' - ,de: 'Hinzufügen' - ,es: 'Añadir' - ,fr: 'Ajouter' - ,el: 'Προσθήκη' - ,pt: 'Adicionar' - ,ro: 'Adaugă' - ,bg: 'Добави' - ,hr: 'Dodaj' - ,sv: 'Lägg till' - ,it: 'Aggiungere' - ,ja: '追加' - ,dk: 'Tilføj' - ,fi: 'Lisää' - ,nb: 'Legg til' - ,pl: 'Dodaj' - ,ru: 'Добавить' - ,sk: 'Pridať' - ,nl: 'Toevoegen' - ,ko: '추가' - ,tr: 'Ekle' - ,zh_cn: '增加' - ,hu: 'Hozzáadni' - } - ,'Unauthorized' : { - cs: 'Neautorizováno' - ,he: 'אין אישור' - ,de: 'Unbefugt' - ,es: 'No autorizado' - ,fr: 'Non autorisé' - ,el: 'Χωρίς εξουσιοδότηση' - ,pt: 'Não autorizado' - ,sv: 'Ej behörig' - ,ro: 'Neautorizat' - ,bg: 'Неразрешен достъп' - ,hr: 'Neautorizirano' - ,it: 'Non Autorizzato' - ,ja: '認証されていません' - ,dk: 'Uautoriseret' - ,fi: 'Et ole autentikoitunut' - ,nb: 'Uautorisert' - ,pl: 'Nieuwierzytelniono' - ,ru: 'Не авторизовано' - ,sk: 'Neautorizované' - ,nl: 'Ongeauthoriseerd' - ,ko: '미인증' - ,tr: 'Yetkisiz' - ,zh_cn: '未授权' - ,zh_tw: '未授權' - ,hu: 'Nincs autorizávla' - } - ,'Entering record failed' : { - cs: 'Vložení záznamu selhalo' - ,he: 'הוספת רשומה נכשלה' - ,de: 'Eingabe Datensatz fehlerhaft' - ,es: 'Entrada de registro fallida' - ,fr: 'Entrée enregistrement a échoué' - ,el: 'Η εισαγωγή της εγγραφής απέτυχε' - ,pt: 'Entrada de registro falhou' - ,ro: 'Înregistrare eșuată' - ,bg: 'Въвеждане на записа не се осъществи' - ,hr: 'Neuspjeli unos podataka' - ,sv: 'Lägga till post nekas' - ,it: 'Voce del Registro fallita' - ,ja: '入力されたものは記録できませんでした' - ,dk: 'Tilføjelse af post fejlede' - ,fi: 'Tiedon tallentaminen epäonnistui' - ,nb: 'Lagring feilet' - ,pl: 'Wprowadzenie wpisu nie powiodło się' - ,ru: 'Ввод записи не состоялся' - ,sk: 'Zadanie záznamu zlyhalo' - ,nl: 'Toevoegen mislukt' - ,ko: '입력 실패' - ,tr: 'Kayıt girişi başarısız oldu' - ,zh_cn: '输入记录失败' - ,hu: 'Hozzáadás nem sikerült' - } - ,'Device authenticated' : { - cs: 'Zařízení ověřeno' - ,he: 'התקן מאושר' - ,de: 'Gerät authentifiziert' - ,es: 'Dispositivo autorizado' - ,fr: 'Appareil authentifié' - ,el: 'Εξουσιοδοτημένη Συσκευή' - ,pt: 'Dispositivo autenticado' - ,sv: 'Enhet autentiserad' - ,ro: 'Dispozitiv autentificat' - ,bg: 'Устройстово е разпознато' - ,hr: 'Uređaj autenticiran' - ,it: 'Disp. autenticato' - ,ja: '機器は認証されました。' - ,dk: 'Enhed godkendt' - ,fi: 'Laite autentikoitu' - ,nb: 'Enhet godkjent' - ,pl: 'Urządzenie uwierzytelnione' - ,ru: 'Устройство авторизовано' - ,sk: 'Zariadenie overené' - ,nl: 'Apparaat geauthenticeerd' - ,ko: '기기 인증' - ,tr: 'Cihaz kimliği doğrulandı' - ,zh_cn: '设备已认证' - ,zh_tw: '設備已認證' - ,hu: 'Berendezés hitelesítve' - } - ,'Device not authenticated' : { - cs: 'Zařízení není ověřeno' - ,he: 'התקן לא מאושר' - ,de: 'Gerät nicht authentifiziert' - ,es: 'Dispositivo no autorizado' - ,fr: 'Appareil non authentifié' - ,el: 'Συσκευή Μη Εξουσιοδοτημένη' - ,pt: 'Dispositivo não autenticado' - ,sv: 'Enhet EJ autentiserad' - ,ro: 'Dispozitiv neautentificat' - ,bg: 'Устройсройството не е разпознато' - ,hr: 'Uređaj nije autenticiran' - ,it: 'Disp. non autenticato' - ,ja: '機器は認証されていません。' - ,dk: 'Enhed ikke godkendt' - ,fi: 'Laite ei ole autentikoitu' - ,nb: 'Enhet ikke godkjent' - ,pl: 'Urządzenie nieuwierzytelnione' - ,ru: 'Устройство не авторизовано' - ,sk: 'Zariadenie nieje overené' - ,nl: 'Apparaat niet geauthenticeerd' - ,ko: '미인증 기기' - ,tr: 'Cihaz kimliği doğrulanmamış' - ,zh_cn: '设备未认证' - ,zh_tw: '設備未認證' - ,hu: 'Berendezés nincs hitelesítve' - } - ,'Authentication status' : { - cs: 'Stav ověření' - ,he: 'סטטוס אימות' - ,de: 'Authentifikationsstatus' - ,es: 'Estado de autorización' - ,fr: 'Status de l\'authentification' - ,el: 'Κατάσταση Εξουσιοδότησης' - ,pt: 'Status de autenticação' - ,ro: 'Starea autentificării' - ,bg: 'Статус на удостоверяване' - ,hr: 'Status autentikacije' - ,sv: 'Autentiseringsstatus' - ,it: 'Stato di autenticazione' - ,ja: '認証ステータス' - ,dk: 'Godkendelsesstatus' - ,fi: 'Autentikoinnin tila' - ,nb: 'Autentiseringsstatus' - ,pl: 'Status uwierzytelnienia' - ,ru: 'Статус авторизации' - ,sk: 'Stav overenia' - ,nl: 'Authenticatie status' - ,ko: '인증 상태' - ,tr: 'Kimlik doğrulama durumu' - ,zh_cn: '认证状态' - ,zh_tw: '認證狀態' - ,hu: 'Hitelesítés állapota' - } - ,'Authenticate' : { - cs: 'Ověřit' - ,he: 'אמת' - ,de: 'Authentifizieren' - ,es: 'Autentificar' - ,fr: 'Authentifier' - ,el: 'Πιστοποίηση' - ,pt: 'Autenticar' - ,sv: 'Autentisera' - ,ro: 'Autentificare' - ,bg: 'Удостоверяване' - ,hr: 'Autenticirati' - ,it: 'Autenticare' - ,ja: '認証' - ,dk: 'Godkende' - ,fi: 'Autentikoi' - ,nb: 'Autentiser' - ,pl: 'Uwierzytelnienie' - ,ru: 'Авторизуйте' - ,sk: 'Overiť' - ,nl: 'Authenticatie' - ,ko: '인증' - ,tr: 'Kimlik doğrulaması' - ,zh_cn: '认证' - ,zh_tw: '認證' - ,hu: 'Hitelesítés' - } - ,'Remove' : { - cs: 'Vymazat' - ,he: 'הסר' - ,de: 'Entfernen' - ,es: 'Eliminar' - ,fr: 'Retirer' - ,el: 'Αφαίρεση' - ,pt: 'Remover' - ,ro: 'Șterge' - ,bg: 'Премахни' - ,hr: 'Ukloniti' - ,sv: 'Ta bort' - ,it: 'Rimuovere' - ,ja: '除く' - ,dk: 'Fjern' - ,fi: 'Poista' - ,nb: 'Slett' - ,pl: 'Usuń' - ,ru: 'Удалите' - ,sk: 'Odstrániť' - ,nl: 'Verwijder' - ,ko: '삭제' - ,tr: 'Kaldır' - ,zh_cn: '取消' - ,zh_tw: '取消' - ,hu: 'Eltávolítani' - } - ,'Your device is not authenticated yet' : { - cs: 'Toto zařízení nebylo dosud ověřeno' - ,he: 'ההתקן שלך עדיין לא מאושר' - ,de: 'Dein Gerät ist noch nicht authentifiziert' - ,es: 'Su dispositivo no ha sido autentificado todavía' - ,fr: 'Votre appareil n\'est pas encore authentifié' - ,el: 'Η συκευή σας δεν έχει πιστοποιηθεί' - ,pt: 'Seu dispositivo ainda não foi autenticado' - ,ro: 'Dispozitivul nu este autentificat încă' - ,bg: 'Вашето устройство все още не е удостоверено' - ,hr: 'Vaš uređaj još nije autenticiran' - ,sv: 'Din enhet är ej autentiserad' - ,it: 'Il tuo dispositivo non è ancora stato autenticato' - ,ja: '機器はまだ承認されていません。' - ,dk: 'Din enhed er ikke godkendt endnu' - ,fi: 'Laitettasi ei ole vielä autentikoitu' - ,nb: 'Din enhet er ikke godkjent enda' - ,pl: 'Twoje urządzenie nie jest jeszcze uwierzytelnione' - ,ru: 'Ваше устройство еще не авторизовано ' - ,sk: 'Toto zariadenie zatiaľ nebolo overené' - ,nl: 'Uw apparaat is nog niet geauthenticeerd' - ,ko: '당신의 기기는 아직 인증되지 않았습니다.' - ,tr: 'Cihazınız henüz doğrulanmamış' - ,zh_cn: '此设备还未进行认证' - ,zh_tw: '這個設備還未進行認證' - ,hu: 'A berendezés még nincs hitelesítve' - } - ,'Sensor' : { - cs: 'Senzor' - ,de: 'Sensor' - ,es: 'Sensor' - ,fr: 'Senseur' - ,el: 'Αισθητήρας' - ,pt: 'Sensor' - ,sv: 'Sensor' - ,ro: 'Senzor' - ,bg: 'Сензор' - ,hr: 'Senzor' - ,it: 'Sensore' - ,ja: 'センサー' - ,dk: 'Sensor' - ,fi: 'Sensori' - ,nb: 'Sensor' - ,he: 'חיישן סוכר' - ,pl: 'Sensor' - ,ru: 'Сенсор' - ,sk: 'Senzor' - ,nl: 'Sensor' - ,ko: '센서' - ,tr: 'Sensor' - ,zh_cn: 'CGM探头' - ,hu: 'Szenzor' - } - ,'Finger' : { - cs: 'Glukoměr' - ,de: 'Finger' - ,es: 'Dedo' - ,fr: 'Doigt' - ,el: 'Δάχτυλο' - ,pt: 'Ponta de dedo' - ,sv: 'Finger' - ,ro: 'Deget' - ,bg: 'От пръстта' - ,hr: 'Prst' - ,it: 'Dito' - ,ja: '指' - ,dk: 'Finger' - ,fi: 'Sormi' - ,nb: 'Finger' - ,he: 'אצבע' - ,pl: 'Glukometr' - ,ru: 'Палец' - ,sk: 'Glukomer' - ,nl: 'Vinger' - ,ko: '손가락' - ,tr: 'Parmak' - ,zh_cn: '手指' - ,hu: 'Új' - } - ,'Manual' : { - cs: 'Ručně' - ,de: 'Von Hand' - ,es: 'Manual' - ,fr: 'Manuel' - ,el: 'Χειροκίνητο' - ,pt: 'Manual' - ,sv: 'Manuell' - ,ro: 'Manual' - ,bg: 'Ръчно' - ,hr: 'Ručno' - ,it: 'Manuale' - ,ja: '手動入力' - ,dk: 'Manuel' - ,fi: 'Manuaalinen' - ,nb: 'Manuell' - ,he: 'ידני' - ,pl: 'Ręcznie' - ,ru: 'Вручную' - ,sk: 'Ručne' - ,nl: 'Handmatig' - ,ko: '수' - ,tr: 'Elle' - ,zh_cn: '手动' - ,hu: 'Kézi' - } - ,'Scale' : { - cs: 'Měřítko' - ,he: 'סקלה' - ,de: 'Skalierung' - ,es: 'Escala' - ,fr: 'Echelle' - ,el: 'Κλίμακα' - ,pt: 'Escala' - ,ro: 'Scală' - ,bg: 'Скала' - ,hr: 'Skala' - ,sv: 'Skala' - ,it: 'Scala' - ,ja: 'グラフ縦軸' - ,dk: 'Skala' - ,fi: 'Skaala' - ,nb: 'Skala' - ,pl: 'Skala' - ,ru: 'Масштаб' - ,sk: 'Mierka' - ,nl: 'Schaal' - ,ko: '스케일' - ,tr: 'Ölçek' - ,zh_cn: '函数' - ,zh_tw: '函數' - ,hu: 'Mérték' - } - ,'Linear' : { - cs: 'Lineární' - ,de: 'Linear' - ,es: 'Lineal' - ,fr: 'Linéaire' - ,el: 'Γραμμική' - ,pt: 'Linear' - ,sv: 'Linjär' - ,ro: 'Liniar' - ,bg: 'Линейна' - ,hr: 'Linearno' - ,it: 'Lineare' - ,ja: '線形軸表示' - ,dk: 'Lineær' - ,fi: 'Lineaarinen' - ,nb: 'Lineær' - ,he: 'לינארי' - ,pl: 'Liniowa' - ,ru: 'Линейный' - ,sk: 'Lineárne' - ,nl: 'Lineair' - ,ko: 'Linear' - ,tr: 'Doğrusal' //çizgisel - ,zh_cn: '线性' - ,zh_tw: '線性' - ,hu: 'Lineáris' - } - ,'Logarithmic' : { - cs: 'Logaritmické' - ,de: 'Logarithmisch' - ,es: 'Logarítmica' - ,fr: 'Logarithmique' - ,el: 'Λογαριθμική' - ,pt: 'Logarítmica' - ,sv: 'Logaritmisk' - ,ro: 'Logaritmic' - ,bg: 'Логоритмична' - ,hr: 'Logaritamski' - ,it: 'Logaritmica' - ,ja: '対数軸表示' - ,dk: 'Logaritmisk' - ,fi: 'Logaritminen' - ,nb: 'Logaritmisk' - ,he: 'לוגריתמי' - ,pl: 'Logarytmiczna' - ,ru: 'Логарифмический' - ,sk: 'Logaritmické' - ,nl: 'Logaritmisch' - ,ko: 'Logarithmic' - ,tr: 'Logaritmik' - ,zh_cn: '对数' - ,zh_tw: '對數' - ,hu: 'Logaritmikus' - } - ,'Logarithmic (Dynamic)' : { - cs: 'Logaritmické (Dynamické)' - ,he: 'לוגריטמי - דינמי' - ,de: 'Logaritmisch (dynamisch)' - ,es: 'Logarítmo (Dinámico)' - ,dk: 'Logaritmisk (Dynamisk)' - ,it: 'Logaritmica (Dinamica)' - ,ja: '対数軸(動的)表示' - ,fr: 'Logarithmique (Dynamique)' - ,el: 'Λογαριθμική (Δυναμική)' - ,ro: 'Logaritmic (Dinamic)' - ,bg: 'Логоритмична (Динамична)' - ,hr: 'Logaritamski (Dinamički)' - ,nb: 'Logaritmisk (Dynamisk)' - ,fi: 'Logaritminen (Dynaaminen)' - ,sv: 'Logaritmisk (Dynamisk)' - ,pl: 'Logarytmiczna (Dynamiczna)' - ,pt: 'Logarítmica (Dinâmica)' - ,ru: 'Логарифмический (Динамический)' - ,sk: 'Logaritmické (Dynamické)' - ,nl: 'Logaritmisch (Dynamisch)' - ,ko: '다수(동적인)' - ,tr: 'Logaritmik (Dinamik)' - ,zh_cn: '对数(动态)' - ,zh_tw: '對數(動態)' - ,hu: 'Logaritmikus (Dinamikus)' - } - ,'Insulin-on-Board' : { - cs: 'IOB' - ,he: 'אינסולין בגוף' - ,de: 'Aktives Bolus-Insulin' - ,es: 'Insulina activa' - ,fr: 'Insuline à bord' - ,dk: 'Aktivt insulin (IOB)' - ,it: 'IOB-Insulina a Bordo' - ,ja: 'IOB・残存インスリン' - ,nb: 'AI' - ,el: 'Ενεργή Ινσουλίνη (IOB)' - ,ro: 'IOB-Insulină activă' - ,bg: 'Активен инсулин' - ,hr: 'Aktivni inzulin' - ,fi: 'Aktiivinen insuliini (IOB)' - ,sv: 'Aktivt insulin (IOB)' - ,pl: 'Aktywna insulina (IOB)' - ,pt: 'Insulina ativa' - ,ru: 'Активный инсулин IOB' - ,sk: 'Aktívny inzulín (IOB)' - ,nl: 'Actieve insuline (IOB)' - ,ko: 'IOB' - ,tr: 'Aktif İnsülin (IOB)' - ,zh_cn: '活性胰岛素(IOB)' - ,zh_tw: '活性胰島素(IOB)' - ,hu: 'Aktív inzulin (IOB)' - } - ,'Carbs-on-Board' : { - cs: 'COB' - ,he: 'פחמימות בגוף' - ,de: 'Aktiv wirksame Kohlenhydrate' - ,es: 'Carbohidratos activos' - ,fr: 'Glucides à bord' - ,dk: 'Aktive kulhydrater (COB)' - ,it: 'COB-Carboidrati a Bordo' - ,ja: 'COB・残存カーボ' - ,nb: 'AK' - ,el: 'Ενεργοί Υδατάνθρακες (COB)' - ,ro: 'COB-Carbohidrați activi' - ,bg: 'Активни въглехидрати' - ,hr: 'Aktivni ugljikohidrati' - ,fi: 'Aktiivinen hiilihydraatti (COB)' - ,sv: 'Aktiva kolhydrater (COB)' - ,pl: 'Aktywne wglowodany (COB)' - ,pt: 'Carboidratos ativos' - ,ru: 'Активные углеводы COB' - ,sk: 'Aktívne sacharidy (COB)' - ,nl: 'Actieve koolhydraten (COB)' - ,ko: 'COB' - ,tr: 'Aktif Karbonhidrat (COB)' - ,zh_cn: '活性碳水化合物(COB)' - ,zh_tw: '活性碳水化合物(COB)' - ,hu: 'Aktív szénhidrát (COB)' - } - ,'Bolus Wizard Preview' : { - cs: 'BWP-Náhled bolusového kalk.' - ,he: 'סקירת אשף הבולוס' - ,de: 'Bolus-Kalkulator Vorschau (BWP)' - ,es: 'Vista previa del cálculo del bolo' - ,fr: 'Prévue du Calculatuer de bolus' - ,dk: 'Bolus Wizard (BWP)' - ,it: 'BWP-Calcolatore di bolo' - ,ja: 'BWP・ボーラスウィザード参照' - ,nb: 'Boluskalkulator' - ,el: 'Εργαλείο Εκτίμησης Επάρκειας Ινσουλίνης (BWP)' - ,ro: 'BWP-Sugestie de bolusare' - ,bg: 'Болус калкулатор' - ,hr: 'Pregled bolus čarobnjaka' - ,fi: 'Aterialaskurin Esikatselu (BWP)' - ,sv: 'Boluskalkylator (BWP)' - ,pl: 'Kalkulator Bolusa (BWP)' - ,pt: 'Ajuda de bolus' - ,ru: 'Калькулятор болюса' - ,sk: 'Bolus Wizard' - ,nl: 'Bolus Wizard Preview (BWP)' - ,ko: 'Bolus 마법사 미리보기' - ,tr: 'Bolus hesaplama Sihirbazı Önizlemesi (BWP)' //İnsülin etkinlik süresi hesaplaması - ,zh_cn: '大剂量向导预览(BWP)' - ,zh_tw: '大劑量嚮導預覽(BWP)' - ,hu: 'Bolus Varázsló' - } - ,'Value Loaded' : { - cs: 'Hodnoty načteny' - ,he: 'ערך נטען' - ,de: 'Geladener Wert' - ,es: 'Valor cargado' - ,fr: 'Valeur chargée' - ,dk: 'Værdi indlæst' - ,it: 'Valori Caricati' - ,ja: '数値読み込み完了' - ,nb: 'Verdi lastet' - ,el: 'Τιμή ανακτήθηκε' - ,ro: 'Valoare încărcată' - ,bg: 'Стойност заредена' - ,hr: 'Vrijednost učitana' - ,fi: 'Arvo ladattu' - ,sv: 'Laddat värde' - ,pl: 'Wartości wczytane' - ,pt: 'Valores carregados' - ,ru: 'Величина загружена' - ,nl: 'Waarde geladen' - ,sk: 'Hodnoty načítané' - ,ko: '데이터가 로드됨' - ,tr: 'Yüklenen Değer' - ,zh_cn: '数值已读取' - ,zh_tw: '數值已讀取' - ,hu: 'Érték betöltve' - } - ,'Cannula Age' : { - cs: 'CAGE-Stáří kanyly' - ,he: 'גיל הקנולה' - ,de: 'Kanülenalter' - ,es: 'Antigüedad cánula' - ,fr: 'Age de la canule' - ,dk: 'Indstik alder (CAGE)' - ,it: 'CAGE-Cambio Ago' - ,ja: 'CAGE・カニューレ使用日数' - ,el: 'Ημέρες Χρήσης Κάνουλας (CAGE)' - ,nb: 'Nålalder' - ,ro: 'CAGE-Vechime canulă' - ,bg: 'Възраст на канюлата' - ,hr: 'Starost kanile' - ,fi: 'Kanyylin ikä (CAGE)' - ,sv: 'Kanylålder (CAGE)' - ,pl: 'Czas wkłucia (CAGE)' - ,pt: 'Idade da Cânula (ICAT)' - ,ru: 'Катетер проработал' - ,sk: 'Zavedenie kanyly (CAGE)' - ,nl: 'Canule leeftijd (CAGE)' - ,ko: '캐뉼라 사용기간' - ,tr: 'Kanül yaşı' - ,zh_cn: '管路使用时间(CAGE)' - ,zh_tw: '管路使用時間(CAGE)' - ,hu: 'Kanula élettartalma (CAGE)' - } - ,'Basal Profile' : { - cs: 'Bazál' - ,he: 'פרופיל רמה בזלית' - ,de: 'Basalraten-Profil' - ,es: 'Perfil Basal' - ,fr: 'Profil Basal' - ,dk: 'Basal profil' - ,it: 'BASAL-Profilo Basale' - ,ja: 'ベーサルプロフィール' - ,el: 'Προφίλ Βασικής Ινσουλίνης (BASAL)' - ,nb: 'Basalprofil' - ,ro: 'Profil bazală' - ,bg: 'Базален профил' - ,hr: 'Bazalni profil' - ,fi: 'Basaaliprofiili' - ,sv: 'Basalprofil' - ,pl: 'Profil dawki bazowej' - ,pt: 'Perfil de Basal' - ,ru: 'Профиль Базала' - ,sk: 'Bazál' - ,nl: 'Basaal profiel' - ,ko: 'Basal 프로파일' - ,tr: 'Bazal Profil' - ,zh_cn: '基础率配置文件' - ,zh_tw: '基礎率配置文件' - ,hu: 'Bazál profil' - } - ,'Silence for 30 minutes' : { - cs: 'Ztlumit na 30 minut' - ,he: 'השתק לשלושים דקות' - ,de: 'Stille für 30 Minuten' - ,es: 'Silenciar durante 30 minutos' - ,fr: 'Silence pendant 30 minutes' - ,el: 'Σίγαση για 30 λεπτά' - ,pt: 'Silenciar por 30 minutos' - ,ro: 'Ignoră pentru 30 minute' - ,bg: 'Заглуши за 30 минути' - ,hr: 'Tišina 30 minuta' - ,sv: 'Tyst i 30 min' - ,it: 'Silenzio per 30 minuti' - ,ja: '30分静かにする' - ,dk: 'Stilhed i 30 min' - ,fi: 'Hiljennä 30 minuutiksi' - ,nb: 'Stille i 30 min' - ,pl: 'Wycisz na 30 minut' - ,ru: 'Тишина 30 минут' - ,sk: 'Stíšiť na 30 minút' - ,nl: 'Sluimer 30 minuten' - ,ko: '30분간 무음' - ,tr: '30 dakika sessizlik' - ,zh_cn: '静音30分钟' - ,zh_tw: '靜音30分鐘' - ,hu: 'Lehalkítás 30 percre' - } - ,'Silence for 60 minutes' : { - cs: 'Ztlumit na 60 minut' - ,he: 'השתק לששים דקות' - ,de: 'Stille für 60 Minuten' - ,es: 'Silenciar durante 60 minutos' - ,fr: 'Silence pendant 60 minutes' - ,el: 'Σίγαση για 60 λεπτά' - ,pt: 'Silenciar por 60 minutos' - ,ro: 'Ignoră pentru 60 minute' - ,bg: 'Заглуши за 60 минути' - ,hr: 'Tišina 60 minuta' - ,sv: 'Tyst i 60 min' - ,it: 'Silenzio per 60 minuti' - ,ja: '60分静かにする' - ,dk: 'Stilhed i 60 min' - ,fi: 'Hiljennä tunniksi' - ,nb: 'Stille i 60 min' - ,pl: 'Wycisz na 60 minut' - ,ru: 'Тишина 60 минут' - ,sk: 'Stíšiť na 60 minút' - ,nl: 'Sluimer 60 minuten' - ,ko: '60분간 무음' - ,tr: '60 dakika sessizlik' - ,zh_cn: '静音60分钟' - ,zh_tw: '靜音60分鐘' - ,hu: 'Lehalkítás 60 percre' - } - ,'Silence for 90 minutes' : { - cs: 'Ztlumit na 90 minut' - ,he: 'השתק לתשעים דקות' - ,de: 'Stille für 90 Minuten' - ,es: 'Silenciar durante 90 minutos' - ,fr: 'Silence pendant 90 minutes' - ,el: 'Σίγαση για 90 λεπτά' - ,pt: 'Silenciar por 90 minutos' - ,ro: 'Ignoră pentru 90 minure' - ,bg: 'Заглуши за 90 минути' - ,hr: 'Tišina 90 minuta' - ,sv: 'Tyst i 90 min' - ,it: 'Silenzio per 90 minuti' - ,ja: '90分静かにする' - ,dk: 'Stilhed i 90 min' - ,fi: 'Hiljennä 1.5 tunniksi' - ,nb: 'Stille i 90 min' - ,pl: 'Wycisz na 90 minut' - ,ru: 'Тишина 90 минут' - ,sk: 'Stíšiť na 90 minút' - ,nl: 'Sluimer 90 minuten' - ,ko: '90분간 무음' - ,tr: '90 dakika sessizlik' - ,zh_cn: '静音90分钟' - ,zh_tw: '靜音90分鐘' - ,hu: 'Lehalkítás 90 percre' - } - ,'Silence for 120 minutes' : { - cs: 'Ztlumit na 120 minut' - ,he: 'השתק לשעתיים' - ,de: 'Stille für 120 Minuten' - ,es: 'Silenciar durante 120 minutos' - ,fr: 'Silence pendant 120 minutes' - ,el: 'Σίγαση για 120 λεπτά' - ,pt: 'Silenciar por 120 minutos' - ,ro: 'Ignoră pentru 120 minute' - ,bg: 'Заглуши за 120 минути' - ,hr: 'Tišina 120 minuta' - ,sv: 'Tyst i 120 min' - ,it: 'Silenzio per 120 minuti' - ,ja: '120分静かにする' - ,dk: 'Stilhed i 120 min' - ,fi: 'Hiljennä 2 tunniksi' - ,nb: 'Stile i 120 min' - ,pl: 'Wycisz na 120 minut' - ,ru: 'Тишина 120 минут' - ,sk: 'Stíšiť na 120 minút' - ,nl: 'Sluimer 2 uur' - ,ko: '120분간 무음' - ,tr: '120 dakika sessizlik' - ,zh_cn: '静音2小时' - ,zh_tw: '靜音2小時' - ,hu: 'Lehalkítás 120 percre' - } - ,'Settings' : { - cs: 'Nastavení' - ,he: 'הגדרות' - ,de: 'Einstellungen' - ,es: 'Ajustes' - ,fr: 'Paramètres' - ,el: 'Ρυθμίσεις' - ,pt: 'Ajustes' - ,sv: 'Inställningar' - ,ro: 'Setări' - ,bg: 'Настройки' - ,hr: 'Postavke' - ,it: 'Impostazioni' - ,ja: '設定' - ,dk: 'Indstillinger' - ,fi: 'Asetukset' - ,nb: 'Innstillinger' - ,pl: 'Ustawienia' - ,ru: 'Настройки' - ,sk: 'Nastavenia' - ,nl: 'Instellingen' - ,ko: '설정' - ,tr: 'Ayarlar' - ,zh_cn: '设置' - ,zh_tw: '設置' - ,hu: 'Beállítások' - } - ,'Units' : { - cs: 'Jednotky' - ,he: 'יחידות' - ,de: 'Einheiten' - ,es: 'Unidades' - ,fr: 'Unités' - ,el: 'Μονάδες' - ,pt: 'Unidades' - ,ro: 'Unități' - ,bg: 'Единици' - ,hr: 'Jedinice' - ,sv: 'Enheter' - ,it: 'Unità' - ,dk: 'Enheder' - ,fi: 'Yksikköä' - ,nb: 'Enheter' - ,pl: 'Jednostki' - ,ru: 'Единицы' - ,sk: 'Jednotky' - ,nl: 'Eenheden' - ,ko: '단위' - ,tr: 'Birim' //Birim Ünite - ,zh_cn: '计量单位' - ,zh_tw: '计量單位' - ,hu: 'Egységek' - } - ,'Date format' : { - cs: 'Formát datumu' - ,he: 'פורמט תאריך' - ,de: 'Datumsformat' - ,es: 'Formato de fecha' - ,fr: 'Format Date' - ,el: 'Προβολή Ώρας' - ,pt: 'Formato de data' - ,sv: 'Datumformat' - ,ro: 'Formatul datei' - ,bg: 'Формат на датата' - ,hr: 'Format datuma' - ,it: 'Formato data' - ,ja: '日数初期化' - ,dk: 'Dato format' - ,fi: 'Aikamuoto' - ,nb: 'Datoformat' - ,pl: 'Format daty' - ,ru: 'Формат даты' - ,sk: 'Formát času' - ,nl: 'Datum formaat' - ,ko: '날짜 형식' - ,tr: 'Veri formatı' - ,zh_cn: '时间格式' - ,zh_tw: '時間格式' - ,hu: 'Időformátum' - } - ,'12 hours' : { - cs: '12 hodin' - ,he: 'שתים עשרה שעות' - ,de: '12 Stunden' - ,es: '12 horas' - ,fr: '12 heures' - ,el: '12ωρο' - ,pt: '12 horas' - ,sv: '12-timmars' - ,ro: '12 ore' - ,bg: '12 часа' - ,hr: '12 sati' - ,it: '12 ore' - ,ja: '12時間制' - ,dk: '12 timer' - ,fi: '12 tuntia' - ,nb: '12 timer' - ,pl: '12 godzinny' - ,ru: '12 часов' - ,sk: '12 hodín' - ,nl: '12 uur' - ,ko: '12 시간' - ,tr: '12 saat' - ,zh_cn: '12小时制' - ,zh_tw: '12小時制' - ,hu: '12 óra' - } - ,'24 hours' : { - cs: '24 hodin' - ,he: 'עשרים וארבע שעות' - ,de: '24 Stunden' - ,es: '24 horas' - ,fr: '24 heures' - ,el: '24ωρο' - ,pt: '24 horas' - ,sv: '24-timmars' - ,ro: '24 ore' - ,bg: '24 часа' - ,hr: '24 sata' - ,it: '24 ore' - ,ja: '24時間制' - ,dk: '24 timer' - ,fi: '24 tuntia' - ,nb: '24 timer' - ,pl: '24 godzinny' - ,ru: '24 часа' - ,sk: '24 hodín' - ,nl: '24 uur' - ,ko: '24 시간' - ,tr: '24 saat' - ,zh_cn: '24小时制' - ,zh_tw: '24小時制' - ,hu: '24 óra' - } - ,'Log a Treatment' : { - cs: 'Záznam ošetření' - ,de: 'Behandlung eingeben' - ,es: 'Apuntar un tratamiento' - ,fr: 'Entrer un traitement' - ,el: 'Καταγραφή Ενέργειας' - ,pt: 'Registre um tratamento' - ,ro: 'Înregistrează un eveniment' - ,bg: 'Въвеждане на събитие' - ,hr: 'Evidencija tretmana' - ,sv: 'Ange händelse' - ,it: 'Somministrazioni' - ,ja: '治療を記録' - ,dk: 'Log en hændelse' - ,fi: 'Tallenna tapahtuma' - ,nb: 'Logg en hendelse' - ,he: 'הזן רשומה' - ,pl: 'Wprowadź leczenie' - ,ru: 'Записать лечение' - ,sk: 'Záznam ošetrenia' - ,nl: 'Registreer een behandeling' - ,ko: 'Treatment 로그' - ,tr: 'Tedaviyi günlüğe kaydet' - ,zh_cn: '记录操作' - ,hu: 'Kezelés bejegyzése' - } - ,'BG Check' : { - cs: 'Kontrola glykémie' - ,de: 'BG-Messung' - ,es: 'Control de glucemia' - ,fr: 'Contrôle glycémie' - ,el: 'Έλεγχος Γλυκόζης' - ,pt: 'Medida de glicemia' - ,sv: 'Blodsockerkontroll' - ,ro: 'Verificare glicemie' - ,bg: 'Проверка на КЗ' - ,hr: 'Kontrola GUK-a' - ,it: 'Controllo Glicemia' - ,ja: 'BG測定' - ,dk: 'BS kontrol' - ,fi: 'Verensokerin tarkistus' - ,nb: 'Blodsukkerkontroll' - ,he: 'בדיקת סוכר' - ,pl: 'Pomiar glikemii' - ,ru: 'Контроль ГК' - ,sk: 'Kontrola glykémie' - ,nl: 'Bloedglucose check' - ,ko: '혈당 체크' - ,tr: 'KŞ Kontol' - ,zh_cn: '测量血糖' - ,hu: 'Cukorszint ellenőrzés' - } - ,'Meal Bolus' : { - cs: 'Bolus na jídlo' - ,de: 'Mahlzeiten-Bolus' - ,es: 'Bolo de comida' - ,fr: 'Bolus repas' - ,el: 'Ινσουλίνη Γέυματος' - ,pt: 'Bolus de refeição' - ,ro: 'Bolus masă' - ,bg: 'Болус-основно хранене' - ,hr: 'Bolus za obrok' - ,sv: 'Måltidsbolus' - ,it: 'Bolo Pasto' - ,ja: '食事ボーラス' - ,dk: 'Måltidsbolus' - ,fi: 'Ruokailubolus' - ,nb: 'Måltidsbolus' - ,he: 'בולוס ארוחה' - ,pl: 'Bolus do posiłku' - ,ru: 'Болюс на еду' - ,sk: 'Bolus na jedlo' - ,nl: 'Maaltijd bolus' - ,ko: '식사 인슐린' - ,tr: 'Yemek bolus' - ,zh_cn: '正餐大剂量' - ,hu: 'Étel bólus' - } - ,'Snack Bolus' : { - cs: 'Bolus na svačinu' - ,de: 'Snack-Bolus' - ,es: 'Bolo de aperitivo' - ,fr: 'Bolus friandise' - ,el: 'Ινσουλίνη Σνακ' - ,pt: 'Bolus de lanche' - ,sv: 'Mellanmålsbolus' - ,ro: 'Bolus gustare' - ,bg: 'Болус-лека закуска' - ,hr: 'Bolus za užinu' - ,it: 'Bolo Merenda' - ,ja: '間食ボーラス' - ,dk: 'Mellemmåltidsbolus' - ,fi: 'Ruokakorjaus' - ,nb: 'Mellommåltidsbolus' - ,he: 'בולוס ארוחת ביניים' - ,pl: 'Bolus przekąskowy' - ,ru: 'Болюс на перекус' - ,sk: 'Bolus na desiatu/olovrant' - ,nl: 'Snack bolus' - ,ko: '스넥 인슐린' - ,tr: 'Aperatif (Snack) Bolus' - ,zh_cn: '加餐大剂量' - ,hu: 'Tízórai/Uzsonna bólus' - } - ,'Correction Bolus' : { - cs: 'Bolus na glykémii' - ,de: 'Korrektur-Bolus' - ,es: 'Bolo corrector' - ,fr: 'Bolus de correction' - ,el: 'Διόρθωση με Ινσουλίνη' - ,pt: 'Bolus de correção' - ,ro: 'Bolus corecție' - ,bg: 'Болус корекция' - ,hr: 'Korekcija' - ,sv: 'Korrektionsbolus' - ,it: 'Bolo Correttivo' - ,ja: '補正ボーラス' - ,dk: 'Korrektionsbolus' - ,fi: 'Korjausbolus' - ,nb: 'Korreksjonsbolus' - ,he: 'בולוס תיקון' - ,pl: 'Bolus korekcyjny' - ,ru: 'Болюс на коррекцию' - ,sk: 'Korekčný bolus' - ,nl: 'Correctie bolus' - ,ko: '수정 인슐린' - ,tr: 'Düzeltme Bolusu' - ,zh_cn: '临时大剂量' - ,hu: 'Korrekciós bólus' - } - ,'Carb Correction' : { - cs: 'Přídavek sacharidů' - ,de: 'Kohlenhydrate Korrektur' - ,es: 'Carbohidratos de corrección' - ,fr: 'Correction glucide' - ,el: 'Διόρθωση με Υδατάνθρακεςς' - ,pt: 'Correção com carboidrato' - ,ro: 'Corecție de carbohidrați' - ,bg: 'Корекция чрез въглехидрати' - ,hr: 'Bolus za hranu' - ,sv: 'Kolhydratskorrektion' - ,it: 'Carboidrati Correttivi' - ,ja: 'カーボ治療' - ,dk: 'Kulhydratskorrektion' - ,fi: 'Hiilihydraattikorjaus' - ,nb: 'Karbohydratkorrigering' - ,he: 'בולוס פחמימות' - ,pl: 'Węglowodany korekcyjne' - ,ru: 'Углеводы на коррекцию' - ,sk: 'Prídavok sacharidov' - ,nl: 'Koolhydraat correctie' - ,ko: '탄수화물 수정' - ,tr: 'Karbonhidrat Düzeltme' - ,zh_cn: '碳水修正' - ,hu: 'Szénhidrát korrekció' - } - ,'Note' : { - cs: 'Poznámka' - ,de: 'Bemerkung' - ,es: 'Nota' - ,fr: 'Note' - ,el: 'Σημείωση' - ,pt: 'Nota' - ,ro: 'Notă' - ,sv: 'Notering' - ,bg: 'Бележка' - ,hr: 'Bilješka' - ,it: 'Nota' - ,ja: 'メモ' - ,dk: 'Note' - ,fi: 'Merkintä' - ,nb: 'Notat' - ,he: 'הערה' - ,pl: 'Uwagi' - ,ru: 'Примечания' - ,sk: 'Poznámka' - ,nl: 'Notitie' - ,ko: '메모' - ,tr: 'Not' - ,zh_cn: '备忘' - ,hu: 'Jegyzet' - } - ,'Question' : { - cs: 'Otázka' - ,de: 'Frage' - ,es: 'Pregunta' - ,fr: 'Question' - ,el: 'Ερώτηση' - ,pt: 'Pergunta' - ,ro: 'Întrebare' - ,sv: 'Fråga' - ,bg: 'Въпрос' - ,hr: 'Pitanje' - ,it: 'Domanda' - ,ja: '質問' - ,dk: 'Spørgsmål' - ,fi: 'Kysymys' - ,nb: 'Spørsmål' - ,he: 'שאלה' - ,pl: 'Pytanie' - ,ru: 'Вопрос' - ,sk: 'Otázka' - ,nl: 'Vraag' - ,ko: '질문' - ,tr: 'Soru' - ,zh_cn: '问题' - ,hu: 'Kérdés' - } - ,'Exercise' : { - cs: 'Cvičení' - ,de: 'Bewegung' - ,es: 'Ejercicio' - ,fr: 'Exercice physique' - ,el: 'Άσκηση' - ,pt: 'Exercício' - ,sv: 'Aktivitet' - ,ro: 'Activitate fizică' - ,bg: 'Спорт' - ,hr: 'Aktivnost' - ,it: 'Esercizio Fisico' - ,ja: '運動' - ,dk: 'Træning' - ,fi: 'Fyysinen harjoitus' - ,nb: 'Trening' - ,he: 'פעילות גופנית' - ,pl: 'Wysiłek' - ,ru: 'Нагрузка' - ,sk: 'Cvičenie' - ,nl: 'Beweging / sport' - ,ko: '운동' - ,tr: 'Egzersiz' - ,zh_cn: '运动' - ,hu: 'Edzés' - } - ,'Pump Site Change' : { - cs: 'Výměna setu' - ,de: 'Pumpen-Katheter Wechsel' - ,es: 'Cambio de catéter' - ,fr: 'Changement de site pompe' - ,el: 'Αλλαγή σημείου αντλίας' - ,pt: 'Troca de catéter' - ,sv: 'Pump/nålbyte' - ,ro: 'Schimbare loc pompă' - ,bg: 'Смяна на сет' - ,hr: 'Promjena seta' - ,it: 'CAGE-Cambio Ago' - ,ja: 'CAGE・ポンプ注入場所変更' - ,dk: 'Skift insulin infusionssted' - ,fi: 'Kanyylin vaihto' - ,nb: 'Pumpebytte' - ,he: 'החלפת צינורית משאבה' - ,pl: 'Zmiana miejsca wkłucia pompy' - ,ru: 'Смена катетера помпы' - ,sk: 'Výmena setu' - ,nl: 'Nieuwe pomp infuus' - ,ko: '펌프 위치 변경' - ,tr: 'Pompa Kanül değişimi' - ,zh_cn: '更换胰岛素输注部位' - ,hu: 'Pumpa szett csere' - } - ,'CGM Sensor Start' : { - cs: 'Spuštění sensoru' - ,de: 'CGM Sensor Start' - ,es: 'Inicio de sensor' - ,fr: 'Démarrage senseur' - ,el: 'Εκκίνηση αισθητήρα γλυκόζης' - ,pt: 'Início de sensor' - ,sv: 'Sensorstart' - ,ro: 'Start senzor' - ,bg: 'Ре/Стартиране на сензор' - ,hr: 'Start senzora' - ,it: 'CGM Avvio sensore' - ,ja: 'CGMセンサー開始' - ,dk: 'Sensorstart' - ,fi: 'Sensorin aloitus' - ,nb: 'Sensorstart' - ,he: 'אתחול חיישן סוכר' - ,pl: 'Start nowego sensora' - ,ru: 'Старт сенсора' - ,sk: 'Spustenie senzoru' - ,nl: 'CGM Sensor start' - ,ko: 'CGM 센서 시작' - ,tr: 'CGM Sensörü Başlat' - ,zh_cn: '启动CGM(连续血糖监测)探头' - ,hu: 'CGM Szenzor Indítása' - } - ,'CGM Sensor Stop' : { - cs: 'CGM Sensor Stop' - ,de: 'CGM Sensor Stop' - ,es: 'CGM Sensor Stop' - ,fr: 'CGM Sensor Stop' - ,el: 'CGM Sensor Stop' - ,pt: 'CGM Sensor Stop' - ,sv: 'CGM Sensor Stop' - ,ro: 'CGM Sensor Stop' - ,bg: 'CGM Sensor Stop' - ,hr: 'CGM Sensor Stop' - ,it: 'CGM Sensor Stop' - ,ja: 'CGM Sensor Stop' - ,dk: 'CGM Sensor Stop' - ,fi: 'CGM Sensor Stop' - ,nb: 'CGM Sensor Stop' - ,he: 'CGM Sensor Stop' - ,pl: 'CGM Sensor Stop' - ,ru: 'Стоп сенсор' - ,sk: 'CGM Sensor Stop' - ,nl: 'CGM Sensor Stop' - ,ko: 'CGM Sensor Stop' - ,tr: 'CGM Sensor Stop' - ,zh_cn: 'CGM Sensor Stop' - ,hu: 'CGM Szenzor Leállítása' - } - ,'CGM Sensor Insert' : { - cs: 'Výměna sensoru' - ,de: 'CGM Sensor Wechsel' - ,es: 'Cambio de sensor' - ,fr: 'Changement senseur' - ,el: 'Τοποθέτηση αισθητήρα γλυκόζης' - ,pt: 'Troca de sensor' - ,sv: 'Sensorbyte' - ,ro: 'Schimbare senzor' - ,bg: 'Смяна на сензор' - ,hr: 'Promjena senzora' - ,it: 'CGM Cambio sensore' - ,ja: 'CGMセンサー挿入' - ,dk: 'Sensor ombytning' - ,fi: 'Sensorin vaihto' - ,nb: 'Sensorbytte' - ,he: 'החלפת חיישן סוכר' - ,pl: 'Zmiana sensora' - ,ru: 'Установка сенсора' - ,sk: 'Výmena senzoru' - ,nl: 'CGM sensor wissel' - ,ko: 'CGM 센서 삽입' - ,tr: 'CGM Sensor yerleştir' - ,zh_cn: '植入CGM(连续血糖监测)探头' - ,hu: 'CGM Szenzor Csere' - } - ,'Dexcom Sensor Start' : { - cs: 'Spuštění sensoru' - ,de: 'Dexcom Sensor Start' - ,es: 'Inicio de sensor Dexcom' - ,fr: 'Démarrage senseur Dexcom' - ,el: 'Εκκίνηση αισθητήρα Dexcom' - ,pt: 'Início de sensor' - ,sv: 'Dexcom sensorstart' - ,ro: 'Pornire senzor Dexcom' - ,bg: 'Ре/Стартиране на Декском сензор' - ,hr: 'Start Dexcom senzora' - ,it: 'Avvio sensore Dexcom' - ,ja: 'Dexcomセンサー開始' - ,dk: 'Dexcom sensor start' - ,fi: 'Sensorin aloitus' - ,nb: 'Dexcom sensor start' - ,he: 'אתחול חיישן סוכר של דקסקום' - ,pl: 'Start sensora DEXCOM' - ,ru: 'Старт сенсора' - ,sk: 'Spustenie senzoru DEXCOM' - ,nl: 'Dexcom sensor start' - ,ko: 'Dexcom 센서 시작' - ,tr: 'Dexcom Sensör Başlat' - ,zh_cn: '启动Dexcom探头' - ,hu: 'Dexcom Szenzor Indítása' - } - ,'Dexcom Sensor Change' : { - cs: 'Výměna sensoru' - ,de: 'Dexcom Sensor Wechsel' - ,es: 'Cambio de sensor Dexcom' - ,fr: 'Changement senseur Dexcom' - ,el: 'Αλλαγή αισθητήρα Dexcom' - ,pt: 'Troca de sensor' - ,sv: 'Dexcom sensorbyte' - ,ro: 'Schimbare senzor Dexcom' - ,bg: 'Смяна на Декском сензор' - ,hr: 'Promjena Dexcom senzora' - ,it: 'Cambio sensore Dexcom' - ,ja: 'Dexcomセンサー挿入' - ,dk: 'Dexcom sensor ombytning' - ,fi: 'Sensorin vaihto' - ,nb: 'Dexcom sensor bytte' - ,he: 'החלפת חיישן סוכר של דקסקום' - ,pl: 'Zmiana sensora DEXCOM' - ,ru: 'Замена сенсора Декском' - ,sk: 'Výmena senzoru DEXCOM' - ,nl: 'Dexcom sensor wissel' - ,ko: 'Dexcom 센서 교체' - ,tr: 'Dexcom Sensör değiştir' - ,zh_cn: '更换Dexcom探头' - ,hu: 'Dexcom Szenzor Csere' - } - ,'Insulin Cartridge Change' : { - cs: 'Výměna inzulínu' - ,de: 'Insulin Ampullenwechsel' - ,es: 'Cambio de reservorio de insulina' - ,fr: 'Changement cartouche d\'insuline' - ,el: 'Αλλαγή αμπούλας ινσουλίνης' - ,pt: 'Troca de reservatório de insulina' - ,sv: 'Insulinreservoarbyte' - ,ro: 'Schimbare cartuș insulină' - ,bg: 'Смяна на резервоар' - ,hr: 'Promjena spremnika inzulina' - ,it: 'Cambio cartuccia insulina' - ,ja: 'インスリンリザーバー交換' - ,dk: 'Skift insulin beholder' - ,fi: 'Insuliinisäiliön vaihto' - ,nb: 'Skifte insulin beholder' - ,he: 'החלפת מחסנית אינסולין' - ,pl: 'Zmiana zbiornika z insuliną' - ,ru: 'Замена картриджа инсулина' - ,sk: 'Výmena inzulínu' - ,nl: 'Insuline cartridge wissel' - ,ko: '인슐린 카트리지 교체' - ,tr: 'İnsülin rezervuar değişimi' - ,zh_cn: '更换胰岛素储液器' - ,hu: 'Inzulin Tartály Csere' - } - ,'D.A.D. Alert' : { - cs: 'D.A.D. Alert' - ,de: 'Diabeteswarnhund-Alarm' - ,es: 'Alerta de perro de alerta diabética' - ,fr: 'Wouf! Wouf! Chien d\'alerte diabète' - ,el: 'Προειδοποίηση σκύλου υποστήριξης (Diabetes Alert Dog)' - ,pt: 'Alerta de cão sentinela de diabetes' - ,sv: 'Diabeteshundlarm (Duktig vovve!)' - ,ro: 'Alertă câine de serviciu' - ,bg: 'Сигнал от обучено куче' - ,hr: 'Obavijest dijabetičkog psa' - ,it: 'Allarme D.A.D.(Diabete Alert Dog)' - ,ja: 'メディカルアラート犬(DAD)の知らせ' - ,dk: 'Vuf Vuf! (Diabeteshundealarm!)' - ,fi: 'Diabeteskoirahälytys' - ,nb: 'Diabeteshundalarm' - ,he: 'ווף! ווף! התראת גשג' - ,pl: 'Psi Alarm cukrzycowy' - ,ru: 'Сигнал служебной собаки' - ,sk: 'Upozornenie signálneho psa' - ,nl: 'Hulphond waarschuwing' - ,ko: 'D.A.D(Diabetes Alert Dog) 알림' - ,tr: 'D.A.D(Diabetes Alert Dog)' - ,zh_cn: 'D.A.D(低血糖通报犬)警告' - ,hu: 'D.A.D Figyelmeztetés' - } - ,'Glucose Reading' : { - cs: 'Hodnota glykémie' - ,de: 'Glukosemesswert' - ,es: 'Valor de glucemia' - ,fr: 'Valeur de glycémie' - ,el: 'Τιμή Γλυκόζης' - ,pt: 'Valor de glicemia' - ,sv: 'Glukosvärde' - ,ro: 'Valoare glicemie' - ,bg: 'Кръвна захар' - ,hr: 'Vrijednost GUK-a' - ,it: 'Lettura glicemie' - ,dk: 'Blodsukker aflæsning' - ,fi: 'Verensokeri' - ,nb: 'Blodsukkermåling' - ,he: 'מדידת סוכר' - ,pl: 'Odczyt glikemii' - ,ru: 'Значение ГК' - ,sk: 'Hodnota glykémie' - ,nl: 'Glucose meting' - ,ko: '혈당 읽기' - ,tr: 'Glikoz Değeri' - ,zh_cn: '血糖数值' - ,hu: 'Vércukorszint Érték' - } - ,'Measurement Method' : { - cs: 'Metoda měření' - ,de: 'Messmethode' - ,es: 'Método de medida' - ,fr: 'Méthode de mesure' - ,el: 'Μέθοδος Μέτρησης' - ,pt: 'Método de medida' - ,sv: 'Mätmetod' - ,ro: 'Metodă măsurare' - ,bg: 'Метод на измерване' - ,hr: 'Metoda mjerenja' - ,it: 'Metodo di misurazione' - ,ja: '測定方法' - ,dk: 'Målemetode' - ,fi: 'Mittaustapa' - ,nb: 'Målemetode' - ,he: 'אמצעי מדידה' - ,pl: 'Sposób pomiaru' - ,ru: 'Способ замера' - ,sk: 'Metóda merania' - ,nl: 'Meetmethode' - ,ko: '측정 방법' - ,tr: 'Ölçüm Metodu' - ,zh_cn: '测量方法' - ,hu: 'Cukorszint mérés metódusa' - } - ,'Meter' : { - cs: 'Glukoměr' - ,de: 'BZ-Messgerät' - ,fr: 'Glucomètre' - ,el: 'Μετρητής' - ,pt: 'Glicosímetro' - ,sv: 'Mätare' - ,ro: 'Glucometru' - ,es: 'Glucómetro' - ,bg: 'Глюкомер' - ,hr: 'Glukometar' - ,it: 'Glucometro' - ,ja: '血糖測定器' - ,dk: 'Blodsukkermåler' - ,fi: 'Sokerimittari' - ,nb: 'Måleapparat' - ,he: 'מד סוכר' - ,pl: 'Glukometr' - ,ru: 'Глюкометр' - ,sk: 'Glukomer' - ,nl: 'Glucosemeter' - ,ko: '혈당 측정기' - ,tr: 'Glikometre' - ,zh_cn: '血糖仪' - ,hu: 'Cukorszint mérő' - } - ,'Insulin Given' : { - cs: 'Inzulín' - ,de: 'Insulingabe' - ,es: 'Insulina' - ,fr: 'Insuline donnée' - ,el: 'Ινσουλίνη' - ,pt: 'Insulina' - ,sv: 'Insulindos' - ,ro: 'Insulină administrată' - ,bg: 'Инсулин' - ,hr: 'Količina iznulina' - ,it: 'Insulina' - ,ja: '投与されたインスリン' - ,dk: 'Insulin dosis' - ,fi: 'Insuliiniannos' - ,nb: 'Insulin' - ,he: 'אינסולין שניתן' - ,pl: 'Podana insulina' - ,ru: 'Введен инсулин' - ,sk: 'Podaný inzulín' - ,nl: 'Toegediende insuline' - ,ko: '인슐린 요구량' - ,tr: 'Verilen İnsülin' - ,zh_cn: '胰岛素输注量' - ,hu: 'Inzulin Beadva' - } - ,'Amount in grams' : { - cs: 'Množství v gramech' - ,de: 'Menge in Gramm' - ,es: 'Cantidad en gramos' - ,fr: 'Quantité en grammes' - ,el: 'Ποσότητα σε γρ' - ,pt: 'Quantidade em gramas' - ,sv: 'Antal gram' - ,ro: 'Cantitate în grame' - ,bg: 'К-во в грамове' - ,hr: 'Količina u gramima' - ,it: 'Quantità in grammi' - ,ja: 'グラム換算' - ,dk: 'Antal gram' - ,fi: 'Määrä grammoissa' - ,nb: 'Antall gram' - ,he: 'כמות בגרמים' - ,pl: 'Wartość w gramach' - ,ru: 'Количество в граммах' - ,sk: 'Množstvo v gramoch' - ,nl: 'Hoeveelheid in gram' - ,ko: '합계(grams)' - ,tr: 'Gram cinsinden miktar' - ,zh_cn: '总量(g)' - ,hu: 'Adag grammokban (g)' - } - ,'Amount in units' : { - cs: 'Množství v jednotkách' - ,de: 'Anzahl in Einheiten' - ,es: 'Cantidad en unidades' - ,fr: 'Quantité en unités' - ,el: 'Ποσότητα σε μονάδες' - ,pt: 'Quantidade em unidades' - ,ro: 'Cantitate în unități' - ,bg: 'К-во в единици' - ,hr: 'Količina u jedinicama' - ,sv: 'Antal enheter' - ,it: 'Quantità in unità' - ,ja: '単位換算' - ,dk: 'Antal enheder' - ,fi: 'Annos yksiköissä' - ,nb: 'Antall enheter' - ,he: 'כמות ביחידות' - ,pl: 'Wartość w jednostkach' - ,ru: 'Количество в ед.' - ,sk: 'Množstvo v jednotkách' - ,nl: 'Aantal in eenheden' - ,ko: '합계(units)' - ,tr: 'Birim miktarı' - ,zh_cn: '总量(U)' - ,hu: 'Adag egységekben' - } - ,'View all treatments' : { - cs: 'Zobraz všechny ošetření' - ,de: 'Zeige alle Behandlungen' - ,es: 'Visualizar todos los tratamientos' - ,fr: 'Voir tous les traitements' - ,el: 'Προβολή όλων των ενεργειών' - ,pt: 'Visualizar todos os procedimentos' - ,sv: 'Visa behandlingar' - ,ro: 'Vezi toate evenimentele' - ,bg: 'Преглед на всички събития' - ,hr: 'Prikaži sve tretmane' - ,it: 'Visualizza tutti le somministrazioni' - ,ja: '全治療内容を参照' - ,dk: 'Vis behandlinger' - ,fi: 'Katso kaikki hoitotoimenpiteet' - ,nb: 'Vis behandlinger' - ,he: 'הצג את כל הטיפולים' - ,pl: 'Pokaż całość leczenia' - ,ru: 'Показать все события' - ,sk: 'Zobraziť všetky ošetrenia' - ,nl: 'Bekijk alle behandelingen' - ,ko: '모든 treatments 보기' - ,tr: 'Tüm tedavileri görüntüle' - ,zh_cn: '查看所有操作' - ,hu: 'Összes kezelés mutatása' - } - ,'Enable Alarms' : { - cs: 'Povolit alarmy' - ,de: 'Alarme einschalten' - ,es: 'Activar las alarmas' - ,fr: 'Activer les alarmes' - ,el: 'Ενεργοποίηση όλων των ειδοποιήσεων' - ,pt: 'Ativar alarmes' - ,sv: 'Aktivera larm' - ,ro: 'Activează alarmele' - ,bg: 'Активни аларми' - ,hr: 'Aktiviraj alarme' - ,it: 'Attiva Allarme' - ,ja: 'アラームを有効にする' - ,dk: 'Aktivere alarmer' - ,fi: 'Aktivoi hälytykset' - ,nb: 'Aktiver alarmer' - ,he: 'הפעל התראות' - ,pl: 'Włącz alarmy' - ,ru: 'Активировать сигналы' - ,sk: 'Aktivovať alarmy' - ,nl: 'Alarmen aan!' - ,ko: '알람 켜기' - ,tr: 'Alarmları Etkinleştir' - ,zh_cn: '启用报警' - ,zh_tw: '啟用報警' - ,hu: 'Figyelmeztetők bekapcsolása' - } - ,'Pump Battery Change' : { - nl: 'Pompbatterij vervangen' - ,sv: 'Byte av pumpbatteri' - ,dk: 'Udskift pumpebatteri' - ,de: 'Pumpenbatterie wechseln' - ,fi: 'Pumpun patterin vaihto' - ,bg: 'Смяна на батерия на помпата' - ,hr: 'Zamjena baterije pumpe' - ,ja: 'ポンプバッテリー交換' - ,pl: 'Zmiana baterii w pompie' - ,ru: 'замена батареи помпы' - ,tr: 'Pompa pil değişimi' - ,hu: 'Pumpa elem csere' - } - ,'Pump Battery Low Alarm' : { - nl: 'Pompbatterij bijna leeg Alarm' - ,sv: 'Pumpbatteri lågt Alarm' - ,dk: 'Pumpebatteri lav Alarm' - ,de: 'Pumpenbatterie niedrig Alarm' - ,fi: 'Varoitus! Pumpun patteri loppumassa' - ,bg: 'Аларма за слаба батерия на помпата' - ,hr: 'Upozorenje slabe baterije pumpe' - ,ja: 'ポンプバッテリーが低下' - ,pl: 'Alarm! Niski poziom baterii w pompie' - ,ru: 'Внимание! низкий заряд батареи помпы' - ,tr: 'Pompa Düşük pil alarmı' - ,hu: 'Alacsony pumpa töltöttség figyelmeztetés' - } - ,'Pump Battery change overdue!' : { // batteryage.js - nl: 'Pompbatterij moet vervangen worden!' - ,sv: 'Pumpbatteriet måste bytas!' - ,dk: 'Pumpebatteri skal skiftes!' - ,de: 'Pumpenbatterie Wechsel überfällig!' - ,fi: 'Pumpun patterin vaihto myöhässä!' - ,bg: 'Смяната на батерията на помпата - наложителна' - ,hr: 'Prošao je rok za zamjenu baterije pumpe!' - ,ja: 'ポンプバッテリー交換期限切れてます!' - , pl: 'Bateria pompy musi być wymieniona!' - ,ru: 'пропущен срок замены батареи!' - ,tr: 'Pompa pil değişimi gecikti!' - ,hu: 'A pumpa eleme cserére szorul' - } - ,'When enabled an alarm may sound.' : { - cs: 'Při povoleném alarmu zní zvuk' - ,de: 'Sofern eingeschaltet ertönt ein Alarm' - ,es: 'Cuando estén activas, una alarma podrá sonar' - ,fr: 'Si activée, un alarme peut sonner.' - ,el: 'Όταν ενεργοποιηθεί, μία ηχητική ειδοποίηση ενδέχεται να ακουστεί' - ,pt: 'Quando ativado, um alarme poderá soar' - ,ro: 'Când este activ, poate suna o alarmă.' - ,sv: 'När markerad är ljudlarm aktivt' - ,bg: 'Когато е активирано, алармата ще има звук' - ,hr: 'Kad je aktiviran, alarm se može oglasiti' - ,it: 'Quando si attiva un allarme acustico.' - ,ja: '有効にすればアラームが鳴動します。' - ,dk: 'Når aktiveret kan alarm lyde' - ,fi: 'Aktivointi mahdollistaa äänihälytykset' - ,nb: 'Når aktivert er alarmer aktive' - ,he: 'כשמופעל התראות יכולות להישמע.' - ,pl: 'Sygnalizacja dzwiękowa przy włączonym alarmie' - ,ru: 'При активации может звучать сигнал' - ,sk: 'Pri aktivovanom alarme znie zvuk ' - ,nl: 'Als ingeschakeld kan alarm klinken' - ,ko: '알림을 활성화 하면 알람이 울립니다.' - ,tr: 'Etkinleştirilirse, alarm çalar.' - ,zh_cn: '启用后可发出声音报警' - ,zh_tw: '啟用後可發出聲音報警' - ,hu: 'Bekapcsoláskor hang figyelmeztetés várható' - } - ,'Urgent High Alarm' : { - cs: 'Urgentní vysoká glykémie' - ,de: 'Achtung Hoch Alarm' - ,es: 'Alarma de glucemia alta urgente' - ,fr: 'Alarme hyperglycémie urgente' - ,el: 'Ειδοποίηση επικίνδυνα υψηλής γλυκόζης' - ,pt: 'URGENTE: Alarme de glicemia alta' - ,sv: 'Brådskande högt larmvärde' - ,ro: 'Alarmă urgentă hiper' - ,bg: 'Много висока КЗ' - ,hr: 'Hitni alarm za hiper' - ,it: 'Urgente:Glicemia Alta' - ,ja: '緊急高血糖アラーム' - ,dk: 'Kritisk høj grænse overskredet' - ,fi: 'Kriittinen korkea' - ,nb: 'Kritisk høy alarm' - ,he: 'התראת גבוה דחופה' - ,pl: 'Uwaga: Alarm hiperglikemii' - ,ru: 'Внимание: высокая гликемия ' - ,sk: 'Naliehavý alarm vysokej glykémie' - ,nl: 'Urgent Alarm Hoge BG' - ,ko: '긴급 고혈당 알람' - ,tr: 'Acil Yüksek Alarm' //Dikkat yüksek alarm - ,zh_cn: '血糖过高报警' - ,zh_tw: '血糖過高報警' - ,hu: 'Nagyon magas cukorszint figyelmeztetés' - } - ,'High Alarm' : { - cs: 'Vysoká glykémie' - ,de: 'Hoch Alarm' - ,es: 'Alarma de glucemia alta' - ,fr: 'Alarme hyperglycémie' - ,el: 'Ειδοποίηση υψηλής γλυκόζης' - ,pt: 'Alarme de glicemia alta' - ,sv: 'Högt larmvärde' - ,ro: 'Alarmă hiper' - ,bg: 'Висока КЗ' - ,hr: 'Alarm za hiper' - ,it: 'Glicemia Alta' - ,ja: '高血糖アラーム' - ,dk: 'Høj grænse overskredet' - ,fi: 'Korkea verensokeri' - ,nb: 'Høy alarm' - ,he: 'התראת גבוה' - ,pl: 'Alarm hiperglikemii' - ,ru: 'Высокая гликемия' - ,sk: 'Alarm vysokej glykémie' - ,nl: 'Alarm hoge BG' - ,ko: '고혈당 알람' - ,tr: 'Yüksek Alarmı' - ,zh_cn: '高血糖报警' - ,zh_tw: '高血糖報警' - ,hu: 'Magas cukorszint fegyelmeztetés' - } - ,'Low Alarm' : { - cs: 'Nízká glykémie' - ,de: 'Niedrig Alarm' - ,es: 'Alarma de glucemia baja' - ,fr: 'Alarme hypoglycémie' - ,el: 'Ειδοποίηση χαμηλής γλυκόζης' - ,pt: 'Alarme de glicemia baixa' - ,sv: 'Lågt larmvärde' - ,ro: 'Alarmă hipo' - ,bg: 'Ниска КЗ' - ,hr: 'Alarm za hipo' - ,it: 'Glicemia bassa' - ,ja: '低血糖アラーム' - ,dk: 'Lav grænse overskredet' - ,fi: 'Matala verensokeri' - ,nb: 'Lav alarm' - ,he: 'התראת נמוך' - ,pl: 'Alarm hipoglikemii' - ,ru: 'Низкая гликемия' - ,sk: 'Alarm nízkej glykémie' - ,nl: 'Alarm lage BG' - ,ko: '저혈당 알람' - ,tr: 'Düşük Alarmı' - ,zh_cn: '低血糖报警' - ,zh_tw: '低血糖報警' - ,hu: 'Alacsony cukorszint figyelmeztetés' - } - ,'Urgent Low Alarm' : { - cs: 'Urgentní nízká glykémie' - ,de: 'Achtung Niedrig Alarm' - ,es: 'Alarma de glucemia baja urgente' - ,fr: 'Alarme hypoglycémie urgente' - ,el: 'Ειδοποίηση επικίνδυνα χαμηλής γλυκόζης' - ,pt: 'URGENTE: Alarme de glicemia baixa' - ,sv: 'Brådskande lågt larmvärde' - ,ro: 'Alarmă urgentă hipo' - ,bg: 'Много ниска КЗ' - ,hr: 'Hitni alarm za hipo' - ,it: 'Urgente:Glicemia Bassa' - ,ja: '緊急低血糖アラーム' - ,dk: 'Advarsel: Lav' - ,fi: 'Kriittinen matala' - ,nb: 'Kritisk lav alarm' - ,he: 'התראת נמוך דחופה' - ,pl: 'Uwaga: Alarm hipoglikemii' - ,ru: 'Внимание: низкая гликемия' - ,sk: 'Naliehavý alarm nízkej glykémie' - ,nl: 'Urgent Alarm lage BG' - ,ko: '긴급 저혈당 알람' - ,tr: 'Acil Düşük Alarmı' - ,zh_cn: '血糖过低报警' - ,zh_tw: '血糖過低報警' - ,hu: 'Nagyon alacsony cukorszint figyelmeztetés' - } - ,'Stale Data: Warn' : { - cs: 'Zastaralá data' - ,he: 'אזהרה-נתונים ישנים' - ,de: 'Warnung: Daten nicht mehr gültig' - ,es: 'Datos obsoletos: aviso' - ,fr: 'Données échues: avertissement' - ,el: 'Έλλειψη πρόσφατων δεδομένων: Προειδοποίηση' - ,pt: 'Dados antigos: alerta' - ,sv: 'Förfluten data: Varning!' - ,ro: 'Date învechite: alertă' - ,bg: 'Стари данни' - ,hr: 'Pažnja: Stari podaci' - ,it: 'Notifica Dati' - ,ja: '注意:古いデータ' - ,dk: 'Advarsel: Gamle data' - ,fi: 'Vanhat tiedot: varoitus' - ,nb: 'Advarsel: Gamle data' - ,pl: 'Ostrzeżenie: brak odczytów' - ,ru: 'Предупреждение: старые данные' - ,sk: 'Varovanie: Zastaralé dáta' - ,nl: 'Waarschuwing Oude gegevens na' - ,ko: '손실 데이터 : 경고' - ,tr: 'Eski Veri: Uyarı' //Uyarı: veri artık geçerli değil - ,zh_cn: '数据过期:提醒' - ,zh_tw: '數據過期:提醒' - ,hu: 'Figyelmeztetés: Az adatok öregnek tűnnek' - } - ,'Stale Data: Urgent' : { - cs: 'Zastaralá data urgentní' - ,he: 'דחוף-נתונים ישנים' - ,de: 'Achtung: Daten nicht mehr gültig' - ,es: 'Datos obsoletos: Urgente' - ,fr: 'Données échues: avertissement urgent' - ,el: 'Έλλειψη πρόσφατων δεδομένων: ΕΠΕΙΓΟΝ' - ,pt: 'Dados antigos: Urgente' - ,sv: 'Brådskande varning, inaktuell data' - ,ro: 'Date învechite: urgent' - ,bg: 'Много стари данни' - ,hr: 'Hitno: Stari podaci' - ,it: 'Notifica:Urgente' - ,ja: '緊急:古いデータ' - ,dk: 'Kritisk: Gamle data' - ,fi: 'Vanhat tiedot: hälytys' - ,nb: 'Advarsel: Veldig gamle data' - ,pl: 'Uwaga: brak odczytów' - ,ru: 'Внимание: старые данные' - ,sk: 'Naliehavé: Zastaralé dáta' - ,nl: 'Urgente Waarschuwing Oude gegevens na' - ,ko: '손실 데이터 : 긴급' - ,tr: 'Eski Veri: Acil' - ,zh_cn: '数据过期:警告' - ,zh_tw: '數據過期:警告' - ,hu: 'Figyelmeztetés: Az adatok nagyon öregnek tűnnek' - } - ,'mins' : { - cs: 'min' - ,he: 'דקות' - ,de: 'Minuten' - ,es: 'min' - ,fr: 'mins' - ,el: 'λεπτά' - ,pt: 'min' - ,sv: 'min' - ,ro: 'min' - ,bg: 'мин' - ,hr: 'min' - ,it: 'min' - ,ja: '分' - ,dk: 'min' - ,fi: 'minuuttia' - ,nb: 'min' - ,pl: 'min' - ,ru: 'мин' - ,sk: 'min.' - ,nl: 'minuten' - ,ko: '분' - ,tr: 'dk.' - ,zh_cn: '分' - ,zh_tw: '分' - ,hu: 'perc' - } - ,'Night Mode' : { - cs: 'Noční mód' - ,he: 'מצב לילה' - ,de: 'Nacht Modus' - ,es: 'Modo nocturno' - ,fr: 'Mode nocturne' - ,el: 'Λειτουργία Νυκτός' - ,pt: 'Modo noturno' - ,sv: 'Nattläge' - ,ro: 'Mod nocturn' - ,bg: 'Нощен режим' - ,hr: 'Noćni način' - ,it: 'Modalità Notte' - ,ja: '夜間モード' - ,dk: 'Nat tilstand' - ,fi: 'Yömoodi' - ,nb: 'Nattmodus' - ,pl: 'Tryb nocny' - ,ru: 'Режим: ночь' - ,sk: 'Nočný mód' - ,nl: 'Nachtstand' - ,ko: '나이트 모드' - ,tr: 'Gece Modu' - ,zh_cn: '夜间模式' - ,zh_tw: '夜間模式' - ,hu: 'Éjjeli üzemmód' - } - ,'When enabled the page will be dimmed from 10pm - 6am.' : { - cs: 'Když je povoleno, obrazovka je ztlumena 22:00 - 6:00' - ,he: 'במצב זה המסך יעומעם בין השעות עשר בלילה לשש בבוקר' - ,de: 'Sofern aktiviert wird die Anzeige von 22h - 6h gedimmt' - ,es: 'Cuando esté activo, el brillo de la página bajará de 10pm a 6am.' - ,fr: 'Si activé, la page sera assombrie de 22:00 à 6:00' - ,el: 'Όταν ενεργοποιηθεί, η φωτεινότητα της οθόνης θα μειωθεί μεταξύ 22.00 - 6.00' - ,pt: 'Se ativado, a página será escurecida entre 22h e 6h' - ,sv: 'När aktiverad dimmas sidan mellan 22:00 - 06:00' - ,ro: 'La activare va scădea iluminarea între 22 și 6' - ,bg: 'Когато е активирано, страницата ще е затъмнена от 22-06ч' - ,hr: 'Kad je uključen, stranica će biti zatamnjena od 22-06' - ,it: 'Attivandola, la pagina sarà oscurata dalle 22:00-06:00.' - ,ja: '有効にすると、ページは 夜22時から 朝6時まで単色表示になります。' - ,dk: 'Når aktiveret vil denne side nedtones fra 22:00-6:00' - ,fi: 'Aktivoituna sivu himmenee kello 22 ja 06 välillä' - ,nb: 'Når aktivert vil denne siden nedtones fra 22:00-06:00' - ,pl: 'Po włączeniu strona będzie przyciemniona od 22 wieczorem do 6 nad ranem.' - ,ru: 'При активации страница затемнена с 22.00 до 06.00' - ,sk: 'Keď je povolený, obrazovka bude stlmená od 22:00 do 6:00.' - ,nl: 'Scherm dimmen tussen 22:00 en 06:00' - ,ko: '페이지를 켜면 오후 10시 부터 오전 6시까지 비활성화 될 것이다.' - ,tr: 'Etkinleştirildiğinde, ekran akşam 22\'den sabah 6\'ya kadar kararır.' - ,zh_cn: '启用后将在夜间22点至早晨6点降低页面亮度' - ,zh_tw: '啟用後將在夜間22點至早晨6點降低頁面亮度' - ,hu: 'Ezt bekapcsolva a képernyő halványabb lesz 22-től 6-ig' - } - ,'Enable' : { - cs: 'Povoleno' - ,he: 'אפשר' - ,de: 'Aktivieren' - ,es: 'Activar' - ,fr: 'Activer' - ,el: 'Ενεργοποίηση' - ,pt: 'Ativar' - ,sv: 'Aktivera' - ,ro: 'Activează' - ,bg: 'Активен' - ,hr: 'Aktiviraj' - ,it: 'Permettere' - ,ja: '有効' - ,dk: 'Aktivere' - ,fi: 'Aktivoi' - ,nb: 'Aktiver' - ,pl: 'Włącz' - ,ru: 'Активировать' - ,sk: 'Povoliť' - ,nl: 'Activeren' - ,ko: '활성화' - ,tr: 'Etkinleştir' - ,zh_cn: '启用' - ,zh_tw: '啟用' - ,hu: 'Engedélyezve' - } - ,'Show Raw BG Data' : { - cs: 'Zobraz RAW data' - ,he: 'הראה את רמת הסוכר ללא עיבוד' - ,de: 'Zeige Roh-BG Daten' - ,es: 'Mostrat datos en glucemia en crudo' - ,fr: 'Montrer les données BG brutes' - ,el: 'Εμφάνιση αυτούσιων δεδομένων αισθητήρα' - ,pt: 'Mostrar dados de glicemia não processados' - ,sv: 'Visa RAW-data' - ,ro: 'Afișează date primare glicemie' - ,bg: 'Показвай RAW данни' - ,hr: 'Prikazuj sirove podatke o GUK-u' - ,it: 'Mostra dati Raw BG' - ,ja: '素のBGデータを表示する' - ,dk: 'Vis rå BS data' - ,fi: 'Näytä raaka VS tieto' - ,nb: 'Vis rådata' - ,pl: 'Wyświetl surowe dane BG' - ,ru: 'Показывать необработанные данные RAW' - ,sk: 'Zobraziť RAW dáta' - ,nl: 'Laat ruwe data zien' - ,ko: 'Raw 혈당 데이터 보기' - ,tr: 'Ham KŞ verilerini göster' - ,zh_cn: '显示原始血糖数据' - ,zh_tw: '顯示原始血糖數據' - ,hu: 'Nyers BG adatok mutatása' - } - ,'Never' : { - cs: 'Nikdy' - ,he: 'אף פעם' - ,de: 'Nie' - ,es: 'Nunca' - ,fr: 'Jamais' - ,el: 'Ποτέ' - ,pt: 'Nunca' - ,sv: 'Aldrig' - ,ro: 'Niciodată' - ,bg: 'Никога' - ,hr: 'Nikad' - ,it: 'Mai' - ,ja: '決して' - ,dk: 'Aldrig' - ,fi: 'Ei koskaan' - ,nb: 'Aldri' - ,pl: 'Nigdy' - ,ru: 'Никогда' - ,sk: 'Nikdy' - ,nl: 'Nooit' - ,ko: '보지 않기' - ,tr: 'Hiçbir zaman' //Asla - ,zh_cn: '不显示' - ,zh_tw: '不顯示' - ,hu: 'Soha' - } - ,'Always' : { - cs: 'Vždy' - ,he: 'תמיד' - ,de: 'Immer' - ,es: 'Siempre' - ,fr: 'Toujours' - ,el: 'Πάντα' - ,pt: 'Sempre' - ,sv: 'Alltid' - ,ro: 'Întotdeauna' - ,bg: 'Винаги' - ,hr: 'Uvijek' - ,it: 'Sempre' - ,ja: 'いつも' - ,dk: 'Altid' - ,fi: 'Aina' - ,nb: 'Alltid' - ,pl: 'Zawsze' - ,ru: 'Всегда' - ,sk: 'Vždy' - ,nl: 'Altijd' - ,ko: '항상' - ,tr: 'Her zaman' - ,zh_cn: '一直显示' - ,zh_tw: '一直顯示' - ,hu: 'Mindíg' - } - ,'When there is noise' : { - cs: 'Při šumu' - ,he: 'בנוכחות רעש' - ,de: 'Sofern Rauschen vorhanden' - ,es: 'Cuando hay ruido' - ,fr: 'Quand il y a du bruit' - ,el: 'Όταν υπάρχει θόρυβος' - ,pt: 'Quando houver ruído' - ,sv: 'Endast vid brus' - ,ro: 'Atunci când este diferență' - ,bg: 'Когато има шум' - ,hr: 'Kad postoji šum' - ,it: 'Quando vi è rumore' - ,ja: '測定不良があった時' - ,dk: 'Når der er støj' - ,fi: 'Signaalihäiriöiden yhteydessä' - ,nb: 'Når det er støy' - ,pl: 'Gdy sygnał jest zakłócony' - ,ru: 'Когда есть шумовой фон' - ,sk: 'Pri šume' - ,nl: 'Bij ruis' - ,ko: '노이즈가 있을 때' - ,tr: 'Gürültü olduğunda' - ,zh_cn: '当有噪声时显示' - ,zh_tw: '當有噪聲時顯示' - ,hu: 'Ha zavar van:' - } - ,'When enabled small white dots will be displayed for raw BG data' : { - cs: 'Když je povoleno, malé tečky budou zobrazeny pro RAW data' - ,he: 'במצב זה,רמות סוכר לפני עיבוד יוצגו כנקודות לבנות קטנות' - ,de: 'Bei Aktivierung erscheinen kleine weiße Punkte für Roh-BG Daten' - ,es: 'Cuando esté activo, pequeños puntos blancos mostrarán los datos en crudo' - ,el: 'Όταν εργοποιηθεί, μικρές λευκές κουκίδες θα αναπαριστούν τα αυτούσια δεδομένα του αισθητήρα' - ,fr: 'Si activé, des points blancs représenteront les données brutes' - ,pt: 'Se ativado, pontos brancos representarão os dados de glicemia não processados' - ,sv: 'När aktiverad visar de vita punkterna RAW-blodglukosevärden' - ,ro: 'La activare vor apărea puncte albe reprezentând citirea brută a glicemiei' - ,bg: 'Когато е активно, малки бели точки ще показват RAW данните' - ,hr: 'Kad je omogućeno, male bijele točkice će prikazivati sirove podatke o GUK-u.' - ,it: 'Quando lo abiliti, visualizzerai piccoli puntini bianchi (raw BG data)' - ,ja: '有効にすると、小さい白ドットが素のBGデータ用に表示されます' - ,dk: 'Ved aktivering vil små hvide prikker blive vist for rå BG tal' - ,fi: 'Aktivoituna raaka VS tieto piirtyy aikajanalle valkoisina pisteinä' - ,nb: 'Ved aktivering vil små hvite prikker bli vist for rå BG tall' - ,pl: 'Gdy funkcja jest włączona, małe białe kropki pojawią się na surowych danych BG' - ,ru: 'При активации данные RAW будут видны как мелкие белые точки' - ,sk: 'Keď je povolené, malé bodky budú zobrazovať RAW dáta.' - ,nl: 'Indien geactiveerd is ruwe data zichtbaar als witte punten' - ,ko: '활성화 하면 작은 흰점들이 raw 혈당 데이터를 표시하게 될 것이다.' - ,tr: 'Etkinleştirildiğinde, ham KŞ verileri için küçük beyaz noktalar görüntülenecektir.' - ,zh_cn: '启用后将使用小白点标注原始血糖数据' - ,zh_tw: '啟用後將使用小白點標註原始血糖數據' - ,hu: 'Bekapcsolasnál kis fehért pontok fogják jelezni a nyers BG adatokat' - } - ,'Custom Title' : { - cs: 'Vlastní název stránky' - ,he: 'כותרת מותאמת אישית' - ,de: 'Benutzerdefinierter Titel' - ,es: 'Título personalizado' - ,fr: 'Titre personalisé' - ,el: 'Επιθυμητός τίτλος σελίδας' - ,pt: 'Customizar Título' - ,sv: 'Egen titel' - ,ro: 'Titlu particularizat' - ,bg: 'Име на страницата' - ,hr: 'Vlastiti naziv' - ,it: 'Titolo personalizzato' - ,ja: 'カスタムタイトル' - ,dk: 'Valgfri titel' - ,fi: 'Omavalintainen otsikko' - ,nb: 'Egen tittel' - ,pl: 'Własny tytuł strony' - ,ru: 'Произвольное название' - ,sk: 'Vlastný názov stránky' - ,ko: '사용자 정의 제목' - ,nl: 'Eigen titel' - ,tr: 'Özel Başlık' - ,zh_cn: '自定义标题' - ,zh_tw: '自定義標題' - ,hu: 'Saját Cím' - } - ,'Theme' : { - cs: 'Téma' - ,he: 'נושא' - ,de: 'Aussehen' - ,es: 'Tema' - ,fr: 'Thème' - ,el: 'Θέμα απεικόνισης' - ,pt: 'tema' - ,ro: 'Temă' - ,bg: 'Тема' - ,hr: 'Tema' - ,sv: 'Tema' - ,it: 'Tema' - ,ja: 'テーマ' - ,dk: 'Tema' - ,fi: 'Teema' - ,nb: 'Tema' - ,pl: 'Wygląd' - ,ru: 'Тема' - ,sk: 'Vzhľad' - ,nl: 'Thema' - ,ko: '테마' - ,tr: 'Tema' - ,zh_cn: '主题' - ,zh_tw: '主題' - ,hu: 'Téma' - } - ,'Default' : { - cs: 'Výchozí' - ,he: 'בְּרִירַת מֶחדָל' - ,de: 'Standard' - ,es: 'Por defecto' - ,fr: 'Par défaut' - ,el: 'Κύριο' - ,pt: 'Padrão' - ,sv: 'Standard' - ,ro: 'Implicită' - ,bg: 'Черно-бяла' - ,hr: 'Default' - ,it: 'Predefinito' - ,ja: 'デフォルト' - ,dk: 'Standard' - ,fi: 'Oletus' - ,nb: 'Standard' - ,pl: 'Domyślny' - ,ru: 'По умолчанию' - ,sk: 'Predvolený' - ,nl: 'Standaard' - ,ko: '초기설정' - ,tr: 'Varsayılan' - ,zh_cn: '默认' - ,zh_tw: '默認' - ,hu: 'Alap' - } - ,'Colors' : { - cs: 'Barevné' - ,he: 'צבעים' - ,de: 'Farben' - ,es: 'Colores' - ,fr: 'Couleurs' - ,el: 'Χρώματα' - ,pt: 'Colorido' - ,sv: 'Färg' - ,ro: 'Colorată' - ,bg: 'Цветна' - ,hr: 'Boje' - ,it: 'Colori' - ,ja: '色付き' - ,dk: 'Farver' - ,fi: 'Värit' - ,nb: 'Farger' - ,pl: 'Kolorowy' - ,ru: 'Цветная' - ,sk: 'Farebný' - ,nl: 'Kleuren' - ,ko: '색상' - ,tr: 'Renkler' - ,zh_cn: '彩色' - ,zh_tw: '彩色' - ,hu: 'Színek' - } - ,'Colorblind-friendly colors' : { - cs: 'Pro barvoslepé' - ,he: 'צבעים ידידותיים לעוורי צבעים' - ,de: 'Farbenblind-freundliche Darstellung' - ,es: 'Colores para Daltónicos' - ,fr: 'Couleurs pour daltoniens' - ,dk: 'Farveblindvenlige farver' - ,nb: 'Fargeblindvennlige farger' - ,el: 'Χρώματα συμβατά για αχρωματοψία' - ,pt: 'Cores para daltônicos' - ,sv: 'Högkontrastfärger' - ,sk: 'Farby vhodné pre farboslepých' - ,nl: 'Kleurenblind vriendelijke kleuren' - ,ro: 'Culori pentru cei cu deficiențe de vedere' - ,ko: '색맹 친화적인 색상' - ,bg: 'Цветове за далтонисти' - ,hr: 'Boje za daltoniste' - ,it: 'Colori per daltonici' - ,ja: '色覚異常の方向けの色' - ,fi: 'Värisokeille sopivat värit' - ,zh_cn: '色盲患者可辨识的颜色' - ,zh_tw: '色盲患者可辨識的顏色' - ,pl: 'Kolory dla niedowidzących' - ,tr: 'Renk körü dostu görünüm' - ,ru: 'Цветовая гамма для людей с нарушениями восприятия цвета' - ,hu: 'Beállítás színvakok számára' - } - ,'Reset, and use defaults' : { - cs: 'Vymaž a nastav výchozí hodnoty' - ,he: 'איפוס ושימוש ברירות מחדל' - ,de: 'Zurücksetzen und Voreinstellungen verwenden' - ,es: 'Inicializar y utilizar los valores por defecto' - ,fr: 'Remettre à zéro et utiliser les valeurs par défaut' - ,el: 'Αρχικοποίηση και χρήση των προκαθορισμένων ρυθμίσεων' - ,pt: 'Zerar e usar padrões' - ,sv: 'Återställ standardvärden' - ,ro: 'Resetează și folosește setările implicite' - ,bg: 'Нулирай и използвай стандартните настройки' - ,hr: 'Resetiraj i koristi defaultne vrijednosti' - ,it: 'Resetta le impostazioni predefinite' - ,ja: 'リセットしてデフォルト設定を使用' - ,dk: 'Returner til standardopsætning' - ,fi: 'Palauta oletusasetukset' - ,nb: 'Gjenopprett standardinnstillinger' - ,pl: 'Reset i powrót do domyślnych ustawień' - ,ru: 'Сбросить и использовать настройки по умолчанию' - ,sk: 'Resetovať do pôvodného nastavenia' - ,nl: 'Herstel standaard waardes' - ,ko: '초기화 그리고 초기설정으로 사용' - ,tr: 'Sıfırla ve varsayılanları kullan' - ,zh_cn: '使用默认值重置' - ,zh_tw: '使用默認值重置' - ,hu: 'Visszaállítás a kiinduló állapotba' - } - ,'Calibrations' : { - cs: 'Kalibrace' - ,he: 'כיולים' - ,de: 'Kalibrierung' - ,es: 'Calibraciones' - ,fr: 'Calibration' - ,el: 'Βαθμονόμηση' - ,pt: 'Calibraçôes' - ,sv: 'Kalibreringar' - ,ro: 'Calibrări' - ,bg: 'Калибрации' - ,hr: 'Kalibriranje' - ,it: 'Calibrazioni' - ,ja: '較生' - ,dk: 'Kalibrering' - ,fi: 'Kalibraatiot' - ,nb: 'Kalibreringer' - ,pl: 'Kalibracja' - ,ru: 'Калибровки' - ,sk: 'Kalibrácie' - ,nl: 'Kalibraties' - ,ko: '보정' - ,tr: 'Kalibrasyon' - ,zh_cn: '校准' - ,hu: 'Kalibráció' - } - ,'Alarm Test / Smartphone Enable' : { - cs: 'Test alarmu' - ,he: 'אזעקה מבחן / הפעל טלפון' - ,de: 'Alarm Test / Smartphone aktivieren' - ,es: 'Test de Alarma / Activar teléfono' - ,fr: 'Test alarme / Activer Smartphone' - ,el: 'Τεστ ηχητικής ειδοποίησης' - ,pt: 'Testar Alarme / Ativar Smartphone' - ,sv: 'Testa alarm / Aktivera Smatphone' - ,ro: 'Teste alarme / Activează pe smartphone' - ,bg: 'Тестване на алармата / Активно за мобилни телефони' - ,hr: 'Alarm test / Aktiviraj smartphone' - ,it: 'Test Allarme / Abilita Smartphone' - ,ja: 'アラームテスト/スマートフォンを有効にする' - ,dk: 'Alarm test / Smartphone aktiveret' - ,fi: 'Hälytyksien testaus / Älypuhelimien äänet päälle' - ,nb: 'Alarmtest / Smartphone aktivering' - ,pl: 'Test alarmu / Smartphone aktywny' - ,ru: 'Проверка зв. уведомлений / смартфон активен' - ,sk: 'Test alarmu' - ,nl: 'Alarm test / activeer Smartphone' - ,ko: '알람 테스트 / 스마트폰 활성화' - ,tr: 'Alarm Testi / Akıllı Telefon için Etkin' - ,zh_cn: '报警测试/智能手机启用' - ,zh_tw: '報警測試/智能手機啟用' - ,hu: 'Figyelmeztetés teszt / Mobiltelefon aktiválása' - } - ,'Bolus Wizard' : { - cs: 'Bolusový kalkulátor' - ,he: 'אשף בולוס' - ,de: 'Bolus-Kalkulator' - ,es: 'Calculo Bolos sugeridos' - ,fr: 'Calculateur de bolus' - ,el: 'Εργαλείο υπολογισμού ινσουλίνης' - ,pt: 'Ajuda de bolus' - ,sv: 'Boluskalkylator' - ,ro: 'Calculator sugestie bolus' - ,bg: 'Болус съветник ' - ,hr: 'Bolus wizard' - ,it: 'BW-Calcolatore di Bolo' - ,ja: 'ボーラスウィザード' - ,dk: 'Bolusberegner' - ,fi: 'Annosopas' - ,nb: 'Boluskalkulator' - ,pl: 'Kalkulator bolusa' - ,ru: 'калькулятор болюса' - ,sk: 'Bolusový kalkulátor' - ,nl: 'Bolus calculator' - ,ko: 'Bolus 마법사' - ,tr: 'Bolus Hesaplayıcısı' - ,zh_cn: '大剂量向导' - ,zh_tw: '大劑量嚮導' - ,hu: 'Bólus Varázsló' - } - ,'in the future' : { - cs: 'v budoucnosti' - ,he: 'בעתיד' - ,de: 'in der Zukunft' - ,es: 'en el futuro' - ,fr: 'dans le futur' - ,el: 'στο μέλλον' - ,pt: 'no futuro' - ,sv: 'framtida' - ,ro: 'în viitor' - ,bg: 'в бъдещето' - ,hr: 'U budućnosti' - ,it: 'nel futuro' - ,ja: '先の時間' - ,dk: 'i fremtiden' - ,fi: 'tulevaisuudessa' - ,nb: 'fremtiden' - ,pl: 'w przyszłości' - ,ru: 'в будущем' - ,sk: 'v budúcnosti' - ,nl: 'In de toekomst' - ,ko: '미래' - ,tr: 'gelecekte' - ,zh_cn: '在未来' - ,zh_tw: '在未來' - ,hu: 'a jövőben' - } - ,'time ago' : { - cs: 'min zpět' - ,he: 'פעם' - ,de: 'seit Kurzem' - ,es: 'tiempo atrás' - ,fr: 'temps avant' - ,el: 'χρόνο πριν' - ,pt: 'tempo atrás' - ,sv: 'förfluten tid' - ,ro: 'în trecut' - ,bg: 'преди време' - ,hr: 'prije' - ,it: 'tempo fa' - ,ja: '時間前' - ,dk: 'tid siden' - ,fi: 'aikaa sitten' - ,nb: 'tid siden' - ,pl: 'czas temu' - ,ru: 'времени назад' - ,sk: 'čas pred' - ,nl: 'tijd geleden' - ,ko: '시간 전' - ,tr: 'süre önce' //yakın zamanda - ,zh_cn: '在过去' - ,zh_tw: '在過去' - ,hu: 'idő elött' - } - ,'hr ago' : { - cs: 'hod zpět' - ,he: 'לפני שעה' - ,de: 'Stunde her' - ,es: 'hr atrás' - ,fr: 'hr avant' - ,el: 'ώρα πριν' - ,pt: 'h atrás' - ,sv: 'timmar sedan' - ,ro: 'oră în trecut' - ,bg: 'час по-рано' - ,hr: 'sat unazad' - ,it: 'ora fa' - ,ja: '時間前' - ,dk: 'time siden' - ,fi: 'tunti sitten' - ,nb: 'Time siden' - ,pl: 'godzina temu' - ,ru: 'час назад' - ,sk: 'hod. pred' - ,nl: 'uur geleden' - ,ko: '시간 전' - ,tr: 'saat önce' - ,zh_cn: '小时前' - ,zh_tw: '小時前' - ,hu: 'óra elött' - } - ,'hrs ago' : { - cs: 'hod zpět' - ,he: 'לפני שעות' - ,de: 'Stunden her' - ,es: 'hrs atrás' - ,fr: 'hrs avant' - ,el: 'ώρες πριν' - ,pt: 'h atrás' - ,sv: 'Timmar sedan' - ,ro: 'h în trecut' - ,bg: 'часа по-рано' - ,hr: 'sati unazad' - ,it: 'ore fa' - ,ja: '時間前' - ,dk: 'timer siden' - ,fi: 'tuntia sitten' - ,nb: 'Timer siden' - ,pl: 'godzin temu' - ,ru: 'часов назад' - ,sk: 'hod. pred' - ,nl: 'uren geleden' - ,ko: '시간 전' - ,tr: 'saat önce' - ,zh_cn: '小时前' - ,zh_tw: '小時前' - ,hu: 'órája' - } - ,'min ago' : { - cs: 'min zpět' - ,he: 'לפני דקה' - ,de: 'Minute her' - ,es: 'min atrás' - ,fr: 'min avant' - ,el: 'λεπτό πριν' - ,pt: 'min atrás' - ,sv: 'minut sedan' - ,ro: 'minut în trecut' - ,bg: 'мин. по-рано' - ,hr: 'minuta unazad' - ,it: 'minuto fa' - ,ja: '分前' - ,dk: 'minut siden' - ,fi: 'minuutti sitten' - ,nb: 'minutter siden' - ,pl: 'minuta temu' - ,ru: 'мин назад' - ,sk: 'min. pred' - ,nl: 'minuut geleden' - ,ko: '분 전' - ,tr: 'dk. önce' - ,zh_cn: '分钟前' - ,zh_tw: '分鐘前' - ,hu: 'perce' - } - ,'mins ago' : { - cs: 'min zpět' - ,he: 'לפני דקות' - ,de: 'Minuten her' - ,es: 'mins atrás' - ,fr: 'mins avant' - ,el: 'λεπτά πριν' - ,pt: 'min atrás' - ,sv: 'minuter sedan' - ,ro: 'minute în trecut' - ,bg: 'мин. по-рано' - ,hr: 'minuta unazad' - ,it: 'minuti fa' - ,ja: '分前' - ,dk: 'minutter siden' - ,fi: 'minuuttia sitten' - ,nb: 'minutter siden' - ,pl: 'minut temu' - ,ru: 'минут назад' - ,sk: 'min. pred' - ,nl: 'minuten geleden' - ,ko: '분 전' - ,tr: 'dakika önce' - ,zh_cn: '分钟前' - ,zh_tw: '分鐘前' - ,hu: 'perce' - } - ,'day ago' : { - cs: 'den zpět' - ,he: 'לפני יום' - ,de: 'Tag her' - ,es: 'día atrás' - ,fr: 'jour avant' - ,el: 'ημέρα πριν' - ,pt: 'dia atrás' - ,sv: 'dag sedan' - ,ro: 'zi în trecut' - ,bg: 'ден по-рано' - ,hr: 'dan unazad' - ,it: 'Giorno fa' - ,ja: '日前' - ,dk: 'dag siden' - ,fi: 'päivä sitten' - ,nb: 'dag siden' - ,pl: 'dzień temu' - ,ru: 'дн назад' - ,sk: 'deň pred' - ,nl: 'dag geleden' - ,ko: '일 전' - ,tr: 'gün önce' - ,zh_cn: '天前' - ,zh_tw: '天前' - ,hu: 'napja' - } - ,'days ago' : { - cs: 'dnů zpět' - ,he: 'לפני ימים' - ,de: 'Tage her' - ,es: 'días atrás' - ,fr: 'jours avant' - ,el: 'ημέρες πριν' - ,pt: 'dias atrás' - ,sv: 'dagar sedan' - ,ro: 'zile în trecut' - ,bg: 'дни по-рано' - ,hr: 'dana unazad' - ,it: 'giorni fa' - ,ja: '日前' - ,dk: 'dage siden' - ,fi: 'päivää sitten' - ,nb: 'dager siden' - ,pl: 'dni temu' - ,ru: 'дней назад' - ,sk: 'dni pred' - ,nl: 'dagen geleden' - ,ko: '일 전' - ,tr: 'günler önce' - ,zh_cn: '天前' - ,zh_tw: '天前' - ,hu: 'napja' - } - ,'long ago' : { - cs: 'dlouho zpět' - ,he: 'לפני הרבה זמן' - ,de: 'lange her' - ,es: 'Hace mucho tiempo' - ,fr: 'il y a longtemps' - ,el: 'χρόνο πριν' - ,pt: 'muito tempo atrás' - ,sv: 'länge sedan' - ,ro: 'timp în trecut' - ,bg: 'преди много време' - ,hr: 'prije dosta vremena' - ,it: 'Molto tempo fa' - ,ja: '前の期間' - ,dk: 'længe siden' - ,fi: 'Pitkän aikaa sitten' - ,nb: 'lenge siden' - ,pl: 'dawno' - ,ru: 'давно' - ,sk: 'veľmi dávno' - ,nl: 'lang geleden' - ,ko: '기간 전' - ,tr: 'uzun zaman önce' - ,zh_cn: '很长时间前' - ,zh_tw: '很長時間前' - ,hu: 'nagyon régen' - } - ,'Clean' : { - cs: 'Čistý' - ,he: 'נקה' - ,de: 'Löschen' - ,es: 'Limpio' - ,fr: 'Propre' - ,el: 'Καθαρισμός' - ,pt: 'Limpo' - ,sv: 'Rent' - ,ro: 'Curat' - ,bg: 'Чист' - ,hr: 'Čisto' - ,it: 'Pulito' - ,ja: 'なし' - ,dk: 'Rent' - ,fi: 'Puhdas' - ,nb: 'Rent' - ,pl: 'Czysty' - ,ru: 'Чисто' - ,sk: 'Čistý' - ,nl: 'Schoon' - ,ko: 'Clean' - ,tr: 'Temiz' - ,zh_cn: '无' - ,zh_tw: '無' - ,hu: 'Tiszta' - } - ,'Light' : { - cs: 'Lehký' - ,he: 'אוֹר' - ,de: 'Leicht' - ,es: 'Ligero' - ,fr: 'Léger' - ,el: 'Ελαφρά' - ,pt: 'Leve' - ,sv: 'Lätt' - ,ro: 'Ușor' - ,bg: 'Лек' - ,hr: 'Lagano' - ,it: 'Leggero' - ,ja: '軽い' - ,dk: 'Let' - ,fi: 'Kevyt' - ,nb: 'Lite' - ,pl: 'Niski' - ,ru: 'Слабый' - ,sk: 'Nízky' - ,nl: 'Licht' - ,ko: 'Light' - ,tr: 'Kolay' - ,zh_cn: '轻度' - ,zh_tw: '輕度' - ,hu: 'Könnyű' - } - ,'Medium' : { - cs: 'Střední' - ,he: 'בינוני' - ,de: 'Mittel' - ,es: 'Medio' - ,fr: 'Moyen' - ,el: 'Μέση' - ,pt: 'Médio' - ,sv: 'Måttligt' - ,ro: 'Mediu' - ,bg: 'Среден' - ,hr: 'Srednje' - ,it: 'Medio' - ,ja: '中間' - ,dk: 'Middel' - ,fi: 'Keskiverto' - ,nb: 'Middels' - ,pl: 'Średni' - ,ru: 'Средний' - ,sk: 'Stredný' - ,nl: 'Gemiddeld' - ,ko: '보통' - ,tr: 'Orta' - ,zh_cn: '中度' - ,zh_tw: '中度' - ,hu: 'Közepes' - } - ,'Heavy' : { - cs: 'Velký' - ,de: 'Stark' - ,es: 'Fuerte' - ,fr: 'Important' - ,el: 'Βαριά' - ,pt: 'Pesado' - ,sv: 'Rikligt' - ,ro: 'Puternic' - ,bg: 'Висок' - ,hr: 'Teško' - ,it: 'Pesante' - ,ja: '重たい' - ,dk: 'Meget' - ,fi: 'Raskas' - ,nb: 'Mye' - ,pl: 'Wysoki' - ,ru: 'Сильный' - ,sk: 'Veľký' - ,nl: 'Zwaar' - ,ko: '심한' - ,tr: 'Ağır' - ,zh_cn: '重度' - ,zh_tw: '嚴重' - ,he: 'כבד' - ,hu: 'Nehéz' - } - ,'Treatment type' : { - cs: 'Typ ošetření' - ,de: 'Behandlungstyp' - ,es: 'Tipo de tratamiento' - ,fr: 'Type de traitement' - ,el: 'Τύπος Ενέργειας' - ,pt: 'Tipo de tratamento' - ,sv: 'Behandlingstyp' - ,ro: 'Tip tratament' - ,bg: 'Вид събитие' - ,hr: 'Vrsta tretmana' - ,it: 'Somministrazione' - ,ja: '治療タイプ' - ,dk: 'Behandlingstype' - ,fi: 'Hoidon tyyppi' - ,nb: 'Behandlingstype' - ,pl: 'Rodzaj leczenia' - ,ru: 'Вид события' - ,sk: 'Typ ošetrenia' - ,nl: 'Type behandeling' - ,ko: 'Treatment 타입' - ,tr: 'Tedavi tipi' - ,zh_cn: '操作类型' - ,he: 'סוג הטיפול' - ,hu: 'Kezelés típusa' - } - ,'Raw BG' : { - cs: 'Glykémie z RAW dat' - ,de: 'Roh-BG' - ,es: 'Glucemia en crudo' - ,fr: 'Glycémie brute' - ,el: 'Αυτούσιες τιμές γλυκόζης' - ,pt: 'Glicemia sem processamento' - ,sv: 'RAW-BS' - ,ro: 'Citire brută a glicemiei' - ,bg: 'Непреработена КЗ' - ,hr: 'Sirovi podaci o GUK-u' - ,it: 'Raw BG' - ,dk: 'Råt BS' - ,fi: 'Raaka VS' - ,nb: 'RAW-BS' - ,pl: 'Raw BG' - ,ru: 'необработанные данные ГК' - ,sk: 'RAW dáta glykémie' - ,nl: 'Ruwe BG data' - ,ko: 'Raw 혈당' - ,tr: 'Ham KŞ' - ,zh_cn: '原始血糖' - ,hu: 'Nyers BG' - } - ,'Device' : { - cs: 'Zařízení' - ,de: 'Gerät' - ,es: 'Dispositivo' - ,fr: 'Appareil' - ,el: 'Συσκευή' - ,pt: 'Dispositivo' - ,ro: 'Dispozitiv' - ,bg: 'Устройство' - ,hr: 'Uređaj' - ,sv: 'Enhet' - ,it: 'Dispositivo' - ,ja: '機器' - ,dk: 'Enhed' - ,fi: 'Laite' - ,nb: 'Enhet' - ,pl: 'Urządzenie' - ,ru: 'Устройство' - ,sk: 'Zariadenie' - ,nl: 'Apparaat' - ,ko: '기기' - ,tr: 'Cihaz' - ,zh_cn: '设备' - ,he: 'התקן' - ,hu: 'Berendezés' - } - ,'Noise' : { - cs: 'Šum' - ,he: 'רַעַשׁ' - ,de: 'Rauschen' - ,es: 'Ruido' - ,fr: 'Bruit' - ,el: 'Θόρυβος' - ,pt: 'Ruído' - ,sv: 'Brus' - ,ro: 'Zgomot' - ,bg: 'Шум' - ,hr: 'Šum' - ,it: 'Rumore' - ,ja: '測定不良' - ,dk: 'Støj' - ,fi: 'Kohina' - ,nb: 'Støy' - ,pl: 'Szum' - ,ru: 'Шумовой фон' - ,sk: 'Šum' - ,nl: 'Ruis' - ,ko: '노이즈' - ,tr: 'parazit' // gürültü - ,zh_cn: '噪声' - ,hu: 'Zavar' - } - ,'Calibration' : { - cs: 'Kalibrace' - ,he: 'כִּיוּל' - ,de: 'Kalibrierung' - ,es: 'Calibración' - ,fr: 'Calibration' - ,el: 'Βαθμονόμηση' - ,pt: 'Calibração' - ,sv: 'Kalibrering' - ,ro: 'Calibrare' - ,bg: 'Калибрация' - ,hr: 'Kalibriranje' - ,it: 'Calibratura' - ,ja: '較正' - ,dk: 'Kalibrering' - ,fi: 'Kalibraatio' - ,nb: 'Kalibrering' - ,pl: 'Kalibracja' - ,ru: 'Калибровка' - ,sk: 'Kalibrácia' - ,nl: 'Kalibratie' - ,ko: '보정' - ,tr: 'Kalibrasyon' - ,zh_cn: '校准' - ,hu: 'Kalibráció' - } - ,'Show Plugins' : { - cs: 'Zobrazuj pluginy' - ,he: 'הצג תוספים' - ,de: 'Zeige Plugins' - ,es: 'Mostrar Plugins' - ,fr: 'Montrer Plugins' - ,el: 'Πρόσθετα Συστήματος' - ,pt: 'Mostrar les Plugins' - ,ro: 'Arată plugin-urile' - ,bg: 'Покажи добавките' - ,hr: 'Prikaži plugine' - ,sv: 'Visa tillägg' - ,it: 'Mostra Plugin' - ,ja: 'プラグイン表示' - ,dk: 'Vis plugins' - ,fi: 'Näytä pluginit' - ,nb: 'Vis plugins' - ,pl: 'Pokaż rozszerzenia' - ,ru: 'Показать расширения' - ,sk: 'Zobraziť pluginy' - ,nl: 'Laat Plug-Ins zien' - ,ko: '플러그인 보기' - ,tr: 'Eklentileri Göster' - ,zh_cn: '校准' - ,hu: 'Mutasd a kiegészítőket' - } - ,'About' : { - cs: 'O aplikaci' - ,he: 'על אודות' - ,de: 'Über' - ,es: 'Sobre' - ,fr: 'À propos de' - ,el: 'Σχετικά' - ,pt: 'Sobre' - ,ro: 'Despre' - ,bg: 'Относно' - ,hr: 'O aplikaciji' - ,sv: 'Om' - ,it: 'Informazioni' - ,ja: '約' - ,dk: 'Om' - ,fi: 'Nightscoutista' - ,nb: 'Om' - ,pl: 'O aplikacji' - ,ru: 'О приложении' - ,sk: 'O aplikácii' - ,nl: 'Over' - ,ko: '정보' - ,tr: 'Hakkında' - ,zh_cn: '关于' - ,zh_tw: '關於' - ,hu: 'Az aplikációról' - } - ,'Value in' : { - cs: 'Hodnota v' - ,he: 'ערך' - ,de: 'Wert in' - ,es: 'Valor en' - ,fr: 'Valeur en' - ,el: 'Τιμή' - ,pt: 'Valor em' - ,ro: 'Valoare în' - ,bg: 'Стойност в' - ,hr: 'Vrijednost u' - ,sv: 'Värde om' - ,it: 'Valore in' - ,ja: '数値' - ,dk: 'Værdi i' - ,fi: 'Arvo yksiköissä' - ,nb: 'Verdi i' - ,pl: 'Wartości w' - ,ru: 'Значения в' - ,sk: 'Hodnota v' - ,nl: 'Waarde in' - ,ko: '값' - ,tr: 'Değer cinsinden' - ,zh_cn: '数值' - ,hu: 'Érték' - } - ,'Carb Time' : { - cs: 'Čas jídla' - ,de: 'Kohlenhydrat-Zeit' - ,es: 'Momento de la ingesta' - ,fr: 'Moment de l\'ingestion de Glucides' - ,el: 'Στιγμή χορηγησης υδ/κων' - ,pt: 'Hora do carboidrato' - ,ro: 'Ora carbohidrați' - ,bg: 'Ядене след' - ,hr: 'Vrijeme unosa UGH' - ,sv: 'Kolhydratstid' - ,it: 'Tempo' - ,ja: 'カーボ時間' - ,dk: 'Kulhydratstid' - ,fi: 'Syöntiaika' - ,nb: 'Karbohydrattid' - ,he: 'זמן פחמימה' - ,pl: 'Czas posiłku' - ,ru: 'Время приема углеводов' - ,sk: 'Čas jedla' - ,nl: 'Koolhydraten tijd' - ,ko: '탄수화물 시간' - ,tr: 'Karbonhidratların alım zamanı' - ,zh_cn: '数值' - ,hu: 'Étkezés ideje' - } - ,'Language' : { - cs: 'Jazyk' - ,he: 'שפה' - ,de: 'Sprache' - ,es: 'Lenguaje' - ,fr: 'Langue' - ,dk: 'Sprog' - ,sv: 'Språk' - ,nb: 'Språk' - ,el: 'Γλώσσα' - ,fi: 'Kieli' - ,pt: 'Língua' - ,ro: 'Limba' - ,bg: 'Език' - ,hr: 'Jezik' - ,pl: 'Język' - ,it: 'Lingua' - ,ja: '言語' - ,ru: 'Язык' - ,sk: 'Jazyk' - ,nl: 'Taal' - ,ko: '언어' - ,tr: 'Dil' - ,zh_cn: '语言' - ,zh_tw: '語言' - ,hu: 'Nyelv' - } - ,'Add new' : { - cs: 'Přidat nový' - ,he: 'הוסף חדש' - ,de: 'Neu hinzufügen' - ,es: 'Añadir nuevo' - ,fr: 'Ajouter nouveau' - ,dk: 'Tilføj ny' - ,sv: 'Lägg till ny' - ,ro: 'Adaugă nou' - ,el: 'Προσθήκη' - ,bg: 'Добави нов' - ,hr: 'Dodaj novi' - ,nb: 'Legg til ny' - ,fi: 'Lisää uusi' - ,pl: 'Dodaj nowy' - ,pt: 'Adicionar novo' - ,ru: 'Добавить новый' - ,sk: 'Pridať nový' - ,nl: 'Voeg toe' - ,ko: '새입력' - ,it: 'Aggiungi nuovo' - ,ja: '新たに加える' - ,tr: 'Yeni ekle' - ,zh_cn: '新增' - ,hu: 'Új hozzáadása' - } - ,'g' : { // grams shortcut - cs: 'g' - ,he: 'גרמים' - ,de: 'g' - ,es: 'gr' - ,fr: 'g' - ,dk: 'g' - ,sv: 'g' - ,ro: 'g' - ,bg: 'гр' - ,hr: 'g' - ,nb: 'g' - ,fi: 'g' - ,pl: 'g' - ,pt: 'g' - ,ru: 'г' - ,sk: 'g' - ,nl: 'g' - ,ko: 'g' - ,it: 'g' - ,ja: 'g' - ,tr: 'g' - ,zh_cn: '克' - ,zh_tw: '克' - ,hu: 'g' - } - ,'ml' : { // milliliters shortcut - cs: 'ml' - ,he: 'מיליטרים' - ,de: 'ml' - ,es: 'ml' - ,fr: 'ml' - ,dk: 'ml' - ,sv: 'ml' - ,ro: 'ml' - ,bg: 'мл' - ,hr: 'ml' - ,nb: 'ml' - ,fi: 'ml' - ,pl: 'ml' - ,pt: 'mL' - ,ru: 'мл' - ,sk: 'ml' - ,nl: 'ml' - ,ko: 'ml' - ,it: 'ml' - ,ja: 'ml' - ,tr: 'ml' - ,zh_cn: '毫升' - ,zh_tw: '克' - ,hu: 'ml' - } - ,'pcs' : { // pieces shortcut - cs: 'ks' - ,he: 'יחידות' - ,de: 'Stk.' - ,es: 'pcs' - ,fr: 'pcs' - ,dk: 'stk' - ,sv: 'st' - ,ro: 'buc' - ,bg: 'бр' - ,hr: 'kom' - ,nb: 'stk' - ,fi: 'kpl' - ,pl: 'cz.' - ,pt: 'pcs' - ,ru: 'шт' - ,sk: 'ks' - ,nl: 'stk' - ,ko: '조각 바로 가기(pieces shortcut)' - ,it: 'pz' - ,ja: 'pcs' - ,tr: 'parça' - ,zh_cn: '件' - ,zh_tw: '件' - ,hu: 'db' - } - ,'Drag&drop food here' : { - cs: 'Sem táhni & pusť jídlo' - ,he: 'גרור ושחרר אוכל כאן' - ,de: 'Mahlzeit hierher verschieben' - ,es: 'Arrastre y suelte aquí alimentos' - ,fr: 'Glisser et déposer repas ici ' - ,dk: 'Træk og slip mad her' - ,sv: 'Dra&Släpp mat här' - ,ro: 'Drag&drop aliment aici' - ,el: 'Σύρετε εδώ φαγητό' - ,bg: 'Хвани и премести храна тук' - ,hr: 'Privuci hranu ovdje' - ,nb: 'Dra og slipp mat her' - ,fi: 'Pudota ruoka tähän' - ,pl: 'Tutaj przesuń/upuść jedzenie' - ,pt: 'Arraste e coloque alimentos aqui' - ,ru: 'Перетащите еду сюда' - ,sk: 'Potiahni a pusti jedlo sem' - ,ko: '음식을 여기에 드래그&드랍 해주세요.' - ,it: 'Trascina&rilascia cibo qui' - ,tr: 'Yiyecekleri buraya sürükle bırak' - ,zh_cn: '拖放食物到这' - ,nl: 'Maaltijd naar hier verplaatsen' - ,hu: 'Húzd ide és ereszd el az ételt' - } - ,'Care Portal' : { - cs: 'Portál ošetření' - ,he: 'פורטל טיפולים' - ,sv: 'Care Portal' - ,fr: 'Care Portal' - ,it: 'Somministrazioni' - ,de: 'Behandlungs-Portal' - ,es: 'Portal cuidador' - ,dk: 'Omsorgsportal' - ,ro: 'Care Portal' - ,bg: 'Въвеждане на данни' - ,hr: 'Care Portal' - ,nb: 'Omsorgsportal' - ,fi: 'Hoidot' - ,pl: 'Care Portal' - ,pt: 'Care Portal' - ,ru: 'Портал лечения' - ,sk: 'Portál starostlivosti' - ,nl: 'Zorgportaal' - ,ko: 'Care Portal' - ,tr: 'Care Portal' - ,zh_cn: '服务面板' - ,zh_tw: '服務面板' - ,hu: 'Care portál' - } - ,'Medium/Unknown' : { // GI of food - cs: 'Střední/Neznámá' - ,he: 'בינוני/לא ידוע' - ,sv: 'Medium/Okänt' - ,de: 'Mittel/Unbekannt' - ,es: 'Medio/Desconocido' - ,fr: 'Moyen/Inconnu' - ,dk: 'Medium/Ukendt' - ,ro: 'Mediu/Necunoscut' - ,el: 'Μέσος/Άγνωστος' - ,bg: 'Среден/неизвестен' - ,hr: 'Srednji/Nepoznat' - ,nb: 'Medium/ukjent' - ,fi: 'Keskiarvo/Ei tiedossa' - ,pl: 'Średni/nieznany' - ,pt: 'Médio/Desconhecido' - ,ru: 'Средний/Неизвестный' - ,sk: 'Stredný/Neznámi' - ,nl: 'Medium/Onbekend' - ,ko: '보통/알려지지 않은' - ,it: 'Media/Sconosciuto' - ,tr: 'Orta/Bilinmeyen' - ,zh_cn: '中等/不知道' - ,hu: 'Átlagos/Ismeretlen' - } - ,'IN THE FUTURE' : { - cs: 'V BUDOUCNOSTI' - ,he: 'בעתיד' - ,fr: 'dans le futur' - ,sv: 'Framtida' - ,ro: 'ÎN VIITOR' - ,de: 'IN DER ZUKUNFT' - ,es: 'EN EL FUTURO' - ,dk: 'I fremtiden' - ,el: 'ΣΤΟ ΜΕΛΛΟΝ' - ,bg: 'В БЪДЕШЕТО' - ,hr: 'U BUDUĆNOSTI' - ,nb: 'I fremtiden' - ,fi: 'TULEVAISUUDESSA' - ,pl: 'W PRZYSZŁOŚCI' - ,pt: 'NO FUTURO' - ,ru: 'В БУДУЩЕМ' - ,sk: 'V BUDÚCNOSTI' - ,nl: 'IN DE TOEKOMST' - ,ko: '미래' - ,it: 'NEL FUTURO' - ,tr: 'GELECEKTE' - ,zh_cn: '在未来' - ,hu: 'A JÖVŐBEN' - } - ,'Update' : { // Update button - cs: 'Aktualizovat' - ,he: 'עדכן' - ,de: 'Aktualisieren' - ,es: 'Actualizar' - ,dk: 'Opdater' - ,sv: 'Uppdatera' - ,fr: 'Mise à jour' - ,nb: 'Oppdater' - ,pt: 'Atualizar' - ,el: 'Ενημέρωση' - ,ro: 'Actualizare' - ,bg: 'Актуализирай' - ,hr: 'Osvježi' - ,it: 'Aggiornamento' - ,pl: 'Aktualizacja' - ,fi: 'Tallenna' - ,ru: 'Обновить' - ,sk: 'Aktualizovať' - ,nl: 'Update' - ,ko: '업데이트' - ,tr: 'Güncelleştirme' - ,zh_cn: '更新认证状态' - ,zh_tw: '更新認證狀態' - ,hu: 'Frissítés' - } - ,'Order' : { - cs: 'Pořadí' - ,he: 'סֵדֶר' - ,de: 'Reihenfolge' - ,es: 'Ordenar' - ,fr: 'Mise en ordre' - ,dk: 'Sorter' - ,sv: 'Sortering' - ,nb: 'Sortering' - ,el: 'Σειρά κατάταξης' - ,ro: 'Sortare' - ,bg: 'Ред' - ,hr: 'Sortiranje' - ,it: 'Ordina' - ,pl: 'Kolejność' - ,pt: 'Ordenar' - ,fi: 'Järjestys' - ,ru: 'Сортировать' - ,sk: 'Usporiadať' - ,nl: 'Sortering' - ,ko: '순서' - ,tr: 'Sıra' - ,zh_cn: '排序' - ,hu: 'Sorrend' - } - ,'oldest on top' : { - cs: 'nejstarší nahoře' - ,he: 'העתיק ביותר למעלה' - ,de: 'älteste oben' - ,es: 'Más antiguo arriba' - ,fr: 'Plus vieux en tête de liste' - ,dk: 'ældste først' - ,sv: 'Äldst först' - ,nb: 'Eldste først' - ,el: 'τα παλαιότερα πρώτα' - ,ro: 'mai vechi primele' - ,bg: 'Старите най-отгоре' - ,hr: 'najstarije na vrhu' - ,it: 'più vecchio in alto' - ,pl: 'Najstarszy na górze' - ,pt: 'mais antigos no topo' - ,fi: 'vanhin ylhäällä' - ,ru: 'Старые наверху' - ,sk: 'najstaršie hore' - ,nl: 'Oudste boven' - ,ko: '오래된 것 부터' - ,tr: 'en eski üste' - ,zh_cn: '按时间升序排列' - ,hu: 'legöregebb a telejére' - } - ,'newest on top' : { - cs: 'nejnovější nahoře' - ,he: 'החדש ביותר למעלה' - ,sv: 'Nyast först' - ,de: 'neueste oben' - ,es: 'Más nuevo arriba' - ,fr: 'Nouveaux en tête de liste' - ,dk: 'nyeste først' - ,nb: 'Nyeste først' - ,el: 'τα νεότερα πρώτα' - ,ro: 'mai noi primele' - ,bg: 'Новите най-отгоре' - ,hr: 'najnovije na vrhu' - ,it: 'più recente in alto' - ,pl: 'Najnowszy na górze' - ,pt: 'Mais recentes no topo' - ,fi: 'uusin ylhäällä' - ,ru: 'Новые наверху' - ,sk: 'najnovšie hore' - ,nl: 'Nieuwste boven' - ,ko: '새로운 것 부터' - ,tr: 'en yeni üste' - ,zh_cn: '按时间降序排列' - ,hu: 'legújabb a tetejére' - } - ,'All sensor events' : { - cs: 'Všechny události sensoru' - ,he: 'כל האירועים חיישן' - ,sv: 'Alla sensorhändelser' - ,dk: 'Alle sensorhændelser' - ,nb: 'Alle sensorhendelser' - ,de: 'Alle Sensor-Ereignisse' - ,es: 'Todos los eventos del sensor' - ,fr: 'Tous les événement senseur' - ,dl: 'Alle sensor begivenheder' - ,el: 'Όλα τα συμβάντα του αισθητήρα' - ,ro: 'Evenimente legate de senzor' - ,bg: 'Всички събития от сензора' - ,hr: 'Svi događaji senzora' - ,it: 'Tutti gli eventi del sensore' - ,fi: 'Kaikki sensorin tapahtumat' - ,pl: 'Wszystkie zdarzenia sensora' - ,pt: 'Todos os eventos de sensor' - ,ru: 'Все события сенсора' - ,sk: 'Všetky udalosti senzoru' - ,nl: 'Alle sensor gegevens' - ,ko: '모든 센서 이벤트' - ,tr: 'Tüm sensör olayları' - ,zh_cn: '所有探头事件' - ,hu: 'Az összes szenzor esemény' - } - ,'Remove future items from mongo database' : { - cs: 'Odebrání položek v budoucnosti z Mongo databáze' - ,he: 'הסרת פריטים עתידיים ממסד הנתונים מונגו' - ,nb: 'Fjern fremtidige elementer fra mongo database' - ,fr: 'Effacer les éléments futurs de la base de données mongo' - ,el: 'Αφαίρεση μελλοντικών εγγραφών από τη βάση δεδομένων' - ,de: 'Entferne zukünftige Objekte aus Mongo-Datenbank' - ,es: 'Remover elementos futuros desde basedatos Mongo' - ,dk: 'Fjern fremtidige værdier fra mongo databasen' - ,ro: 'Șterge date din viitor din baza de date mongo' - ,sv: 'Ta bort framtida händelser från mongodatabasen' - ,bg: 'Премахни бъдещите точки от Монго базата с данни' - ,hr: 'Obriši buduće zapise iz baze podataka' - ,it: 'Rimuovere gli oggetti dal database di mongo in futuro' - ,fi: 'Poista tapahtumat mongo-tietokannasta' - ,pl: 'Usuń przyszłe/błędne wpisy z bazy mongo' - ,pt: 'Remover itens futuro da base de dados mongo' - ,ru: 'Удалить будущие данные из базы Монго' - ,sk: 'Odobrať budúce položky z Mongo databázy' - ,nl: 'Verwijder items die in de toekomst liggen uit database' - ,ko: 'mongo DB에서 미래 항목들을 지우세요.' - ,tr: 'Gelecekteki öğeleri mongo veritabanından kaldır' - ,zh_cn: '从数据库中清除所有未来条目' - ,zh_tw: '從數據庫中清除所有未來條目' - ,hu: 'Töröld az összes jövőben lévő adatot az adatbázisból' - } - ,'Find and remove treatments in the future' : { - cs: 'Najít a odstranit záznamy ošetření v budoucnosti' - ,he:'מצא ולהסיר טיפולים בעתיד' - ,nb: 'Finn og fjern fremtidige behandlinger' - ,fr: 'Chercher et effacer les élément dont la date est dans le futur' - ,el: 'Εύρεση και αφαίρεση μελλοντικών ενεργειών από τη βάση δεδομένων' - ,de: 'Finde und entferne zukünftige Behandlungen' - ,es: 'Encontrar y eliminar tratamientos futuros' - ,dk: 'Find og fjern fremtidige behandlinger' - ,ro: 'Caută și elimină tratamente din viitor' - ,sv: 'Hitta och ta bort framtida behandlingar' - ,bg: 'Намери и премахни събития в бъдещето' - ,hr: 'Nađi i obriši tretmane u budućnosti' - ,it: 'Individuare e rimuovere le somministrazioni in futuro' - ,fi: 'Etsi ja poista tapahtumat joiden aikamerkintä on tulevaisuudessa' - ,pt: 'Encontrar e remover tratamentos futuros' - ,pl: 'Znajdź i usuń przyszłe/błędne zabiegi' - ,ru: 'Найти и удалить будущие назначения' - ,sk: 'Nájsť a odstrániť záznamy ošetrenia v budúcnosti' - ,nl: 'Zoek en verwijder behandelingen met datum in de toekomst' - ,ko: '미래에 treatments를 검색하고 지우세요.' - ,tr: 'Gelecekte tedavileri bulun ve kaldır' - ,zh_cn: '查找并清除所有未来的操作' - ,zh_tw: '查找並清除所有未來的操作' - ,hu: 'Töröld az összes kezelést a jövőben az adatbázisból' - } - ,'This task find and remove treatments in the future.' : { - cs: 'Tento úkol najde a odstraní ošetření v budoucnosti.' - ,he: 'משימה זו למצוא ולהסיר טיפולים בעתיד' - ,nb: 'Finn og fjern fremtidige behandlinger' - ,de: 'Finde und entferne Behandlungen in der Zukunft.' - ,es: 'Este comando encuentra y elimina tratamientos futuros.' - ,fr: 'Cette tâche cherche et efface les éléments dont la date est dans le futur' - ,dk: 'Denne handling finder og fjerner fremtidige behandlinger.' - ,el: 'Αυτή η ενέργεια αφαιρεί μελλοντικές ενέργειες από τη βάση δεδομένων' - ,ro: 'Acest instrument curăță tratamentele din viitor.' - ,sv: 'Denna uppgift hittar och rensar framtida händelser' - ,bg: 'Тази опция намира и премахва събития в бъдещето.' - ,hr: 'Ovo nalazi i briše tretmane u budućnosti' - ,it: 'Trovare e rimuovere le somministrazioni in futuro' - ,fi: 'Tämä työkalu poistaa tapahtumat joiden aikamerkintä on tulevaisuudessa.' - ,pl: 'To narzędzie znajduje i usuwa przyszłe/błędne zabiegi' - ,pt: 'Este comando encontra e remove tratamentos futuros' - ,ru: 'Эта опция найдет и удалит данные из будущего' - ,sk: 'Táto úloha nájde a odstáni záznamy ošetrenia v budúcnosti.' - ,nl: 'Dit commando zoekt en verwijdert behandelingen met datum in de toekomst' - ,ko: '이 작업은 미래에 treatments를 검색하고 지우는 것입니다.' - ,tr: 'Bu görev gelecekte tedavileri bul ve kaldır.' - ,zh_cn: '此功能查找并清除所有未来的操作。' - ,zh_tw: '此功能查找並清除所有未來的操作。' - ,hu: 'Ez a feladat megkeresi és eltávolítja az összes jövőben lévő kezelést' - } - ,'Remove treatments in the future' : { - cs: 'Odstraň ošetření v budoucnosti' - ,he: 'הסר טיפולים בעתיד' - ,nb: 'Fjern fremtidige behandlinger' - ,de: 'Entferne Behandlungen in der Zukunft' - ,es: 'Elimina tratamientos futuros' - ,fr: 'Efface les traitements ayant un date dans le futur' - ,dk: 'Fjern behandlinger i fremtiden' - ,el: 'Αφαίρεση μελλοντικών ενεργειών' - ,ro: 'Șterge tratamentele din viitor' - ,sv: 'Ta bort framtida händelser' - ,bg: 'Премахни събитията в бъдешето' - ,hr: 'Obriši tretmane u budućnosti' - ,it: 'Rimuovere somministrazioni in futuro' - ,fi: 'Poista tapahtumat' - ,pl: 'Usuń zabiegi w przyszłości' - ,pt: 'Remover tratamentos futuros' - ,ru: 'Удалить назначения из будущего' - ,sk: 'Odstrániť záznamy ošetrenia v budúcnosti' - ,nl: 'Verwijder behandelingen met datum in de toekomst' - ,ko: '미래 treatments 지우기' - ,tr: 'Gelecekte tedavileri kaldır' - ,zh_cn: '清除未来操作' - ,zh_tw: '清除未來操作' - ,hu: 'Jövőbeli kerelések eltávolítésa' - } - ,'Find and remove entries in the future' : { - cs: 'Najít a odstranit CGM data v budoucnosti' - ,he: 'מצא והסר רשומות בעתיד' - ,de: 'Finde und entferne Einträge in der Zukunft' - ,es: 'Encuentra y elimina entradas futuras' - ,fr: 'Cherche et efface les événements dans le futur' - ,dk: 'Find og fjern indgange i fremtiden' - ,nb: 'Finn og fjern fremtidige hendelser' - ,el: 'Εύρεση και αφαίρεση μελλοντικών εγγραφών από τη βάση δεδομένων' - ,bg: 'Намери и премахни данни от сензора в бъдещето' - ,hr: 'Nađi i obriši zapise u budućnosti' - ,ro: 'Caută și elimină valorile din viitor' - ,sv: 'Hitta och ta bort framtida händelser' - ,it: 'Trovare e rimuovere le voci in futuro' - ,fi: 'Etsi ja poista tapahtumat' - ,pl: 'Znajdź i usuń wpisy z przyszłości' - ,pt: 'Encontrar e remover entradas futuras' - ,ru: 'Найти и удалить данные сенсора из будущего' - ,sk: 'Nájsť a odstrániť CGM dáta v budúcnosti' - ,nl: 'Zoek en verwijder behandelingen met datum in de toekomst' - ,ko: '미래에 입력을 검색하고 지우세요.' - ,tr: 'Gelecekteki girdileri bul ve kaldır' - ,zh_cn: '查找并清除所有的未来的记录' - ,zh_tw: '查找並清除所有的未來的記錄' - ,hu: 'Jövőbeli bejegyzések eltávolítása' - } - ,'This task find and remove CGM data in the future created by uploader with wrong date/time.' : { - cs: 'Tento úkol najde a odstraní CGM data v budoucnosti vzniklé špatně nastaveným datem v uploaderu.' - ,he: 'משימה זו מוצאת נתונים של סנסור סוכר ומסירה אותם בעתיד, שנוצרו על ידי העלאת נתונים עם תאריך / שעה שגויים' - ,nb: 'Finn og fjern fremtidige cgm data lastet opp med feil dato/tid' - ,fr: 'Cet outil cherche et efface les valeurs CGM dont la date est dans le futur' - ,el: 'Αυτή η ενέργεια αφαιρεί δεδομένα αιθητήρα τα οποία εισήχθησαν με λάθος ημερομηνία και ώρα, από τη βάση δεδομένων' - ,de: 'Finde und entferne CGM-Daten in der Zukunft, die vom Uploader mit falschem Datum/Uhrzeit erstellt wurden.' - ,es: 'Este comando encuentra y elimina datos del sensor futuros creados por actualizaciones con errores en fecha/hora' - ,dk: 'Denne handling finder og fjerner CGM data i fremtiden forårsaget af indlæsning med forkert dato/tid.' - ,bg: 'Тази опция ще намери и премахне данни от сензора в бъдещето, създадени поради грешна дата/време.' - ,hr: 'Ovo nalazi i briše podatke sa senzora u budućnosti nastalih s uploaderom sa krivim datumom/vremenom' - ,ro: 'Instrument de căutare și eliminare a datelor din viitor, create de uploader cu ora setată greșit' - ,sv: 'Denna uppgift hittar och tar bort framtida CGM-data skapad vid felaktig tidsinställning' - ,it: 'Trovare e rimuovere i dati CGM in futuro creato da uploader/xdrip con data/ora sbagliato.' - ,fi: 'Tämä työkalu etsii ja poistaa sensorimerkinnät joiden aikamerkintä sijaitsee tulevaisuudessa.' - ,pl: 'To narzędzie odnajduje i usuwa dane CGM utworzone przez uploader w przyszłości - ze złą datą/czasem.' - ,pt: 'Este comando procura e remove dados de sensor futuros criados por um uploader com data ou horário errados.' - ,ru: 'Эта опция найдет и удалит данные сенсора созданные загрузчиком с неверными датой/временем' - ,sk: 'Táto úloha nájde a odstráni CGM dáta v budúcnosti vzniknuté zle nastaveným časom uploaderu.' - ,nl: 'Dit commando zoekt en verwijdert behandelingen met datum in de toekomst' - ,ko: '이 작업은 잘못된 날짜/시간으로 업로드 되어 생성된 미래의 CGM 데이터를 검색하고 지우는 것입니다.' - ,tr: 'Yükleyicinin oluşturduğu gelecekteki CGM verilerinin yanlış tarih/saat olanlarını bul ve kaldır.' - ,zh_cn: '此功能查找并清除所有上传时日期时间错误导致生成在未来时间的CGM数据。' - ,zh_tw: '此功能查找並清除所有上傳時日期時間錯誤導致生成在未來時間的CGM數據。' - ,hu: 'Ez a feladat megkeresi és eltávolítja az összes CGM adatot amit a feltöltő rossz idővel-dátummal töltött fel' - } - ,'Remove entries in the future' : { - cs: 'Odstraň CGM data v budoucnosti' - ,he: 'הסר רשומות בעתיד' - ,nb: 'Fjern fremtidige hendelser' - ,de: 'Entferne Einträge in der Zukunft' - ,es: 'Elimina entradas futuras' - ,fr: 'Efface les événement dans le futur' - ,dk: 'Fjern indgange i fremtiden' - ,el: 'Αφαίρεση μελλοντικών ενεργειών' - ,bg: 'Премахни данните от сензора в бъдещето' - ,hr: 'Obriši zapise u budućnosti' - ,ro: 'Elimină înregistrările din viitor' - ,sv: 'Ta bort framtida händelser' - ,it: 'Rimuovere le voci in futuro' - ,fi: 'Poista tapahtumat' - ,pl: 'Usuń wpisy w przyszłości' - ,pt: 'Remover entradas futuras' - ,ru: 'Удалить данные из будущего' - ,sk: 'Odstrániť CGM dáta v budúcnosti' - ,nl: 'Verwijder invoer met datum in de toekomst' - ,ko: '미래의 입력 지우기' - ,tr: 'Gelecekteki girdileri kaldır' - ,zh_cn: '清除未来记录' - ,zh_tw: '清除未來記錄' - ,hu: 'Jövőbeli bejegyzések törlése' - } - ,'Loading database ...' : { - cs: 'Nahrávám databázi ...' - ,he: 'טוען מסד נתונים ... ' - ,nb: 'Leser database ...' - ,de: 'Lade Datenbank ...' - ,es: 'Cargando base de datos ...' - ,fr: 'Charge la base de données...' - ,dk: 'Indlæser database ...' - ,el: 'Φόρτωση Βάσης Δεδομένων' - ,bg: 'Зареждане на базата с данни ...' - ,hr: 'Učitavanje podataka' - ,ro: 'Încarc baza de date' - ,sv: 'Laddar databas ...' - ,it: 'Carica Database ...' - ,fi: 'Lataan tietokantaa...' - ,pl: 'Wczytuje baze danych' - ,pt: 'Carregando banco de dados ...' - ,ru: 'Загрузка базы данных' - ,sk: 'Nahrávam databázu...' - ,nl: 'Database laden ....' - ,ko: '데이터베이스 로딩' - ,tr: 'Veritabanı yükleniyor ...' - ,zh_cn: '载入数据库...' - ,zh_tw: '載入數據庫...' - ,hu: 'Adatbázis betöltése...' - } - ,'Database contains %1 future records' : { - cs: 'Databáze obsahuje %1 záznamů v budoucnosti' - ,he: ' מסד הנתונים מכיל% 1 רשומות עתידיות ' - ,nb: 'Databasen inneholder %1 fremtidige hendelser' - ,fr: 'La base de données contient %1 valeurs futures' - ,el: 'Η Βάση Δεδομένων περιέχει 1% μελλοντικές εγγραφές' - ,ro: 'Baza de date conține %1 înregistrări din viitor' - ,sv: 'Databas innehåller %1 framtida händelser' - ,de: 'Datenbank enthält %1 zukünftige Einträge' - ,es: 'Base de datos contiene %1 registros futuros' - ,dk: 'Databasen indeholder %1 fremtidige indgange' - ,bg: 'Базата с дани съдържа %1 бъдещи записи' - ,hr: 'Baza sadrži %1 zapisa u budućnosti' - ,it: 'Contiene Database %1 record futuri' - ,fi: 'Tietokanta sisältää %1 merkintää tulevaisuudessa' - ,pl: 'Baza danych zawiera %1 przyszłych rekordów' - ,pt: 'O banco de dados contém %1 registros futuros' - ,ru: 'База данных содержит %1 записей в будущем' - ,sk: 'Databáza obsahuje %1 záznamov v budúcnosti' - ,nl: 'Database bevat %1 toekomstige data' - ,ko: '데이터베이스는 미래 기록을 %1 포함하고 있습니다.' - ,tr: 'Veritabanı %1 gelecekteki girdileri içeriyor' - ,zh_cn: '数据库包含%1条未来记录' - ,zh_tw: '數據庫包含%1條未來記錄' - ,hu: 'Az adatbázis %1 jövöbeli adatot tartalmaz' - } - ,'Remove %1 selected records?' : { - cs: 'Odstranit %1 vybraných záznamů' - ,he: 'האם להסיר% 1 רשומות שנבחרו? ' - ,nb: 'Fjern %1 valgte elementer?' - ,fr: 'Effacer %1 valeurs choisies?' - ,el: 'Αφαίρεση των επιλεγμένων εγγραφών?' - ,de: 'Lösche ausgewählten %1 Eintrag?' - ,es: 'Eliminar %1 registros seleccionados?' - ,dk: 'Fjern %1 valgte indgange?' - ,ro: 'Șterg %1 înregistrări selectate?' - ,sv: 'Ta bort %1 valda händelser' - ,bg: 'Премахване на %1 от избраните записи?' - ,hr: 'Obriši %1 odabrani zapis?' - ,it: 'Rimuovere %1 record selezionati?' - ,fi: 'Poista %1 valittua merkintää?' - ,pl: 'Usunąć %1 wybranych rekordów?' - ,pt: 'Remover os %1 registros selecionados?' - ,ru: 'Удалить %1 выбранных записей?' - ,sk: 'Odstrániť %1 vybraných záznamov' - ,nl: 'Verwijder %1 geselecteerde data?' - ,ko: '선택된 기록 %1를 지우시겠습니까?' - ,tr: 'Seçilen %1 kayıtlar kaldırılsın? ' - ,zh_cn: '清除%1条选择的记录?' - ,zh_tw: '清除%1條選擇的記錄?' - ,hu: 'Kitöröljük a %1 kiválasztott adatot?' - } - ,'Error loading database' : { - cs: 'Chyba při nahrávání databáze' - ,he: 'שגיאה בטעינת מסד הנתונים ' - ,nb: 'Feil udner lasting av database' - ,fr: 'Erreur chargement de la base de données' - ,de: 'Fehler beim Laden der Datenbank' - ,es: 'Error al cargar base de datos' - ,dk: 'Fejl ved indlæsning af database' - ,el: 'Σφάλμα στη φόρτωση της βάσης δεδομένων' - ,ro: 'Eroare la încărcarea bazei de date' - ,sv: 'Fel vid laddning av databas' - ,bg: 'Грешка при зареждане на базата с данни' - ,hr: 'Greška pri učitavanju podataka' - ,it: 'Errore di caricamento del database' - ,fi: 'Ongelma tietokannan lataamisessa' - ,pl: 'Błąd wczytywania bazy danych' - ,pt: 'Erro ao carregar danco de dados' - ,ru: 'Ошибка загрузки базы данных' - ,sk: 'Chyba pri nahrávanií databázy' - ,nl: 'Fout bij het laden van database' - ,ko: '데이터베이스 로딩 에러' - ,tr: 'Veritabanını yüklerken hata oluştu' - ,zh_cn: '载入数据库错误' - ,zh_tw: '載入數據庫錯誤' - ,hu: 'Hiba az adatbázis betöltése közben' - } - ,'Record %1 removed ...' : { - cs: 'Záznam %1 odstraněn ...' - ,he: 'רשומה% 1 הוסרה ... ' - ,nb: 'Element %1 fjernet' - ,de: 'Eintrag %1 entfernt' - ,es: 'Registro %1 eliminado ...' - ,fr: 'Événement %1 effacé' - ,dk: 'Indgang %1 fjernet ...' - ,el: 'Οι εγγραφές αφαιρέθηκαν' - ,ro: 'Înregistrarea %1 a fost ștearsă...' - ,sv: 'Händelse %1 borttagen ...' - ,bg: '%1 записи премахнати' - ,hr: 'Zapis %1 obrisan...' - ,it: 'Record %1 rimosso ...' - ,fi: 'Merkintä %1 poistettu ...' - ,pl: '%1 rekordów usunięto ...' - ,pt: 'Registro %1 removido ...' - ,ru: 'запись %1 удалена' - ,sk: '%1 záznamov bolo odstránených...' - ,nl: 'Data %1 verwijderd ' - ,ko: '기록 %1가 삭제되었습니다.' - ,tr: '%1 kaydı silindi ...' - ,zh_cn: '%1条记录已清除' - ,zh_tw: '%1條記錄已清除' - ,hu: 'A %1 bejegyzés törölve...' - } - ,'Error removing record %1' : { - cs: 'Chyba při odstaňování záznamu %1' - ,he: 'שגיאה בהסרת הרשומה% 1 ' - ,nb: 'Feil under fjerning av element %1' - ,de: 'Fehler beim Entfernen des Eintrags %1' - ,es: 'Error al eliminar registro %1' - ,fr: 'Echec d\'effacement de l\'événement %1' - ,dk: 'Fejl ved fjernelse af indgang %1' - ,el: 'Σφάλμα αφαίρεσης εγγραφών' - ,ro: 'Eroare la ștergerea înregistrării %1' - ,sv: 'Fel vid borttagning av %1' - ,bg: 'Грешка при премахването на %1 от записите' - ,hr: 'Greška prilikom brisanja zapisa %1' - ,it: 'Errore rimozione record %1' - ,fi: 'Virhe poistaessa merkintää numero %1' - ,pl: 'Błąd przy usuwaniu rekordu %1' - ,pt: 'Erro ao remover registro %1' - ,ru: 'Ошибка удаления записи %1' - ,sk: 'Chyba pri odstraňovaní záznamu %1' - ,nl: 'Fout bij het verwijderen van %1 data' - ,ko: '기록 %1을 삭제하는 중에 에러가 발생했습니다.' - ,tr: '%1 kayıt kaldırılırken hata oluştu' - ,zh_cn: '%1条记录清除出错' - ,zh_tw: '%1條記錄清除出錯' - ,hu: 'Hiba lépett fel a %1 bejegyzés törlése közben' - } - ,'Deleting records ...' : { - cs: 'Odstraňování záznamů ...' - ,he: 'מוחק רשומות ... ' - ,nb: 'Fjerner elementer...' - ,fr: 'Effacement dévénements...' - ,ro: 'Se șterg înregistrările...' - ,el: 'Αφαίρεση Εγγραφών' - ,de: 'Entferne Einträge ...' - ,es: 'Eliminando registros ...' - ,dk: 'Sletter indgange ...' - ,sv: 'Tar bort händelser ...' - ,bg: 'Изтриване на записите...' - ,hr: 'Brisanje zapisa' - ,it: 'Elimino dei record ...' - ,fi: 'Poistan merkintöjä' - ,pl: 'Usuwanie rekordów ...' - ,pt: 'Apagando registros ...' - ,ru: 'Записи удаляются' - ,sk: 'Odstraňovanie záznamov...' - ,nl: 'Verwijderen van data .....' - ,ko: '기록 삭제 중' - ,tr: 'Kayıtlar siliniyor ...' - ,zh_cn: '正在删除记录...' - ,zh_tw: '正在刪除記錄...' - ,hu: 'Bejegyzések törlése...' - } - ,'%1 records deleted' : { - hr: 'obrisano %1 zapisa' - ,de: '%1 Einträge gelöscht' - , pl: '%1 rekordów zostało usuniętych' - ,ru: '% записей удалено' - ,hu: '%1 bejegyzés törölve' - } - ,'Clean Mongo status database' : { - cs: 'Vyčištění Mongo databáze statusů' - ,he: 'נקי מסד הנתונים מצב מונגו ' - ,nb: 'Slett Mongo status database' - ,ro: 'Curăță tabela despre status din Mongo' - ,el: 'Καθαρισμός βάσης δεδομένων Mongo' - ,fr: 'Nettoyage de la base de donées Mongo' - ,de: 'Bereinige Mongo Status-Datenbank' - ,es: 'Limpiar estado de la base de datos Mongo' - ,dk: 'Slet Mongo status database' - ,sv: 'Rensa Mongo status databas' - ,bg: 'Изчисти статуса на Монго базата с данни' - ,hr: 'Obriši bazu statusa' - ,it: 'Pulisci database di Mongo' - ,fi: 'Siivoa statustietokanta' - ,pl: 'Oczyść status bazy danych Mongo' - ,pt: 'Limpar banco de dados de status no Mongo' - ,ru: 'Очистить статус базы данных Mongo' - ,sk: 'Vyčistiť Mongo databázu statusov' - ,nl: 'Ruim Mongo database status op' - ,ko: 'Mongo 상태 데이터베이스를 지우세요.' - ,tr: 'Mongo durum veritabanını temizle' - ,zh_cn: '清除状态数据库' - ,hu: 'Mongo állapot (status) adatbázis tisztítása' - } - ,'Delete all documents from devicestatus collection' : { - cs: 'Odstranění všech záznamů z kolekce devicestatus' - ,he: 'מחק את כל המסמכים מאוסף סטטוס המכשיר ' - ,nb: 'Fjern alle dokumenter fra device status tabell' - ,de: 'Lösche alle Dokumente der Gerätestatus-Sammlung' - ,es: 'Borrar todos los documentos desde colección devicesatatus' - ,fr: 'Effacer tous les documents de la collection devicestatus' - ,dk: 'Fjerne alle dokumenter fra device status tabellen' - ,el: 'Διαγραφή όλων των δεδομένων σχετικών με κατάσταση της συσκευής ανάγνωσης του αισθητήρα' - ,ro: 'Șterge toate documentele din colecția de status dispozitiv' - ,sv: 'Ta bort alla dokument i devicestatus collektionen' - ,bg: 'Изтрий всички документи от папката статус-устройство' - ,hr: 'Obriši sve zapise o statusima' - ,it: 'Eliminare tutti i documenti dalla collezione "devicestatus"' - ,fi: 'Poista kaikki tiedot statustietokannasta' - ,pl: 'Usuń wszystkie dokumenty z kolekcji devicestatus' - ,pt: 'Apagar todos os documentos da coleção devicestatus' - ,ru: 'Стереть все документы из коллекции статус устройства' - ,sk: 'Odstránenie všetkých záznamov z kolekcie "devicestatus"' - ,ko: 'devicestatus 수집에서 모든 문서들을 지우세요' - ,tr: 'Devicestatus koleksiyonundan tüm dokümanları sil' - ,zh_cn: '从设备状态采集删除所有文档' - ,nl: 'Verwijder alle documenten uit "devicestatus" database' - ,hu: 'Az összes "devicestatus" dokumentum törlése' - } - ,'This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.' : { - cs: 'Tento úkol odstraní všechny dokumenty z kolekce devicestatus. Je to vhodné udělat, pokud se ukazatel stavu baterie neobnovuje správně.' - ,nb: 'Denne funksjonen fjerner alle dokumenter fra device status tabellen. Nyttig når status for opplaster batteri ikke blir opppdatert' - ,fr: 'Efface tous les documents de la collection devicestatus. Utile lorsque l\'indicateur de chargement de la batterie du Smartphone n\'est pas affichée correctement' - ,el: 'Αυτή η ενέργεια διαγράφει όλα τα δεδομένα της κατάστασης της συσκευής ανάγνωσης. Χρήσιμη όταν η κατάσταση της συσκευής ανάγνωσης δεν ανανεώνεται σωστά.' - ,de: 'Diese Aufgabe entfernt alle Dokumente aus der Gerätestatus-Sammlung. Nützlich wenn der Uploader-Batteriestatus sich nicht aktualisiert.' - ,es: 'Este comando elimina todos los documentos desde la colección devicestatus. Útil cuando el estado de la batería cargadora no se actualiza correctamente' - ,dk: 'Denne handling fjerner alle dokumenter fra device status tabellen. Brugbart når uploader batteri status ikke opdateres korrekt.' - ,ro: 'Acest instrument șterge toate documentele din colecția devicestatus. Se folosește când încărcarea bateriei nu se afișează corect.' - ,sv: 'Denna uppgift tar bort alla dokument från devicestatuskollektionen. Användbart när batteristatus ej uppdateras' - ,bg: 'Тази опция премахва всички документи от папката статус-устройство. Полезно е, когато статусът на батерията не се обновява.' - ,hr: 'Ovo briše sve zapise o statusima. Korisno kada se status baterije uploadera ne osvježava ispravno.' - ,it: 'Questa attività elimina tutti i documenti dalla collezione "devicestatus". Utile quando lo stato della batteria uploader/xdrip non si aggiorna.' - ,fi: 'Tämä työkalu poistaa kaikki tiedot statustietokannasta, mikä korjaa tilanteen, jossa puhelimen akun lataustilanne ei näy oikein.' - ,pl: 'To narzędzie usuwa wszystkie dokumenty z kolekcji devicestatus. Przydatne, gdy status baterii uploadera nie jest aktualizowany.' - ,pt: 'Este comando remove todos os documentos da coleção devicestatus. Útil quando o status da bateria do uploader não é atualizado corretamente.' - ,ru: 'Эта опция удаляет все документы из коллекции статус устройства. Полезно когда состояние батвреи загрузчика не обновляется' - ,sk: 'Táto úloha vymaže všetky záznamy z kolekcie "devicestatus". Je to vhodné keď sa stav batérie nezobrazuje správne.' - ,ko: '이 작업은 모든 문서를 devicestatus 수집에서 지웁니다. 업로더 배터리 상태가 적절하게 업데이트 되지 않을 때 유용합니다.' - ,tr: 'Bu görev tüm durumları Devicestatus koleksiyonundan kaldırır. Yükleyici pil durumu güncellenmiyorsa kullanışlıdır.' - ,zh_cn: '此功能从设备状态采集中删除所有文档。适用于上传设备电量信息不能正常同步时使用。' - ,nl: 'Dit commando verwijdert alle documenten uit "devicestatus" database. Handig wanneer de batterij status niet correct wordt geupload.' - ,hu: 'Ez a feladat kitörli az összes "devicestatus" dokumentumot. Hasznos ha a feltöltő elem állapota nem jelenik meg helyesen.' - } - ,'Delete all documents' : { - cs: 'Odstranit všechny dokumenty' - ,he: 'מחק את כל המסמכים ' - ,fr: 'Effacer toutes les données' - ,nb: 'Fjern alle dokumenter' - ,ro: 'Șterge toate documentele' - ,el: 'Διαγραφή όλων των δεδομένων' - ,de: 'Lösche alle Dokumente' - ,es: 'Borra todos los documentos' - ,dk: 'Slet alle dokumenter' - ,sv: 'Ta bort alla dokument' - ,bg: 'Изтрий всички документи' - ,hr: 'Obriši sve zapise' - ,it: 'Eliminare tutti i documenti' - ,fi: 'Poista kaikki tiedot' - ,pl: 'Usuń wszystkie dokumenty' - ,pt: 'Apagar todos os documentos' - ,ru: 'Удалить все документы' - ,sk: 'Zmazať všetky záznamy' - ,nl: 'Verwijder alle documenten' - ,ko: '모든 문서들을 지우세요' - ,tr: 'Tüm Belgeleri sil' - ,zh_cn: '删除所有文档' - ,hu: 'Az összes dokumentum törlése' - } - ,'Delete all documents from devicestatus collection?' : { - cs: 'Odstranit všechny dokumenty z kolekce devicestatus?' - ,he: 'מחק את כל המסמכים מרשימת סטטוס ההתקנים ' - ,nb: 'Fjern alle dokumenter fra device status tabellen?' - ,fr: 'Effacer toutes les données de la collection devicestatus ?' - ,el: 'Διαγραφή όλων των δεδομένων της κατάστασης της συσκευής ανάγνωσης?' - ,de: 'Löschen aller Dokumente der Gerätestatus-Sammlung?' - ,es: 'Borrar todos los documentos desde la colección devicestatus?' - ,dk: 'Fjern alle dokumenter fra device status tabellen' - ,ro: 'Șterg toate documentele din colecția devicestatus?' - ,sv: 'Ta bort alla dokument från devicestatuscollektionen' - ,bg: 'Изтриване на всички документи от папката статус-устройство?' - ,hr: 'Obriši sve zapise statusa?' - ,it: 'Eliminare tutti i documenti dalla collezione devicestatus?' - ,fi: 'Poista tiedot statustietokannasta?' - ,pl: 'Czy na pewno usunąć wszystkie dokumenty z kolekcji devicestatus?' - ,pt: 'Apagar todos os documentos da coleção devicestatus?' - ,ru: 'Удалить все документы коллекции статус устройства?' - ,sk: 'Zmazať všetky záznamy z kolekcie "devicestatus"?' - ,ko: 'devicestatus 수집의 모든 문서들을 지우세요.' - ,tr: 'Tüm Devicestatus koleksiyon belgeleri silinsin mi?' - ,zh_cn: '从设备状态采集删除所有文档?' - ,nl: 'Wil je alle data van "devicestatus" database verwijderen?' - ,hu: 'Az összes dokumentum törlése a "devicestatus" gyűjteményből?' - } - ,'Database contains %1 records' : { - cs: 'Databáze obsahuje %1 záznamů' - ,he: 'מסד נתונים מכיל %1 רשומות ' - ,nb: 'Databasen inneholder %1 elementer' - ,de: 'Datenbank enthält %1 Einträge' - ,es: 'La Base de datos contiene %1 registros' - ,fr: 'La base de donées contient %1 événements' - ,dk: 'Databasen indeholder %1 indgange' - ,el: 'Η βάση δεδομένων περιέχει 1% εγγραφές' - ,ro: 'Baza de date conține %1 înregistrări' - ,sv: 'Databasen innehåller %1 händelser' - ,bg: 'Базата с данни съдържа %1 записи' - ,hr: 'Baza sadrži %1 zapisa' - ,it: 'Contiene Database %1 record' - ,fi: 'Tietokanta sisältää %1 merkintää' - ,pl: 'Baza danych zawiera %1 rekordów' - ,pt: 'O banco de dados contém %1 registros' - ,ru: 'База данных содержит %1 записей' - ,sk: 'Databáza obsahuje %1 záznamov' - ,nl: 'Database bevat %1 gegevens' - ,ko: '데이터베이스는 %1 기록을 포함합니다.' - ,tr: 'Veritabanı %1 kayıt içeriyor' - ,zh_cn: '数据库包含%1条记录' - ,hu: 'Az adatbázis %1 bejegyzést tartalmaz' - } - ,'All records removed ...' : { - cs: 'Všechny záznamy odstraněny ...' - ,he: 'כל הרשומות נמחקו ' - ,nb: 'Alle elementer fjernet ...' - ,de: 'Alle Einträge entfernt...' - ,es: 'Todos los registros eliminados ...' - ,fr: 'Toutes les valeurs ont été effacées' - ,dk: 'Alle hændelser fjernet ...' - ,el: 'Έγινε διαγραφή όλων των δεδομένων' - ,ro: 'Toate înregistrările au fost șterse.' - ,sv: 'Alla händelser raderade ...' - ,bg: 'Всички записи премахнати ...' - ,hr: 'Svi zapisi obrisani' - ,it: 'Tutti i record rimossi ...' - ,fi: 'Kaikki merkinnät poistettu ...' - ,pl: 'Wszystkie rekordy usunięto' - ,pt: 'Todos os registros foram removidos ...' - ,ru: 'Все записи удалены' - ,sk: 'Všetky záznamy boli zmazané...' - ,nl: 'Alle gegevens verwijderd' - ,ko: '모든 기록들이 지워졌습니다.' - ,tr: 'Tüm kayıtlar kaldırıldı ...' - ,zh_cn: '所有记录已经被清除' - ,hu: 'Az összes bejegyzés törölve...' - } - ,'Delete all documents from devicestatus collection older than 30 days' : { - hr: 'Obriši sve statuse starije od 30 dana' - ,ru: 'Удалить все записи коллекции devicestatus старше 30 дней' - ,de: 'Alle Dokumente der Gerätestatus-Sammlung löschen, die älter als 30 Tage sind' - , pl: 'Usuń wszystkie dokumenty z kolekcji devicestatus starsze niż 30 dni' - , hu: 'Az összes "devicestatus" dokumentum törlése ami 30 napnál öregebb' - } - ,'Number of Days to Keep:' : { - hr: 'Broj dana za sačuvati:' - ,ru: 'Оставить дней' - ,de: 'Daten löschen, die älter sind (in Tagen) als:' - , pl: 'Ilość dni do zachowania:' - , hu: 'Mentés ennyi napra:' - } - ,'This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.' : { - hr: 'Ovo uklanja sve statuse starije od 30 dana. Korisno kada se status baterije uploadera ne osvježava ispravno.' - , pl: 'To narzędzie usuwa wszystkie dokumenty z kolekcji devicestatus starsze niż 30 dni. Przydatne, gdy status baterii uploadera nie jest aktualizowany.' - ,ru: 'Это удалит все документы коллекции devicestatus которым более 30 дней. Полезно, когда статус батареи не обновляется или обновляется неверно.' - ,de: 'Diese Aufgabe entfernt alle Dokumente aus der Gerätestatus-Sammlung, die älter sind als 30 Tage. Nützlich wenn der Uploader-Batteriestatus sich nicht aktualisiert.' - ,hu: 'Ez a feladat törli az összes "devicestatus" dokumentumot a gyűjteményből ami 30 napnál öregebb. Hasznos ha a feltöltő elem állapota nem jelenik meg rendesen. ' - } - ,'Delete old documents from devicestatus collection?' : { - hr: 'Obriši stare statuse' - ,de: 'Alte Dokumente aus der Gerätestatus-Sammlung entfernen?' - , pl: 'Czy na pewno chcesz usunąć stare dokumenty z kolekcji devicestatus?' - ,ru: 'Удалить старыые документы коллекции devicestatus' - ,hu: 'Kitorli az öreg dokumentumokat a "devicestatus" gyűjteményből?' - } - ,'Clean Mongo entries (glucose entries) database' : { - hr: 'Obriši GUK zapise iz baze' - ,de: 'Mongo-Einträge (Glukose-Einträge) Datenbank bereinigen' - , pl: 'Wyczyść bazę wpisów (wpisy glukozy) Mongo' - ,ru: 'Очистить записи данных в базе Mongo' - ,hu: 'Mongo bejegyzés adatbázis tisztítása' - } - ,'Delete all documents from entries collection older than 180 days' : { - hr: 'Obriši sve zapise starije od 180 dana' - ,de: 'Alle Dokumente aus der Einträge-Sammlung löschen, die älter sind als 180 Tage' - , pl: 'Usuń wszystkie dokumenty z kolekcji wpisów starsze niż 180 dni' - ,ru: 'Удалить все документы коллекции entries старше 180 дней ' - ,hu: 'Az összes bejegyzés gyűjtemény törlése ami 180 napnál öregebb' - } - ,'This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.' : { - hr: 'Ovo briše sve zapise starije od 180 dana. Korisno kada se status baterije uploadera ne osvježava.' - ,de: 'Diese Aufgabe entfernt alle Dokumente aus der Einträge-Sammlung, die älter sind als 180 Tage. Nützlich wenn der Uploader-Batteriestatus sich nicht aktualisiert.' - , pl: 'To narzędzie usuwa wszystkie dokumenty z kolekcji wpisów starsze niż 180 dni. Przydatne, gdy status baterii uploadera nie jest aktualizowany.' - ,ru: 'Это удалит все документы коллекции entries старше 180 дней. Полезно, когда статус батареи загрузчика должным образом не обновляется' - ,hu: 'A feladat kitörli az összes bejegyzésekből álló dokumentumot ami 180 napnál öregebb. Hasznos ha a feltöltő elem állapota nem jelenik meg helyesen.' - } - ,'Delete old documents' : { - hr: 'Obriši stare zapise' - ,de: 'Alte Dokumente löschen' - , pl: 'Usuń stare dokumenty' - ,ru: 'Удалить старые документы' - ,hu: 'Öreg dokumentumok törlése' - } - ,'Delete old documents from entries collection?' : { - hr: 'Obriši stare zapise?' - ,de: 'Alte Dokumente aus der Einträge-Sammlung entfernen?' - , pl: 'Czy na pewno chcesz usunąć stare dokumenty z kolekcji wpisów?' - ,ru: 'Удалить старые документы коллекции entries?' - ,hu: 'Az öreg dokumentumok törlése a bejegyzések gyűjteményéből?' - } - ,'%1 is not a valid number' : { - hr: '%1 nije valjan broj' - ,de: '%1 ist keine gültige Zahl' - ,he: 'זה לא מיספר %1' - , pl: '%1 nie jest poprawną liczbą' - ,ru: '% не является допустимым значением' - ,hu: 'A %1 nem érvényes szám' - } - ,'%1 is not a valid number - must be more than 2' : { - hr: '%1 nije valjan broj - mora biti veći od 2' - ,de: '%1 ist keine gültige Zahl - Eingabe muss größer als 2 sein' - , pl: '%1 nie jest poprawną liczbą - musi być większe od 2' - ,ru: '% не является допустимым значением - должно быть больше 2' - ,hu: 'A %1 nem érvényes szám - nagyobb számnak kell lennie mint a 2' - } - ,'Clean Mongo treatments database' : { - hr: 'Obriši tretmane iz baze' - ,de: 'Mongo-Behandlungsdatenbank bereinigen' - , pl: 'Wyczyść bazę leczenia Mongo' - ,ru: 'Очистить базу лечения Mongo' - ,hu: 'Mondo kezelési datbázisának törlése' - } - ,'Delete all documents from treatments collection older than 180 days' : { - hr: 'Obriši tretmane starije od 180 dana iz baze' - ,de: 'Alle Dokumente aus der Behandlungs-Sammlung löschen, die älter sind als 180 Tage' - , pl: 'Usuń wszystkie dokumenty z kolekcji leczenia starsze niż 180 dni' - ,ru: 'Удалить все документы коллекции treatments старше 180 дней' - ,hu: 'Töröld az összes 180 napnál öregebb kezelési dokumentumot' - } - ,'This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.' : { - hr: 'Ovo briše sve tretmane starije od 180 dana iz baze. Korisno kada se status baterije uploadera ne osvježava.' - ,de: 'Diese Aufgabe entfernt alle Dokumente aus der Behandlungs-Sammlung, die älter sind als 180 Tage. Nützlich wenn der Uploader-Batteriestatus sich nicht aktualisiert.' - , pl: 'To narzędzie usuwa wszystkie dokumenty z kolekcji leczenia starsze niż 180 dni. Przydatne, gdy status baterii uploadera nie jest aktualizowany.' - ,ru: 'Это удалит все документы коллекции treatments старше 180 дней. Полезно, когда статус батареи загрузчика не обновляется должным образом' - ,hu: 'A feladat eltávolítja az összes kezelési dokumentumot ami öregebb 180 napnál. Hasznos ha a feltöltő elem állapota nem jelenik meg helyesen.' - } - ,'Delete old documents from treatments collection?' : { - hr: 'Obriši stare tretmane?' - ,ru: 'Удалить старые документы из коллекции treatments?' - ,de: 'Alte Dokumente aus der Behandlungs-Sammlung entfernen?' - , pl: 'Czy na pewno chcesz usunąć stare dokumenty z kolekcji leczenia?' - , hu: 'Törölni az összes doumentumot a kezelési gyűjteményből?' - } - ,'Admin Tools' : { - cs: 'Nástroje pro správu' - ,he: 'כלי אדמיניסטרציה ' - ,nb: 'Administrasjonsoppgaver' - ,ro: 'Instrumente de administrare' - ,de: 'Administrator-Werkzeuge' - ,es: 'Herramientas Administrativas' - ,fr: 'Outils d\'administration' - ,dl: 'Administrator opgaver' - ,el: 'Εργαλεία Διαχειριστή' - ,sv: 'Adminverktyg' - ,dk: 'Administrations værktøj' - ,bg: 'Настройки на администратора' - ,hr: 'Administracija' - ,it: 'NS - Dati Mongo' - ,fi: 'Ylläpitotyökalut' - ,pl: 'Narzędzia administratora' - ,pt: 'Ferramentas de administração' - ,ru: 'Инструменты администратора' - ,sk: 'Nástroje pre správu' - ,nl: 'Admin tools' - ,ko: '관리 도구' - ,tr: 'Yönetici araçları' - ,zh_cn: '管理工具' - ,zh_tw: '管理工具' - ,hu: 'Adminisztrációs eszközök' - } - ,'Nightscout reporting' : { - cs: 'Nightscout - Výkazy' - ,he: 'דוחות נייססקאוט' - ,nb: 'Nightscout - rapporter' - ,ro: 'Rapoarte Nightscout' - ,fr: 'Rapports Nightscout' - ,el: 'Αναφορές' - ,de: 'Nightscout-Berichte' - ,es: 'Informes - Nightscout' - ,dk: 'Nightscout - rapporter' - ,sv: 'Nightscout - Statistik' - ,bg: 'Найтскаут статистика' - ,hr: 'Nightscout izvješća' - ,it: 'Nightscout - Statistiche' - ,fi: 'Nightscout raportointi' - ,pl: 'Nightscout - raporty' - ,pt: 'Relatórios do Nightscout' - ,ru: 'Статистика Nightscout' - ,sk: 'Nightscout výkazy' - ,nl: 'Nightscout rapportages' - ,ko: 'Nightscout 보고서' - ,tr: 'NightScout raporları' - ,zh_cn: 'Nightscout报表生成器' - ,hu: 'Nightscout jelentések' - } - ,'Cancel' : { - cs: 'Zrušit' - ,he: 'בטל ' - ,de: 'Abbruch' - ,es: 'Cancelar' - ,fr: 'Interrompre' - ,dk: 'Annuller' - ,nb: 'Avbryt' - ,el: 'Ακύρωση' - ,ro: 'Renunță' - ,sv: 'Avbryt' - ,bg: 'Откажи' - ,hr: 'Odustani' - ,it: 'Cancellare' - ,ja: '中止' - ,fi: 'Peruuta' - ,pl: 'Anuluj' - ,pt: 'Cancelar' - ,ru: 'Отмена' - ,sk: 'Zrušiť' - ,nl: 'Annuleer' - ,ko: '취소' - ,tr: 'İptal' - ,zh_cn: '取消' - ,hu: 'Vissza' - } - ,'Edit treatment' : { - cs: 'Upravit ošetření' - ,he: 'ערוך טיפול ' - ,nb: 'Editer behandling' - ,ro: 'Modifică înregistrarea' - ,de: 'Bearbeite Behandlung' - ,es: 'Editar tratamiento' - ,fr: 'Modifier un traitement' - ,dk: 'Rediger behandling' - ,el: 'Επεξεργασία Εγγραφής' - ,sv: 'Redigera behandling' - ,bg: 'Редакция на събитие' - ,hr: 'Uredi tretman' - ,it: 'Modifica Somministrazione' - ,fi: 'Muuta merkintää' - ,pl: 'Edytuj zabieg' - ,pt: 'Editar tratamento' - ,ru: 'Редактировать событие' - ,sk: 'Upraviť ošetrenie' - ,nl: 'Bewerkt behandeling' - ,ko: 'Treatments 편집' - ,tr: 'Tedaviyi düzenle' - ,zh_cn: '编辑操作' - ,hu: 'Kezelés szerkesztése' - } - ,'Duration' : { - cs: 'Doba trvání' - ,he: 'משך ' - ,ro: 'Durata' - ,de: 'Dauer' - ,es: 'Duración' - ,fr: 'Durée' - ,dk: 'Varighed' - ,el: 'Διάρκεια' - ,sv: 'Varaktighet' - ,bg: 'Времетраене' - ,hr: 'Trajanje' - ,it: 'Tempo' - ,nb: 'Varighet' - ,fi: 'Kesto' - ,pl: 'Czas trwania' - ,pt: 'Duração' - ,ru: 'Продолжительность' - ,sk: 'Trvanie' - ,nl: 'Duur' - ,ko: '기간' - ,tr: 'süre' - ,zh_cn: '持续' - ,hu: 'Behelyezés óta eltelt idő' - } - ,'Duration in minutes' : { - cs: 'Doba trvání v minutách' - ,he: 'משך בדקות ' - ,de: 'Dauer in Minuten' - ,es: 'Duración en minutos' - ,fr: 'Durée en minutes' - ,dk: 'Varighed i minutter' - ,ro: 'Durata în minute' - ,el: 'Διάρκεια σε λεπτά' - ,sv: 'Varaktighet i minuter' - ,bg: 'Времетраене в мин.' - ,hr: 'Trajanje u minutama' - ,it: 'Tempo in minuti' - ,nb: 'Varighet i minutter' - ,fi: 'Kesto minuuteissa' - ,pl: 'Czas trwania w minutach' - ,pt: 'Duração em minutos' - ,ru: 'Продолжительность в мин' - ,sk: 'Trvanie v minútach' - ,nl: 'Duur in minuten' - ,ko: '분당 지속 기간' - ,tr: 'Süre dakika cinsinden' - ,zh_cn: '持续时间(分钟)' - ,hu: 'Idő percekben' - } - ,'Temp Basal' : { - cs: 'Dočasný bazál' - ,he: 'רמה בזלית זמנית' - ,de: 'Temporäre Basalrate' - ,es: 'Tasa basal temporal' - ,fr: 'Débit basal temporaire' - ,dk: 'Midlertidig basal' - ,ro: 'Bazală temporară' - ,sv: 'Temporär basal' - ,bg: 'Временен базал' - ,hr: 'Privremeni bazal' - ,it: 'Basale Temp' - ,nb: 'Midlertidig basal' - ,fi: 'Tilapäinen basaali' - ,pl: 'Tymczasowa dawka podstawowa' - ,pt: 'Basal Temporária' - ,ru: 'Временный базал' - ,sk: 'Dočasný bazál' - ,nl: 'Tijdelijke basaal' - ,ko: '임시 basal' - ,tr: 'Geçici Bazal Oranı' - ,zh_cn: '临时基础率' - ,hu: 'Átmeneti bazál' - } - ,'Temp Basal Start' : { - cs: 'Dočasný bazál začátek' - ,he: 'התחלת רמה בזלית זמנית ' - ,ro: 'Start bazală temporară' - ,sv: 'Temporär basalstart' - ,de: 'Start Temporäre Basalrate' - ,es: 'Inicio Tasa Basal temporal' - ,fr: 'Début du débit basal temporaire' - ,dk: 'Midlertidig basal start' - ,bg: 'Начало на временен базал' - ,hr: 'Početak privremenog bazala' - ,it: 'Inizio Basale Temp' - ,nb: 'Midlertidig basal start' - ,fi: 'Tilapäinen basaali alku' - ,pl: 'Początek tymczasowej dawki podstawowej' - ,pt: 'Início da Basal Temporária' - ,ru: 'Начало временного базала' - ,sk: 'Začiatok dočasného bazálu' - ,nl: 'Start tijdelijke basaal' - ,ko: '임시 basal 시작' - ,tr: 'Geçici Bazal Oranını Başlanğıcı' - ,zh_cn: '临时基础率开始' - ,hu: 'Átmeneti bazál Kezdete' - } - ,'Temp Basal End' : { - cs: 'Dočasný bazál konec' - ,he: 'סיום רמה בזלית זמנית' - ,ro: 'Sfârșit bazală temporară' - ,fr: 'Fin du débit basal temporaire' - ,sv: 'Temporär basalavslut' - ,bg: 'Край на временен базал' - ,hr: 'Kraj privremenog bazala' - ,it: 'Fine Basale Temp' - ,de: 'Ende Temporäre Basalrate' - ,es: 'Fin Tasa Basal temporal' - ,dk: 'Midlertidig basal slut' - ,nb: 'Midlertidig basal stopp' - ,fi: 'Tilapäinen basaali loppu' - ,pl: 'Koniec tymczasowej dawki podstawowej' - ,pt: 'Fim de Basal Temporária' - ,ru: 'Окончание временного базала' - ,sk: 'Koniec dočasného bazálu' - ,nl: 'Einde tijdelijke basaal' - ,ko: '임시 basal 종료' - ,tr: 'Geçici bazal oranını Bitişi' - ,zh_cn: '临时基础率结束' - ,hu: 'Átmeneti bazál Vége' - } - ,'Percent' : { // value in % for temp basal - cs: 'Procenta' - ,he: 'אחוז ' - ,ro: 'Procent' - ,de: 'Prozent' - ,es: 'Porcentaje' - ,fr: 'Pourcent' - ,dk: 'Procent' - ,el: 'Επι τοις εκατό' - ,sv: 'Procent' - ,bg: 'Процент' - ,hr: 'Postotak' - ,it: 'Percentuale' - ,nb: 'Prosent' - ,fi: 'Prosentti' - ,pl: 'Procent' - ,pt: 'Porcento' - ,ru: 'Процент' - ,sk: 'Percent' - ,nl: 'Procent' - ,ko: '퍼센트' - ,tr: 'Yüzde' - ,zh_cn: '百分比' - ,hu: 'Százalék' - } - ,'Basal change in %' : { - cs: 'Změna bazálu v %' - ,he: 'שינוי קצב בזלי באחוזים ' - ,ro: 'Bazală schimbată în %' - ,fr: 'Changement du débit basal en %' - ,sv: 'Basaländring i %' - ,bg: 'Промяна на базала с %' - ,hr: 'Promjena bazala u %' - ,de: 'Basalratenänderung in %' - ,es: 'Basal modificado en %' - ,dk: 'Basal ændring i %' - ,it: 'Variazione basale in %' - ,nb: 'Basal endring i %' - ,fi: 'Basaalimuutos prosenteissa' - ,pl: 'Zmiana dawki podstawowej w %' - ,pt: 'Mudança de basal em %' - ,ru: 'Изменение базала в %' - ,sk: 'Zmena bazálu v %' - ,nl: 'Basaal aanpassing in %' - ,ko: '% 이내의 basal 변경' - ,tr: 'Bazal değişimi % cinsinden' - ,zh_cn: '基础率变化百分比' - ,hu: 'Bazál változása %' - } - ,'Basal value' : { // absolute value for temp basal - cs: 'Hodnota bazálu' - ,he: 'ערך בזלי' - ,ro: 'Valoare bazală' - ,fr: 'Valeur du débit basal' - ,sv: 'Basalvärde' - ,de: 'Basalrate' - ,es: 'Valor basal' - ,dk: 'Basalværdi' - ,bg: 'Временен базал' - ,hr: 'Vrijednost bazala' - ,it: 'Valore Basale' - ,nb: 'Basalverdi' - ,fi: 'Basaalin määrä' - ,pl: 'Dawka podstawowa' - ,pt: 'Valor da basal' - ,ru: 'величина временного базала' - ,sk: 'Hodnota bazálu' - ,nl: 'Basaal snelheid' - ,ko: 'Basal' - ,tr: 'Bazal değeri' - ,zh_cn: '基础率值' - ,hu: 'Bazál értéke' - } - ,'Absolute basal value' : { - cs: 'Hodnota bazálu' - ,he: 'ערך בזלי מוחלט ' - ,bg: 'Базална стойност' - ,hr: 'Apsolutna vrijednost bazala' - ,it: 'Valore Basale Assoluto' - ,fr: 'Débit basal absolu' - ,de: 'Absoluter Basalratenwert' - ,es: 'Valor basal absoluto' - ,dk: 'Absolut basalværdi' - ,nb: 'Absolutt basalverdi' - ,ro: 'Valoare absolută bazală' - ,sv: 'Absolut basalvärde' - ,fi: 'Absoluuttinen basaalimäärä' - ,pl: 'Bezwględna wartość dawki podstawowej' - ,pt: 'Valor absoluto da basal' - ,ru: 'Абсолютная величина базала' - ,sk: 'Absolútna hodnota bazálu' - ,nl: 'Absolute basaal waarde' - ,ko: '절대적인 basal' - ,tr: 'Mutlak bazal değeri' - ,zh_cn: '绝对基础率值' - ,hu: 'Abszolút bazál érték' - } - ,'Announcement' : { - cs: 'Oznámení' - ,bg: 'Известяване' - ,hr: 'Objava' - ,de: 'Ankündigung' - ,es: 'Aviso' - ,fr: 'Annonce' - ,dk: 'Meddelelse' - ,ro: 'Anunț' - ,el: 'Ανακοίνωση' - ,sv: 'Avisering' - ,he: 'הודעה' - ,it: 'Annuncio' - ,nb: 'Kunngjøring' - ,fi: 'Tiedote' - ,pl: 'Powiadomienie' - ,pt: 'Aviso' - ,ru: 'Оповещение' - ,sk: 'Oznámenia' - ,nl: 'Mededeling' - ,ko: '공지' - ,tr: 'Duyuru' - ,zh_cn: '通告' - ,hu: 'Közlemény' - } - ,'Loading temp basal data' : { - cs: 'Nahrávám dočasné bazály' - ,he: 'טוען ערך בזלי זמני ' - ,it: 'Caricamento basale temp' - ,fr: 'Chargement des données de débit basal' - ,ro: 'Se încarcă date bazală temporară' - ,sv: 'Laddar temporär basaldata' - ,de: 'Lade temporäre Basaldaten' - ,es: 'Cargando datos tasa basal temporal' - ,dk: 'Indlæser midlertidig basal data' - ,nb: 'Laster verdier for midlertidig basal' - ,fi: 'Lataan tilapäisten basaalien tietoja' - ,bg: 'Зареждане на данни за временния базал' - ,hr: 'Učitavanje podataka o privremenom bazalu' - ,pl: 'Wczytuje dane tymczasowej dawki podstawowej' - ,pt: 'Carregando os dados de basal temporária' - ,ru: 'Загрузка данных временного базала' - ,sk: 'Nahrávam dáta dočasného bazálu' - ,nl: 'Laden tijdelijke basaal gegevens' - ,ko: '임시 basal 로딩' - ,tr: 'Geçici bazal verileri yükleniyor' - ,zh_cn: '载入临时基础率数据' - ,hu: 'Az étmeneti bazál adatainak betöltése' - } - ,'Save current record before changing to new?' : { - cs: 'Uložit současný záznam před změnou na nový?' - ,he: 'שמור רשומה נוכחית לפני שעוברים לרשומה חדשה? ' - ,ro: 'Salvez înregistrarea curentă înainte de a trece mai departe?' - ,sv: 'Spara aktuell data innan skifte till ny?' - ,fr: 'Sauvegarder l\'événement actuel avant d\'avancer au suivant ?' - ,nb: 'Lagre før bytte til ny?' - ,el: 'Αποθήκευση τρεχουσας εγγραφής πριν δημιουργήσουμε νέα?' - ,de: 'Aktuelle Einträge speichern?' - ,es: 'Grabar datos actuales antes de cambiar por nuevos?' - ,dk: 'Gem aktuelle hændelse før der skiftes til ny?' - ,fi: 'Tallenna nykyinen merkintä ennen vaihtoa uuteen?' - ,bg: 'Запази текущият запис преди да промениш новия ' - ,hr: 'Spremi trenutni zapis prije promjene na idući?' - ,pl: 'Zapisać bieżący rekord przed zamianą na nowy?' - ,pt: 'Salvar o registro atual antes de mudar para um novo?' - ,ru: 'Сохранить текущие данные перед переходом к новым?' - ,sk: 'Uložiť súčastny záznam pred zmenou na nový?' - ,nl: 'Opslaan voor verder te gaan?' - ,ko: '새 데이터로 변경하기 전에 현재의 기록을 저장하시겠습니까?' - ,it: 'Salvare i dati correnti prima di cambiarli?' - ,tr: 'Yenisine geçmeden önce mevcut girişleri kaydet?' - ,zh_cn: '在修改至新值前保存当前记录?' - ,hu: 'Elmentsem az aktuális adatokat mielőtt újra váltunk?' - } - ,'Profile Switch' : { - cs: 'Přepnutí profilu' - ,he: 'החלף פרופיל ' - ,ro: 'Schimbă profilul' - ,sv: 'Ny profil' - ,fr: 'Changement de profil' - ,el: 'Εναλλαγή προφίλ' - ,de: 'Profil wechseln' - ,es: 'Cambiar Perfil' - ,dk: 'Skift profil' - ,nb: 'Bytt profil' - ,fi: 'Vaihda profiilia' - ,bg: 'Смяна на профил' - ,hr: 'Promjena profila' - ,pl: 'Przełączenie profilu' - ,pt: 'Troca de perfil' - ,ru: 'Изменить профиль' - ,sk: 'Zmena profilu' - ,nl: 'Profiel wissel' - ,ko: '프로파일 변경' - ,it: 'Cambio profilo' - ,tr: 'Profil Değiştir' - ,zh_cn: '切换配置文件' - ,hu: 'Profil csere' - } - ,'Profile' : { - cs: 'Profil' - ,he: 'פרופיל ' - ,de: 'Profil' - ,es: 'Perfil' - ,dk: 'Profil' - ,el: 'Προφίλ' - ,fr: 'Profil' - ,it: 'Profilo' - ,ro: 'Profil' - ,sv: 'Profil' - ,nb: 'Profil' - ,fi: 'Profiili' - ,bg: 'Профил' - ,hr: 'Profil' - ,pl: 'Profil' - ,pt: 'Perfil' - ,ru: 'Профиль' - ,sk: 'Profil' - ,nl: 'Profiel' - ,ko: '프로파일' - ,tr: 'Profil' - ,zh_cn: '配置文件' - ,hu: 'Profil' - } - ,'General profile settings' : { - cs: 'Obecná nastavení profilu' - ,he: 'הגדרות פרופיל כלליות' - ,de: 'Allgemeine Profileinstellungen' - ,es: 'Configuración perfil genérico' - ,fr: 'Réglages principaus du profil' - ,dk: 'Generelle profil indstillinger' - ,el: 'Γενικές Ρυθμίσεις Προφίλ' - ,ro: 'Setări generale profil' - ,sv: 'Allmän profilinställning' - ,nb: 'Profilinstillinger' - ,fi: 'Yleiset profiiliasetukset' - ,bg: 'Основни настройки на профила' - ,hr: 'Opće postavke profila' - ,pl: 'Ogólne ustawienia profilu' - ,pt: 'Configurações de perfil gerais' - ,ru: 'Общие настройки профиля' - ,sk: 'Obecné nastavenia profilu' - ,nl: 'Profiel instellingen' - ,ko: '일반 프로파일 설정' - ,it: 'Impostazioni generali profilo' - ,tr: 'Genel profil ayarları' - ,zh_cn: '通用配置文件设置' - ,hu: 'Általános profil beállítások' - } - ,'Title' : { - cs: 'Název' - ,he: 'כותרת ' - ,ro: 'Titlu' - ,sv: 'Titel' - ,fr: 'Titre' - ,el: 'Τίτλος' - ,de: 'Überschrift' - ,es: 'Titulo' - ,dk: 'Overskrift' - ,nb: 'Tittel' - ,fi: 'Otsikko' - ,bg: 'Заглавие' - ,hr: 'Naslov' - ,pl: 'Nazwa' - ,pt: 'Título' - ,ru: 'Название' - ,sk: 'Názov' - ,nl: 'Titel' - ,ko: '제목' - ,it: 'Titolo' - ,tr: 'Başlık' - ,zh_cn: '标题' - ,hu: 'Elnevezés' - } - ,'Database records' : { - cs: 'Záznamy v databázi' - ,he: 'רשומות ' - ,ro: 'Înregistrări' - ,fr: 'Entrées de la base de données' - ,sv: 'Databashändelser' - ,el: 'Εγραφές Βάσης Δεδομένων' - ,nb: 'Databaseverdier' - ,de: 'Datenbankeinträge' - ,es: 'Registros grabados en base datos' - ,dk: 'Database hændelser' - ,fi: 'Tietokantamerkintöjä' - ,bg: 'Записи в базата с данни' - ,hr: 'Zapisi u bazi' - ,pl: 'Rekordy bazy danych' - ,pt: 'Registros do banco de dados' - ,ru: 'Записи в базе данных' - ,sk: 'Záznamy databázi' - ,ko: '데이터베이스 기록' - ,it: 'Record del database' - ,tr: 'Veritabanı kayıtları' - ,zh_cn: '数据库记录' - ,nl: 'Database gegevens' - ,hu: 'Adatbázis bejegyzések' - } - ,'Add new record' : { - cs: 'Přidat nový záznam' - ,he: 'הוסף רשומה חדשה ' - ,ro: 'Adaugă înregistrare nouă' - ,fr: 'Ajouter une nouvelle entrée' - ,sv: 'Lägg till ny händelse' - ,el: 'Προσθήκη νέας εγγραφής' - ,nb: 'Legg til ny rad' - ,de: 'Neuen Eintrag hinzufügen' - ,es: 'Añadir nuevo registro' - ,dk: 'Tilføj ny hændelse' - ,fi: 'Lisää uusi merkintä' - ,bg: 'Добави нов запис' - ,hr: 'Dodaj zapis' - ,pl: 'Dodaj nowy rekord' - ,pt: 'Adicionar novo registro' - ,ru: 'Добавить новую запись' - ,sk: 'Pridať nový záznam' - ,nl: 'Toevoegen' - ,ko: '새 기록 추가' - ,it: 'Aggiungi un nuovo record' - ,ja: '新しい記録を加える' - ,tr: 'Yeni kayıt ekle' - ,zh_cn: '新增记录' - ,hu: 'Új bejegyzés hozzáadása' - } - ,'Remove this record' : { - cs: 'Vymazat tento záznam' - ,he: 'מחק רשומה זו ' - ,ro: 'Șterge această înregistrare' - ,fr: 'Supprimer cette entrée' - ,sv: 'Ta bort denna händelse' - ,el: 'Αφαίρεση εγγραφής' - ,nb: 'Fjern denne raden' - ,de: 'Diesen Eintrag löschen' - ,es: 'Eliminar este registro' - ,fk: 'Fjern denne indgang' - ,fi: 'Poista tämä merkintä' - ,bg: 'Премахни този запис' - ,hr: 'Obriši ovaj zapis' - ,pl: 'Usuń ten rekord' - ,pt: 'Remover este registro' - ,ru: 'Удалить эту запись' - ,sk: 'Zmazať záznam' - ,nl: 'Verwijder' - ,ko: '이 기록 삭' - ,it: 'Rimuovi questo record' - ,ja: 'この記録を除く' - ,tr: 'Bu kaydı kaldır' - ,zh_cn: '删除记录' - ,hu: 'Bejegyzés törlése' - } - ,'Clone this record to new' : { - cs: 'Zkopíruj tento záznam do nového' - ,he: 'שכפל רשומה זו לרשומה חדשה ' - ,ro: 'Duplică această înregistrare' - ,fr: 'Dupliquer cette entrée' - ,el: 'Αντιγραφή σε νέα' - ,sv: 'Kopiera denna händelse till ny' - ,es: 'Duplicar este registro como nuevo' - ,nb: 'Kopier til ny rad' - ,de: 'Diesen Eintrag duplizieren' - ,dk: 'Kopier denne hændelse til ny' - ,fi: 'Kopioi tämä merkintä uudeksi' - ,bg: 'Копирай този запис като нов' - ,hr: 'Kloniraj zapis' - ,pl: 'Powiel ten rekord na nowy' - ,pt: 'Duplicar este registro como novo' - ,ru: 'Клонировать эту запись в новый' - ,sk: 'Skopírovať záznam do nového' - ,nl: 'Kopieer deze invoer naar nieuwe' - ,ko: '이 기록을 새기록으로 복제하기' - ,it: 'Clona questo record in uno nuovo' - ,tr: 'Bu kaydı yeniden kopyala' - ,zh_cn: '复制记录' - ,hu: 'A kiválasztott bejegyzés másolása' - } - ,'Record valid from' : { - cs: 'Záznam platný od' - ,he: 'רשומה תקפה מ ' - ,ro: 'Înregistare validă de la' - ,fr: 'Entrée valide à partir de' - ,sv: 'Händelse giltig från' - ,el: 'Ισχύει από' - ,de: 'Eintrag gültig ab' - ,es: 'Registro válido desde' - ,dk: 'Hændelse gyldig fra' - ,nb: 'Rad gyldig fra' - ,fi: 'Merkintä voimassa alkaen' - ,bg: 'Записът е валиден от ' - ,hr: 'Zapis vrijedi od' - ,pl: 'Rekord ważny od' - ,pt: 'Registro válido desde' - ,ru: 'Запись действительна от' - ,sk: 'Záznam platný od' - ,nl: 'Geldig van' - ,ko: '기록을 시작한 날짜' - ,it: 'Record valido da' - ,tr: 'Kayıt itibaren geçerli' - ,zh_cn: '有效记录,从' - ,hu: 'Bejegyzés érvényessége' - } - ,'Stored profiles' : { - cs: 'Uložené profily' - ,he: 'פרופילים מאוכסנים ' - ,fr: 'Profils sauvegardés' - ,ro: 'Profile salvate' - ,sv: 'Lagrad profil' - ,el: 'Αποθηκευμένα προφίλ' - ,de: 'Gesicherte Profile' - ,es: 'Perfiles guardados' - ,dk: 'Gemte profiler' - ,nb: 'Lagrede profiler' - ,fi: 'Tallennetut profiilit' - ,bg: 'Запаметени профили' - ,hr: 'Pohranjeni profili' - ,pl: 'Zachowane profile' - ,pt: 'Perfis guardados' - ,ru: 'Сохраненные профили' - ,sk: 'Uložené profily' - ,nl: 'Opgeslagen profielen' - ,ko: '저장된 프로파일' - ,it: 'Profili salvati' - ,tr: 'Kaydedilmiş profiller' //Kayıtlı profiller,Saklanan profiller - ,zh_cn: '配置文件已存储' - ,hu: 'Tárolt profilok' - } - ,'Timezone' : { - cs: 'Časová zóna' - ,he: 'אזור זמן ' - ,de: 'Zeitzone' - ,es: 'Zona horaria' - ,fr: 'Zone horaire' - ,dk: 'Tidszone' - ,ro: 'Fus orar' - ,el: 'Ζώνη Ώρας' - ,sv: 'Tidszon' - ,nb: 'Tidssone' - ,fi: 'Aikavyöhyke' - ,bg: 'Часова зона' - ,hr: 'Vremenska zona' - ,pl: 'Strefa czasowa' - ,pt: 'Fuso horário' - ,ru: 'Часовой пояс' - ,sk: 'Časové pásmo' - ,nl: 'Tijdzone' - ,ko: '타임존' - ,it: 'Fuso orario' - ,tr: 'Saat dilimi' - ,zh_cn: '时区' - ,hu: 'Időzóna' - } - ,'Duration of Insulin Activity (DIA)' : { - cs: 'Doba působnosti inzulínu (DIA)' - ,he: 'משך פעילות האינסולין ' - ,ro: 'Durata de acțiune a insulinei' - ,fr: 'Durée d\'action de l\'insuline' - ,el: 'Διάρκεια Δράσης Ινσουλίνης(DIA)' - ,sv: 'Verkningstid för insulin (DIA)' - ,nb: 'Insulin varighet' - ,de: 'Dauer der Insulinaktivität (DIA)' - ,es: 'Duración Insulina Activa (DIA)' - ,dk: 'Varighed af insulin aktivitet (DIA)' - ,fi: 'Insuliinin vaikutusaika (DIA)' - ,bg: 'Продължителност на инсулиновата активност DIA' - ,hr: 'Trajanje aktivnosti inzulina (DIA)' - ,pl: 'Czas trwania aktywnej insuliny (DIA)' - ,pt: 'Duração da Atividade da Insulina (DIA)' - ,ru: 'Время действия инсулина (DIA)' - ,sk: 'Doba pôsobenia inzulínu (DIA)' - ,nl: 'Werkingsduur insuline (DIA)' - ,ko: '활성 인슐린 지속 시간(DIA)' - ,it: 'Durata Attività Insulinica (DIA)' - ,tr: 'İnsülin Etki Süresi (DIA)' - ,zh_cn: '胰岛素作用时间(DIA)' - ,hu: 'Inzulin aktivitás időtartalma' - } - ,'Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.' : { - cs: 'Představuje typickou dobu, po kterou inzulín působí. Bývá různá podle pacienta a inzulínu. Typicky 3-4 hodiny pro pacienty s pumpou.' - ,he: 'מייצג את משך הטיפוסי שבו האינסולין נכנס לתוקף. משתנה לכל חולה וסוג האינסולין. בדרך כלל 3-4 שעות עבור רוב אינסולין שאיבה רוב המטופלים. לפעמים נקרא גם אורך חיי אינסולין. ' - ,ro: 'Reprezintă durata tipică pentru care insulina are efect. Este diferită la fiecare pacient și pentru fiecare tip de insulină' - ,el: 'Αντιπροσωπευει την τυπική διάρκεια δράσης της χορηγηθείσας ινσουλίνης.' - ,es: 'Representa la duración típica durante la cual la insulina tiene efecto. Varía por paciente y por tipo de insulina. Típicamente 3-4 horas para la mayoría de la insulina bombeada y la mayoría de los pacientes. A veces también se llama insulina de por vida ' - ,fr: 'Représente la durée d\'action typique de l\'insuline. Varie individuellement et selon le type d\'insuline. Typiquement 3-4 heures pour les insulines utilisées dans les pompes.' - ,de: 'Entspricht der typischen Dauer in der das Insulin wirkt. Variiert je nach Patient und Insulintyp. Häufig 3-4 Stunden für die meisten Pumpeninsuline und die meisten Patienten. Manchmal auch Insulin-Wirkungsdauer genannt.' - ,dk: 'Representerer den typiske tid hvor insulinen virker. Varierer per patient og per insulin type. Typisk 3-4 timer for de fleste pumpe insulin og for de fleste patienter. Nogle gange kaldes dette også insulin-livs-tid.' - ,sv: 'Beskriver under hur lång tid insulinet verkar. Varierar mellan patienter. Typisk varaktighet 3-4 timmar.' - ,nb: 'Representerer typisk insulinvarighet. Varierer per pasient og per insulin type. Vanligvis 3-4 timer for de fleste typer insulin og de fleste pasientene. Noen ganger også kalt insulinlevetid.' - ,fi: 'Kertoo insuliinin tyypillisen vaikutusajan. Vaihtelee potilaan ja insuliinin tyypin mukaan. Tyypillisesti 3-4 tuntia pumpuissa käytettävällä insuliinilla.' - ,bg: 'Представя типичната продължителност на действието на инсулина. Варира между отделните пациенти и различни инсулини. Обикновено е 3-4 часа за пациентите с помпа. Нарича се още живот на инсулина ' - ,hr: 'Predstavlja uobičajeno trajanje djelovanje inzulina. Varira po vrstama inzulina i osobama. Tipično je to 3-4 sata za inzuline u pumpama za većinu osoba. Ponekad se naziva i vijek inzulina' - ,pl: 'Odzwierciedla czas działania insuliny. Może różnić się w zależności od chorego i rodzaju insuliny. Zwykle są to 3-4 godziny dla insuliny podawanej pompą u większości chorych. Inna nazwa to czas trwania insuliny.' - ,pt: 'Representa a tempo típico durante o qual a insulina tem efeito. Varia de acordo com o paciente e tipo de insulina. Tipicamente 3-4 horas para a maioria das insulinas usadas em bombas e dos pacientes. Algumas vezes chamada de tempo de vida da insulina' - ,ru: 'Отражает типичную продолжительность действия инсулина. Зависит от пациента и от типа инсулина. Обычно 3-4 часа для большинства помповых инсулинов и большинства пациентов' - ,sk: 'Predstavuje typickú dobu počas ktorej inzulín pôsobí. Býva rôzna od pacienta a od typu inzulínu. Zvyčajne sa pohybuje medzi 3-4 hodinami u pacienta s pumpou.' - ,nl: 'Geeft de werkingsduur van de insuline in het lichaam aan. Dit verschilt van patient tot patient er per soort insuline, algemeen gemiddelde is 3 tot 4 uur. ' - ,ko: '인슐린이 작용하는 지속시간을 나타냅니다. 사람마다 그리고 인슐린 종류에 따라 다르고 일반적으로 3~4시간간 동안 지속되며 인슐린 작용 시간(Insulin lifetime)이라고 불리기도 합니다.' - ,it: 'Rappresenta la durata tipica nel quale l\'insulina ha effetto. Varia in base al paziente ed al tipo d\'insulina. Tipicamente 3-4 ore per la maggior parte dei microinfusori e dei pazienti. Chiamata anche durata d\'azione insulinica.' - ,tr: 'İnsülinin etki ettiği tipik süreye karşılık gelir. Hastaya ve insülin tipine göre değişir. Çoğu pompa insülini ve çoğu hasta için genellikle 3-4 saattir. Bazen de insülin etki süresi de denir.' - ,zh_cn: '体现典型的胰岛素活性持续时间。 通过百分比和胰岛素类型体现。对于大多数胰岛素和患者来说是3至4个小时。也称为胰岛素生命周期。' - ,hu: 'Kimutatja hogy általában meddig hat az inzulin. Változó különböző pácienseknél és inzulinoknál. Általában 3-4 óra között mozog. Néha inzulin élettartalomnak is nevezik.' - } - ,'Insulin to carb ratio (I:C)' : { - cs: 'Inzulíno-sacharidový poměr (I:C).' - ,he: 'יחס אינסולין פחמימות ' - ,ro: 'Rată insulină la carbohidrați (ICR)' - ,sv: 'Insulin-Kolhydratskvot' - ,fr: 'Rapport Insuline-Glucides (I:C)' - ,el: 'Αναλογία Ινσουλίνης/Υδατάνθρακα (I:C)' - ,nb: 'IKH forhold' - ,de: 'Insulin/Kohlenhydrate-Verhältnis (I:KH)' - ,es: 'Relación Insulina/Carbohidratos (I:C)' - ,dk: 'Insulin til kulhydrat forhold også kaldet Kulhydrat-insulinratio (I:C)' - ,fi: 'Insuliiniannoksen hiilihydraattisuhde (I:HH)' - ,bg: 'Съотношение инсулин/въглехидратите ICR I:C И:ВХ' - ,hr: 'Omjer UGH:Inzulin (I:C)' - ,pl: 'Współczynnik insulina/węglowodany (I:C)' - ,pt: 'Relação Insulina-Carboidrato (I:C)' - ,ru: 'Соотношение инсулин/углеводы I:C' - ,sk: 'Inzulín-sacharidový pomer (I:C)' - ,nl: 'Insuline - Koolhydraat ratio (I:C)' - ,ko: '인슐린에 대한 탄수화물 비율(I:C)' - ,it: 'Rapporto Insulina-Carboidrati (I:C)' - ,tr: 'İnsülin/Karbonhidrat oranı (I:C)' - ,zh_cn: '碳水化合物系数(ICR)' - ,hu: 'Inzulin-szénhidrát arány' - } - ,'Hours:' : { - cs: 'Hodin:' - ,he: 'שעות:' - ,ro: 'Ore:' - ,el: 'ώρες:' - ,fr: 'Heures:' - ,de: 'Stunden:' - ,es: 'Horas:' - ,dk: 'Timer:' - ,sv: 'Timmar:' - ,nb: 'Timer:' - ,fi: 'Tunnit:' - ,bg: 'часове:' - ,hr: 'Sati:' - ,pl: 'Godziny:' - ,pt: 'Horas:' - ,ru: 'час:' - ,sk: 'Hodiny:' - ,nl: 'Uren:' - ,ko: '시간:' - ,it: 'Ore:' - ,tr: 'Saat:' - ,zh_cn: '小时:' - ,hu: 'Óra:' - } - ,'hours' : { - cs: 'hodin' - ,he: 'שעות ' - ,ro: 'ore' - ,el: 'ώρες' - ,fr: 'heures' - ,de: 'Stunden' - ,es: 'horas' - ,dk: 'timer' - ,sv: 'timmar' - ,nb: 'timer' - ,fi: 'tuntia' - ,bg: 'часове' - ,hr: 'sati' - ,pl: 'godziny' - ,pt: 'horas' - ,ru: 'час' - ,sk: 'hodiny' - ,nl: 'Uren' - ,ko: '시간' - ,it: 'ore' - ,tr: 'saat' - ,zh_cn: '小时' - ,hu: 'óra' - } - ,'g/hour' : { - cs: 'g/hod' - ,he: 'גרם לשעה ' - ,ro: 'g/oră' - ,fr: 'g/heure' - ,sv: 'g/timme' - ,nb: 'g/t' - ,de: 'g/Std' - ,es: 'gr/hora' - ,dk: 'g/time' - ,fi: 'g/tunti' - ,bg: 'гр/час' - ,hr: 'g/h' - ,pl: 'g/godzine' - ,pt: 'g/hora' - ,ru: 'г/час' - ,sk: 'g/hod' - ,nl: 'g/uur' - ,ko: 'g/시간' - ,it: 'g/ora' - ,tr: 'g/saat' - ,zh_cn: 'g/小时' - ,hu: 'g/óra' - } - ,'g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.' : { - cs: 'gramy na jednotku inzulínu. Poměr, jaké množství sacharidů pokryje jednotku inzulínu.' - ,he: 'היחס בין כמה גרם של פחמימות מקוזז על ידי כל יחידת אינסולין ' - ,ro: 'g carbohidrați pentru o unitate de insulină. Câte grame de carbohidrați sunt acoperite de 1U insulină.' - ,fr: 'g de glucides par Uninté d\'insuline. Le rapport représentant la quantité de glucides compensée par une unité d\'insuline.' - ,el: 'Γραμμάρια (g) υδατάνθρακα ανά μονάδα (U) ινσουλίνης. Πόσα γραμμάρια υδατάνθρακα αντιστοιχούν σε μία μονάδα ινσουλίνης' - ,sv: 'gram kolhydrater per enhet insulin. Antal gram kolhydrater varje enhet insulin sänker' - ,dk: 'gram kulhydrater per enhed insulin. (Kulhydrat-insulinratio) Den mængde kulhydrat, som dækkes af en enhed insulin.' - ,es: 'gr. de carbohidratos por unidad de insulina. La proporción de cuántos gramos de carbohidratos se consumen por unidad de insulina.' - ,de: 'g Kohlenhydrate pro Einheit Insulin. Das Verhältnis wie viele Gramm Kohlenhydrate je Einheit Insulin verbraucht werden.' - ,nb: 'g karbohydrater per enhet insulin. Beskriver hvor mange gram karbohydrater som hånderes av en enhet insulin.' - ,fi: 'g hiilihydraattia / yksikkö insuliinia. Suhde, joka kertoo montako grammaa hiilihydraattia vastaa yhtä yksikköä insuliinia.' - ,bg: 'грам въглехидрат към 1 единица инсулин. Съотношението колко грама въглехидрат се покриват от 1 единица инсулин.' - ,hr: 'grama UGH po jedinici inzulina. Omjer koliko grama UGH pokriva jedna jedinica inzulina.' - ,pl: 'g węglowodanów na 1j insuliny. Współczynnik ilości gram weglowodanów równoważonych przez 1j insuliny.' - ,pt: 'g de carboidrato por unidade de insulina. A razão de quantos gramas de carboidrato são processados por cada unidade de insulina.' - ,ru: 'г углеводов на ед инсулина. Соотношение показывает количество гр углеводов компенсируемого единицей инсулина.' - ,sk: 'gramy sacharidov na jednotku inzulínu. Pomer udáva aké množstvo sacharidov pokryje jednotka inzulínu.' - ,ko: '인슐린 단위 당 탄수화물 g. 인슐린 단위에 대한 탄수화물의 양의 비율을 나타냅니다.' - ,it: 'g carbo per U di insulina. Il rapporto tra quanti grammi di carboidrati sono compensati da ogni U di insulina.' - ,tr: 'İnsülin ünite başına g karbonhidrat. İnsülin ünite başına kaç gram karbonhidrat tüketildiği oranıdır.' - ,zh_cn: '克碳水每单位胰岛素。每单位胰岛素可以抵消的碳水化合物克值比例。' - ,nl: 'G KH per Eh insuline. De verhouding tussen hoeveel grammen koohlhydraten er verwerkt kunnen worden per eenheid insuline.' - ,hu: 'g szénhidrát per egység inzulin. Az arány, hogy hány gramm szénhidrát fed le bizonyos egységnyi inzulint' - } - ,'Insulin Sensitivity Factor (ISF)' : { - cs: 'Citlivost inzulínu (ISF)' - ,he: 'גורם רגישות לאינסולין ' - ,ro: 'Factor de sensilibtate la insulină (ISF)' - ,de: 'Insulinsensibilitätsfaktor (ISF)' - ,es: 'Factor Sensibilidad a la Insulina (ISF)' - ,fr: 'Facteur de sensibilité à l\'insuline (ISF)' - ,el: 'Ευαισθησία στην Ινοσυλίνη (ISF)' - ,sv: 'Insulinkänslighetsfaktor (ISF)' - ,dk: 'Insulinfølsomhedsfaktor (ISF)' - ,nb: 'Insulinfølsomhetsfaktor' - ,fi: 'Insuliiniherkkyys (ISF)' - ,bg: 'Фактор на инсулинова чувствителност ISF ' - ,hr: 'Faktor inzulinske osjetljivosti (ISF)' - ,pl: 'Współczynnik wrażliwosci na insulinę (ISF)' - ,pt: 'Fator de Sensibilidade da Insulina (ISF)' - ,ru: 'Фактор чувствительности к инсулину ISF' - ,sk: 'Citlivosť na inzulín (ISF)' - ,nl: 'Insuline gevoeligheid (ISF)' - ,ko: '인슐린 민감도(ISF)' - ,it: 'Fattore di Sensibilità Insulinica (ISF)' - ,tr: '(ISF) İnsülin Duyarlılık Faktörü' - ,zh_cn: '胰岛素敏感系数(ISF)' - ,hu: 'Inzulin Érzékenységi Faktor (ISF)' - } - ,'mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.' : { - cs: 'mg/dL nebo mmol/L na jednotku inzulínu. Poměr, jak se změní glykémie po podaní jednotky inzulínu' - ,he: 'כמה סוכר בדם משתנה עם כל יחידת אינסולין ' - ,ro: 'mg/dL sau mmol/L pentru 1U insulină. Cât de mult influențează glicemia o corecție de o unitate de insulină.' - ,fr: 'mg/dL ou mmol/l par unité d\'insuline. Le rapport représentant la modification de la glycémie résultant de l\'administration d\'une unité d\'insuline.' - ,el: 'mg/dl ή mmol/L ανά μονάδα U ινσουλίνης. Το πόσες μονάδες ρίχνει τη γλυκόζη αίματος μία μονάδα U ινσουλίνης' - ,de: 'mg/dL oder mmol/L pro Einheit Insulin. Verhältnis von BG-Veränderung je Einheit Korrekturinsulin.' - ,es: 'mg/dl o mmol/L por unidad Insulina. La relación de la caída de glucosa y cada unidad de insulina de corrección administrada.' - ,sv: 'mg/dl eller mmol per enhet insulin. Hur varje enhet insulin sänker blodsockret' - ,dk: 'mg/dl eller mmol per enhed insulin. Beskriver hvor mange mmol eller mg/dl blodsukkeret sænkes per enhed insulin (Insulinfølsomheden)' - ,nb: 'mg/dl eller mmol/l per enhet insulin. Beskriver hvor mye blodsukkeret senkes per enhet insulin.' - ,fi: 'mg/dL tai mmol/L / 1 yksikkö insuliinia. Suhde, joka kertoo montako yksikköä verensokeria yksi yksikkö insuliinia laskee.' - ,bg: 'мг/дл или ммол към 1 единица инсулин. Съотношението как се променя кръвната захар със всяка единица инсулинова корекция' - ,hr: 'md/dL ili mmol/L po jedinici inzulina. Omjer koliko se GUK mijenja sa jednom jedinicom korekcije inzulina.' - ,pl: 'mg/dl lub mmol/L na 1j insuliny. Współczynnik obniżenia poziomu glukozy przez 1j insuliny' - ,pt: 'mg/dL ou mmol/L por unidade de insulina. A razão entre queda glicêmica e cada unidade de insulina de correção administrada.' - ,ru: 'мг/дл или ммол/л на единицу инсулина. Насколько меняется СК с каждой единицей коррегирующего инсулина' - ,sk: 'mg/dL alebo mmol/L na jednotku inzulínu. Pomer udáva o koľko sa zmení hodnota glykémie po podaní jednotky inzulínu.' - ,nl: 'mg/dL of mmol/L per E insuline. Ratio daling BG waarde per eenheid correctie' - ,ko: '인슐린 단위당 mg/dL 또는 mmol/L. 인슐린 단위당 얼마나 많은 혈당 변화가 있는지의 비율을 나타냅니다.' - ,it: 'mg/dL o mmol/L per U insulina. Il rapporto di quanto la glicemia varia per ogni U di correzione insulinica.' - ,tr: 'Ünite insülin başına mg/dL veya mmol/L. Her bir Ünite düzeltme insülin ile KŞ\'nin ne kadar değiştiğini gösteren orandır.' - ,zh_cn: 'mg/dL或mmol/L每单位胰岛素。每单位输入胰岛素导致血糖变化的比例' - ,hu: 'mg/dL vagy mmol/L per inzulin egység. Az aránya annak hogy mennyire változik a cukorszint bizonyos egység inzulintól' - } - ,'Carbs activity / absorption rate' : { - cs: 'Rychlost absorbce sacharidů' - ,he: 'פעילות פחמימות / קצב קליטה ' - ,ro: 'Rata de absorbție' - ,el: 'Ρυθμός απορρόφησης υδατανθράκων' - ,fr: 'Activité glucidique / vitesse d\'absorption' - ,de: 'Kohlenhydrataktivität / Aufnahme Kohlenhydrate' - ,es: 'Actividad de carbohidratos / tasa de absorción' - ,sv: 'Kolhydratstid' - ,dk: 'Kulhydrattid / optagelsestid' - ,nb: 'Karbohydrattid' - ,fi: 'Hiilihydraattiaktiivisuus / imeytymisnopeus' - ,bg: 'Активност на въглехидратите / време за абсорбиране' - ,hr: 'UGH aktivnost / omjer apsorpcije' - ,pl: 'Aktywność węglowodanów / współczynnik absorpcji' - ,pt: 'Atividade dos carboidratos / taxa de absorção' - ,ru: 'Активность углеводов / скорость усвоения' - ,sk: 'Rýchlosť vstrebávania sacharidov' - ,nl: 'Koolhydraat opname snelheid' - ,ko: '활성 탄수화물/흡수율' - ,it: 'Attività carboidrati / Velocità di assorbimento' - ,tr: 'Karbonhidrat aktivitesi / emilim oranı' - ,zh_cn: '碳水化合物活性/吸收率' - ,hu: 'Szénhidrátok felszívódásának gyorsasága' - } - ,'grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).' : { - cs: 'gramy za jednotku času. Reprezentuje jak změnu COB za jednoku času, tak množství sacharidů, které se za tu dobu projevily. Křivka absorbce sacharidů je mnohem méně pochopitelná než IOB, ale může být aproximována počáteční pauzou následovanou konstantní hodnotou absorbce (g/hod).' - ,he: 'גרם ליחידת זמן. מייצג הן את השינוי בפחמימות ליחידת זמן והן את כמות הפחמימות אשר אמורות להיכנס לתוקף במהלך אותה תקופה. ספיגת הפחמימות / פעילות הם פחות מובן מאשר פעילות האינסולין, אך ניתן להתקרב באמצעות עיכוב ראשוני ואחריו שיעור קבוע של קליטה (g / hr) ' - ,el: 'Γραμμάρια ανά μονάδα χρόνου. Αναπαριστά τόσο την μεταβολή του COB στη μονάδα του χρόνου. Οι καμπύλες της απορρόφησης υδατανθράκων και της άσκησης δεν έχουν κατανοηθεί πλήρως από την επιστημονική κοινότητα, αλλά μπορούν να προσεγγιστούν βάζοντας μία αρχική καθυστέρηση ακολουθούμενη από έναν σταθερό ρυθμό απορρόφησης (g/hr).' - ,fr: 'grammes par unité de temps. Représente l\'augmentation de COB par unité de temps et la quantité de glucides agissant durant cette période. L\'absorption des glucides est imprécise et est évaluée en moyenne. L\'unité est grammes par heure (g/h).' - ,ro: 'grame pe unitatea de timp. Reprezintă atât schimbarea COB pe unitatea de timp, cât și cantitatea de carbohidrați care ar influența în perioada de timp. Graficele ratei de absorbție sunt mai puțin înțelese decât senzitivitatea la insulină, dar se poate aproxima folosind o întârziere implicită și apoi o rată constantă de aborbție (g/h).' - ,sv: 'gram per tidsenhet. Representerar både ändring i aktiva kolhydrater per tidsenhet som mängden kolhydrater som tas upp under denna tid. Kolhydratsupptag / aktivitetskurvor är svårare att förutspå än aktivt insulin men kan beräknas genom att använda en startfördröjning följd av en konstant absorbtionsgrad (g/timme) ' - ,dk: 'gram per tidsenhed. Repræsentere både ændring i aktive kulhydrater per tidsenhed, samt mængden af kulhydrater der indtages i dette tidsrum. Kulhydratsoptag / aktivitetskurver er svære at forudse i forhold til aktiv insulin, men man kan lave en tilnærmet beregning, ved at inkludere en forsinkelse i beregningen, sammen med en konstant absorberingstid (g/time).' - ,de: 'Gramm pro Zeiteinheit. Bedeutet sowohl die Änderung in COB je Zeiteinheit, als auch die Menge an Kohlenhydraten die über diese Zeit wirken sollten. Kohlenhydrat-Absorption / Aktivitätskurven werden weniger genau verstanden als Insulinaktivität, aber sie können angenähert werden indem eine Anfangsverzögerung mit konstanter Aufnahme (g/Std.) verwendet wird.' - ,es: 'gramos por unidad de tiempo. Representa tanto el cambio en carbohidratos activos por unidad de tiempo como la cantidad de carbohidratos absorbidos durante este tiempo. Las curvas de captación / actividad de carbohidratos son más difíciles de predecir que la insulina activa, pero se pueden calcular utilizando un retraso de inicio seguido de una tasa de absorción constante (gr/h)' - ,nb: 'gram per tidsenhet. Representerer både endringen i COB per tidsenhet, såvel som mengden av karbohydrater som blir tatt opp i løpet av den tiden. Carb absorpsjon / virkningskurver er mindre forstått enn insulinaktivitet, men kan tilnærmes ved hjelp av en forsinkelse fulgt av en konstant hastighet av absorpsjon ( g / time ) .' - ,fi: 'grammaa / aika. Kertoo tyypillisen nopeuden, jolla hiilihydraatit imeytyvät syömisen jälkeen. Imeytyminen tunnetaan jokseenkin huonosti, mutta voidaan arvioida keskimääräisesti. Yksikkönä grammaa tunnissa (g/h).' - ,bg: 'грам за единица време. Представлява както промяната в COB за единица време, така и количеството ВХ които биха се усвоили за това време.' - ,hr: 'grama po jedinici vremena. Predstavlja promjenu aktivnih UGH u jedinici vremena, kao i količinu UGH koja bi trebala utjecati kroz to vrijeme.' - ,pl: 'g na jednostkę czasu. Odzwierciedla zmianę COB na jednostkę czasu oraz ilość węglowodanów mających przynieść efekt w czasie. Krzywe absorpcji / aktywnosci węglowodanów są mniej poznane niż aktywności insuliny ale mogą być oszacowane przez ocenę opóźnienia wchłaniania przy stałym współczynniku absorpcji (g/h).' - ,pt: 'Gramas por unidade de tempo. Representa a mudança em COB por unidade de tempo, bem como a quantidade de carboidratos que deve ter efeito durante esse período de tempo. Absorção de carboidrato / curvas de atividade são menos conhecidas que atividade de insulina, mas podem ser aproximadas usando um atraso inicial seguido de uma taxa de absorção constante (g/h). ' - ,ru: 'грамм на ед времени. Представляет изменение кол-ва углеводов в организме (COB)за единицу времени a также количество активных углеводов' - ,sk: 'gramy za jednotku času. Reprezentuje súčasne zmenu COB za jednotku času, ako aj množstvo sacharidov ktoré sa za tú dobu prejavili. Krivka vstrebávania sacharidov je omnoho menej pochopiteľná ako pôsobenie inzulínu (IOB), ale môže byť približne s použitím počiatočného oneskorenia a následne s konštantným vstrebávaním (g/hod). ' - ,ko: '단위 시간당 그램. 시간당 작용하는 탄수화물의 총량 뿐 아니라 시간 단위당 COB의 변화를 나타냅니다. 탄수화물 흡수율/활성도 곡선은 인슐린 활성도보다 이해가 잘 되지는 않지만 지속적인 흡수율(g/hr)에 따른 초기 지연을 사용하여 근사치를 구할 수 있습니다.' - ,it: 'grammi per unità di tempo. Rappresentano sia il cambio di COB per unità di tempo, sia la quantità di carboidrati che faranno effetto nel tempo. Assorbimento di carboidrati / curva di attività sono meno conosciute rispetto all\'attività insulinica, ma possono essere approssimate usando un ritardo iniziale seguito da un rapporto costante di assorbimento (g/hr).' - ,tr: 'Ur birim zaman başına gram. Birim zamanda (COB) Aktif Krabonhidratdaki değişimin yanı sıra o zaman üzerinde etki etmesi gereken karbonhidrat miktarını ifade eder. Karbonhidrat emme/aktivite eğrileri, insülin aktivitesinden daha zor anlaşılmaktadır, ancak bir başlangıç gecikmesi ve ardından sabit bir emilim oranı (g/hr) kullanılarak yaklaşık olarak tahmin edilebilmektedir.' - ,zh_cn: '克每单位时间。表示每单位时间COB(活性碳水化合物)的变化,以及在该时间应该生效的碳水化合物的量。碳水化合物活性/吸收曲线比胰岛素活性难理解,但可以使用初始延迟,接着恒定吸收速率(克/小时)来近似模拟。' - ,nl: 'grammen per tijdseenheid. Geeft de wijzigingen in COB per tijdseenheid alsookde hoeveelheid KH dat impact zou moeten hebben over deze tijdspanne. KH absorbtie / activiteits curveszijn minder eenvoudig uitzetbaar, maar kunnen geschat worden door gebruik te maken van een startvertreging en daarna een constante curve van absorbtie (g/u).' - ,hu: 'gramm per idő egység. Kifejezi a COB változását es a szénhidrátok felszívódását bizonyos idő elteltével. A szénhidrát felszívódásának tengelye nehezebben értelmezhető mint az inzulin aktivitás (IOB), de hasonló lehet a kezdeti késedelemhez és a felszívódáshoz (g/óra). ' - } - ,'Basal rates [unit/hour]' : { - cs: 'Bazály [U/hod].' - ,he: 'קצב בסיסי (יחידה לשעה) ' - ,ro: 'Rata bazală [unitate/oră]' - ,el: 'Ρυθμός Βασικ΄ς ινσουλίνης [U/hour]' - ,de: 'Basalraten [Einheit/h]' - ,dk: 'Basal [enhed/t]' - ,es: 'Tasas basales [Unidad/hora]' - ,fr: 'Débit basal (Unités/ heure)' - ,sv: 'Basal [enhet/t]' - ,nb: 'Basal [enhet/t]' - ,fi: 'Basaali [yksikköä/tunti]' - ,bg: 'Базална стойност [единица/час]' - ,hr: 'Bazali [jedinica/sat]' - ,pl: 'Dawka podstawowa [j/h]' - ,pt: 'Taxas de basal [unidades/hora]' - ,ru: 'Базал [unit/hour]' - ,sk: 'Bazál [U/hod]' - ,nl: 'Basaal snelheid [eenheden/uur]' - ,ko: 'Basal 비율[unit/hour]' - ,it: 'Basale [unità/ora]' - ,tr: 'Bazal oranı [ünite/saat]' - ,zh_cn: '基础率 [U/小时]' - ,hu: 'Bazál [egység/óra]' - } - ,'Target BG range [mg/dL,mmol/L]' : { - cs: 'Cílový rozsah glykémií [mg/dL,mmol/L]' - ,he: 'יעד טווח גלוקוז בדם ' - ,ro: 'Intervalul țintă al glicemiei [mg/dL, mmol/L]' - ,el: 'Στόχος Γλυκόζης Αίματος [mg/dl , mmol/l]' - ,de: 'Blutzucker-Zielbereich [mg/dL, mmol/L]' - ,dk: 'Ønsket blodsukkerinterval [mg/dl,mmol]' - ,es: 'Intervalo glucemia dentro del objetivo [mg/dL,mmol/L]' - ,fr: 'Cible d\'intervalle de glycémie' - ,sv: 'Önskvärt blodsockerintervall [mg/dl,mmol]' - ,nb: 'Ønsket blodsukkerintervall [mg/dl,mmmol/l]' - ,fi: 'Tavoitealue [mg/dL tai mmol/L]' - ,bg: 'Целеви диапазон на КЗ [мг/дл , ммол]' - ,hr: 'Ciljani raspon GUK [mg/dL,mmol/L]' - ,pl: 'Docelowy przedział glikemii [mg/dl, mmol/L])' - ,pt: 'Meta de glicemia [mg/dL, mmol/L]' - ,ru: 'Целевой диапазон СК [mg/dL,mmol/L]' - ,sk: 'Rozsah cieľovej glykémie [mg/dL,mmol/L]' - ,nl: 'Doel BG waarde in [mg/dl,mmol/L' - ,ko: '목표 혈당 범위 [mg/dL,mmol/L]' - ,it: 'Obiettivo d\'intervallo glicemico [mg/dL,mmol/L]' - ,tr: 'Hedef KŞ aralığı [mg / dL, mmol / L]' - ,zh_cn: '目标血糖范围 [mg/dL,mmol/L]' - ,hu: 'Cukorszint választott tartomány [mg/dL,mmol/L]' - } - ,'Start of record validity' : { - cs: 'Začátek platnosti záznamu' - ,he: 'תחילת תוקף הרשומה ' - ,ro: 'De când este valabilă înregistrarea' - ,fr: 'Début de validité des données' - ,el: 'Ισχύει από' - ,sv: 'Starttid för händelse' - ,de: 'Beginn der Aufzeichnungsgültigkeit' - ,dk: 'Starttid for gyldighed' - ,es: 'Inicio de validez de datos' - ,nb: 'Starttidspunkt for gyldighet' - ,fi: 'Merkinnän alkupäivämäärä' - ,bg: 'Начало на записа' - ,hr: 'Trenutak važenja zapisa' - ,pl: 'Początek ważnych rekordów' - ,pt: 'Início da validade dos dados' - ,ru: 'Начало валидности записей' - ,sk: 'Začiatok platnosti záznamu' - ,nl: 'Start geldigheid' - ,ko: '기록 유효기간의 시작일' - ,it: 'Inizio di validità del dato' - ,tr: 'Kayıt geçerliliği başlangıcı' - ,zh_cn: '有效记录开始' - ,hu: 'Bejegyzés kezdetének érvényessége' - } - ,'Icicle' : { - cs: 'Rampouch' - ,he: 'קרחון ' - ,it: 'Inverso' - ,fr: 'Stalactite' - ,de: 'Eiszapfen' - ,dk: 'Istap' - ,es: 'Inverso' - ,ro: 'Țurțure' - ,sv: 'Istapp' - ,nb: 'Istapp' - ,fi: 'Jääpuikko' - ,bg: 'Висящ' - ,hr: 'Padajuće' - ,pl: 'Odwrotność' - ,pt: 'Inverso' - ,nl: 'Ijspegel' - ,ru: 'Силуэт сосульки' - ,sk: 'Inverzne' - ,ko: '고드름 방향' - ,tr: 'Buzsaçağı' //Sarkıt - ,zh_cn: 'Icicle' - ,zh_tw: 'Icicle' - ,hu: 'Inverzió' - } - ,'Render Basal' : { - cs: 'Zobrazení bazálu' - ,he: 'הראה רמה בזלית ' - ,it: 'Grafico Basale' - ,fr: 'Afficher le débit basal' - ,el: 'Απεικόνιση Βασικής Ινσουλίνης' - ,ro: 'Afișează bazala' - ,sv: 'Generera Basal' - ,de: 'Basalraten-Darstellung' - ,dk: 'Generer Basal' - ,es: 'Representación Basal' - ,nb: 'Basalgraf' - ,fi: 'Näytä basaali' - ,bg: 'Базал' - ,hr: 'Iscrtaj bazale' - ,pl: 'Zmiana dawki bazowej' - ,pt: 'Renderizar basal' - ,ru: 'Отображать базал' - ,sk: 'Zobrazenie bazálu' - ,nl: 'Toon basaal' - ,ko: 'Basal 사용하기' - ,tr: 'Bazal Grafik' - ,zh_cn: '使用基础率' - ,zh_tw: '使用基礎率' - ,hu: 'Bazál megjelenítése' - } - ,'Profile used' : { - cs: 'Použitý profil' - ,he: 'פרופיל בשימוש ' - ,ro: 'Profil folosit' - ,de: 'Verwendetes Profil' - ,dk: 'Profil brugt' - ,es: 'Perfil utilizado' - ,fr: 'Profil utilisé' - ,el: 'Προφίλ σε χρήση' - ,sv: 'Vald profil' - ,nb: 'Brukt profil' - ,fi: 'Käytetty profiili' - ,bg: 'Използван профил' - ,hr: 'Korišteni profil' - ,pl: 'Profil wykorzystywany' - ,pt: 'Perfil utilizado' - ,ru: 'Используемый профиль' - ,sk: 'Použitý profil' - ,nl: 'Gebruikt profiel' - ,ko: '프로파일이 사용됨' - ,it: 'Profilo usato' - ,tr: 'Kullanılan profil' - ,zh_cn: '配置文件已使用' - ,hu: 'Használatban lévő profil' - } - ,'Calculation is in target range.' : { - cs: 'Kalkulace je v cílovém rozsahu.' - ,he: 'חישוב הוא בטווח היעד ' - ,ro: 'Calculul dă o valoare în intervalul țintă.' - ,fr: 'La valeur calculée est dans l\'intervalle cible' - ,el: 'Ο υπολογισμός είναι εντός στόχου' - ,de: 'Berechnung ist innerhalb des Zielbereichs' - ,dk: 'Beregning er i målområdet' - ,es: 'El cálculo está dentro del rango objetivo' - ,sv: 'Inom intervallområde' - ,nb: 'Innenfor målområde' - ,fi: 'Laskettu arvo on tavoitealueella' - ,bg: 'Калкулацията е в граници' - ,hr: 'Izračun je u ciljanom rasponu.' - ,pl: 'Obliczenie mieści się w zakresie docelowym' - ,pt: 'O cálculo está dentro da meta' - ,ru: 'Расчет в целевом диапазоне' - ,sk: 'Výpočet je v cieľovom rozsahu.' - ,nl: 'Berekening valt binnen doelwaards' - ,ko: '계산은 목표 범위 안에 있습니다.' - ,it: 'Calcolo all\'interno dell\'intervallo' - ,tr: 'Hesaplama hedef aralıktadır.' - ,zh_cn: '预计在目标范围内' - ,hu: 'A számítás a cél tartományban található' - } - ,'Loading profile records ...' : { - cs: 'Nahrávám profily ...' - ,he: 'טוען רשומות פרופיל ' - ,nb: 'Leser profiler' - ,fr: 'Chargement des profils...' - ,el: 'Φόρτωση δεδομένων προφίλ' - ,de: 'Lade Profilaufzeichnungen ...' - ,dk: 'Henter profildata ...' - ,es: 'Cargando datos perfil ....' - ,ro: 'Se încarcă datele profilului...' - ,sv: 'Laddar profildata ...' - ,fi: 'Ladataan profiileja ...' - ,bg: 'Зареждане на профили' - ,hr: 'Učitavanje profila...' - ,pl: 'Wczytywanie rekordów profilu' - ,pt: 'Carregando dados do perfil ...' - ,ru: 'Загрузка записей профиля' - ,sk: 'Nahrávam záznamy profilov' - ,nl: 'Laden profiel gegevens' - ,ko: '프로파일 기록 로딩' - ,it: 'Caricamento dati del profilo ...' - ,tr: 'Profil kayıtları yükleniyor ...' - ,zh_cn: '载入配置文件记录...' - ,hu: 'Profil bejegyzéseinek betöltése...' - } - ,'Values loaded.' : { - cs: 'Data nahrána.' - ,he: 'ערכים נטענו ' - ,nb: 'Verdier lastet' - ,fr: 'Valeurs chargées' - ,el: 'Δεδομένα φορτώθηκαν' - ,de: 'Werte geladen.' - ,dk: 'Værdier hentes' - ,es: 'Valores cargados' - ,ro: 'Valorile au fost încărcate.' - ,sv: 'Värden laddas' - ,fi: 'Arvot ladattu' - ,bg: 'Стойностите за заредени.' - ,hr: 'Vrijednosti učitane.' - ,pl: 'Wartości wczytane.' - ,pt: 'Valores carregados.' - ,ru: 'Данные загружены' - ,sk: 'Hodnoty načítané.' - ,nl: 'Gegevens geladen' - ,ko: '값이 로드됨' - ,it: 'Valori caricati.' - ,tr: 'Değerler yüklendi.' - ,zh_cn: '已载入数值' - ,hu: 'Értékek betöltése.' - } - ,'Default values used.' : { - cs: 'Použity výchozí hodnoty.' - ,he: 'משתמשים בערכי בררת המחדל ' - ,nb: 'Standardverdier brukt' - ,el: 'Χρήση προκαθορισμένων τιμών' - ,fr: 'Valeurs par défault utilisées' - ,de: 'Standardwerte werden verwendet.' - ,dk: 'Standardværdier brugt' - ,es: 'Se usan valores predeterminados' - ,ro: 'Se folosesc valorile implicite.' - ,sv: 'Standardvärden valda' - ,fi: 'Oletusarvot ladattu' - ,bg: 'Стойностите по подразбиране са използвани.' - ,hr: 'Koriste se zadane vrijednosti.' - ,pl: 'Używane domyślne wartości.' - ,pt: 'Valores padrão em uso.' - ,ru: 'Используются значения по умолчанию' - ,sk: 'Použité východzie hodnoty.' - ,nl: 'Standaard waardes gebruikt' - ,ko: '초기 설정 값이 사용됨' - ,it: 'Valori standard usati.' - ,tr: 'Varsayılan değerler kullanıldı.' - ,zh_cn: '已使用默认值' - ,hu: 'Alap értékek használva.' - } - ,'Error. Default values used.' : { - cs: 'CHYBA: Použity výchozí hodnoty.' - ,he: 'משתמשים בערכי בררת המחדל שגיאה - ' - ,nb: 'Feil. Standardverdier brukt.' - ,fr: 'Erreur! Valeurs par défault utilisées.' - ,el: 'Σφάλμα: Χρήση προκαθορισμένων τιμών' - ,de: 'Fehler. Standardwerte werden verwendet.' - ,dk: 'Fejl. Standardværdier brugt.' - ,es: 'Error. Se usan valores predeterminados.' - ,ro: 'Eroare. Se folosesc valorile implicite.' - ,sv: 'Error. Standardvärden valda.' - ,fi: 'Virhe! Käytetään oletusarvoja.' - ,bg: 'Грешка. Стойностите по подразбиране са използвани.' - ,hr: 'Pogreška. Koristiti će se zadane vrijednosti.' - ,pl: 'Błąd. Używane domyślne wartości.' - ,pt: 'Erro. Valores padrão em uso.' - ,ru: 'Ошибка. Используются значения по умолчанию' - ,sk: 'CHYBA! Použité východzie hodnoty.' - ,nl: 'FOUT: Standaard waardes gebruikt' - ,ko: '에러. 초기 설정 값이 사용됨' - ,it: 'Errore. Valori standard usati.' - ,tr: 'Hata. Varsayılan değerler kullanıldı.' - ,zh_cn: '错误,已使用默认值' - ,hu: 'Hiba: Alap értékek használva' - } - ,'Time ranges of target_low and target_high don\'t match. Values are restored to defaults.' : { - cs: 'Rozsahy časů pro limity glykémií si neodpovídají. Budou nastaveny výchozí hodnoty.' - ,he: 'טווחי יעד נמוכים ויעדים גבוהים אינם תואמים. הערכים משוחזרים לברירות המחדל ' - ,nb: 'Tidsintervall for målområde lav og høy stemmer ikke. Standardverdier er brukt.' - ,fr: 'Les intervalles de temps pour la cible glycémique supérieure et inférieure diffèrent. Les valeurs par défault sont restaurées.' - ,el: 'Το χρονικό διάστημα του χαμηλού ορίου/στόχου και του υψηλού, δεν συμπίπτουν. Γίνεται επαναφορά στις προκαθορισμένες τιμές.' - ,de: 'Zeitspanne vom untersten und obersten Wert wird nicht berücksichtigt. Werte auf Standard zurückgesetzt.' - ,dk: 'Tidsinterval for målområde lav og høj stemmer ikke overens. Standardværdier er brugt' - ,es: 'Los marcos temporales para objetivo inferior y objetivo superior no coinciden. Los valores predeterminados son usados.' - ,ro: 'Intervalele temporale pentru țintă_inferioară și țintă_superioară nu se potrivesc. Se folosesc valorile implicite.' - ,sv: 'Tidsintervall för målområde låg och hög stämmer ej' - ,fi: 'Matalan ja korkean tavoitteen aikarajat eivät täsmää. Arvot on vaihdettu oletuksiin.' - ,bg: 'Времевите интервали за долна граница на кз и горна граница на кз не съвпадат. Стойностите са възстановени по подразбиране.' - ,hr: 'Vremenski rasponi donje ciljane i gornje ciljane vrijednosti nisu ispravni. Vrijednosti vraćene na zadano.' - ,pl: 'Zakres czasu w docelowo niskim i wysokim przedziale nie są dopasowane. Przywrócono wartości domyślne' - ,pt: 'Os intervalos de tempo da meta inferior e da meta superior não conferem. Os valores padrão serão restaurados.' - ,ru: 'Диапазоны времени нижних и верхних целевых значений не совпадают. Восстановлены значения по умолчанию' - ,sk: 'Časové rozsahy pre cieľové glykémie sa nezhodujú. Hodnoty nastavené na východzie.' - ,ko: '설정한 저혈당과 고혈당의 시간 범위와 일치하지 않습니다. 값은 초기 설정값으로 다시 저장 될 것입니다.' - ,it: 'Intervalli di tempo della glicemia obiettivo inferiore e superiore non corretti. Valori ripristinati a quelli standard.' - ,nl: 'Tijdspanne van laag en hoog doel zijn niet correct. Standaard waarden worden gebruikt' - ,tr: 'Target_low ve target_high öğelerinin zaman aralıkları eşleşmiyor. Değerler varsayılanlara geri yüklendi.' - ,zh_cn: '时间范围内的目标高低血糖值不匹配。已恢复使用默认值。' - ,hu: 'A cukorszint-cél időtartománya nem egyezik. Visszaállítás az alapértékekre' - } - ,'Valid from:' : { - cs: 'Platné od:' - ,he: 'בתוקף מ: ' - ,de: 'Gültig ab:' - ,dk: 'Gyldig fra:' - ,es: 'Válido desde:' - ,fr: 'Valide à partir de:' - ,nb: 'Gyldig fra:' - ,el: 'Ισχύει από:' - ,ro: 'Valid de la:' - ,sv: 'Giltig från:' - ,fi: 'Alkaen:' - ,bg: 'Валиден от' - ,hr: 'Vrijedi od:' - ,pl: 'Ważne od:' - ,pt: 'Válido desde:' - ,ru: 'Действительно с' - ,sk: 'Platné od:' - ,nl: 'Geldig van:' - ,ko: '유효' - ,it: 'Valido da:' - ,tr: 'Tarihinden itibaren geçerli' - ,zh_cn: '生效从:' - ,hu: 'Érvényes:' - } - ,'Save current record before switching to new?' : { - cs: 'Uložit současný záznam před přepnutím na nový?' - ,he: 'שמור את הרשומה הנוכחית לפני המעבר ל חדש? ' - ,nb: 'Lagre før nytte til ny?' - ,fr: 'Sauvegarder cetter entrée avant de procéder à l\'entrée suivante?' - ,el: 'Αποθήκευση αλλαγών πριν γίνει εναλλαγή στο νέο προφίλ? ' - ,de: 'Aktuellen Datensatz speichern?' - ,dk: 'Gem nuværende data inden der skiftes til nyt?' - ,es: 'Grabar datos actuales antes cambiar a uno nuevo?' - ,ro: 'Salvez valoarea curentă înainte de a trece la una nouă?' - ,sv: 'Spara före byte till nytt?' - ,fi: 'Tallenna nykyinen merkintä ennen vaihtamista uuteen?' - ,bg: 'Запазване текущият запис преди превключване на нов?' - ,hr: 'Spremi trenutni zapis prije prelaska na novi?' - ,pl: 'Nagrać bieżący rekord przed przełączeniem na nowy?' - ,pt: 'Salvar os dados atuais antes de mudar para um novo?' - ,ru: 'Сохранить текущие записи перед переходом к новым?' - ,sk: 'Uložiť súčastný záznam pred prepnutím na nový?' - ,nl: 'Opslaan voor verder te gaan?' - ,ko: '새 데이터로 변환하기 전에 현재의 기록을 저장하겠습니까?' - ,it: 'Salvare il dato corrente prima di passare ad uno nuovo?' - ,tr: 'Yenisine geçmeden önce mevcut kaydı kaydet' - ,zh_cn: '切换至新记录前保存当前记录?' - ,hu: 'Elmentsem az aktuális adatokat mielőtt újra válunk?' - } - ,'Add new interval before' : { - cs: 'Přidat nový interval před' - ,he: 'הוסף מרווח חדש לפני ' - ,nb: 'Legg til nytt intervall før' - ,fr: 'Ajouter un intervalle de temps avant' - ,el: 'Προσθήκη νέου διαστήματος, πριν' - ,de: 'Neues Intervall vorher hinzufügen' - ,dk: 'Tilføj nyt interval før' - ,es: 'Agregar nuevo intervalo antes' - ,ro: 'Adaugă un nou interval înainte' - ,sv: 'Lägg till nytt intervall före' - ,fi: 'Lisää uusi aikaväli ennen' - ,bg: 'Добави интервал преди' - ,hr: 'Dodaj novi interval iznad' - ,pl: 'Dodaj nowy przedział przed' - ,pt: 'Adicionar novo intervalo antes de' - ,ru: 'Добавить интервал перед' - ,sk: 'Pridať nový interval pred' - ,nl: 'Voeg interval toe voor' - ,ko: '새로운 구간을 추가하세요' - ,it: 'Aggiungere prima un nuovo intervallo' - ,tr: 'Daha önce yeni aralık ekle' - ,zh_cn: '在此前新增区间' - ,hu: 'Új intervallum hozzáadása elötte' - } - ,'Delete interval' : { - cs: 'Smazat interval' - ,he: 'בטל מרווח ' - ,nb: 'Slett intervall' - ,fr: 'Effacer l\'intervalle' - ,el: 'Διαγραφή διαστήματος' - ,de: 'Intervall löschen' - ,dk: 'Slet interval' - ,es: 'Borrar intervalo' - ,ro: 'Șterge interval' - ,sv: 'Ta bort intervall' - ,fi: 'Poista aikaväli' - ,bg: 'Изтрий интервал' - ,hr: 'Obriši interval' - ,pl: 'Usuń przedział' - ,pt: 'Apagar intervalo' - ,ru: 'Удалить интервал' - ,sk: 'Zmazať interval' - ,nl: 'Verwijder interval' - ,ko: '구간을 지우세요.' - ,it: 'Elimina intervallo' - ,tr: 'Aralığı sil' - ,zh_cn: '删除区间' - ,hu: 'Intervallum törlése' - } - ,'I:C' : { - cs: 'I:C' - ,he: 'יחס אינסולין לפחמימות ' - ,nb: 'IKH' - ,fr: 'I:C' - ,ro: 'ICR' - ,de: 'IE:KH' - ,dk: 'I:C' - ,es: 'I:C' - ,sv: 'I:C' - ,fi: 'I:HH' - ,bg: 'И:ВХ' - ,hr: 'I:C' - ,pl: 'I:C' - ,pt: 'I:C' - ,ru: 'Инс:Углев' - ,sk: 'I:C' - ,nl: 'I:C' - ,ko: 'I:C' - ,it: 'I:C' - ,tr: 'İ:K' - ,zh_cn: 'ICR' - ,hu: 'I:C' - } - ,'ISF' : { - cs: 'ISF' - ,he: 'ISF ' - ,nb: 'ISF' - ,ro: 'ISF' - ,de: 'ISF' - ,dk: 'ISF' - ,es: 'ISF' - ,fr: 'ISF' - ,sv: 'ISF' - ,fi: 'ISF' - ,bg: 'Инсулинова чувствителност' - ,hr: 'ISF' - ,pl: 'ISF' - ,pt: 'ISF' - ,nl: 'ISF' - ,ru: 'Чувств к инс ISF' - ,sk: 'ISF' - ,ko: 'ISF' - ,it: 'ISF' - ,tr: 'ISF' - ,zh_cn: 'ISF' - ,hu: 'ISF' - } - ,'Combo Bolus' : { - cs: 'Kombinovaný bolus' - ,he: 'בולוס קומבו ' - ,pl: 'Bolus złożony' - ,de: 'Verzögerter Bolus' - ,dk: 'Kombineret bolus' - ,es: 'Combo-Bolo' - ,fr: 'Bolus Duo/Combo' - ,el: '' - ,ro: 'Bolus extins' - ,sv: 'Combo-bolus' - ,nb: 'Kombinasjonsbolus' - ,bg: 'Двоен болус' - ,hr: 'Dual bolus' - ,fi: 'Yhdistelmäbolus' - ,pt: 'Bolus duplo' - ,ru: 'Комбинир болюс' - ,sk: 'Kombinovaný bolus' - ,nl: 'Pizza Bolus' - ,ko: 'Combo Bolus' - ,it: 'Combo Bolo' - ,tr: 'Kombo (Yayma) Bolus' - ,zh_cn: '双波' - ,hu: 'Kombinált bólus' - } - ,'Difference' : { - cs: 'Rozdíl' - ,he: 'הבדל ' - ,de: 'Unterschied' - ,dk: 'Forskel' - ,es: 'Diferencia' - ,fr: 'Différence' - ,ro: 'Diferență' - ,el: 'Διαφορά' - ,sv: 'Skillnad' - ,nb: 'Forskjell' - ,bg: 'Разлика' - ,hr: 'Razlika' - ,fi: 'Ero' - ,ru: 'Разность' - ,sk: 'Rozdiel' - ,pl: 'Różnica' - ,pt: 'Diferença' - ,nl: 'Verschil' - ,ko: '차이' - ,it: 'Differenza' - ,tr: 'fark' - ,zh_cn: '差别' - ,hu: 'Különbség' - } - ,'New time' : { - cs: 'Nový čas' - ,he: 'זמן חדש ' - ,de: 'Neue Zeit' - ,dk: 'Ny tid' - ,es: 'Nueva hora' - ,fr: 'Nouveau temps' - ,ro: 'Oră nouă' - ,el: 'Νέα ώρα' - ,sv: 'Ny tid' - ,nb: 'Ny tid' - ,bg: 'Ново време' - ,hr: 'Novo vrijeme' - ,fi: 'Uusi aika' - ,ru: 'Новое время' - ,sk: 'Nový čas' - ,pl: 'Nowy czas' - ,pt: 'Novo horário' - ,nl: 'Nieuwe tijd' - ,ko: '새로운 시간' - ,it: 'Nuovo Orario' - ,tr: 'Yeni zaman' - ,zh_cn: '新时间' - ,hu: 'Új idő:' - } - ,'Edit Mode' : { - cs: 'Editační mód' - ,he: 'מצב עריכה ' - ,ro: 'Mod editare' - ,fr: 'Mode Édition' - ,de: 'Bearbeitungsmodus' - ,dk: 'Redigerings tilstand' - ,es: 'Modo edición' - ,sv: 'Editeringsläge' - ,el: 'Λειτουργία Επεξεργασίας' - ,nb: 'Editeringsmodus' - ,bg: 'Редактиране' - ,hr: 'Uređivanje' - ,fi: 'Muokkausmoodi' - ,ru: 'Режим редактирования' - ,sk: 'Editačný mód' - ,pl: 'Tryb edycji' - ,pt: 'Modo de edição' - ,ko: '편집 모드' - ,it: 'Modalità di Modifica' - ,ja: '編集モード' - ,nl: 'Wijzigen uitvoeren' - ,tr: 'Düzenleme Modu' - ,zh_cn: '编辑模式' - ,zh_tw: '編輯模式' - ,hu: 'Szerkesztési mód' - } - ,'When enabled icon to start edit mode is visible' : { - cs: 'Pokud je povoleno, ikona pro vstup do editačního módu je zobrazena' - ,he: 'כאשר הסמל מופעל כדי להתחיל במצב עריכה גלוי ' - ,ro: 'La activare, butonul de editare este vizibil' - ,fr: 'Lorsqu\'activé, l\'icône du Mode Édition devient visible' - ,el: 'Όταν ενεργοποιηθεί, το εικονίδιο της λειτουργίας επεξεργασίας είναι ορατό' - ,de: 'Wenn aktiviert wird das Icons zum Start des Bearbeitungsmodus sichtbar' - ,dk: 'Ikon vises når redigering er aktivt' - ,es: 'Si está activado, el icono estará visible al inicio del modo de edición' - ,sv: 'Ikon visas när editeringsläge är aktivt' - ,nb: 'Ikon vises når editeringsmodus er aktivert' - ,bg: 'Когато е активно ,иконката за редактиране ще се вижда' - ,hr: 'Kada je omogućeno, mod uređivanje je omogućen' - ,fi: 'Muokkausmoodin ikoni tulee näkyviin kun laitat tämän päälle' - ,ru: 'При активации видна пиктограмма начать режим редактирования' - ,sk: 'Keď je povolený, je zobrazená ikona editačného módu' - ,pl: 'Po aktywacji, widoczne ikony, aby uruchomić tryb edycji' - ,pt: 'Quando ativado, o ícone iniciar modo de edição estará visível' - ,nl: 'Als geactiveerd is Wijzigen modus beschikbaar' - ,ko: '편집모드를 시작하기 위해 아이콘을 활성화하면 볼 수 있습니다.' - ,it: 'Quando abilitata, l\'icona della Modalità di Modifica è visibile' - ,tr: 'Etkinleştirildiğinde düzenleme modunun başında simgesi görünecektir.' - ,zh_cn: '启用后开始编辑模式图标可见' - ,zh_tw: '啟用後開始編輯模式圖標可見' - ,hu: 'Engedélyezés után a szerkesztési ikon látható' - } - ,'Operation' : { - cs: 'Operace' - ,he: 'פעולה ' - ,ro: 'Operațiune' - ,fr: 'Opération' - ,de: 'Operation' - ,dk: 'Operation' - ,es: 'Operación' - ,el: 'Λειτουργία' - ,sv: 'Operation' - ,nb: 'Operasjon' - ,bg: 'Операция' - ,hr: 'Operacija' - ,fi: 'Operaatio' - ,ru: 'Операция' - ,sk: 'Operácia' - ,pl: 'Operacja' - ,pt: 'Operação' - ,nl: 'Operatie' - ,ko: '동작' - ,it: 'Operazione' - ,tr: 'İşlem' //Operasyon - ,zh_cn: '操作' - ,hu: 'Operáció' - } - ,'Move' : { - cs: 'Přesunout' - ,he: 'הזז ' - ,ro: 'Mutați' - ,fr: 'Déplacer' - ,de: 'Verschieben' - ,dk: 'Flyt' - ,es: 'Mover' - ,el: 'Μετακίνηση' - ,sv: 'Flytta' - ,nb: 'Flytt' - ,bg: 'Премести' - ,hr: 'Pomakni' - ,fi: 'Liikuta' - ,ru: 'Переместить' - ,sk: 'Presunúť' - ,pl: 'Przesuń' - ,pt: 'Mover' - ,nl: 'Verplaats' - ,ko: '이동' - ,it: 'Muovi' - ,tr: 'Taşı' - ,zh_cn: '移动' - ,hu: 'Áthelyezés' - } - ,'Delete' : { - cs: 'Odstranit' - ,he: 'בטל ' - ,de: 'Löschen' - ,dk: 'Slet' - ,es: 'Borrar' - ,fr: 'Effacer' - ,el: 'Διαγραφή' - ,ro: 'Ștergeți' - ,sv: 'Ta bort' - ,nb: 'Slett' - ,bg: 'Изтрий' - ,hr: 'Obriši' - ,fi: 'Poista' - ,sk: 'Zmazať' - ,ru: 'Удалить' - ,pl: 'Skasuj' - ,pt: 'Apagar' - ,nl: 'Verwijder' - ,ko: '삭제' - ,it: 'Elimina' - ,ja: '削除' - ,tr: 'Sil' - ,zh_cn: '删除' - ,hu: 'Törlés' - } - ,'Move insulin' : { - cs: 'Přesunout inzulín' - ,he: 'הזז אינסולין ' - ,ro: 'Mutați insulina' - ,fr: 'Déplacer l\'insuline' - ,de: 'Insulin verschieben' - ,dk: 'Flyt insulin' - ,es: 'Mover insulina' - ,el: 'Μετακίνηση ινσουλίνης' - ,sv: 'Flytta insulin' - ,nb: 'Flytt insulin' - ,bg: 'Премести инсулин' - ,hr: 'Premjesti inzulin' - ,fi: 'Liikuta insuliinia' - ,ru: 'Переместить инсулин' - ,sk: 'Presunúť inzulín' - ,pl: 'Przesuń insulinę' - ,pt: 'Mover insulina' - ,nl: 'Verplaats insuline' - ,ko: '인슐린을 이동하세요.' - ,it: 'Muovi Insulina' - ,tr: 'İnsülini taşı' - ,zh_cn: '移动胰岛素' - ,hu: 'Inzulin áthelyezése' - } - ,'Move carbs' : { - cs: 'Přesunout sacharidy' - ,he: 'הזז פחמימות ' - ,ro: 'Mutați carbohidrații' - ,de: 'Kohlenhydrate verschieben' - ,dk: 'Flyt kulhydrater' - ,es: 'Mover carbohidratos' - ,fr: 'Déplacer les glucides' - ,el: 'Μετακίνηση υδατανθράκων' - ,sv: 'Flytta kolhydrater' - ,nb: 'Flytt karbohydrater' - ,bg: 'Премести ВХ' - ,hr: 'Premejsti UGH' - ,fi: 'Liikuta hiilihydraatteja' - ,ru: 'Переместить углеводы' - ,sk: 'Presunúť sacharidy' - ,pl: 'Przesuń węglowodany' - ,pt: 'Mover carboidratos' - ,nl: 'Verplaats KH' - ,ko: '탄수화물을 이동하세요.' - ,it: 'Muovi carboidrati' - ,tr: 'Karbonhidratları taşı' - ,zh_cn: '移动碳水' - ,hu: 'Szénhidrát áthelyezése' - } - ,'Remove insulin' : { - cs: 'Odstranit inzulín' - ,he: 'בטל אינסולין ' - ,ro: 'Ștergeți insulina' - ,de: 'Insulin löschen' - ,dk: 'Fjern insulin' - ,es: 'Eliminar insulina' - ,fr: 'Effacer l\'insuline' - ,el: 'Αφαίρεση ινσουλίνης' - ,sv: 'Ta bort insulin' - ,nb: 'Fjern insulin' - ,bg: 'Изтрий инсулин' - ,hr: 'Obriši inzulin' - ,fi: 'Poista insuliini' - ,ru: 'Удалить инсулин' - ,sk: 'Odstrániť inzulín' - ,pl: 'Usuń insulinę' - ,pt: 'Remover insulina' - ,nl: 'Verwijder insuline' - ,ko: '인슐린을 지우세요.' - ,it: 'Rimuovi insulina' - ,tr: 'İnsülini kaldır' - ,zh_cn: '去除胰岛素' - ,hu: 'Inzulin törlése' - } - ,'Remove carbs' : { - cs: 'Odstranit sacharidy' - ,he: 'בטל פחמימות ' - ,ro: 'Ștergeți carbohidrații' - ,fr: 'Effacer les glucides' - ,de: 'Kohlenhydrate löschen' - ,dk: 'Fjern kulhydrater' - ,es: 'Eliminar carbohidratos' - ,el: 'Αφαίρεση υδατανθράκων' - ,sv: 'Ta bort kolhydrater' - ,nb: 'Fjern karbohydrater' - ,bg: 'Изтрий ВХ' - ,hr: 'Obriši UGH' - ,fi: 'Poista hiilihydraatit' - ,ru: 'Удалить углеводы' - ,sk: 'Odstrániť sacharidy' - ,pl: 'Usuń węglowodany' - ,pt: 'Remover carboidratos' - ,nl: 'Verwijder KH' - ,ko: '탄수화물을 지우세요.' - ,it: 'Rimuovi carboidrati' - ,tr: 'Karbonhidratları kaldır' - ,zh_cn: '去除碳水' - ,hu: 'Szénhidrát törlése' - } - ,'Change treatment time to %1 ?' : { - cs: 'Změnit čas ošetření na %1 ?' - ,he: 'שנה זמן לטיפול ל %1 ' - ,ro: 'Schimbați ora acțiunii cu %1 ?' - ,fr: 'Modifier l\'horaire du traitment? Nouveau: %1' - ,de: 'Behandlungsdauer ändern in %1 ?' - ,dk: 'Ændre behandlingstid til %1 ?' - ,es: 'Cambiar horario tratamiento a %1 ?' - ,el: 'Αλλαγή του χρόνου της ενέργειας σε %1?' - ,sv: 'Ändra behandlingstid till %1 ?' - ,nb: 'Endre behandlingstid til %1 ?' - ,bg: 'Да променя ли времето на събитието с %1?' - ,hr: 'Promijeni vrijeme tretmana na %1?' - ,fi: 'Muuta hoidon aika? Uusi: %1' - ,ru: 'Изменить время события на %1 ?' - ,sk: 'Zmeniť čas ošetrenia na %1 ?' - ,pl: 'Zmień czas zdarzenia na %1 ?' - ,pt: 'Alterar horário do tratamento para %1 ?' - ,nl: 'Wijzig behandel tijdstip naar %1' - ,ko: '%1 treatment을 변경하세요.' - ,it: 'Cambiare tempo alla somministrazione a %1 ?' - ,tr: 'Tedavi tarihini %1 e değiştirilsin mi?' - ,zh_cn: '修改操作时间到%1?' - ,hu: 'A kezelés időpontjának áthelyezése %1?' - } - ,'Change carbs time to %1 ?' : { - cs: 'Změnit čas sacharidů na %1 ?' - ,he: 'שנה זמן פחמימות ל %1 ' - ,ro: 'Schimbați ora carbohidraților cu %1 ?' - ,de: 'Kohlenhydrat-Zeit ändern zu %1 ?' - ,dk: 'Ændre kulhydratstid til %1 ?' - ,es: 'Cambiar horario carbohidratos a %1 ?' - ,fr: 'Modifier l\'horaire des glucides? Nouveau: %1' - ,el: 'Αλλαγή του χρόνου πρόσληψης υδατανθράκων σε %1?' - ,sv: 'Ändra kolhydratstid till %1 ?' - ,nb: 'Endre Karbohydrattid til %1 ?' - ,bg: 'Да променя ли времето на ВХ с %1?' - ,hr: 'Promijeni vrijeme UGH na %1?' - ,fi: 'Muuta hiilihydraattien aika? Uusi: %1' - ,ru: 'Изменить время приема углеводов на % ?' - ,sk: 'Zmeniť čas sacharidov na %1 ?' - ,pl: 'Zmień czas węglowodanów na %1 ?' - ,pt: 'Alterar horário do carboidrato para %1 ?' - ,nl: 'Wijzig KH tijdstip naar %1' - ,ko: '%1로 탄수화물 시간을 변경하세요.' - ,it: 'Cambiare durata carboidrati a %1 ?' - ,tr: 'Karbonhidrat zamanını %1 e değiştirilsin mi?' - ,zh_cn: '修改碳水时间到%1?' - ,hu: 'Szénhidrát időpontjának áthelyezése %1' - } - ,'Change insulin time to %1 ?' : { - cs: 'Změnit čas inzulínu na %1 ?' - ,he: 'שנה זמן אינסולין ל %1 ' - ,ro: 'Schimbați ora insulinei cu %1 ?' - ,el: 'Αλλαγή του χρόνου χορήγησης ινσουλίνης σε %1 ?' - ,es: 'Cambiar horario insulina a %1 ?' - ,fr: 'Modifier l\'horaire de l\'insuline? Nouveau: %1' - ,de: 'Insulinzeit ändern zu %1 ?' - ,dk: 'Ændre insulintid til %1 ?' - ,sv: 'Ändra insulintid till %1 ?' - ,nb: 'Endre insulintid til %1 ?' - ,bg: 'Да променя ли времето на инсулина с %1?' - ,hr: 'Promijeni vrijeme inzulina na %1?' - ,fi: 'Muuta insuliinin aika? Uusi: %1' - ,ru: 'Изменить время подачи инсулина на % ?' - ,sk: 'Zmeniť čas inzulínu na %1 ?' - ,pl: 'Zmień czas insuliny na %1 ?' - ,pt: 'Alterar horário da insulina para %1 ?' - ,nl: 'Wijzig insuline tijdstip naar %1' - ,ko: '%1로 인슐린 시간을 변경하세요.' - ,it: 'Cambiare durata insulina a %1 ?' - ,tr: 'İnsülin tarihini %1 e değiştirilsin mi?' // zamanı - ,zh_cn: '修改胰岛素时间到%1?' - ,hu: 'Inzulin időpont áthelyezése %1' - } - ,'Remove treatment ?' : { - cs: 'Odstranit ošetření ?' - ,he: 'בטל טיפול ' - ,ro: 'Ștergeți acțiunea?' - ,de: 'Behandlung löschen?' - ,dk: 'Fjern behandling ?' - ,es: 'Eliminar tratamiento?' - ,fr: 'Effacer le traitment?' - ,el: 'Διαγραφή ενέργειας ?' - ,sv: 'Ta bort behandling ?' - ,nb: 'Fjern behandling ?' - ,bg: 'Изтрий събитието' - ,hr: 'Obriši tretman?' - ,fi: 'Poista hoito?' - ,ru: 'Удалить событие ?' - ,sk: 'Odstrániť ošetrenie?' - ,pl: 'Usunąć wydarzenie?' - ,pt: 'Remover tratamento?' - ,nl: 'Verwijder behandeling' - ,ko: 'Treatment를 지우세요.' - ,it: 'Rimuovere somministrazione ?' - ,tr: 'Tedavi kaldırılsın mı? ' - ,zh_cn: '去除操作?' - ,hu: 'Kezelés törlése?' - } - ,'Remove insulin from treatment ?' : { - cs: 'Odstranit inzulín z ošetření ?' - ,he: 'הסר אינסולין מהטיפול? ' - ,de: 'Insulin der Behandlung löschen?' - ,dk: 'Fjern insulin fra behandling ?' - ,es: 'Eliminar insulina del tratamiento?' - ,fr: 'Effacer l\'insuline du traitement?' - ,ro: 'Ștergeți insulina din acțiune?' - ,el: 'Διαγραφή ινσουλίνης από την ενέργεια?' - ,sv: 'Ta bort insulin från behandling ?' - ,nb: 'Fjern insulin fra behandling ?' - ,bg: 'Да изтрия ли инсулина от събитието?' - ,hr: 'Obriši inzulin iz tretmana?' - ,fi: 'Poista insuliini hoidosta?' - ,ru: 'Удалить инсулин из событий ?' - ,sk: 'Odstrániť inzulín z ošetrenia?' - ,pl: 'Usunąć insulinę z wydarzenia?' - ,pt: 'Remover insulina do tratamento?' - ,nl: 'Verwijder insuline van behandeling' - ,ko: 'Treatment에서 인슐린을 지우세요.' - ,it: 'Rimuovere insulina dalla somministrazione ?' - ,tr: 'İnsülini tedaviden çıkartılsın mı?' - ,zh_cn: '从操作中去除胰岛素?' - ,hu: 'Inzulin törlése a kezelésből?' - } - ,'Remove carbs from treatment ?' : { - cs: 'Odstranit sacharidy z ošetření ?' - ,he: 'הסר פחמימות מהטיפול? ' - ,ro: 'Ștergeți carbohidrații din acțiune?' - ,de: 'Kohlenhydrate der Behandlung löschen?' - ,dk: 'Fjern kulhydrater fra behandling ?' - ,es: 'Eliminar carbohidratos del tratamiento?' - ,fr: 'Effacer les glucides du traitement?' - ,el: 'Διαγραφή των υδατανθράκων από την ενέργεια?' - ,sv: 'Ta bort kolhydrater från behandling ?' - ,nb: 'Fjern karbohydrater fra behandling ?' - ,bg: 'Да изтрия ли ВХ от събитието?' - ,hr: 'Obriši UGH iz tretmana?' - ,fi: 'Poista hiilihydraatit hoidosta?' - ,ru: 'Удалить углеводы из событий ?' - ,sk: 'Odstrániť sacharidy z ošetrenia?' - ,pl: 'Usunąć węglowodany z wydarzenia?' - ,pt: 'Remover carboidratos do tratamento?' - ,nl: 'Verwijder KH van behandeling' - ,ko: 'Treatment에서 탄수화물을 지우세요.' - ,it: 'Rimuovere carboidrati dalla somministrazione ?' - ,tr: 'Karbonhidratları tedaviden çıkartılsın mı ?' // kaldırılsın mı - ,zh_cn: '从操作中去除碳水化合物?' - ,hu: 'Szénhidrát törlése a kezelésből?' - } - ,'Rendering' : { - cs: 'Vykresluji' - ,he: 'מציג... ' - ,ro: 'Se desenează' - ,fr: 'Représentation graphique' - ,de: 'Darstellung' - ,dk: 'Rendering' - ,es: 'Gráfica' - ,el: 'Απεικόνιση' - ,sv: 'Rendering' - ,nb: 'Rendering' - ,bg: 'Показване на графика' - ,hr: 'Iscrtavanje' - ,fi: 'Piirrän graafeja' - ,ru: 'Построение графика' - ,sk: 'Vykresľujem' - ,pl: 'Rysuję' - ,pt: 'Renderizando' - ,nl: 'Renderen' - ,ko: '랜더링' - ,it: 'Traduzione' - ,tr: 'Grafik oluşturuluyor...' - ,zh_cn: '渲染' - ,hu: 'Kirajzolás' - } - ,'Loading OpenAPS data of' : { - cs: 'Nahrávám OpenAPS data z' - ,he: 'טוען מידע מ ' - ,de: 'Lade OpenAPS-Daten von' - ,dk: 'Henter OpenAPS data for' - ,es: 'Cargando datos OpenAPS de' - ,fr: 'Chargement des données OpenAPS de' - ,ro: 'Se încarcă datele OpenAPS pentru' - ,el: 'Φόρτωση δεδομένων OpenAPS' - ,sv: 'Laddar OpenAPS data för' - ,nb: 'Laster OpenAPS data for' - ,bg: 'Зареждане на OpenAPS данни от' - ,hr: 'Učitavanje OpenAPS podataka od' - ,fi: 'Lataan OpenAPS tietoja' - ,ru: 'Загрузка данных OpenAPS от' - ,sk: 'Nahrávam OpenAPS dáta z' - ,pl: 'Ładuję dane OpenAPS z' - ,pt: 'Carregando dados de OpenAPS de' - ,ko: 'OpenAPS 데이터 로딩' - ,it: 'Caricamento in corso dati OpenAPS' - ,nl: 'OpenAPS gegevens opladen van' - ,tr: 'dan OpenAPS verileri yükleniyor' - ,zh_cn: '载入OpenAPS数据从' - ,hu: 'OpenAPS adatainak betöltése innen' - } - ,'Loading profile switch data' : { - cs: 'Nahrávám data přepnutí profilu' - ,he: 'טוען מידע החלפת פרופיל ' - ,de: 'Lade Daten Profil-Wechsel' - ,dk: 'Henter ny profildata' - ,es: 'Cargando el cambio de perfil de datos' - ,fr: 'Chargement de données de changement de profil' - ,el: 'Φόρτωση δεδομένων νέου προφίλ σε ισχύ' - ,ro: 'Se încarcă datele de schimbare profil' - ,sv: 'Laddar ny profildata' - ,nb: 'Laster nye profildata' - ,bg: 'Зареждане на данни от сменения профил' - ,hr: 'Učitavanje podataka promjene profila' - ,fi: 'Lataan profiilinvaihtotietoja' - ,ru: 'Загрузка данных нового профиля' - ,sk: 'Nahrávam dáta prepnutia profilu' - ,pl: 'Ładuję dane zmienionego profilu' - ,pt: 'Carregando dados de troca de perfil' - ,ko: '프로파일 변환 데이터 로딩' - ,it: 'Caricamento in corso dati cambio profilo' - ,nl: 'Ophalen van data om profiel te wisselen' - ,tr: 'Veri profili değişikliği yükleniyor' - ,zh_cn: '载入配置文件交换数据' - ,hu: 'Profil változás adatainak betöltése' - } - ,'Redirecting you to the Profile Editor to create a new profile.' : { - cs: 'Chybě nastavený profil.\nNení definovaný žádný platný profil k času zobrazení.\nProvádím přesměrování na editor profilu.' - ,he: 'הגדרת פרופיל שגוי. \n פרופיל מוגדר לזמן המוצג. מפנה מחדש לעורך פרופיל כדי ליצור פרופיל חדש. ' - ,el: 'Λάθος προφίλ. Παρακαλώ δημιουργήστε ένα νέο προφίλ' - ,fr: 'Erreur de réglage de profil. \nAucun profil défini pour indiquer l\'heure. \nRedirection vers la création d\'un nouveau profil. ' - ,de: 'Sie werden zum Profil-Editor weitergeleitet, um ein neues Profil anzulegen.' - ,dk: 'Forkert profilindstilling.\nIngen profil defineret til at vise tid.\nOmdirigere til profil editoren for at lave en ny profil.' - ,es: 'Configuración incorrecta del perfil. \n No establecido ningún perfil en el tiempo mostrado. \n Continuar en editor de perfil para crear perfil nuevo.' - ,bg: 'Грешни настройки на профила. \nНяма определен профил към избраното време. \nПрепращане към редактора на профила, за създаване на нов профил.' - ,hr: 'Krive postavke profila.\nNiti jedan profil nije definiran za prikazano vrijeme.\nPreusmjeravanje u editor profila kako biste stvorili novi.' - ,ro: 'Setare de profil eronată.\nNu este definit niciun profil pentru perioada afișată.\nMergeți la editorul de profiluri pentru a defini unul nou.' - ,sv: 'Fel profilinställning.\nIngen profil vald för vald tid.\nOmdirigerar för att skapa ny profil.' - ,nb: 'Feil profilinstilling.\nIngen profil valgt for valgt tid.\nVideresender for å lage ny profil.' - ,fi: 'Väärä profiiliasetus tai profiilia ei löydy.\nSiirrytään profiilin muokkaamiseen uuden profiilin luontia varten.' - ,ru: 'Переход к редактору профиля для создания нового' - ,sk: 'Zle nastavený profil.\nK zobrazenému času nieje definovaný žiadny profil.\nPresmerovávam na vytvorenie profilu.' - ,pl: 'Złe ustawienia profilu.\nDla podanego czasu nie zdefiniowano profilu.\nPrzekierowuję do edytora profili aby utworzyć nowy.' - ,pt: 'Configuração de perfil incorreta. \nNão há perfil definido para mostrar o horário. \nRedirecionando para o editor de perfil para criar um perfil novo.' - ,ko: '잘못된 프로파일 설정. \n프로파일이 없어서 표시된 시간으로 정의됩니다. 새 프로파일을 생성하기 위해 프로파일 편집기로 리다이렉팅' - ,it: 'Impostazione errata del profilo. \nNessun profilo definito per visualizzare l\'ora. \nReindirizzamento al profilo editor per creare un nuovo profilo.' - ,nl: 'Verkeerde profiel instellingen.\ngeen profiel beschibaar voor getoonde tijd.\nVerder naar profiel editor om een profiel te maken.' - ,tr: 'Yanlış profil ayarı.\nGörüntülenen zamana göre profil tanımlanmamış.\nYeni profil oluşturmak için profil düzenleyicisine yönlendiriliyor.' - ,zh_cn: '配置文件设置错误。\n没有配置文件定义为显示时间。\n返回配置文件编辑器以新建配置文件。' - ,hu: 'Átirányítás a profil szerkesztőre, hogy egy új profilt készítsen' - } - ,'Pump' : { - cs: 'Pumpa' - ,he: 'משאבה ' - ,sk: 'Pumpa' - ,fr: 'Pompe' - ,sv: 'Pump' - ,el: 'Αντλία' - ,nb: 'Pumpe' - ,de: 'Pumpe' - ,dk: 'Pumpe' - ,es: 'Bomba' - ,bg: 'Помпа' - ,hr: 'Pumpa' - ,ro: 'Pompă' - ,ru: 'Помпа' - ,nl: 'Pomp' - ,ko: '펌프' - ,fi: 'Pumppu' - , pl: 'Pompa' - ,pt: 'Bomba' - ,it: 'Pompa' - ,tr: 'Pompa' - ,zh_cn: '胰岛素泵' - ,hu: 'Pumpa' - } - ,'Sensor Age' : { - cs: 'Stáří senzoru (SAGE)' - ,he: 'גיל סנסור סוכר ' - ,sk: 'Zavedenie senzoru (SAGE)' - ,sv: 'Sensorålder (SAGE)' - ,fr: 'Âge du senseur (SAGE)' - ,el: 'Ημέρες χρήσης αισθητήρα (SAGE)' - ,nb: 'Sensoralder (SAGE)' - ,de: 'Sensor-Alter' - ,dk: 'Sensor alder (SAGE)' - ,es: 'Días uso del sensor' - ,bg: 'Възраст на сензора (ВС)' - ,hr: 'Starost senzora' - ,ro: 'Vechimea senzorului' - ,ru: 'Сенсор работает' - ,nl: 'Sensor leeftijd' - ,ko: '센서 사용 기간' - ,fi: 'Sensorin ikä' - , pl: 'Wiek sensora' - ,pt: 'Idade do sensor' - ,it: 'SAGE - Durata Sensore' - ,tr: '(SAGE) Sensör yaşı ' - ,zh_cn: '探头使用时间(SAGE)' - ,zh_tw: '探頭使用時間(SAGE)' - ,hu: 'Szenzor élettartalma (SAGE)' - } - ,'Insulin Age' : { - cs: 'Stáří inzulínu (IAGE)' - ,he: 'גיל אינסולין ' - ,sk: 'Výmena inzulínu (IAGE)' - ,fr: 'Âge de l\'insuline (IAGE)' - ,el: 'Ημέρες χρήσης αμπούλας ινσουλίνης (IAGE)' - ,sv: 'Insulinålder (IAGE)' - ,nb: 'Insulinalder (IAGE)' - ,de: 'Insulin-Alter' - ,dk: 'Insulinalder (IAGE)' - ,es: 'Días uso cartucho insulina' - ,bg: 'Възраст на инсулина (ВИ)' - ,hr: 'Starost inzulina' - ,ro: 'Vechimea insulinei' - ,ru: 'Инсулин работает' - ,ko: '인슐린 사용 기간' - ,fi: 'Insuliinin ikä' - , pl: 'Wiek insuliny' - ,pt: 'Idade da insulina' - ,it: 'IAGE - Durata Insulina' - ,nl: 'Insuline ouderdom (IAGE)' - ,tr: '(IAGE) İnsülin yaşı' - ,zh_cn: '胰岛素使用时间(IAGE)' - ,zh_tw: '胰島素使用時間(IAGE)' - ,hu: 'Inzulin élettartalma (IAGE)' - } - ,'Temporary target' : { - cs: 'Dočasný cíl' - ,he: 'מטרה זמנית ' - ,de: 'Temporäres Ziel' - ,dk: 'Midlertidig mål' - ,es: 'Objetivo temporal' - ,fr: 'Cible temporaire' - ,sk: 'Dočasný cieľ' - ,el: 'Προσωρινός στόχος' - ,sv: 'Tillfälligt mål' - ,nb: 'Mildertidig mål' - ,bg: 'Временна граница' - ,hr: 'Privremeni cilj' - ,ro: 'Țintă temporară' - ,ru: 'Временная цель' - ,nl: 'Tijdelijk doel' - ,ko: '임시 목표' - ,fi: 'Tilapäinen tavoite' - , pl: 'Tymczasowy cel' - ,pt: 'Meta temporária' - ,it: 'Obiettivo Temporaneo' - ,tr: 'Geçici hedef' - ,zh_cn: '临时目标' - ,hu: 'Átmeneti cél' - } - ,'Reason' : { - cs: 'Důvod' - ,he: 'סיבה ' - ,sk: 'Dôvod' - ,fr: 'Raison' - ,sv: 'Orsak' - ,el: 'Αιτία' - ,nb: 'Årsak' - ,de: 'Begründung' - ,dk: 'Årsag' - ,es: 'Razonamiento' - ,bg: 'Причина' - ,hr: 'Razlog' - ,nl: 'Reden' - ,ro: 'Motiv' - ,ru: 'Причина' - ,ko: '근거' - ,fi: 'Syy' - , pl: 'Powód' - ,pt: 'Razão' - ,it: 'Ragionare' - ,tr: 'Neden' // Gerekçe - ,zh_cn: '原因' - ,hu: 'Indok' - } - ,'Eating soon' : { - cs: 'Následuje jídlo' - ,he: 'אוכל בקרוב' - ,sk: 'Jesť čoskoro' - ,fr: 'Repas sous peu' - ,sv: 'Snart matdags' - ,nb: 'Snart tid for mat' - ,de: 'Bald essen' - ,dk: 'Spiser snart' - ,es: 'Comer pronto' - ,bg: 'Ядене скоро' - ,hr: 'Uskoro jelo' - ,ro: 'Mâncare în curând' - ,ru: 'Ожидаемый прием пищи' - ,nl: 'Binnenkort eten' - ,ko: '편집 중' - ,fi: 'Syödään pian' - , pl: 'Zjedz wkrótce' - ,pt: 'Refeição em breve' - ,it: 'Mangiare prossimamente' - ,tr: 'Yakında yemek' // Kısa zamanda yemek yenecek - ,zh_cn: '接近用餐时间' - ,hu: 'Hamarosan eszem' - } - ,'Top' : { - cs: 'Horní' - ,he: 'למעלה ' - ,sk: 'Vrchná' - ,fr: 'Haut' - ,sv: 'Toppen' - ,el: 'Πάνω' - ,nb: 'Øverst' - ,de: 'Oben' - ,dk: 'Toppen' - ,es: 'Superior' - ,bg: 'Горе' - ,hr: 'Vrh' - ,ro: 'Deasupra' - ,ru: 'Верх' - ,nl: 'Boven' - ,ko: '최고' - ,fi: 'Ylä' - ,pt: 'Superior' - ,it: 'Superiore' - ,tr: 'Üst' - ,zh_cn: '顶部' - ,pl: 'Góra' - ,hu: 'Felső' - } - ,'Bottom' : { - cs: 'Dolní' - ,he: 'למטה ' - ,sk: 'Spodná' - ,sv: 'Botten' - ,fr: 'Bas' - ,el: 'Κάτω' - ,nb: 'Nederst' - ,de: 'Unten' - ,dk: 'Bunden' - ,es: 'Inferior' - ,bg: 'Долу' - ,hr: 'Dno' - ,ro: 'Sub' - ,ru: 'Низ' - ,nl: 'Beneden' - ,ko: '최저' - ,fi: 'Ala' - ,pt: 'Inferior' - ,it: 'Inferiore' - ,tr: 'Alt' //aşağı, alt, düşük - ,zh_cn: '底部' - ,pl: "Dół" - ,hu: "Alsó" - } - ,'Activity' : { - cs: 'Aktivita' - ,he: 'פעילות ' - ,sk: 'Aktivita' - ,fr: 'Activité' - ,sv: 'Aktivitet' - ,el: 'Δραστηριότητα' - ,nb: 'Aktivitet' - ,de: 'Aktivität' - ,dk: 'Aktivitet' - ,es: 'Actividad' - ,bg: 'Активност' - ,hr: 'Aktivnost' - ,ro: 'Activitate' - ,ru: 'Активность' - ,nl: 'Activiteit' - ,ko: '활성도' - ,fi: 'Aktiviteetti' - ,pt: 'Atividade' - ,it: 'Attività' - ,tr: 'Aktivite' - ,zh_cn: '有效的' - ,pl: 'Aktywność' - ,hu: 'Aktivitás' - } - ,'Targets' : { - cs: 'Cíl' - ,he: 'מטרות ' - ,sk: 'Ciele' - ,fr: 'Cibles' - ,el: 'Στόχοι' - ,de: 'Ziele' - ,dk: 'Mål' - ,es: 'Objetivos' - ,sv: 'Mål' - ,nb: 'Mål' - ,bg: 'Граници' - ,hr: 'Ciljevi' - ,ro: 'Ținte' - ,ru: 'Цели' - ,nl: 'Doelen' - ,ko: '목표' - ,fi: 'Tavoitteet' - ,pt: 'Metas' - ,it: 'Obiettivi' - ,tr: 'Hedefler' - ,zh_cn: '目标' - ,pl: 'Cele' - ,hu: 'Célok' - } - ,'Bolus insulin:' : { - cs: 'Bolusový inzulín:' - ,he: 'אינסולין בולוס ' - ,bg: 'Болус инсулин' - ,fr: 'Bolus d\'Insuline' - ,ro: 'Insulină bolusată:' - ,el: 'Ινσουλίνη' - ,es: 'Bolo de Insulina' - ,ru: 'Болюсный инсулин' - ,sv: 'Bolusinsulin:' - ,nb: 'Bolusinsulin:' - ,hr: 'Bolus:' - ,ko: 'Bolus 인슐린' - ,fi: 'Bolusinsuliini:' - ,de: 'Bolus Insulin:' - ,dk: 'Bolusinsulin:' - ,pt: 'Insulina de bolus' - ,sk: 'Bolusový inzulín:' - ,it: 'Insulina Bolo' - ,nl: 'Bolus insuline' - ,tr: 'Bolus insülin:' - ,zh_cn: '大剂量胰岛素' - ,pl: 'Bolus insuliny' - ,hu: 'Bólus inzulin' - } - ,'Base basal insulin:' : { - cs: 'Základní bazální inzulín:' - ,he: 'אינסולין בזלי בסיס ' - ,bg: 'Основен базален инсулин' - ,fr: 'Débit basal de base' - ,ro: 'Bazala obișnuită:' - ,el: 'Βασική Ινσουλίνη' - ,es: 'Insulina basal básica' - ,ru: 'Профильный базальный инсулин' - ,sv: 'Basalinsulin:' - ,nb: 'Basalinsulin:' - ,hr: 'Osnovni bazal:' - ,ko: '기본 basal 인슐린' - ,fi: 'Basaalin perusannos:' - ,de: 'Basis Basal Insulin:' - ,dk: 'Basalinsulin:' - ,pt: 'Insulina basal programada:' - ,sk: 'Základný bazálny inzulín:' - ,it: 'Insulina Basale:' - ,nl: 'Basis basaal insuline' - ,tr: 'Temel bazal insülin' - ,zh_cn: '基础率胰岛素' - ,pl: 'Bazowa dawka insuliny' - ,hu: 'Általános bazal inzulin' - } - ,'Positive temp basal insulin:' : { - cs: 'Pozitivní dočasný bazální inzulín:' - ,he: 'אינסולין בזלי זמני חיובי ' - ,bg: 'Положителен временен базален инсулин' - ,fr: 'Débit basal temporaire positif' - ,ro: 'Bazala temporară marită:' - ,es: 'Insulina Basal temporal positiva:' - ,el: 'Θετική βασική ινσουλίνη' - ,ru: 'Положит знач временн базал инс ' - ,sv: 'Positiv tempbasal insulin:' - ,nb: 'Positiv midlertidig basalinsulin:' - ,hr: 'Pozitivni temp bazal:' - ,ko: '초과된 임시 basal 인슐린' - ,fi: 'Positiivinen tilapäisbasaali:' - ,de: 'Positives temporäres Basal Insulin:' - ,dk: 'Positiv midlertidig basalinsulin:' - , pl: 'Zwiększona bazowa dawka insuliny' - ,pt: 'Insulina basal temporária positiva:' - ,sk: 'Pozitívny dočasný bazálny inzulín:' - ,it: 'Insulina basale temp positiva:' - ,nl: 'Extra tijdelijke basaal insuline' - ,tr: 'Pozitif geçici bazal insülin:' - ,zh_cn: '实际临时基础率胰岛素' - ,hu: 'Pozitív átmeneti bazál inzulin' - } - ,'Negative temp basal insulin:' : { - cs:'Negativní dočasný bazální inzulín:' - ,he: 'אינסולין בזלי זמני שלילי ' - ,bg: 'Отрицателен временен базален инсулин' - ,fr: 'Débit basal temporaire négatif' - ,ro: 'Bazala temporară micșorată:' - ,el: 'Αρνητική βασική ινσουλίνη' - ,ru: 'Отриц знач временн базал инс' - ,sv: 'Negativ tempbasal för insulin:' - ,es: 'Insulina basal temporal negativa:' - ,nb: 'Negativ midlertidig basalinsulin:' - ,hr: 'Negativni temp bazal:' - ,ko: '남은 임시 basal 인슐린' - ,fi: 'Negatiivinen tilapäisbasaali:' - ,de: 'Negatives temporäres Basal Insulin:' - ,dk: 'Negativ midlertidig basalinsulin:' - , pl: 'Zmniejszona bazowa dawka insuliny' - ,pt: 'Insulina basal temporária negativa:' - ,sk: 'Negatívny dočasný bazálny inzulín:' - ,it: 'Insulina basale Temp negativa:' - ,nl: 'Negatieve tijdelijke basaal insuline' - ,tr: 'Negatif geçici bazal insülin:' - ,zh_cn: '其余临时基础率胰岛素' - ,hu: 'Negatív átmeneti bazál inzulin' - } - ,'Total basal insulin:' : { - cs: 'Celkový bazální inzulín:' - ,he: 'סך אינסולין בזלי ' - ,bg: 'Общо базален инсулин' - ,fr: 'Insuline basale au total:' - ,ro: 'Bazala totală:' - ,es: 'Total Insulina basal:' - ,el: 'Συνολική Βασική Ινσουλίνη (BASAL)' - ,ru: 'Всего базал инсулина' - ,sv: 'Total dagsdos basalinsulin:' - ,nb: 'Total daglig basalinsulin:' - ,hr: 'Ukupno bazali:' - ,ko: '전체 basal 인슐린' - ,fi: 'Basaali yhteensä:' - ,de: 'Gesamt Basal Insulin:' - ,dk: 'Total daglig basalinsulin:' - , pl: 'Całkowita ilość bazowej dawki insuliny' - ,pt: 'Insulina basal total:' - ,sk: 'Celkový bazálny inzulín:' - ,it: 'Insulina Basale Totale:' - ,nl: 'Totaal basaal insuline' - ,tr: 'Toplam bazal insülin:' - ,zh_cn: '基础率胰岛素合计' - ,hu: 'Teljes bazál inzulin' - } - ,'Total daily insulin:' : { - cs:'Celkový denní inzulín:' - ,he: 'סך אינסולין ביום ' - ,bg: 'Общо инсулин за деня' - ,fr: 'Insuline totale journalière' - ,ro: 'Insulina totală zilnică:' - ,el: 'Συνολική Ημερήσια Ινσουλίνη' - ,ru: 'Всего суточн базал инсулина' - ,sv: 'Total dagsdos insulin' - ,nb: 'Total daglig insulin' - ,hr: 'Ukupno dnevni inzulin:' - ,ko: '하루 인슐린 총량' - ,fi: 'Päivän kokonaisinsuliiniannos' - ,de: 'Gesamtes tägliches Insulin:' - ,dk: 'Total dagsdosis insulin' - ,es: 'Total Insulina diaria:' - ,pl: 'Całkowita dzienna ilość insuliny' - ,pt: 'Insulina diária total:' - ,sk: 'Celkový denný inzulín:' - ,it: 'Totale giornaliero d\'insulina:' - ,nl: 'Totaal dagelijkse insuline' - ,tr: 'Günlük toplam insülin:' - ,zh_cn: '每日胰岛素合计' - ,hu: 'Teljes napi inzulin' - } - ,'Unable to %1 Role' : { // PUT or POST - cs: 'Chyba volání %1 Role:' - ,he: 'לא יכול תפקיד %1' - ,bg: 'Невъзможно да %1 Роля' - ,hr: 'Unable to %1 Role' - ,fr: 'Incapable de %1 rôle' - ,ro: 'Imposibil de %1 Rolul' - ,es: 'Incapaz de %1 Rol' - ,ru: 'Невозможно назначить %1 Роль' - ,sv: 'Kan inte ta bort roll %1' - ,nb: 'Kan ikke %1 rolle' - ,fi: '%1 operaatio roolille opäonnistui' - ,de: 'Unpassend zu %1 Rolle' - ,dk: 'Kan ikke slette %1 rolle' - ,pl: 'Nie można %1 roli' - ,pt: 'Função %1 não foi possível' - ,sk: 'Chyba volania %1 Role' - ,ko: '%1로 비활성' - ,it: 'Incapace di %1 Ruolo' - ,nl: 'Kan %1 rol niet verwijderen' - ,tr: '%1 Rolü yapılandırılamadı' - ,zh_cn: '%1角色不可用' - ,hu: 'Hiba a %1 szabály hívásánál' - } - ,'Unable to delete Role' : { - cs: 'Nelze odstranit Roli:' - ,he: 'לא יכול לבטל תפקיד ' - ,bg: 'Невъзможно изтриването на Роля' - ,hr: 'Ne mogu obrisati ulogu' - ,ro: 'Imposibil de șters Rolul' - ,fr: 'Effacement de rôle impossible' - ,ru: 'Невозможно удалить Роль' - ,sv: 'Kan ej ta bort roll' - ,es: 'Imposible elimar Rol' - ,nb: 'Kan ikke ta bort rolle' - ,fi: 'Roolin poistaminen epäonnistui' - ,de: 'Rolle nicht löschbar' - ,dk: 'Kan ikke slette rolle' - ,pt: 'Não foi possível apagar a Função' - ,sk: 'Rola sa nedá zmazať' - ,ko: '삭제로 비활성' - ,it: 'Incapace di eliminare Ruolo' - ,nl: 'Niet mogelijk rol te verwijderen' - ,tr: 'Rol silinemedi' - ,zh_cn: '无法删除角色' - ,pl: 'Nie można usunąć roli' - ,hu: 'Nem lehetett a Szerepet törölni' - } - ,'Database contains %1 roles' : { - cs: 'Databáze obsahuje %1 rolí' - ,he: 'בסיס הנתונים מכיל %1 תפקידים ' - ,bg: 'Базата данни съдържа %1 роли' - ,hr: 'baza sadrži %1 uloga' - ,ro: 'Baza de date conține %1 rol(uri)' - ,fr: 'La base de données contient %1 rôles' - ,ru: 'База данных содержит %1 Ролей' - ,sv: 'Databasen innehåller %1 roller' - ,es: 'Base de datos contiene %1 Roles' - ,nb: 'Databasen inneholder %1 roller' - ,fi: 'Tietokanta sisältää %1 roolia' - ,de: 'Datenbank enthält %1 Rollen' - ,dk: 'Databasen indeholder %1 roller' - , pl: 'Baza danych zawiera %1 ról' - ,pt: 'Banco de dados contém %1 Funções' - ,sk: 'Databáza obsahuje %1 rolí' - ,ko: '데이터베이스가 %1 포함' - ,it: 'Database contiene %1 ruolo' - ,nl: 'Database bevat %1 rollen' - ,tr: 'Veritabanı %1 rol içerir' - ,zh_cn: '数据库包含%1个角色' - ,hu: 'Az adatbázis %1 szerepet tartalmaz' - } - ,'Edit Role' : { - cs:'Editovat roli' - ,he: 'ערוך תפקיד ' - ,bg: 'Промени Роля' - ,hr: 'Uredi ulogu' - ,ro: 'Editează Rolul' - ,fr: 'Éditer le rôle' - ,ru: 'Редактировать Роль' - ,sv: 'Editera roll' - ,nb: 'Editer rolle' - ,fi: 'Muokkaa roolia' - ,de: 'Rolle editieren' - ,dk: 'Rediger rolle' - ,es: 'Editar Rol' - ,pl: 'Edycja roli' - ,pt: 'Editar Função' - ,sk: 'Editovať rolu' - ,ko: '편집 모드' - ,it: 'Modifica ruolo' - ,nl: 'Pas rol aan' - ,tr: 'Rolü düzenle' - ,zh_cn: '编辑角色' - ,hu: 'Szerep szerkesztése' - } - ,'admin, school, family, etc' : { - cs: 'administrátor, škola, rodina atd...' - ,he: 'מנהל, בית ספר, משפחה, וכו ' - ,bg: 'администратор,училище,семейство и т.н.' - ,hr: 'admin, škola, obitelj, itd.' - ,fr: 'Administrateur, école, famille, etc' - ,ro: 'administrator, școală, familie, etc' - ,ru: 'админ, школа, семья и т д' - ,es: 'Adminitrador, escuela, família, etc' - ,sv: 'Administratör, skola, familj, etc' - ,nb: 'Administrator, skole, familie osv' - ,fi: 'ylläpitäjä, koulu, perhe jne' - ,de: 'Administrator, Schule, Familie, etc' - ,dk: 'Administrator, skole, familie, etc' - ,pl: 'administrator, szkoła, rodzina, itp' - ,pt: 'Administrador, escola, família, etc' - ,sk: 'administrátor, škola, rodina atď...' - ,ko: '관리자, 학교, 가족 등' - ,it: 'amministrazione, scuola, famiglia, etc' - ,nl: 'admin, school, familie, etc' - ,tr: 'yönetici, okul, aile, vb' - ,zh_cn: '政府、学校、家庭等' - ,hu: 'admin, iskola, család, stb' - } - ,'Permissions' : { - cs: 'Oprávnění' - ,he: 'הרשאות ' - ,bg: 'Права' - ,hr: 'Prava' - ,ro: 'Permisiuni' - ,fr: 'Permissions' - ,ru: 'Разрешения' - ,sv: 'Rättigheter' - ,nb: 'Rettigheter' - ,fi: 'Oikeudet' - ,de: 'Berechtigungen' - ,dk: 'Rettigheder' - ,es: 'Permisos' - ,pl: 'Uprawnienia' - ,pt: 'Permissões' - ,sk: 'Oprávnenia' - ,ko: '허가' - ,it: 'Permessi' - ,nl: 'Rechten' - ,tr: 'İzinler' - ,zh_cn: '权限' - ,hu: 'Engedély' - } - ,'Are you sure you want to delete: ' : { - cs: 'Opravdu vymazat: ' - ,he: 'אתה בטוח שאתה רוצה למחוק' - ,bg: 'Потвърдете изтриването' - ,hr: 'Sigurno želite obrisati?' - ,ro: 'Confirmați ștergerea: ' - ,fr: 'Êtes-vous sûr de vouloir effacer:' - ,ru: 'Подтвердите удаление' - ,sv: 'Är du säker att du vill ta bort:' - ,nb: 'Er du sikker på at du vil slette:' - ,fi: 'Oletko varmat että haluat tuhota: ' - ,de: 'Sind sie sicher, das Sie löschen wollen:' - ,dk: 'Er du sikker på at du vil slette:' - ,es: 'Seguro que quieres eliminarlo:' - ,pl: 'Jesteś pewien, że chcesz usunąć:' - ,pt: 'Tem certeza de que deseja apagar:' - ,sk: 'Naozaj zmazať:' - ,ko: '정말로 삭제하시겠습니까: ' - ,it: 'Sei sicuro di voler eliminare:' - ,nl: 'Weet u het zeker dat u wilt verwijderen?' - ,tr: 'Silmek istediğinizden emin misiniz:' - ,zh_cn: '你确定要删除:' - ,hu: 'Biztos, hogy törölni szeretnéd: ' - } - ,'Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.' : { - cs: 'Každá role má 1 nebo více oprávnění. Oprávnění * je zástupný znak, oprávnění jsou hiearchie používající : jako oddělovač.' - ,bg: 'Всяка роля ще има 1 или повече права. В * правото е маска, правата са йерархия използвайки : като разделител' - ,hr: 'Svaka uloga ima 1 ili više prava. Pravo * je univerzalno, a prava su hijerarhija koja koristi znak : kao graničnik.' - ,fr: 'Chaque rôle aura une ou plusieurs permissions. La permission * est un joker (permission universelle), les permissions sont une hierarchie utilisant : comme séparatuer' - ,ro: 'Fiecare rol va avea cel puțin o permisiune. Permisiunea * este totală, permisiunile sunt ierarhice utilizând : pe post de separator.' - ,ru: 'Каждая роль имеет 1 или более разрешений. Разрешение * это подстановочный символ, разрешения это иерархия, использующая : как разделитель.' - ,sv: 'Varje roll kommer få en eller flera rättigheter. * är en wildcard, rättigheter sätts hirarkiskt med : som avgränsare.' - ,dk: 'Hver rolle vil have en eller flere rettigheder. Rollen * fungere som wildcard / joker, rettigheder sættes hierakisk med : som skilletegn.' - ,nb: 'Hver enkelt rolle vil ha en eller flere rettigheter. *-rettigheten er wildcard. Rettigheter settes hierarkisk med : som separator.' - ,fi: 'Jokaisella roolilla on yksi tai useampia oikeuksia. * on jokeri (tunnistuu kaikkina oikeuksina), oikeudet ovat hierarkia joka käyttää : merkkiä erottimena.' - ,de: 'Jede Rolle hat eine oder mehrere Berechtigungen. Die * Berechtigung ist ein Platzhalter, Berechtigungen sind hierachrchisch mit : als Separator.' - ,es: 'Cada Rol tiene uno o más permisos. El permiso * es un marcador de posición y los permisos son jerárquicos con : como separador.' - , pl: 'Każda rola będzie mieć 1 lub więcej uprawnień. Symbol * uprawnia do wszystkiego. Uprawnienia są hierarchiczne, używając : jako separatora.' - ,pt: 'Cada função terá uma ou mais permissões. A permissão * é um wildcard, permissões são uma hierarquia utilizando * como um separador.' - ,sk: 'Každá rola má 1 alebo viac oprávnení. Oprávnenie * je zástupný znak, oprávnenia sú hierarchie používajúce : ako oddelovač.' - ,ko: '각각은 1 또는 그 이상의 허가를 가지고 있습니다. 허가는 예측이 안되고 구분자로 : 사용한 계층이 있습니다' - ,it: 'Ogni ruolo avrà un 1 o più autorizzazioni. Il * il permesso è un jolly, i permessi sono una gerarchia utilizzando : come separatore.' - ,nl: 'Elke rol heeft mintens 1 machtiging. De * machtiging is een wildcard, machtigingen hebben een hyrarchie door gebruik te maken van : als scheidingsteken.' - ,tr: 'Her rolün bir veya daha fazla izni vardır.*izni bir yer tutucudur ve izinler ayırıcı olarak : ile hiyerarşiktir.' - ,zh_cn: '每个角色都具有一个或多个权限。权限设置时使用*作为通配符,层次结构使用:作为分隔符。' - ,hu: 'Minden szerepnek egy vagy több engedélye van. A * engedély helyettesítő engedély amely a hierarchiához : használja elválasztásnak.' - } - ,'Add new Role' : { - cs: 'Přidat novou roli' - ,he: 'הוסף תפקיד חדש ' - ,bg: 'Добавете нова роля' - ,hr: 'Dodaj novu ulogu' - ,fr: 'Ajouter un nouveau rôle' - ,ro: 'Adaugă un Rol nou' - ,ru: 'Добавить новую Роль' - ,es: 'Añadir nuevo Rol' - ,sv: 'Lägg till roll' - ,nb: 'Legg til ny rolle' - ,fi: 'Lisää uusi rooli' - ,de: 'Eine neue Rolle hinzufügen' - ,dk: 'Tilføj ny rolle' - ,pt: 'Adicionar novo Papel' - ,sk: 'Pridať novú rolu' - ,ko: '새 역할 추가' - ,it: 'Aggiungere un nuovo ruolo' - ,nl: 'Voeg rol toe' - ,tr: 'Yeni Rol ekle' - ,zh_cn: '添加新角色' - ,pl: 'Dodaj nową rolę' - ,hu: 'Új szerep hozzáadása' - } - ,'Roles - Groups of People, Devices, etc' : { - cs: 'Role - Skupiny lidí, zařízení atd.' - ,he: 'תפקידים - קבוצות של אנשים, התקנים, וכו ' - ,bg: 'Роли - Група хора,устройства,т.н.' - ,hr: 'Uloge - Grupe ljudi, uređaja, itd.' - ,fr: 'Rôles - Groupe de Personnes ou d\'appareils' - ,ro: 'Roluri - Grupuri de persoane, dispozitive, etc' - ,es: 'Roles - Grupos de Gente, Dispositivos, etc.' - ,ru: 'Роли- группы людей, устройств и т п' - ,sv: 'Roller - Grupp av användare, Enheter, etc' - ,nb: 'Roller - Grupper av brukere, enheter osv' - ,fi: 'Roolit - Ihmisten ja laitteiden muodostamia ryhmiä' - ,de: 'Rollen - Gruppierungen von Menschen, Geräten, etc.' - ,dk: 'Roller - Grupper af brugere, Enheder, etc' - ,pt: 'Funções - grupos de pessoas, dispositivos, etc' - ,sk: 'Role - skupiny ľudí, zariadení atď...' - ,ko: '역할 - 그룹, 기기, 등' - ,it: 'Ruoli - gruppi di persone, dispositivi, etc' - ,nl: 'Rollen - Groepen mensen apparaten etc' - ,tr: 'Roller - İnsan grupları, Cihazlar vb.' - ,zh_cn: '角色 - 一组人或设备等' - ,pl: 'Role - Grupy ludzi, urządzeń, itp' - ,hu: 'Szerepek - Emberek csoportja, berendezések, stb.' - } - ,'Edit this role' : { - cs: 'Editovat tuto roli' - ,he: 'ערוך תפקיד זה ' - ,bg: 'Промени тази роля' - ,hr: 'Uredi ovu ulogu' - ,fr: 'Editer ce rôle' - ,ro: 'Editează acest rol' - ,ru: 'Редактировать эту роль' - ,es: 'Editar este Rol' - ,sv: 'Editera denna roll' - ,nb: 'Editer denne rollen' - ,fi: 'Muokkaa tätä roolia' - ,de: 'Editiere diese Rolle' - ,dk: 'Rediger denne rolle' - ,pt: 'Editar esta Função' - ,sk: 'Editovať túto rolu' - ,ko: '이 역할 편집' - ,it: 'Modifica questo ruolo' - ,nl: 'Pas deze rol aan' - ,tr: 'Bu rolü düzenle' - ,zh_cn: '编辑角色' - ,pl: 'Edytuj rolę' - ,hu: 'Szerep szerkesztése' - } - ,'Admin authorized' : { - cs: 'Admin autorizován' - ,he: 'מנהל אושר ' - ,bg: 'Оторизиран като администратор' - ,hr: 'Administrator ovlašten' - ,fr: 'Administrateur autorisé' - ,ro: 'Autorizat de admin' - ,es: 'Administrador autorizado' - ,ru: 'Разрешено администратором' - ,sv: 'Administratorgodkänt' - ,nb: 'Administratorgodkjent' - ,fi: 'Ylläpitäjä valtuutettu' - ,de: 'als Administrator autorisiert' - ,dk: 'Administrator godkendt' - ,pt: 'Administrador autorizado' - ,sk: 'Admin autorizovaný' - ,ko: '인증된 관리자' - ,it: 'Amministrativo autorizzato' - ,nl: 'Admin geauthoriseerd' - ,tr: 'Yönetici yetkilendirildi' - ,zh_cn: '已授权' - ,zh_tw: '已授權' - ,pl: 'Administrator autoryzowany' - ,hu: 'Adminisztrátor engedélyezve' - } - ,'Subjects - People, Devices, etc' : { - cs: 'Subjekty - Lidé, zařízení atd.' - ,he: 'נושאים - אנשים, התקנים וכו ' - ,bg: 'Субекти - Хора,Устройства,т.н.' - ,hr: 'Subjekti - Ljudi, uređaji, itd.' - ,fr: 'Utilisateurs - Personnes, Appareils, etc' - ,ro: 'Subiecte - Persoane, dispozitive, etc' - ,es: 'Sujetos - Personas, Dispositivos, etc' - ,ru: 'Субъекты - Люди, устройства и т п' - ,sv: 'Ämnen - Användare, Enheter, etc' - ,nb: 'Ressurser - Brukere, enheter osv' - ,fi: 'Käyttäjät (Ihmiset, laitteet jne)' - ,de: 'Subjekte - Menschen, Geräte, etc' - ,dk: 'Emner - Brugere, Enheder, etc' - ,pt: 'Assunto - Pessoas, dispositivos, etc' - ,sk: 'Subjekty - ľudia, zariadenia atď...' - ,ko: '주제 - 사람, 기기 등' - ,it: 'Soggetti - persone, dispositivi, etc' - ,nl: 'Onderwerpen - Mensen, apparaten etc' - ,tr: 'Konular - İnsanlar, Cihazlar, vb.' - ,zh_cn: '用户 - 人、设备等' - ,pl: 'Obiekty - ludzie, urządzenia itp' - ,hu: 'Semélyek - Emberek csoportja, berendezések, stb.' - } - ,'Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.' : { - cs: 'Každý subjekt má svůj unikátní token a 1 nebo více rolí. Klikem na přístupový token se otevře nové okno pro tento subjekt. Tento link je možné sdílet.' - ,he: 'לכל נושא תהיה אסימון גישה ייחודי ותפקיד אחד או יותר. לחץ על אסימון הגישה כדי לפתוח תצוגה חדשה עם הנושא הנבחר, קישור סודי זה יכול להיות משותף ' - ,bg: 'Всеки обект ще има уникален ключ за достъп и 1 или повече роли. Кликнете върху ключа за достъп, за да отворите нов изглед с избрания обект, тази секретна връзка може след това да се споделя' - ,hr: 'Svaki subjekt će dobiti jedinstveni pristupni token i jednu ili više uloga. Kliknite na pristupni token kako bi se otvorio novi pogled sa odabranim subjektom, a tada se tajni link može podijeliti.' - ,fr: 'Chaque utilisateur aura un identificateur unique et un ou plusieurs rôles. Cliquez sur l\'identificateur pour révéler l\'utilisateur, ce lien secret peut être partagé.' - ,ro: 'Fiecare subiect va avea o cheie unică de acces și unul sau mai multe roluri. Apăsați pe cheia de acces pentru a vizualiza subiectul selectat, acest link poate fi distribuit.' - ,ru: 'Каждый субъект получает уникальный код доступа и 1 или более ролей. Нажмите на иконку кода доступа чтобы открыть новое окно с выбранным субъектом, эту секретную ссылку можно переслать.' - ,es: 'Cada sujeto tendrá un identificador de acceso único y 1 o más roles. Haga clic en el identificador de acceso para abrir una nueva vista con el tema seleccionado, este enlace secreto puede ser compartido.' - ,sv: 'Varje ämne får en unik säkerhetsnyckel och en eller flera roller. Klicka på accessnyckeln för att öppna en ny vy med det valda ämnet, denna hemliga länk kan sedan delas.' - ,nb: 'Hver enkelt ressurs får en unik sikkerhetsnøkkel og en eller flere roller. Klikk på sikkerhetsnøkkelen for å åpne valgte ressurs, den hemmelige lenken kan så deles.' - ,fi: 'Jokaisella käyttäjällä on uniikki pääsytunniste ja yksi tai useampi rooli. Klikkaa pääsytunnistetta nähdäksesi käyttäjän, jolloin saat jaettavan osoitteen tämän käyttäjän oikeuksilla.' - ,de: 'Jedes Subjekt erhält einen einzigartigen Zugriffsschlüssel und eine oder mehrere Rollen. Klicke auf den Zugriffsschlüssel, um eine neue Ansicht mit dem ausgewählten Subjekt zu erhalten. Dieser geheime Link kann geteilt werden.' - ,dk: 'Hvert emne vil have en unik sikkerhedsnøgle samt en eller flere roller. Klik på sikkerhedsnøglen for at åbne et nyt view med det valgte emne, dette hemmelige link kan derefter blive delt.' - ,pt: 'Cada assunto terá um único token de acesso e uma ou mais Funções. Clique no token de acesso para abrir uma nova visualização com o assunto selecionado. Este link secreto poderá então ser compartilhado' - ,sk: 'Každý objekt má svoj unikátny prístupový token a 1 alebo viac rolí. Klikni na prístupový token pre otvorenie nového okna pre tento subjekt. Tento link je možné zdielať.' - ,ko: '각 주제는 유일한 access token을 가지고 1 또는 그 이상의 역할을 가질 것이다. 선택된 주제와 새로운 뷰를 열기 위해 access token을 클릭하세요. 이 비밀 링크는 공유되어질 수 있다.' - ,it: 'Ogni soggetto avrà un gettone d\'accesso unico e 1 o più ruoli. Fare clic sul gettone d\'accesso per aprire una nuova vista con il soggetto selezionato, questo legame segreto può quindi essere condiviso.' - ,nl: 'Elk onderwerp heeft een unieke toegangscode en 1 of meer rollen. Klik op de toegangscode om een nieu venster te openen om het onderwerp te bekijken, deze verborgen link kan gedeeld worden.' - ,tr: 'Her konu benzersiz bir erişim anahtarı ve bir veya daha fazla rol alır. Seçilen konuyla ilgili yeni bir görünüm elde etmek için erişim tuşuna tıklayın. Bu gizli bağlantı paylaşılabilinir.' - ,zh_cn: '每个用户具有唯一的访问令牌和一个或多个角色。在访问令牌上单击打开新窗口查看已选择用户,此时该链接可分享。' - ,pl: 'Każdy obiekt będzie miał unikalny token dostępu i jedną lub więcej ról. Kliknij token dostępu, aby otworzyć nowy widok z wybranym obiektem, ten tajny link może być następnie udostępniony' - ,hu: 'Mindegyik személynek egy egyedi hozzáférése lesz 1 vagy több szereppel. Kattints a tokenre, hogy egy új nézetet kapj - a kapott linket megoszthatod velük.' - } - ,'Add new Subject' : { - cs: 'Přidat nový subjekt' - ,he: 'הוסף נושא חדש ' - ,bg: 'Добави нов субект' - ,hr: 'Dodaj novi subjekt' - ,fr: 'Ajouter un nouvel Utilisateur' - ,ro: 'Adaugă un Subiect nou' - ,ru: 'Добавить нового субъекта' - ,sv: 'Lägg till nytt ämne' - ,nb: 'Legg til ny ressurs' - ,fi: 'Lisää uusi käyttäjä' - ,de: 'Füge ein neues Subjekt hinzu' - ,dk: 'Tilføj nye emner' - ,es: 'Añadir nuevo Sujeto' - ,pt: 'Adicionar novo assunto' - ,sk: 'Pridať nový subjekt' - ,ko: '새 주제 추가' - ,it: 'Aggiungere un nuovo Soggetto' - ,nl: 'Voeg onderwerp toe' - ,tr: 'Yeni konu ekle' - ,zh_cn: '添加新用户' - ,pl: 'Dodaj obiekt' - ,hu: 'Új személy hozzáadása' - } - ,'Unable to %1 Subject' : { // PUT or POST - cs: 'Chyba volání %1 Subjektu:' - ,en: 'לא יכול ל %1 נושאי' - ,bg: 'Невъзможно %1 субект' - ,hr: 'Ne mogu %1 subjekt' - ,ro: 'Imposibil de %1 Subiectul' - ,fr: 'Impossible de créer l\'Utilisateur %1' - ,ru: 'Невозможно создать %1 субъект' - ,sv: 'Kan ej %1 ämne' - ,nb: 'Kan ikke %1 ressurs' - ,fi: '%1 operaatio käyttäjälle epäonnistui' - ,de: 'Unpassend zum %1 Subjekt' - ,dk: 'Kan ikke %1 emne' - ,es: 'Imposible poner %1 Sujeto' - ,pt: 'Impossível postar %1 assunto' - ,sk: 'Chyba volania %1 subjektu' - ,ko: '%1 주제 비활성화' - ,it: 'Incapace di %1 sottoporre' - ,nl: 'Niet in staat %1 Onderwerp' - ,tr: '%1 konu yapılamıyor' - ,zh_cn: '%1用户不可用' - ,pl: 'Nie można %1 obiektu' - ,hu: 'A %1 személy hozáadása nem sikerült' - } - ,'Unable to delete Subject' : { - cs: 'Nelze odstranit Subjekt:' - ,he: 'לא יכול לבטל נושא ' - ,bg: 'Невъзможно изтриването на субекта' - ,hr: 'Ne mogu obrisati subjekt' - ,ro: 'Imposibil de șters Subiectul' - ,fr: 'Impossible d\'effacer l\'Utilisateur' - ,ru: 'Невозможно удалить Субъект ' - ,sv: 'Kan ej ta bort ämne' - ,nb: 'Kan ikke slette ressurs' - ,fi: 'Käyttäjän poistaminen epäonnistui' - ,de: 'Kann Subjekt nicht löschen' - ,dk: 'Kan ikke slette emne' - ,es: 'Imposible eliminar sujeto' - ,pt: 'Impossível apagar assunto' - ,sk: 'Subjekt sa nedá odstrániť' - ,ko: '주제를 지우기 위해 비활성화' - ,it: 'Impossibile eliminare Soggetto' - ,nl: 'Kan onderwerp niet verwijderen' - ,tr: 'Konu silinemedi' - ,zh_cn: '无法删除用户' - ,pl: 'Nie można usunąć obiektu' - ,hu: 'A személyt nem sikerült törölni' - } - ,'Database contains %1 subjects' : { - cs: 'Databáze obsahuje %1 subjektů' - ,he: 'מסד נתונים מכיל %1 נושאים ' - ,bg: 'Базата данни съдържа %1 субекти' - ,hr: 'Baza sadrži %1 subjekata' - ,fr: 'La base de données contient %1 utilisateurs' - ,fi: 'Tietokanta sisältää %1 käyttäjää' - ,ru: 'База данных содержит %1 субъекта/ов' - ,ro: 'Baza de date are %1 subiecți' - ,sv: 'Databasen innehåller %1 ämnen' - ,nb: 'Databasen inneholder %1 ressurser' - ,de: 'Datenbank enthält %1 Subjekte' - ,dk: 'Databasen indeholder %1 emner' - ,es: 'Base de datos contiene %1 sujetos' - ,pt: 'Banco de dados contém %1 assuntos' - ,sk: 'Databáza obsahuje %1 subjektov' - ,ko: '데이터베이스는 %1 주제를 포함' - ,it: 'Database contiene %1 soggetti' - ,nl: 'Database bevat %1 onderwerpen' - ,tr: 'Veritabanı %1 konu içeriyor' - ,zh_cn: '数据库包含%1个用户' - ,pl: 'Baza danych zawiera %1 obiektów' - ,hu: 'Az adatbázis %1 személyt tartalmaz' - } - ,'Edit Subject' : { - cs:'Editovat subjekt' - ,he: 'ערוך נושא ' - ,bg: 'Промени субект' - ,hr: 'Uredi subjekt' - ,ro: 'Editează Subiectul' - ,es: 'Editar sujeto' - ,fr: 'Éditer l\'Utilisateur' - ,ru: 'Редактировать Субъект' - ,sv: 'Editera ämne' - ,nb: 'Editer ressurs' - ,fi: 'Muokkaa käyttäjää' - ,de: 'Editiere Subjekt' - ,dk: 'Rediger emne' - ,pt: 'Editar assunto' - ,sk: 'Editovať subjekt' - ,ko: '주제 편집' - ,it: 'Modifica Oggetto' - ,nl: 'Pas onderwerp aan' - ,tr: 'Konuyu düzenle' - ,zh_cn: '编辑用户' - ,pl: 'Edytuj obiekt' - ,hu: 'Személy szerkesztése' - } - ,'person, device, etc' : { - cs:'osoba, zařízeni atd.' - ,he: 'אדם, מכשיר, וכו ' - ,bg: 'човек,устройство,т.н.' - ,hr: 'osoba, uređaj, itd.' - ,ro: 'persoană, dispozitiv, etc' - ,fr: 'personne, appareil, etc' - ,ru: 'лицо, устройство и т п' - ,sv: 'person,enhet,etc' - ,nb: 'person, enhet osv' - ,fi: 'henkilö, laite jne' - ,de: 'Person, Gerät, etc' - ,dk: 'person, emne, etc' - ,es: 'Persona, dispositivo, etc' - ,pt: 'Pessoa, dispositivo, etc' - ,sk: 'osoba, zariadenie atď...' - ,ko: '사람, 기기 등' - ,it: 'persona, dispositivo, ecc' - ,nl: 'persoon, apparaat etc' - ,tr: 'kişi, cihaz, vb' - ,zh_cn: '人、设备等' - ,pl: 'osoba, urządzenie, itp' - ,hu: 'személy, berendezés, stb.' - } - ,'role1, role2' : { - cs:'role1, role2' - ,he: 'תפקיד1, תפקיד2 ' - ,bg: 'Роля1, Роля2' - ,hr: 'uloga1, uloga2' - ,ro: 'Rol1, Rol2' - ,fr: 'rôle1, rôle2' - ,ru: 'Роль1, Роль2' - ,sv: 'Roll1, Roll2' - ,nb: 'rolle1, rolle2' - ,fi: 'rooli1, rooli2' - ,de: 'Rolle1, Rolle2' - ,dk: 'Rolle1, Rolle2' - ,pt: 'papel1, papel2' - ,es: 'Rol1, Rol2' - ,sk: 'rola1, rola2' - ,ko: '역할1, 역할2' - ,it: 'ruolo1, ruolo2' - ,nl: 'rol1, rol2' - ,tr: 'rol1, rol2' - ,zh_cn: '角色1、角色2' - ,pl: 'rola1, rola2' - ,hu: 'szerep1, szerep2' - } - ,'Edit this subject' : { - cs:'Editovat tento subjekt' - ,he: 'ערוך נושא זה ' - ,bg: 'Промени този субект' - ,hr: 'Uredi ovaj subjekt' - ,ro: 'Editează acest subiect' - ,fr: 'Éditer cet utilisateur' - ,ru: 'Редактировать этот субъект' - ,sv: 'Editera ämnet' - ,es: 'Editar este sujeto' - ,nb: 'Editer ressurs' - ,fi: 'Muokkaa tätä käyttäjää' - ,de: 'Editiere dieses Subjekt' - ,dk: 'Rediger emne' - ,pt: 'Editar esse assunto' - ,sk: 'Editovať tento subjekt' - ,ko: '이 주제 편집' - ,it: 'Modifica questo argomento' - ,nl: 'pas dit onderwerp aan' - ,tr: 'Bu konuyu düzenle' - ,zh_cn: '编辑此用户' - ,pl: 'Edytuj ten obiekt' - ,hu: 'A kiválasztott személy szerkesztése' - } - ,'Delete this subject' : { - cs:'Smazat tento subjekt' - ,he: 'בטל נושא זה ' - ,bg: 'Изтрий този субект' - ,hr: 'Obriši ovaj subjekt' - ,ro: 'Șterge acest subiect' - ,fr: 'Effacer cet utilisateur:' - ,ru: 'Удалить этот субъект' - ,sv: 'Ta bort ämnet' - ,nb: 'Slett ressurs' - ,fi: 'Poista tämä käyttäjä' - ,de: 'Lösche dieses Subjekt' - ,dk: 'Fjern emne' - ,es: 'Eliminar este sujeto' - ,pt: 'Apagar esse assunto' - ,sk: 'Zmazať tento subjekt' - ,ko: '이 주제 삭제' - ,it: 'Eliminare questo argomento' - ,nl: 'verwijder dit onderwerp' - ,tr: 'Bu konuyu sil' - ,zh_cn: '删除此用户' - ,pl: 'Usuń ten obiekt' - ,hu: 'A kiválasztott személy törlése' - } - ,'Roles' : { - cs:'Role' - ,he: 'תפקידים ' - ,bg: 'Роли' - ,hr: 'Uloge' - ,ro: 'Roluri' - ,fr: 'Rôles' - ,ru: 'Роли' - ,sv: 'Roller' - ,nb: 'Roller' - ,es: 'Roles' - ,fi: 'Rooli' - ,de: 'Rollen' - ,dk: 'Roller' - ,pt: 'Papéis' - ,sk: 'Rola' - ,ko: '역할' - ,it: 'Ruoli' - ,nl: 'Rollen' - ,tr: 'Roller' - ,zh_cn: '角色' - ,pl: 'Role' - ,hu: 'Szerepek' - } - ,'Access Token' : { - cs:'Přístupový token' - ,he: 'אסימון גישה ' - ,bg: 'Ключ за достъп' - ,hr: 'Pristupni token' - ,ro: 'Cheie de acces' - ,fr: 'Identificateur unique' - ,ru: 'Код доступа' - ,sv: 'Åtkomstnyckel' - ,nb: 'Tilgangsnøkkel' - ,fi: 'Pääsytunniste' - ,de: 'Zugriffsschlüssel' - ,dk: 'Sikkerhedsnøgle' - ,pt: 'Token de acesso' - ,es: 'Acceso Identificador' - ,sk: 'Prístupový Token' - ,ko: 'Access Token' - ,it: 'Gettone d\'accesso' - ,nl: 'toegangscode' - ,tr: 'Erişim Simgesi (Access Token)' - ,zh_cn: '访问令牌' - ,pl: 'Token dostępu' - ,hu: 'Hozzáférési token' - } - ,'hour ago' : { - cs:'hodina zpět' - ,he: 'לפני שעה ' - ,bg: 'Преди час' - ,hr: 'sat ranije' - ,fr: 'heure avant' - ,ro: 'oră în trecut' - ,ru: 'час назад' - ,sv: 'timme sedan' - ,nb: 'time siden' - ,fi: 'tunti sitten' - ,de: 'vor einer Stunde' - ,dk: 'time siden' - ,es: 'hora atrás' - ,pt: 'hora atrás' - ,sk: 'pred hodinou' - ,ko: '시간 후' - ,it: 'ora fa' - ,nl: 'uur geleden' - ,tr: 'saat önce' - ,zh_cn: '小时前' - ,pl: 'Godzię temu' - ,hu: 'órája' - } - ,'hours ago' : { - cs:'hodin zpět' - ,he: 'לפני שעות ' - ,bg: 'Преди часове' - ,hr: 'sati ranije' - ,fr: 'heures avant' - ,ro: 'ore în trecut' - ,ru: 'часов назад' - ,sv: 'timmar sedan' - ,nb: 'timer siden' - ,fi: 'tuntia sitten' - ,de: 'vor mehreren Stunden' - ,dk: 'timer sidan' - ,es: 'horas atrás' - ,pt: 'horas atrás' - ,sk: 'hodín pred' - ,ko: '시간 후' - ,it: 'ore fa' - ,nl: 'uren geleden' - ,tr: 'saat önce' - ,zh_cn: '小时前' - ,pl: 'Godzin temu' - ,hu: 'órája' - } - ,'Silence for %1 minutes' : { - cs:'Ztlumit na %1 minut' - ,he: 'שקט ל %1 דקות ' - ,bg: 'Заглушаване за %1 минути' - ,hr: 'Utišaj na %1 minuta' - ,ro: 'Liniște pentru %1 minute' - ,fr: 'Silence pour %1 minutes' - ,ru: 'Молчание %1 минут' - ,sv: 'Tyst i %1 minuter' - ,nb: 'Stille i %1 minutter' - ,fi: 'Hiljennä %1 minuutiksi' - ,de: 'Ruhe für %1 Minuten' - ,dk: 'Stilhed i %1 minutter' - ,pt: 'Silencir por %1 minutos' - ,es: 'Silenciado por %1 minutos' - ,sk: 'Stíšiť na %1 minút' - ,ko: '%1 분 동안 무음' - ,it: 'Silenzio per %1 minuti' - ,nl: 'Sluimer %1 minuten' - ,tr: '%1 dakika sürelik sessizlik' - ,zh_cn: '静音%1分钟' - ,zh_tw: '靜音%1分鐘' - ,pl: 'Wycisz na %1 minut' - ,hul: 'Lehalkítás %1 percre' - } - ,'Check BG' : { - cs:'Zkontrolovat glykémii' - ,he: 'בדוק סוכר בדם ' - ,de: 'BZ kontrollieren' - ,dk: 'Kontroller blodsukker' - ,ro: 'Verificați glicemia' - ,es: 'Verificar glucemia' - ,fr: 'Vérifier la glycémie' - ,ru: 'Проверьте гликемию' - ,sv: 'Kontrollera blodglukos' - ,nb: 'Sjekk blodsukker' - ,sk: 'Skontrolovať glykémiu' - ,fi: 'Tarkista VS' - ,pt: 'Verifique a glicemia' - ,bg: 'Проверка КЗ' - ,hr: 'Provjeri GUK' - ,ko: '혈당 체크' - ,it: 'Controllare BG' - ,nl: 'Controleer BG' - ,tr: 'KŞ\'ini kontrol et' - ,zh_cn: '测量血糖' - ,pl: 'Sprawdź glukozę z krwi' - ,hu: 'Ellenőrizd a cukorszintet' - } - ,'BASAL' : { - cs: 'BAZÁL' - ,he: 'רמה בזלית ' - ,de: 'BASAL' - ,dk: 'BASAL' - ,ro: 'Bazală' - ,ru: 'Базал' - ,fr: 'Basale' - ,sk: 'BAZÁL' - ,sv: 'BASAL' - ,nb: 'BASAL' - ,fi: 'Basaali' - ,pt: 'BASAL' - ,bg: 'Базал' - ,hr: 'Bazal' - ,ko: 'BASAL' - ,es: 'BASAL' - ,it: 'BASALE' - ,nl: 'Basaal' - ,tr: 'Bazal' - ,zh_cn: '基础率' - ,zh_tw: '基礎率' - ,pl: 'BAZA' - ,hu: 'BAZÁL' - } - ,'Current basal' : { - cs:'Současný bazál' - ,he: 'רמה בזלית נוכחית ' - ,de: 'Aktuelle Basalrate' - ,dk: 'Nuværende basal' - ,ro: 'Bazala curentă' - ,fr: 'Débit basal actuel' - ,ru: 'Актуальный базал' - ,sk: 'Aktuálny bazál' - ,sv: 'Nuvarande basal' - ,nb: 'Gjeldende basal' - ,fi: 'Nykyinen basaali' - ,pt: 'Basal atual' - ,es: 'Basal actual' - ,bg: 'Актуален базал' - ,hr: 'Trenutni bazal' - ,ko: '현재 basal' - ,it: 'Basale corrente' - ,nl: 'Huidige basaal' - ,tr: 'Geçerli Bazal' - ,zh_cn: '当前基础率' - ,pl: 'Dawka podstawowa' - ,hu: 'Aktuális bazál' - } - ,'Sensitivity' : { - cs:'Citlivost (ISF)' - ,he: 'רגישות ' - ,de: 'Sensitivität' - ,dk: 'Insulinfølsomhed (ISF)' - ,ro: 'Sensibilitate la insulină (ISF)' - ,fr: 'Sensibilité à l\'insuline (ISF)' - ,ru: 'Чуствительность к инсулину ISF' - ,sk: 'Citlivosť (ISF)' - ,sv: 'Insulinkönslighet (ISF)' - ,nb: 'Insulinsensitivitet (ISF)' - ,fi: 'Herkkyys' - ,es: 'Sensibilidad' - ,pt: 'Fator de sensibilidade' - ,bg: 'Инсулинова чувствителност (ISF)' - ,hr: 'Osjetljivost' - ,ko: '인슐린 민감도(ISF)' - ,it: 'ISF - sensibilità' - ,nl: 'Gevoeligheid' - ,tr: 'Duyarlılık Faktörü (ISF)' - ,zh_cn: '胰岛素敏感系数' - ,pl: 'Wrażliwość' - ,hu: 'Inzulin érzékenység' - } - ,'Current Carb Ratio' : { - cs:'Sacharidový poměr (I:C)' - ,he: 'וחס פחמימות לאינסולין נוכחי ' - ,de: 'Aktuelles KH-Verhältnis' - ,dk: 'Nuværende kulhydratratio' - ,fr: 'Rapport Insuline-glucides actuel (I:C)' - ,ro: 'Raport Insulină:Carbohidrați (ICR)' - ,ru: 'Актуальное соотношение инсулин:углеводы I:C' - ,sk: 'Aktuálny sacharidový pomer (I"C)' - ,sv: 'Gällande kolhydratkvot' - ,nb: 'Gjeldende karbohydratforhold' - ,es: 'Relación actual Insulina:Carbohidratos' - ,pt: 'Relação insulina:carboidrato atual' - ,fi: 'Nykyinen hiilihydraattiherkkyys' - ,bg: 'Актуално Въглехидратно Съотношение' - ,hr: 'Trenutni I:C' - ,ko: '현재 탄수화물 비율(ICR)' - ,it: 'Attuale rapporto I:C' - ,nl: 'Huidige KH ratio' - ,tr: 'Geçerli Karbonhidrat oranı I/C (ICR)' - ,zh_cn: '当前碳水化合物系数' - ,pl: 'Obecny przelicznik węglowodanowy' - ,hu: 'Aktuális szénhidrát arány' - } - ,'Basal timezone' : { - cs:'Časová zóna' - ,he: 'איזור זמן לרמה הבזלית ' - ,de: 'Basal Zeitzone' - ,dk: 'Basal tidszone' - ,ro: 'Fus orar pentru bazală' - ,es: 'Zona horaria basal' - ,fr: 'Fuseau horaire' - ,ru: 'Часовой пояс базала' - ,sk: 'Časová zóna pre bazál' - ,sv: 'Basal tidszon' - ,nb: 'Basal tidssone' - ,pt: 'Fuso horário da basal' - ,fi: 'Aikavyöhyke' - ,bg: 'Базална часова зона' - ,hr: 'Vremenska zona bazala' - ,ko: 'Basal 타임존' - ,it: 'fuso orario basale' - ,nl: 'Basaal tijdzone' - ,tr: 'Bazal saat dilimi' - ,zh_cn: '基础率时区' - ,pl: 'Strefa czasowa dawki podstawowej' - ,hu: 'Bazál időzóna' - } - ,'Active profile' : { - cs:'Aktivní profil' - ,he: 'פרופיל פעיל ' - ,de: 'Aktives Profil' - ,dk: 'Aktiv profil' - ,ro: 'Profilul activ' - ,fr: 'Profil actif' - ,ru: 'Действующий профиль' - ,sk: 'Aktívny profil' - ,sv: 'Aktiv profil' - ,nb: 'Aktiv profil' - ,pt: 'Perfil ativo' - ,es: 'Perfil activo' - ,fi: 'Aktiivinen profiili' - ,bg: 'Активен профил' - ,hr: 'Aktivni profil' - ,ko: '활성 프로파일' - ,it: 'Attiva profilo' - ,nl: 'Actief profiel' - ,tr: 'Aktif profil' - ,zh_cn: '当前配置文件' - ,pl: 'Profil aktywny' - ,hu: 'Aktív profil' - } - ,'Active temp basal' : { - cs:'Aktivní dočasný bazál' - ,he: 'רמה בזלית זמנית פעילה ' - ,de: 'Aktive temp. Basalrate' - ,dk: 'Aktiv midlertidig basal' - ,ro: 'Bazală temporară activă' - ,fr: 'Débit basal temporaire actif' - ,ru: 'Активный временный базал' - ,sk: 'Aktívny dočasný bazál' - ,sv: 'Aktiv tempbasal' - ,nb: 'Aktiv midlertidig basal' - ,pt: 'Basal temporária ativa' - ,es: 'Basal temporal activa' - ,fi: 'Aktiivinen tilapäisbasaali' - ,bg: 'Активен временен базал' - ,hr: 'Aktivni temp bazal' - ,ko: '활성 임시 basal' - ,it: 'Attiva Basale Temp' - ,nl: 'Actieve tijdelijke basaal' - ,tr: 'Aktif geçici bazal oranı' - ,zh_cn: '当前临时基础率' - ,pl: 'Aktywa tymczasowa dawka podstawowa' - ,hu: 'Aktív átmeneti bazál' - } - ,'Active temp basal start' : { - cs:'Začátek dočasného bazálu' - ,he: 'התחלה רמה בזלית זמנית ' - ,de: 'Start aktive temp. Basalrate' - ,dk: 'Aktiv midlertidig basal start' - ,ro: 'Start bazală temporară activă' - ,fr: 'Début du débit basal temporaire' - ,ru: 'Старт актуального временного базала' - ,sk: 'Štart dočasného bazálu' - ,sv: 'Aktiv tempbasal start' - ,nb: 'Aktiv midlertidig basal start' - ,pt: 'Início da basal temporária ativa' - ,es: 'Inicio Basal temporal activa' - ,fi: 'Aktiivisen tilapäisbasaalin aloitus' - ,bg: 'Старт на активен временен базал' - ,hr: 'Početak aktivnog tamp bazala' - ,ko: '활성 임시 basal 시작' - ,it: 'Attiva Inizio Basale temp' - ,nl: 'Actieve tijdelijke basaal start' - ,tr: 'Aktif geçici bazal oranı başlangıcı' - ,zh_cn: '当前临时基础率开始' - ,pl: 'Start aktywnej tymczasowej dawki podstawowej' - ,hu: 'Aktív átmeneti bazál kezdete' - } - ,'Active temp basal duration' : { - cs:'Trvání dočasného bazálu' - ,he: 'משך רמה בזלית זמנית ' - ,de: 'Dauer aktive temp. Basalrate' - ,dk: 'Aktiv midlertidig basal varighed' - ,ro: 'Durata bazalei temporare active' - ,fr: 'Durée du débit basal temporaire' - ,ru: 'Длительность актуального временного базала' - ,sk: 'Trvanie dočasného bazálu' - ,sv: 'Aktiv tempbasal varaktighetstid' - ,nb: 'Aktiv midlertidig basal varighet' - ,pt: 'Duração de basal temporária ativa' - ,es: 'Duración Basal Temporal activa' - ,fi: 'Aktiivisen tilapäisbasaalin kesto' - ,bg: 'Продължителност на Активен временен базал' - ,hr: 'Trajanje aktivnog temp bazala' - ,ko: '활성 임시 basal 시간' - ,it: 'Attiva durata basale temp' - ,nl: 'Actieve tijdelijk basaal duur' - ,zh_cn: '当前临时基础率期间' - ,pl: 'Czas trwania aktywnej tymczasowej dawki podstawowej' - ,tr: 'Aktif geçici bazal süresi' - ,hu: 'Aktív átmeneti bazál időtartalma' - } - ,'Active temp basal remaining' : { - cs:'Zbývající dočasný bazál' - ,he: 'זמן שנשאר ברמה בזלית זמנית ' - ,de: 'Verbleibene Dauer temp. Basalrate' - ,dk: 'Resterende tid for aktiv midlertidig basal' - ,ro: 'Rest de bazală temporară activă' - ,fr: 'Durée restante de débit basal temporaire' - ,ru: 'Остается актуального временного базала' - ,sk: 'Zostatok dočasného bazálu' - ,sv: 'Återstående tempbasaltid' - ,nb: 'Gjenstående midlertidig basal tid' - ,pt: 'Basal temporária ativa restante' - ,es: 'Basal temporal activa restante' - ,fi: 'Aktiivista tilapäisbasaalia jäljellä' - ,bg: 'Оставащ Активен временен базал' - ,hr: 'Prestali aktivni temp bazal' - ,ko: '남아 있는 활성 임시 basal' - ,it: 'Attiva residuo basale temp' - ,nl: 'Actieve tijdelijke basaal resteert' - ,zh_cn: '当前临时基础率剩余' - ,pl: 'Pozostała aktywna tymczasowa dawka podstawowa' - ,tr: 'Aktif geçici bazal kalan' - ,hu: 'Átmeneti bazál visszamaradó ideje' - } - ,'Basal profile value' : { - cs: 'Základní hodnota bazálu' - ,he: 'רמה בזלית מפרופיל ' - ,de: 'Basal-Profil Wert' - ,dk: 'Basalprofil værdi' - ,ro: 'Valoarea profilului bazalei' - ,ru: 'Величина профильного базала' - ,fr: 'Valeur du débit basal' - ,sv: 'Basalprofil värde' - ,es: 'Valor perfil Basal' - ,nb: 'Basalprofil verdi' - ,fi: 'Basaaliprofiilin arvo' - ,pt: 'Valor do perfil basal' - ,sk: 'Základná hodnota bazálu' - ,bg: 'Базален профил стойност' - ,hr: 'Profilna vrijednost bazala' - ,ko: 'Basal 프로파일 값' - ,it: 'Valore profilo basale' - ,nl: 'Basaal profiel waarde' - ,zh_cn: '基础率配置文件值' - ,pl: 'Wartość profilu podstawowego' - ,tr: 'Bazal profil değeri' - ,hu: 'Bazál profil értéke' - } - ,'Active combo bolus' : { - cs:'Aktivní kombinovaný bolus' - ,he: 'בולוס קומבו פעיל ' - ,de: 'Aktiver verzögerter Bolus' - ,dk: 'Aktiv kombobolus' - ,ro: 'Bolus combinat activ' - ,fr: 'Bolus Duo/Combo actif' - ,ru: 'Активный комбинированный болюс' - ,sv: 'Aktiv kombobolus' - ,nb: 'Kombinasjonsbolus' - ,fi: 'Aktiivinen yhdistelmäbolus' - ,pt: 'Bolus duplo em atividade' - ,es: 'Activo combo-bolo' - ,sk: 'Aktívny kombinovaný bolus' - ,bg: '' - ,hr: 'Aktivni dual bolus' - ,ko: '활성 콤보 bolus' - ,it: 'Attiva Combo bolo' - ,nl: 'Actieve combo bolus' - ,zh_cn: '当前双波大剂量' - ,pl: 'Aktywny bolus złożony' - ,tr: 'Aktive kombo bolus' - ,hu: 'Aktív kombinált bólus' - } - ,'Active combo bolus start' : { - cs: 'Začátek kombinovaného bolusu' - ,he: 'התחלת בולוס קומבו פעיל ' - ,de: 'Start des aktiven verzögerten Bolus' - ,dk: 'Aktiv kombibolus start' - ,ro: 'Start bolus combinat activ' - ,fr: 'Début de Bolus Duo/Combo' - ,ru: 'Старт активного комбинир болюса' - ,sv: 'Aktiv kombobolus start' - ,nb: 'Kombinasjonsbolus start' - ,fi: 'Aktiivisen yhdistelmäboluksen alku' - ,pt: 'Início do bolus duplo em atividade' - ,es: 'Inicio del combo-bolo activo' - ,sk: 'Štart kombinovaného bolusu' - ,bg: 'Активен комбиниран болус' - ,hr: 'Početak aktivnog dual bolusa' - ,ko: '활성 콤보 bolus 시작' - ,it: 'Attivo inizio Combo bolo' - ,nl: 'Actieve combo bolus start' - ,zh_cn: '当前双波大剂量开始' - ,pl: 'Start aktywnego bolusa złożonego' - ,tr: 'Aktif gecikmeli bolus başlangıcı' - ,hu: 'Aktív kombinált bólus kezdete' - } - ,'Active combo bolus duration' : { - cs: 'Trvání kombinovaného bolusu' - ,he: 'משך בולוס קומבו פעיל ' - ,de: 'Dauer des aktiven verzögerten Bolus' - ,dk: 'Aktiv kombibolus varighed' - ,ro: 'Durată bolus combinat activ' - ,fr: 'Durée du Bolus Duo/Combo' - ,ru: 'Длительность активного комбинир болюса' - ,sv: 'Aktiv kombibolus varaktighet' - ,es: 'Duración del Combo-Bolo activo' - ,nb: 'Kombinasjonsbolus varighet' - ,fi: 'Aktiivisen yhdistelmäboluksen kesto' - ,pt: 'Duração de bolus duplo em atividade' - ,sk: 'Trvanie kombinovaného bolusu' - ,bg: 'Продължителност на активния комбиниран болус' - ,hr: 'Trajanje aktivnog dual bolusa' - ,ko: '활성 콤보 bolus 기간' - ,it: 'Attivo durata Combo bolo' - ,nl: 'Actieve combo bolus duur' - ,zh_cn: '当前双波大剂量期间' - ,pl: 'Czas trwania aktywnego bolusa złożonego' - ,tr: 'Active combo bolus süresi' - ,hu: 'Aktív kombinált bólus időtartalma' - } - ,'Active combo bolus remaining' : { - cs: 'Zbývající kombinovaný bolus' - ,he: 'זמן שנשאר בבולוס קומבו פעיל ' - ,de: 'Verbleibender aktiver verzögerter Bolus' - ,dk: 'Resterende aktiv kombibolus' - ,ro: 'Rest de bolus combinat activ' - ,fr: 'Activité restante du Bolus Duo/Combo' - ,ru: 'Остается активного комбинир болюса' - ,sv: 'Återstående aktiv kombibolus' - ,es: 'Restante Combo-Bolo activo' - ,nb: 'Gjenstående kombinasjonsbolus' - ,fi: 'Aktiivista yhdistelmäbolusta jäljellä' - ,pt: 'Restante de bolus duplo em atividade' - ,sk: 'Zostávajúci kombinovaný bolus' - ,bg: 'Оставащ активен комбиниран болус' - ,hr: 'Preostali aktivni dual bolus' - ,ko: '남아 있는 활성 콤보 bolus' - ,it: 'Attivo residuo Combo bolo' - ,nl: 'Actieve combo bolus resteert' - ,zh_cn: '当前双波大剂量剩余' - ,pl: 'Pozostały aktywny bolus złożony' - ,tr: 'Aktif kombo (yayım) bolus kaldı' - ,hu: 'Aktív kombinált bólus fennmaradó idő' - } - ,'BG Delta' : { - cs:'Změna glykémie' - ,he: 'הפרש רמת סוכר ' - ,de: 'BZ Differenz' - ,dk: 'BS deltaværdi' - ,ro: 'Diferență glicemie' - ,fr: 'Différence de glycémie' - ,ru: 'Изменение гликемии' - ,sv: 'BS deltavärde' - ,nb: 'BS forskjell' - ,fi: 'VS muutos' - ,pt: 'Diferença de glicemia' - ,es: 'Diferencia de glucemia' - ,sk: 'Zmena glykémie' - ,bg: 'Дельта ГК' - ,hr: 'GUK razlika' - ,ko: '혈당 차이' - ,it: 'BG Delta' - ,nl: 'BG Delta' - ,zh_cn: '血糖增量' - ,zh_tw: '血糖增量' - ,pl: 'Zmiana glikemii' - ,tr: 'KŞ farkı' - ,hu: 'Cukorszint változása' - } - ,'Elapsed Time' : { - cs:'Dosažený čas' - ,he: 'זמן שעבר ' - ,de: 'Vergangene Zeit' - ,dk: 'Forløbet tid' - ,ro: 'Timp scurs' - ,fr: 'Temps écoulé' - ,ru: 'Прошло времени' - ,sv: 'Förfluten tid' - ,nb: 'Forløpt tid' - ,fi: 'Kulunut aika' - ,pt: 'Tempo transcorrido' - ,es: 'Tiempo transcurrido' - ,sk: 'Uplynutý čas' - ,bg: 'Изминало време' - ,hr: 'Proteklo vrijeme' - ,ko: '경과 시간' - ,it: 'Tempo Trascorso' - ,nl: 'Verstreken tijd' - ,zh_cn: '所需时间' - ,zh_tw: '所需時間' - ,pl: 'Upłynął czas' - ,tr: 'Geçen zaman' - ,hu: 'Eltelt idő' - } - ,'Absolute Delta' : { - cs:'Absolutní rozdíl' - ,he: 'הפרש רמת סוכר אבסולוטית ' - ,de: 'Absolute Differenz' - ,dk: 'Absolut deltaværdi' - ,ro: 'Diferență absolută' - ,fr: 'Différence absolue' - ,ru: 'Абсолютное изменение' - ,sv: 'Absolut deltavärde' - ,nb: 'Absolutt forskjell' - ,fi: 'Absoluuttinen muutos' - ,pt: 'Diferença absoluta' - ,es: 'Diferencia absoluta' - ,sk: 'Absolútny rozdiel' - ,bg: 'Абсолютно изменение' - ,hr: 'Apsolutna razlika' - ,ko: '절대적인 차이' - ,it: 'Delta Assoluto' - ,nl: 'Abslute delta' - ,zh_cn: '绝对增量' - ,zh_tw: '絕對增量' - ,pl: 'różnica absolutna' - ,tr: 'Mutlak fark' - ,hu: 'Abszolút külonbség' - } - ,'Interpolated' : { - cs:'Interpolováno' - ,he: 'אינטרפולציה ' - ,de: 'Interpoliert' - ,dk: 'Interpoleret' - ,ro: 'Interpolat' - ,fr: 'Interpolé' - ,ru: 'Интерполировано' - ,sv: 'Interpolerad' - ,nb: 'Interpolert' - ,fi: 'Laskettu' - ,pt: 'Interpolado' - ,es: 'Interpolado' - ,sk: 'Interpolované' - ,bg: 'Интерполирано' - ,hr: 'Interpolirano' - ,ko: '삽입됨' - ,it: 'Interpolata' - ,nl: 'Geinterpoleerd' - ,zh_cn: '插值' - ,zh_tw: '插值' - ,pl: 'Interpolowany' - ,tr: 'Aralıklı' - ,hu: 'Interpolált' - } - ,'BWP' : { // Bolus Wizard Preview - cs: 'KALK' - ,he: 'BWP' - ,de: 'BWP' - ,dk: 'Bolusberegner (BWP)' - ,ro: 'Ajutor bolusare (BWP)' - ,ru: 'Калькулятор болюса' - ,fr: 'Calculateur de bolus (BWP)' - ,sv: 'Boluskalkylator' - ,es: 'VistaPreviaCalculoBolo (BWP)' - ,nb: 'Boluskalkulator' - ,hr: 'Čarobnjak bolusa' - ,fi: 'Annoslaskuri' - ,pt: 'Ajuda de bolus' - ,sk: 'BK' - ,bg: 'БП' - ,ko: 'BWP' - ,it: 'BWP' - ,nl: 'BWP' - ,zh_cn: 'BWP' - ,zh_tw: 'BWP' - ,pl: 'Kalkulator bolusa' - ,tr: 'BWP' - ,hu: 'BWP' - } - ,'Urgent' : { - cs:'Urgentní' - ,he: 'דחוף ' - ,de: 'Akut' - ,dk: 'Akut' - ,ro: 'Urgent' - ,fr: 'Urgent' - ,ru: 'Срочно' - ,es: 'Urgente' - ,sv: 'Akut' - ,nb: 'Akutt' - ,fi: 'Kiireellinen' - ,pt: 'Urgente' - ,sk: 'Urgentné' - ,bg: 'Спешно' - ,hr: 'Hitno' - ,ko: '긴급' - ,it: 'Urgente' - ,ja: '緊急' - ,nl: 'Urgent' - ,zh_cn: '紧急' - ,zh_tw: '緊急' - ,pl:'Pilny' - ,tr: 'Acil' - ,hu: 'Sűrgős' - } - ,'Warning' : { - cs:'Varování' - ,he: 'אזהרה ' - ,de: 'Warnung' - ,dk: 'Advarsel' - ,ro: 'Atenție' - ,fr: 'Attention' - ,ru: 'Осторожно' - ,sv: 'Varning' - ,nb: 'Advarsel' - ,fi: 'Varoitus' - ,pt: 'Aviso' - ,es: 'Aviso' - ,sk: 'Varovanie' - ,bg: 'Предупреждение' - ,hr: 'Upozorenje' - ,ko: '경고' - ,it: 'Avviso' - ,nl: 'Waarschuwing' - ,zh_cn: '警告' - ,zh_tw: '警告' - ,pl: 'Ostrzeżenie' - ,tr: 'Uyarı' - ,hu: 'Figyelmeztetés' - } - ,'Info' : { - cs: 'Informativní' - ,he: 'לידיעה ' - ,de: 'Info' - ,dk: 'Info' - ,ro: 'Informație' - ,fr: 'Information' - ,ru: 'Информация' - ,sv: 'Information' - ,nb: 'Informasjon' - ,fi: 'Info' - ,pt: 'Informações' - ,es: 'Información' - ,sk: 'Info' - ,bg: 'Информация' - ,hr: 'Info' - ,ko: '정보' - ,it: 'Info' - ,nl: 'Info' - ,zh_cn: '信息' - ,zh_tw: '資訊' - ,pl: 'Informacja' - ,tr: 'Info' - ,hu: 'Információ' - } - ,'Lowest' : { - cs: 'Nejnižší' - ,he: 'הנמוך ביותר ' - ,de: 'Niedrigster' - ,dk: 'Laveste' - ,ro: 'Cea mai mică' - ,ru: 'Самое нижнее' - ,fr: 'Valeur la plus basse' - ,sv: 'Lägsta' - ,nb: 'Laveste' - ,es: 'Más bajo' - ,fi: 'Matalin' - ,pt: 'Mais baixo' - ,sk: 'Najnižsie' - ,bg: 'Най-ниско' - ,hr: 'Najniže' - ,ko: '가장 낮은' - ,it: 'Minore' - ,nl: 'Laagste' - ,tr: 'En düşük değer' - ,zh_cn: '血糖极低' - ,zh_tw: '血糖極低' - ,pl: 'Niski' - ,hu: 'Legalacsonyabb' - } - ,'Snoozing high alarm since there is enough IOB' : { - cs:'Vypínání alarmu vyskoké glykémie, protože je dostatek IOB' - ,he: 'נודניק את ההתראה הגבוהה מפני שיש מספיק אינסולין פעיל בגוף' - ,de: 'Ignoriere Alarm hoch, da genügend aktives Bolus-Insulin (IOB) vorhanden' - ,dk: 'Udsætter høj alarm siden der er nok aktiv insulin (IOB)' - ,ro: 'Ignoră alarma de hiper deoarece este suficientă insulină activă IOB' - ,fr: 'Alarme haute ignorée car suffisamment d\'insuline à bord (IOB)' - ,bg: 'Изключване на аларма за висока КЗ, тъй като има достатъчно IOB' - ,hr: 'Stišan alarm za hiper pošto ima dovoljno aktivnog inzulina' - ,es: 'Ignorar alarma de Hiperglucemia al tener suficiente insulina activa' - ,ru: 'Отключение предупреждение о высоком СК ввиду достаточности инсулина в организме' - ,sv: 'Snoozar höglarm då aktivt insulin är tillräckligt' - ,nb: 'Utsetter høyalarm siden det er nok aktivt insulin' - ,fi: 'Korkean sokerin varoitus poistettu riittävän insuliinin vuoksi' - ,pt: 'Ignorar alarme de hiper em função de IOB suficiente' - ,sk: 'Odloženie alarmu vysokej glykémie, pretože je dostatok IOB' - ,ko: '충분한 IOB가 남아 있기 때문에 고혈당 알람을 스누즈' - ,it: 'Addormenta allarme alto poiché non vi è sufficiente IOB' - ,nl: 'Snooze hoog alarm, er is genoeg IOB' - ,tr: 'Yeterli IOB(Aktif İnsülin) olduğundan KŞ yüksek uyarımını ertele' - ,zh_cn: '有足够的IOB(活性胰岛素),暂停高血糖警报' - ,pl: 'Wycisz alarm wysokiej glikemi, jest wystarczająco dużo aktywnej insuliny' - ,hu: 'Magas cukor riasztás késleltetése mivel elegendő inzulin van kiadva (IOB)' - } - ,'Check BG, time to bolus?' : { - cs:'Zkontrolovat glykémii, čas na bolus?' - ,he: 'בדוק רמת סוכר. צריך להוסיף אינסולין? ' - ,de: 'BZ kontrollieren, ggf. Bolus abgeben?' - ,dk: 'Kontroler BS, tid til en bolus?' - ,ro: 'Verifică glicemia, poate este necesar un bolus?' - ,fr: 'Vérifier la glycémie, bolus nécessaire ?' - ,bg: 'Провери КЗ, не е ли време за болус?' - ,hr: 'Provjeri GUK, vrijeme je za bolus?' - ,ru: 'Проверьте ГК, дать болюс?' - ,sv: 'Kontrollera BS, dags att ge bolus?' - ,nb: 'Sjekk blodsukker, på tide med bolus?' - ,fi: 'Tarkista VS, aika bolustaa?' - ,pt: 'Meça a glicemia, hora de bolus de correção?' - ,es: 'Controle su glucemia, ¿quizás un bolo Insulina?' - ,sk: 'Skontrolovať glykémiu, čas na bolus?' - ,ko: 'Bolus를 주입할 시간입니다. 혈당 체크 하시겠습니까?' - ,it: 'Controllare BG, il tempo del bolo?' - ,nl: 'Controleer BG, tijd om te bolussen?' - ,tr: 'KŞine bakın, gerekirse bolus verin?' - ,zh_cn: '测量血糖,该输注大剂量了?' - ,pl: 'Sprawdź glikemię, czas na bolusa ?' - ,hu: 'Ellenőrizd a cukorszintet. Ideje bóluszt adni?' - } - ,'Notice' : { - cs:'Poznámka' - ,he: 'הודעה ' - ,de: 'Notiz' - ,dk: 'Note' - ,ro: 'Notificare' - ,ru: 'Заметка' - ,fr: 'Notification' - ,bg: 'Известие' - ,hr: 'Poruka' - ,sv: 'Notering' - ,es: 'Nota' - ,nb: 'NB' - ,fi: 'Huomio' - ,nl: 'Notitie' - ,pt: 'Nota' - ,sk: 'Poznámka' - ,ko: '알림' - ,it: 'Preavviso' - ,tr: 'Not' - ,zh_cn: '提示' - ,pl: 'Uwaga' - ,hu: 'Megjegyzés' - } - ,'required info missing' : { - cs:'chybějící informace' - ,he: 'חסרה אינפורמציה ' - ,de: 'Benötigte Information fehlt' - ,dk: 'nødvendig information mangler' - ,ro: 'Informații importante lipsă' - ,fr: 'Information nécessaire manquante' - ,ru: 'Отсутствует необходимая информация' - ,bg: 'Липсва необходима информация' - ,hr: 'nedostaju potrebne informacije' - ,sv: 'Nödvändig information saknas' - ,nb: 'Nødvendig informasjon mangler' - ,es: 'Falta información requerida' - ,fi: 'tarvittava tieto puuttuu' - ,pt: 'Informação essencial faltando' - ,sk: 'chýbajúca informácia' - ,ko: '요청한 정보 손실' - ,it: 'richiesta informazioni mancanti' - ,nl: 'vereiste gegevens ontbreken' - ,tr: 'gerekli bilgi eksik' - ,zh_cn: '所需信息不全' - ,pl: 'brak wymaganych informacji' - ,hu: 'Szükséges információ hiányos' - } - ,'Insulin on Board' : { - cs:'Aktivní inzulín' - ,he: 'אינסולין פעיל בגוף ' - ,de: 'Aktives Insulin' - ,dk: 'Aktivt insulin (IOB)' - ,ro: 'Insulină activă (IOB)' - ,fr: 'Insuline à bord (IOB)' - ,ru: 'Активный инсулин (IOB)' - ,bg: 'Активен Инсулин (IOB)' - ,hr: 'Aktivni inzulín' - ,sv: 'Aktivt insulin (IOB)' - ,nb: 'Aktivt insulin (IOB)' - ,fi: 'Aktiivinen insuliini' - ,pt: 'Insulina ativa' - ,es: 'Insulina activa (IOB)' - ,sk: 'Aktívny inzulín (IOB)' - ,ko: '활성 인슐린(IOB)' - ,it: 'IOB - Insulina Attiva' - ,nl: 'IOB - Inuline on board' - ,tr: '(IOB) Aktif İnsülin' - ,zh_cn: '活性胰岛素(IOB)' - ,pl: 'Aktywna insulina' - ,hu: 'Aktív inzulin (IOB)' - } - ,'Current target' : { - cs:'Aktuální cílová hodnota' - ,he: 'מטרה נוכחית ' - ,de: 'Aktueller Zielbereich' - ,dk: 'Aktuelt mål' - ,ro: 'Țintă curentă' - ,fr: 'Cible actuelle' - ,ru: 'Актуальное целевое значение' - ,bg: 'Настояща целева КЗ' - ,hr: 'Trenutni cilj' - ,sv: 'Aktuellt mål' - ,nb: 'Gjeldende mål' - ,fi: 'Tämänhetkinen tavoite' - ,es: 'Objetivo actual' - ,pt: 'Meta atual' - ,sk: 'Aktuálny cieľ' - ,ko: '현재 목표' - ,it: 'Obiettivo attuale' - ,nl: 'huidig doel' - ,tr: 'Mevcut hedef' - ,zh_cn: '当前目标' - ,pl: 'Aktualny cel' - ,hu: 'Jelenlegi cél' - } - ,'Expected effect' : { - cs:'Očekávaný efekt' - ,he: 'אפקט צפוי ' - ,de: 'Erwarteter Effekt' - ,dk: 'Forventet effekt' - ,ro: 'Efect presupus' - ,fr: 'Effect escompté' - ,ru: 'Ожидаемый эффект' - ,bg: 'Очакван ефект' - ,hr: 'Očekivani efekt' - ,sv: 'Förväntad effekt' - ,nb: 'Forventet effekt' - ,fi: 'Oletettu vaikutus' - ,pt: 'Efeito esperado' - ,es: 'Efecto previsto' - ,sk: 'Očakávaný efekt' - ,ko: '예상 효과' - ,it: 'Effetto Previsto' - ,nl: 'verwacht effect' - ,tr: 'Beklenen etki' - ,zh_cn: '预期效果' - ,pl: 'Oczekiwany efekt' - ,hu: 'Elvárt efektus' - } - ,'Expected outcome' : { - cs:'Očekávaný výsledek' - ,he: 'תוצאת צפויה ' - ,de: 'Erwartetes Ergebnis' - ,dk: 'Forventet udfald' - ,ro: 'Rezultat așteptat' - ,fr: 'Résultat escompté' - ,ru: 'Ожидаемый результат' - ,bg: 'Очакван резултат' - ,hr: 'Očekivani ishod' - ,sv: 'Förväntat resultat' - ,nb: 'Forventet resultat' - ,fi: 'Oletettu lopputulos' - ,pt: 'Resultado esperado' - ,es: 'Resultado previsto' - ,sk: 'Očakávaný výsledok' - ,ko: '예상 결과' - ,it: 'Risultato previsto' - ,nl: 'Veracht resultaat' - ,tr: 'Beklenen sonuç' - ,zh_cn: '预期结果' - ,pl: 'Oczekowany resultat' - ,hu: 'Elvárt eredmény' - } - ,'Carb Equivalent' : { - cs:'Ekvivalent v sacharidech' - ,he: 'מקבילה בפחמימות ' - ,de: 'Kohlenhydrat-Äquivalent' - ,dk: 'Kulhydrat ækvivalent' - ,ro: 'Echivalență în carbohidrați' - ,fr: 'Equivalent glucidique' - ,ru: 'Эквивалент в углеводах' - ,bg: 'Равностойност във ВХ' - ,hr: 'Ekvivalent u UGH' - ,sv: 'Kolhydratsinnehåll' - ,nb: 'Karbohydratekvivalent' - ,nl: 'Koolhydraat equivalent' - ,fi: 'Hiilihydraattivastaavuus' - ,es: 'Equivalencia en Carbohidratos' - ,pt: 'Equivalente em carboidratos' - ,sk: 'Sacharidový ekvivalent' - ,ko: '탄수화물 양' - ,it: 'Carb equivalenti' - ,tr: 'Karbonhidrat eşdeğeri' - ,zh_cn: '碳水当量' - ,pl: 'Odpowiednik w węglowodanach' - ,hu: 'Szénhidrát megfelelője' - } - ,'Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs' : { - cs:'Nadbytek inzulínu: o %1U více, než na dosažení spodní hranice cíle. Nepočítáno se sacharidy.' - ,he: 'עודף אינסולין שווה ערך ליחידה אחת%1 יותר מאשר הצורך להגיע ליעד נמוך, לא לוקח בחשבון פחמימות ' - ,de: 'Überschüssiges Insulin: %1U mehr als zum Erreichen der Untergrenze notwendig, Kohlenhydrate sind unberücksichtigt' - ,dk: 'Overskud af insulin modsvarende %1U mere end nødvendigt for at nå lav mål, kulhydrater ikke medregnet' - ,es: 'Exceso de insulina en %1U más de lo necesario para alcanzar un objetivo bajo, sin tener en cuenta los carbohidratos' - ,ro: 'Insulină în exces: %1U mai mult decât este necesar pentru a atinge ținta inferioară, fără a ține cont de carbohidrați' - ,fr: 'Insuline en excès: %1U de plus que nécessaire pour atteindre la cible inférieure, sans prendre en compte les glucides' - ,bg: 'Излишният инсулин %1U е повече от необходимия за достигане до долната граница, ВХ не се вземат под внимание' - ,hr: 'Višak inzulina je %1U više nego li je potrebno da se postigne donja ciljana granica, ne uzevši u obzir UGH' - ,ru: 'Избыток инсулина равного %1U, необходимого для достижения нижнего целевого значения, углеводы не приняты в расчет' - ,sv: 'Överskott av insulin motsvarande %1U mer än nödvändigt för att nå lågt målvärde, kolhydrater ej medräknade' - ,nb: 'Insulin tilsvarende %1U mer enn det trengs for å nå lavt mål, karbohydrater ikke medregnet' - ,nl: 'Insulineoverschot van %1U om laag doel te behalen (excl. koolhydraten)' - ,fi: 'Liikaa insuliinia: %1U enemmän kuin tarvitaan tavoitteeseen pääsyyn (huomioimatta hiilihydraatteja)' - , pl: 'Nadmiar insuliny, %1J więcej niż potrzeba, aby osiągnąć cel dolnej granicy, nie biorąc pod uwagę węglowodanów' - ,pt: 'Excesso de insulina equivalente a %1U além do necessário para atingir a meta inferior, sem levar em conta carboidratos' - ,sk: 'Nadbytok inzulínu o %1U viac ako je potrebné na dosiahnutie spodnej cieľovej hranice. Neráta sa so sacharidmi.' - ,ko: '낮은 혈당 목표에 도달하기 위해 필요한 인슐린양보다 %1U의 인슐린 양이 초과 되었고 탄수화물 양이 초과되지 않았습니다.' - ,it: 'L\'eccesso d\'insulina equivalente %1U più che necessari per raggiungere l\'obiettivo basso, non rappresentano i carboidrati.' - ,tr: 'Fazla insülin: Karbonhidratları dikkate alınmadan, alt hedefe ulaşmak için gerekenden %1U\'den daha fazla' //??? - ,zh_cn: '胰岛素超过至血糖下限目标所需剂量%1单位,不计算碳水化合物' - ,hu: 'Felesleges inzulin megegyező %1U egységgel az alacsony cél eléréséhez, nem számolva a szénhidrátokkal' - } - ,'Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS' : { - cs:'Nadbytek inzulínu: o %1U více, než na dosažení spodní hranice cíle. UJISTĚTE SE, ŽE JE TO POKRYTO SACHARIDY' - ,he: 'עודף אינסולין %1 נדרש כדי להגיע למטרה התחתונה. שים לב כי עליך לכסות אינסולין בגוף על ידי פחמימות ' - ,de: 'Überschüssiges Insulin: %1U mehr als zum Erreichen der Untergrenze notwendig. SICHERSTELLEN, DASS IOB DURCH KOHLENHYDRATE ABGEDECKT WIRD' - ,dk: 'Overskud af insulin modsvarande %1U mere end nødvendigt for at nå lav målværdi, VÆR SIKKER PÅ AT IOB ER DÆKKET IND AF KULHYDRATER' - ,ro: 'Insulină în exces: %1U mai mult decât este necesar pentru a atinge ținta inferioară, ASIGURAȚI-VĂ CĂ INSULINA ESTE ACOPERITĂ DE CARBOHIDRAȚI' - ,fr: 'Insuline en excès: %1U de plus que nécessaire pour atteindre la cible inférieure, ASSUREZ UN APPORT SUFFISANT DE GLUCIDES' - ,bg: 'Излишният инсулин %1U е повече от необходимия за достигане до долната граница, ПРОВЕРИ ДАЛИ IOB СЕ ПОКРИВА ОТ ВЪГЛЕХИДРАТИТЕ' - ,hr: 'Višak inzulina je %1U više nego li je potrebno da se postigne donja ciljana granica, OBAVEZNO POKRIJTE SA UGH' - ,ru: 'Избыток инсулина, равного %1U, необходимого для достижения нижнего целевого значения, ПОКРОЙТЕ АКТИВН IOB ИНСУЛИН УГЛЕВОДАМИ' - ,sv: 'Överskott av insulin motsvarande %1U mer än nödvändigt för att nå lågt målvärde, SÄKERSTÄLL ATT IOB TÄCKS AV KOLHYDRATER' - ,es: 'Exceso de insulina en %1U más de la necesaria para alcanzar objetivo inferior. ASEGÚRESE QUE LA INSULINA ACTIVA IOB ESTA CUBIERTA POR CARBOHIDRATOS' - ,nb: 'Insulin tilsvarende %1U mer enn det trengs for å nå lavt mål, PASS PÅ AT AKTIVT INSULIN ER DEKKET OPP MED KARBOHYDRATER' - ,nl: 'Insulineoverschot van %1U om laag doel te behalen, ZORG VOOR VOLDOENDE KOOLHYDRATEN VOOR DE ACTIEVE INSULINE' - ,fi: 'Liikaa insuliinia: %1U enemmän kuin tarvitaan tavoitteeseen pääsyyn, VARMISTA RIITTÄVÄ HIILIHYDRAATTIEN SAANTI' - ,pt: 'Excesso de insulina equivalente a %1U além do necessário para atingir a meta inferior. ASSEGURE-SE DE QUE A IOB ESTEJA COBERTA POR CARBOIDRATOS' - ,sk: 'Nadbytok inzulínu o %1U viac ako je potrebné na dosiahnutie spodnej cieľovej hranice. UISTITE SA, ŽE JE TO POKRYTÉ SACHARIDMI' - ,ko: '낮은 혈당 목표에 도달하기 위해 필요한 인슐린양보다 %1U의 인슐린 양이 초과 되었습니다. 탄수화물로 IOB를 커버하세요.' - ,it: 'L\'eccesso d\'insulina equivalente %1U più che necessario per raggiungere l\'obiettivo basso, ASSICURARSI IOB SIA COPERTO DA CARBOIDRATI' - ,tr: 'Fazla insülin: Alt KŞ hedefine ulaşmak için gerekenden %1 daha fazla insülin.IOB(Aktif İnsülin) Karbonhidrat tarafından karşılandığından emin olun.' - ,zh_cn: '胰岛素超过至血糖下限目标所需剂量%1单位,确认IOB(活性胰岛素)被碳水化合物覆盖' - ,pl: 'Nadmiar insuliny: o %1J więcej niż potrzeba, aby osiągnąć cel dolnej granicy. UPEWNIJ SIĘ, ŻE AKTYWNA INSULINA JEST POKRYTA WĘGLOWODANAMI' - ,hu: 'Felesleges inzulin megegyező %1U egységgel az alacsony cél eléréséhez. FONTOS, HOGY A IOB LEGYEN SZÉNHIDRÁTTAL TAKARVA' - } - ,'%1U reduction needed in active insulin to reach low target, too much basal?' : { - cs:'Nutné snížení aktivního inzulínu o %1U k dosažení spodního cíle. Příliž mnoho bazálu?' - ,he: 'צריך %1 פחות אינסולין כדי להגיע לגבול התחתון. האם הרמה הבזלית גבוהה מדי? ' - ,de: 'Aktives Insulin um %1U reduzieren, um Untergrenze zu erreichen. Basal zu hoch?' - ,dk: '%1U reduktion nødvendig i aktiv insulin for at nå lav mål, for meget basal?' - ,ro: '%1U sunt în plus ca insulină activă pentru a atinge ținta inferioară, bazala este prea mare?' - ,fr: 'Réduction d\'insuline active nécessaire pour atteindre la cible inférieure. Débit basal trop élevé ?' - ,bg: '%1U намаляне е необходимо в активния инсулин до достигане до долната граница, прекалено висок базал?' - ,hr: 'Potrebno je smanjiti aktivni inzulin za %1U kako bi se dostigla donja ciljana granica, previše bazala? ' - ,ru: 'Для достижения нижнего целевого значения необходимо понизить величину активного инсулина на %1U, велика база?' - ,sv: '%1U minskning nödvändig i aktivt insulin för att nå lågt målvärde, för hög basal?' - ,nb: '%1U reduksjon trengs i aktivt insulin for å nå lavt mål, for høy basal?' - ,fi: 'Pääset tavoitteesen vähentämällä %1U aktiivista insuliinia, liikaa basaalia?' - ,es: 'Se necesita una reducción del %1U insulina activa para objetivo inferior, exceso en basal?' - ,pt: 'Necessária redução de %1U na insulina ativa para atingir a meta inferior, excesso de basal?' - ,nl: '%1U reductie vereist in actieve insuline om laag doel te bereiken, teveel basaal?' - ,sk: 'Nutné zníženie aktívneho inzulínu o %1U pre dosiahnutie spodnej cieľovej hranice. Príliš veľa bazálu?' - ,ko: '낮은 혈당 목표에 도달하기 위해 활성 인슐린 양을 %1U 줄일 필요가 있습니다. basal양이 너무 많습니까?' - ,it: 'Riduzione 1U% necessaria d\'insulina attiva per raggiungere l\'obiettivo basso, troppa basale?' - ,tr: 'Alt KŞ hedefi için %1U aktif insülin azaltılmalı, bazal oranı çok mu yüksek?' - ,zh_cn: '活性胰岛素已可至血糖下限目标,需减少%1单位,基础率过高?' - ,pl: '%1J potrzebnej redukcji w aktywnej insulinie, aby osiągnąć niski cel dolnej granicy, Za duża dawka podstawowa ?' - ,hu: '%1U egységnyi inzulin redukció szükséges az alacsony cél eléréséhez, túl magas a bazál?' - } - ,'basal adjustment out of range, give carbs?' : { - cs:'úprava změnou bazálu není možná. Podat sacharidy?' - ,he: 'השינוי ברמה הבזלית גדול מדי. תן פחמימות? ' - ,de: 'Basalrate geht außerhalb des Zielbereiches. Kohlenhydrate nehmen?' - ,dk: 'basalændring uden for grænseværdi, giv kulhydrater?' - ,ro: 'ajustarea bazalei duce în afara intervalului țintă. Suplimentați carbohirații?' - ,fr: 'ajustement de débit basal hors de limites, prenez des glucides?' - ,bg: 'Корекция на базала не е възможна, добавка на въглехидрати? ' - ,hr: 'prilagodba bazala je izvan raspona, dodati UGH?' - ,ru: 'Корректировка базала вне диапазона, добавить углеводов?' - ,sv: 'basaländring utanför gräns, ge kolhydrater?' - ,es: 'ajuste basal fuera de rango, dar carbohidratos?' - ,nb: 'basaljustering utenfor tillatt område, gi karbohydrater?' - ,fi: 'säätö liian suuri, anna hiilihydraatteja?' - ,pt: 'ajuste de basal fora da meta, dar carboidrato?' - ,sk: 'úprava pomocou zmeny bazálu nie je možná. Podať sacharidy?' - ,ko: '적정 basal 양의 범위를 초과했습니다. 탄수화물 보충 하시겠습니까?' - ,it: 'regolazione basale fuori campo, dare carboidrati?' - ,nl: 'basaal aanpassing buiten bereik, geef KH?' - ,tr: 'Bazal oran ayarlaması limit dışı, karbonhidrat alınsın mı?' - ,zh_cn: '基础率调整在范围之外,需要碳水化合物?' - ,pl: 'dawka podstawowa poza zakresem, podać węglowodany?' - ,hu: 'bazál változtatása az arányokon kívül esik, szénhidrát bevitele?' - } - ,'basal adjustment out of range, give bolus?' : { - cs:'úprava změnou bazálu není možná. Podat bolus?' - ,he: 'השינוי ברמה הבזלית גדול מדי. תן אינסולין? ' - ,de: 'Anpassung der Basalrate außerhalb des Zielbereichs. Bolus abgeben?' - ,dk: 'basalændring udenfor grænseværdi, giv bolus?' - ,ro: 'ajustarea bazalei duce în afara intervalului țintă. Suplimentați insulina?' - ,fr: 'ajustement de débit basal hors de limites, prenez un bolus?' - ,bg: 'Корекция на базала не е възможна, добавка на болус? ' - ,hr: 'prilagodna bazala je izvan raspona, dati bolus?' - ,ru: 'Корректировка базала вне диапазона, добавить болюс?' - ,sv: 'basaländring utanför gräns, ge bolus?' - ,nb: 'basaljustering utenfor tillatt område, gi bolus?' - ,fi: 'säätö liian suuri, anna bolus?' - ,es: 'Ajuste de basal fuera de rango, corregir con insulina?' - ,pt: 'ajuste de basal fora da meta, dar bolus de correção?' - ,sk: 'úprava pomocou zmeny bazálu nie je možná. Podať bolus?' - ,ko: '적정 basal 양의 범위를 초과했습니다. bolus를 추가하시겠습니까?' - ,it: 'regolazione basale fuori campo, dare bolo?' - ,nl: 'basaal aanpassing buiten bereik, bolus?' - ,tr: 'Bazal oran ayarlaması limit dışı, bolus alınsın mı?' - ,zh_cn: '基础率调整在范围之外,需要大剂量?' - ,pl: 'dawka podstawowa poza zakresem, podać insulinę?' - ,hu: 'bazál változtatása az arányokon kívül esik, bólusz beadása?' - } - ,'above high' : { - cs:'nad horním' - ,he: 'מעל גבוה ' - ,de: 'überhalb Obergrenze' - ,dk: 'over højt grænse' - ,ro: 'peste ținta superioară' - ,fr: 'plus haut que la limite supérieure' - ,ru: 'Выше верхней границы' - ,bg: 'над горната' - ,hr: 'iznad gornje granice' - ,sv: 'över hög nivå' - ,nb: 'over høy grense' - ,fi: 'yli korkean' - ,pt: 'acima do limite superior' - ,sk: 'nad horným' - ,es: 'por encima límite superior' - ,ko: '고혈당 초과' - ,it: 'sopra alto' - ,nl: 'boven hoog' - ,tr: 'üzerinde yüksek' - ,zh_cn: '血糖过高' - ,zh_tw: '血糖過高' - ,pl: 'powyżej wysokiego' - ,hu: 'magas felett' - } - ,'below low' : { - cs:'pod spodním' - ,he: 'מתחת נמוך ' - ,de: 'unterhalb Untergrenze' - ,dk: 'under lavt grænse' - ,ro: 'sub ținta inferioară' - ,fr: 'plus bas que la limite inférieure' - ,bg: 'под долната' - ,hr: 'ispod donje granice' - ,ru: 'Ниже нижней границы' - ,sv: 'under låg nivå' - ,nb: 'under lav grense' - ,fi: 'alle matalan' - ,es: 'por debajo límite inferior' - ,pt: 'abaixo do limite inferior' - ,sk: 'pod spodným' - ,ko: '저혈당 미만' - ,it: 'sotto bassa' - ,nl: 'onder laag' - ,tr: 'altında düşük' - ,zh_cn: '血糖过低' - ,zh_tw: '血糖過低' - ,pl: 'poniżej niskiego' - ,hu: 'alacsony alatt' - } - ,'Projected BG %1 target' : { - cs:'Předpokládaná glykémie %1 cílem' - ,he: 'תחזית רמת סןכר %1 ' - ,de: 'Erwarteter BZ %1' - ,dk: 'Ønsket BS %1 mål' - ,ro: 'Glicemie estimată %1 în țintă' - ,fr: 'Glycémie cible projetée %1 ' - ,bg: 'Предполагаемата КЗ %1 в граници' - ,hr: 'Procjena GUK %1 cilja' - ,ru: 'Расчетная целевая гликемия %1' - ,sv: 'Önskat BS %1 mål' - ,nb: 'Ønsket BS %1 mål' - ,fi: 'Laskettu VS %1 tavoitteen' - ,pt: 'Meta de glicemia estimada %1' - ,sk: 'Predpokladaná glykémia %1 cieľ' - ,ko: '목표된 혈당 %1' - ,it: 'Proiezione BG %1 obiettivo' - ,es: 'Glucemia estimada %1 en objetivo' - ,nl: 'Verwachte BG %1 doel' - ,tr: 'Beklenen KŞ %1 hedefi' - ,zh_cn: '预计血糖%1目标' - ,pl: 'Oczekiwany poziom glikemii %1' - ,hu: 'Kiszámított BG cél %1' - } - ,'aiming at' : { - cs:'s cílem' - ,he: 'מטרה ' - ,de: 'angestrebt werden' - ,dk: 'ønsket udfald' - ,fr: 'visant' - ,ro: 'ținta este' - ,ru: 'цель на' - ,bg: 'цел към' - ,hr: 'ciljano' - ,sv: 'önskad utgång' - ,nb: 'sikter på' - ,fi: 'tavoitellaan' - ,es: 'resultado deseado' - ,pt: 'meta' - ,sk: 'cieľom' - ,ko: '목표' - ,it: 'puntare a' - ,nl: 'doel is' - ,tr: 'istenen sonuç' - ,zh_cn: '目标在' - ,pl: 'pożądany wynik' - ,hu: 'cél' - } - ,'Bolus %1 units' : { - cs:'Bolus %1 jednotek' - ,he: 'בולוס %1 יחידות ' - ,de: 'Bolus von %1 Einheiten' - ,dk: 'Bolus %1 enheder' - ,ro: 'Bolus de %1 unități' - ,fr: 'Bolus %1 unités' - ,bg: 'Болус %1 единици' - ,hr: 'Bolus %1 jedinica' - ,ru: 'Болюс %1 единиц' - ,sv: 'Bolus %1 enheter' - ,nb: 'Bolus %1 enheter' - ,fi: 'Bolusta %1 yksikköä' - ,pt: 'Bolus %1 unidades' - ,es: 'Bolus %1 unidades' - ,sk: 'Bolus %1 jednotiek' - ,ko: 'Bolus %1 단위' - ,it: 'Bolo %1 unità' - ,nl: 'Bolus %1 eenheden' - ,tr: 'Bolus %1 Ünite' - ,zh_cn: '大剂量%1单位' - ,pl: 'Bolus %1 jednostek' - ,hu: 'Bólus %1 egységet' - } - ,'or adjust basal' : { - cs:'nebo úprava bazálu' - ,he: 'או שנה רמה בזלית ' - ,de: 'oder Basal anpassen' - ,dk: 'eller juster basal' - ,ro: 'sau ajustează bazala' - ,fr: 'ou ajuster le débit basal' - ,bg: 'или корекция на базала' - ,hr: 'ili prilagodba bazala' - ,ru: 'или корректировать базал' - ,sv: 'eller justera basal' - ,nb: 'eller justere basal' - ,fi: 'tai säädä basaalia' - ,pt: 'ou ajuste basal' - ,es: 'o ajustar basal' - ,sk: 'alebo úprava bazálu' - ,ko: '또는 조절 basal' - ,it: 'o regolare basale' - ,nl: 'of pas basaal aan' - ,tr: 'ya da bazal ayarlama' - ,zh_cn: '或调整基础率' - ,pl: 'lub dostosuj dawkę bazową' - ,hu: 'vagy a bazál változtatása' - } - ,'Check BG using glucometer before correcting!' : { - cs:'Před korekcí zkontrolujte glukometrem glykémii!' - ,he: 'מדוד רמת סוכר בדם באמצעות מד סוכר לפני תיקון ' - ,de: 'Überprüfe deinen BZ mit dem Messgerät, bevor du eine Korrektur vornimmst!' - ,dk: 'Kontrollere blodsukker med fingerprikker / blodsukkermåler før der korrigeres!' - ,ro: 'Verifică glicemia cu glucometrul înainte de a face o corecție!' - ,fr: 'Vérifier la glycémie avec un glucomètre avant de corriger!' - ,bg: 'Провери КЗ с глюкомер, преди кореция!' - ,hr: 'Provjeri GUK glukometrom prije korekcije!' - ,ru: 'Перед корректировкой сверьте ГК с глюкометром' - ,sv: 'Kontrollera blodglukos med fingerstick före korrigering!' - ,nb: 'Sjekk blodsukker før korrigering!' - ,fi: 'Tarkista VS mittarilla ennen korjaamista!' - ,pt: 'Verifique glicemia de ponta de dedo antes de corrigir!' - ,es: 'Verifique glucemia antes de corregir!' - ,sk: 'Pred korekciou skontrolujte glykémiu glukometrom!' - ,ko: '수정하기 전에 혈당체크기를 사용하여 혈당을 체크하세요!' - ,it: 'Controllare BG utilizzando glucometro prima di correggere!' - ,nl: 'Controleer BG met bloeddruppel voor correctie!' - ,zh_cn: '校正前请使用血糖仪测量血糖!' - ,pl: 'Sprawdź glikemię z krwi przed podaniem korekty!' - ,tr: 'Düzeltme bolusu öncesi glikometreyle parmaktan KŞini kontrol edin!' - ,hu: 'Ellenőrizd a cukorszintet mérővel korrekció előtt!' - } - ,'Basal reduction to account %1 units:' : { - cs:'Úprava bazálu pro náhradu bolusu %1 U ' - ,he: 'משנה רמה בזלית בשביל %1 יחידות ' - ,de: 'Reduktion der Basalrate um %1 Einheiten zu kompensieren' - ,dk: 'Basalsænkning for at nå %1 enheder' - ,ro: 'Reducere bazală pentru a compensa %1 unități:' - ,fr: 'Réduction du débit basal pour obtenir l\'effet d\' %1 unité' - ,bg: 'Намаляне на базала с %1 единици' - ,hr: 'Smanjeni bazal da uračuna %1 jedinica:' - ,ru: 'Снижение базы из-за %1 единиц болюса' - ,sv: 'Basalsänkning för att nå %1 enheter' - ,nb: 'Basalredusering for å nå %1 enheter' - ,fi: 'Basaalin vähennys saadaksesi %1 yksikön vaikutuksen:' - ,pt: 'Redução de basal para compensar %1 unidades:' - ,es: 'Reducir basal para compesar %1 unidades:' - ,sk: 'Úprava bazálu pre výpočet %1 jednotiek:' - ,ko: '%1 단위로 계산하기 위해 Basal 감소' - ,it: 'Riduzione basale per conto %1 unità:' - ,nl: 'Basaal verlaagd voor %1 eenheden' - ,zh_cn: '基础率减少到%1单位' - ,pl: 'Dawka bazowa zredukowana do 1% J' - ,tr: '%1 birimi telafi etmek için azaltılmış Bazaloranı:' - ,hu: 'A bazál csökkentése %1 egység kiszámításához:' - } - ,'30m temp basal' : { - cs:'30ti minutový dočasný bazál' - ,he: 'שלושים דקות רמה בזלית זמנית ' - ,de: '30min temporäres Basal' - ,dk: '30 minuters midlertidig basal' - ,ro: 'bazală temporară de 30 minute' - ,fr: 'débit basal temporaire de 30 min' - ,bg: '30м временен базал' - ,hr: '30m temp bazal' - ,ru: '30 мин врем базал' - ,sv: '30 minuters temporär basal' - ,nb: '30 minutters midlertidig basal' - ,fi: '30m tilapäinen basaali' - ,pt: 'Basal temp 30m' - ,es: '30 min. temporal basal' - ,sk: '30 minutový dočasný bazál' - ,ko: '30분 임시 basal' - ,it: '30m basale temp' - ,nl: '30 minuten tijdelijke basaal' - ,zh_cn: '30分钟临时基础率' - ,pl: '30 minut tymczasowej dawki bazowej' - ,tr: '30 dk. geçici Bazal ' - ,hu: '30p általános bazál' - } - ,'1h temp basal' : { - cs:'hodinový dočasný bazál' - ,he: 'שעה רמה בזלית זמנית ' - ,de: '1h temporäres Basal' - ,dk: '60 minutters midlertidig basal' - ,ro: 'bazală temporară de 1 oră' - ,fr: 'débit basal temporaire de 1 heure' - ,bg: '1 час временен базал' - ,hr: '1h temp bazal' - ,ru: '1 час врем базал' - ,sv: '60 minuters temporär basal' - ,nb: '60 minutters midlertidig basal' - ,fi: '1h tilapäinen basaali' - ,es: '1h temporal Basasl' - ,pt: 'Basal temp 1h' - ,sk: 'hodinový dočasný bazál' - ,ko: '1시간 임시 basal' - ,it: '1h basale temp' - ,nl: '1 uur tijdelijke basaal' - ,zh_cn: '1小时临时基础率' - ,pl: '1 godzina tymczasowej dawki bazowej' - ,tr: '1 sa. geçici bazal' - ,hu: '10 általános bazál' - } - ,'Cannula change overdue!' : { - cs:'Čas na výměnu set vypršel!' - ,he: 'יש צורך בהחלפת קנולה! ' - ,de: 'Kanülenwechsel überfällig!' - ,dk: 'Tid for skift af Infusionssæt overskredet!' - ,ro: 'Depășire termen schimbare canulă!' - ,bg: 'Времето за смяна на сет просрочено' - ,hr: 'Prošao rok za zamjenu kanile!' - ,fr: 'Dépassement de date de changement de canule!' - ,ru: 'Срок замены катетера помпы истек' - ,sv: 'Infusionsset, bytestid överskriden' - ,nb: 'Byttetid for infusjonssett overskredet' - ,fi: 'Kanyylin ikä yli määräajan!' - ,pt: 'Substituição de catéter vencida!' - ,es: '¡Cambio de agujas vencido!' - ,sk: 'Výmena kanyli po lehote!' - ,ko: '주입세트(cannula) 기한이 지났습니다. 변경하세요!' - ,it: 'Cambio Cannula in ritardo!' - ,nl: 'Cannule te oud!' - ,zh_cn: '超过更换管路的时间' - ,pl: 'Przekroczono czas wymiany wkłucia!' - ,tr: 'Kanül değişimi gecikmiş!' - ,hu: 'Kanil cseréjének ideje elmúlt' - } - ,'Time to change cannula' : { - cs:'Čas na výměnu setu' - ,he: 'הגיע הזמן להחליף קנולה ' - ,de: 'Es ist Zeit, die Kanüle zu wechseln' - ,dk: 'Tid til at skifte infusionssæt' - ,fr: 'Le moment est venu de changer de canule' - ,ro: 'Este vremea să schimbați canula' - ,bg: 'Време за смяна на сет' - ,hr: 'Vrijeme za zamjenu kanile' - ,ru: 'Пора заменить катетер помпы' - ,sv: 'Dags att byta infusionsset' - ,nb: 'På tide å bytte infusjonssett' - ,fi: 'Aika vaihtaa kanyyli' - ,es:' Hora sustituir cánula' - ,pt: 'Hora de subistituir catéter' - ,sk: 'Čas na výmenu kanyli' - ,ko: '주입세트(cannula)를 변경할 시간' - ,it: 'Tempo di cambiare la cannula' - ,nl: 'Verwissel canule' - ,zh_cn: '已到更换管路的时间' - ,pl: 'Czas do wymiany wkłucia' - ,tr: 'Kanül değiştirme zamanı' - ,hu: 'Ideje kicserélni a kanilt' - } - ,'Change cannula soon' : { - cs:'Blíží se čas na výměnu setu' - ,he: 'החלף קנולה בקרוב ' - ,de: 'Kanüle bald wechseln' - ,dk: 'Skift infusionssæt snart' - ,ro: 'Schimbați canula în curând' - ,fr: 'Changement de canule bientòt' - ,bg: 'Смени сета скоро' - ,hr: 'Zamijena kanile uskoro' - ,ru: 'Приближается время замены катетера помпы' - ,sv: 'Byt infusionsset snart' - ,nb: 'Bytt infusjonssett snart' - ,fi: 'Vaihda kanyyli pian' - ,pt: 'Substituir catéter em breve' - ,sk: 'Čoskoro bude potrebné vymeniť kanylu' - ,ko: '주입세트(cannula)를 곧 변경하세요.' - ,it: 'Cambio cannula prossimamente' - ,nl: 'Verwissel canule binnenkort' - ,zh_cn: '接近更换管路的时间' - ,pl: 'Wkrótce wymiana wkłucia' - ,tr: 'Yakında kanül değiştirin' - ,hu: 'Hamarosan cseréld ki a kanilt' - } - ,'Cannula age %1 hours' : { - cs:'Stáří setu %1 hodin' - ,he: 'כיל הקנולה %1 שעות ' - ,de: 'Kanülen Alter %1 Stunden' - ,dk: 'Infusionssæt tid %1 timer' - ,fr: 'âge de la canule %1 heures' - ,ro: 'Vechimea canulei în ore: %1' - ,bg: 'Сетът е на %1 часове' - ,hr: 'Staros kanile %1 sati' - ,ru: 'Катетер помпы работает %1 час' - ,sv: 'Infusionsset tid %1 timmar' - ,nb: 'infusjonssett alder %1 timer' - ,fi: 'Kanyylin ikä %1 tuntia' - ,pt: 'Idade do catéter %1 horas' - ,es: 'Cánula usada %1 horas' - ,sk: 'Vek kanyli %1 hodín' - ,ko: '주입세트(cannula) %1시간 사용' - ,it: 'Durata Cannula %1 ore' - ,nl: 'Canule leeftijd %1 uren' - ,zh_cn: '管路已使用%1小时' - ,pl: 'Czas od wymiany wkłucia %1 godzin' - ,tr: 'Kanül yaşı %1 saat' - ,hu: 'Kamil életkora %1 óra' - } - ,'Inserted' : { - cs:'Nasazený' - ,he: 'הוכנס ' - ,de: 'Eingesetzt' - ,dk: 'Isat' - ,ro: 'Inserat' - ,fr: 'Insérée' - ,bg: 'Поставен' - ,hr: 'Postavljanje' - ,ru: 'Установлен' - ,sv: 'Applicerad' - ,nb: 'Satt inn' - ,fi: 'Asetettu' - ,es: 'Insertado' - ,pt: 'Inserido' - ,sk: 'Zavedený' - ,ko: '삽입된' - ,it: 'Inserito' - ,nl: 'Ingezet' - ,zh_cn: '已植入' - ,zh_tw: '已植入' - ,pl: 'Zamontowano' - ,tr: 'Yerleştirilmiş' - ,hu: 'Behelyezve' - - } - ,'CAGE' : { - cs:'SET' - ,he: 'גיל הקנולה ' - ,de: 'CAGE' - ,dk: 'Indstik alder' - ,ro: 'VC' - ,bg: 'ВС' - ,hr: 'Starost kanile' - ,fr: 'CAGE' - ,ru: 'КатПомп' - ,sv: 'Nål' - ,nb: 'Nål alder' - ,fi: 'KIKÄ' - ,pt: 'ICAT' - ,es: 'Cánula desde' - ,sk: 'SET' - ,ko: '주입세트사용기간' - ,it: 'CAGE' - ,nl: 'CAGE' - ,zh_cn: '管路' - ,zh_tw: '管路' - ,pl: 'Wiek wkłucia' - ,tr: 'CAGE' - ,hu: 'CAGE' - } - ,'COB' : { - cs:'SACH' - ,he: 'COB ' - ,de: 'COB' - ,dk: 'COB' - ,ro: 'COB' - ,bg: 'АВХ' - ,hr: 'Aktivni UGH' - ,fr: 'COB' - ,ru: 'АктУгл COB' - ,sv: 'COB' - ,nb: 'Aktive karbohydrater' - ,fi: 'AH' - ,pt: 'COB' - ,es: 'Carb. activos' - ,sk: 'SACH' - ,ko: 'COB' - ,it: 'COB' - ,nl: 'COB' - ,zh_cn: '活性碳水COB' - ,pl: 'Aktywne węglowodany' - ,tr: 'COB' - ,hu: 'COB' - } - ,'Last Carbs' : { - cs:'Poslední sacharidy' - ,he: 'פחמימות אחרונות ' - ,de: 'Letzte Kohlenhydrate' - ,dk: 'Seneste kulhydrater' - ,ro: 'Ultimii carbohidrați' - ,fr: 'Derniers glucides' - ,bg: 'Последни ВХ' - ,hr: 'Posljednji UGH' - ,ru: 'Прошлые углеводы' - ,sv: 'Senaste kolhydrater' - ,nb: 'Siste karbohydrater' - ,fi: 'Viimeisimmät hiilihydraatit' - ,pt: 'Último carboidrato' - ,es: 'último carbohidrato' - ,sk: 'Posledné sacharidy' - ,ko: '마지막 탄수화물' - ,it: 'Ultimi carboidrati' - ,nl: 'Laatse KH' - ,zh_cn: '上次碳水' - ,pl: 'Ostatnie węglowodany' - ,tr: 'Son Karbonhidrat' - ,hu: 'Utolsó szénhidrátok' - } - ,'IAGE' : { - cs:'INZ' - ,he: 'גיל אינסולין ' - ,de: 'IAGE' - ,dk: 'Insulinalder' - ,ro: 'VI' - ,fr: 'IAGE' - ,bg: 'ИнсСрок' - ,hr: 'Starost inzulina' - ,ru: 'ИнсСрок' - ,sv: 'Insulinålder' - ,nb: 'Insulinalder' - ,fi: 'IIKÄ' - ,pt: 'IddI' - ,es: 'Insul.desde' - ,sk: 'INZ' - ,ko: '인슐린사용기간' - ,it: 'IAGE' - ,nl: 'IAGE' - ,zh_cn: '胰岛素' - ,zh_tw: '胰島素' - ,pl: 'Wiek insuliny' - ,tr: 'IAGE' - ,hu: 'IAGE' - } - ,'Insulin reservoir change overdue!' : { - cs:'Čas na výměnu zásobníku vypršel!' - ,he: 'החלף מאגר אינסולין! ' - ,de: 'Ampullenwechsel überfällig!' - ,dk: 'Tid for skift af insulinreservoir overskredet!' - ,fr: 'Dépassement de date de changement de réservoir d\'insuline!' - ,ro: 'Termenul de schimbare a rezervorului de insulină a fost depășit' - ,bg: 'Смянатата на резервоара просрочена' - ,hr: 'Prošao rok za zamjenu spremnika!' - ,ru: 'Срок замены резервуара инсулина истек' - ,sv: 'Insulinbytestid överskriden' - ,nb: 'Insulinbyttetid overskrevet' - ,fi: 'Insuliinisäiliö vanhempi kuin määräaika!' - ,pt: 'Substituição de reservatório vencida!' - ,es: 'Excedido plazo del cambio depósito de insulina!' - ,sk: 'Čas na výmenu inzulínu po lehote!' - ,ko: '레저보(펌프 주사기)의 사용기한이 지났습니다. 변경하세요!' - ,it: 'Cambio serbatoio d\'insulina in ritardo!' - ,nl: 'Verwissel insulinereservoir nu!' - ,zh_cn: '超过更换胰岛素储液器的时间' - ,pl: 'Przekroczono czas wymiany zbiornika na insulinę!' - ,tr: 'İnsülin rezervuarı değişimi gecikmiş!' - ,hu: 'Inzulin tartály cseréjének ideje elmúlt' - } - ,'Time to change insulin reservoir' : { - cs:'Čas na výměnu zásobníku' - ,he: 'הגיע הזמן להחליף מאגר אינסולין ' - ,de: 'Es ist Zeit, die Ampulle zu wechseln' - ,dk: 'Tid til at skifte insulinreservoir' - ,ro: 'Este timpul pentru schimbarea rezervorului de insulină' - ,fr: 'Le moment est venu de changer de réservoir d\'insuline' - ,bg: 'Време е за смяна на резервоара' - ,hr: 'Vrijeme za zamjenu spremnika' - ,ru: 'Наступил срок замены резервуара инсулина' - ,sv: 'Dags att byta insulinreservoar' - ,nb: 'På tide å bytte insulinreservoar' - ,fi: 'Aika vaihtaa insuliinisäiliö' - ,pt: 'Hora de substituir reservatório' - ,es: 'Hora de sustituir depósito insulina' - ,sk: 'Čas na výmenu inzulínu' - ,ko: '레저보(펌프 주사기)를 변경할 시간' - ,it: 'Momento di cambiare serbatoio d\'insulina' - ,nl: 'Verwissel insuline reservoir' - ,zh_cn: '已到更换胰岛素储液器的时间' - ,pl: 'Czas do zmiany zbiornika na insulinę!' - ,tr: 'İnsülin rezervuarını değiştirme zamanı!' - ,hu: 'Itt az ideje az inzulin tartály cseréjének' - } - ,'Change insulin reservoir soon' : { - cs:'Blíží se čas na výměnu zásobníku' - ,he: 'החלף מאגר אינסולין בקרוב ' - ,de: 'Ampulle bald wechseln' - ,dk: 'Skift insulinreservoir snart' - ,ro: 'Rezervorul de insulină trebuie schimbat în curând' - ,fr: 'Changement de réservoir d\'insuline bientôt' - ,bg: 'Смени резервоара скоро' - ,hr: 'Zamjena spremnika uskoro' - ,ru: 'Наступает срок замены резервуара инсулина' - ,sv: 'Byt insulinreservoar snart' - ,nb: 'Bytt insulinreservoar snart' - ,fi: 'Vaihda insuliinisäiliö pian' - ,pt: 'Substituir reservatório em brave' - ,es: 'Sustituir depósito insulina en breve' - ,sk: 'Čoskoro bude potrebné vymeniť inzulín' - ,ko: '레저보(펌프 주사기)안의 인슐린을 곧 변경하세요.' - ,it: 'Cambiare serbatoio d\'insulina prossimamente' - ,nl: 'Verwissel insuline reservoir binnenkort' - ,zh_cn: '接近更换胰岛素储液器的时间' - ,pl: 'Wkrótce wymiana zbiornika na insulinę!' - ,tr: 'Yakında insülin rezervuarını değiştirin' - ,hu: 'Hamarosan cseréld ki az inzulin tartályt' - } - ,'Insulin reservoir age %1 hours' : { - cs:'Stáří zásobníku %1 hodin' - ,he: 'גיל מאגר אינסולין %1 שעות ' - ,de: 'Ampullen Alter %1 Stunden' - ,dk: 'Insulinreservoiralder %1 timer' - ,fr: 'Âge du réservoir d\'insuline %1 heures' - ,ro: 'Vârsta reservorului de insulină %1 ore' - ,ru: 'Картридж инсулина отработал %1часов' - ,bg: 'Резервоарът е на %1 часа' - ,hr: 'Spremnik zamijenjen prije %1 sati' - ,sv: 'Insulinreservoarsålder %1 timmar' - ,nb: 'Insulinreservoaralder %1 timer' - ,fi: 'Insuliinisäiliön ikä %1 tuntia' - ,pt: 'Idade do reservatório %1 horas' - ,sk: 'Vek inzulínu %1 hodín' - ,es: 'Depósito insulina desde %1 horas' - ,ko: '레저보(펌프 주사기) %1시간 사용' - ,it: 'IAGE - Durata Serbatoio d\'insulina %1 ore' - ,nl: 'Insuline reservoir leeftijd %1 uren' - ,zh_cn: '胰岛素储液器已使用%1小时' - ,pl: 'Wiek zbiornika na insulinę %1 godzin' - ,tr: 'İnsülin rezervuar yaşı %1 saat' - ,hu: 'Az inzulin tartály %1 órája volt cserélve' - } - ,'Changed' : { - cs:'Vyměněno' - ,he: 'הוחלף ' - ,de: 'Gewechselt' - ,dk: 'Skiftet' - ,fr: 'Changé' - ,ro: 'Schimbat' - ,ru: 'Замена произведена' - ,bg: 'Сменен' - ,hr: 'Promijenjeno' - ,sv: 'Bytt' - ,nb: 'Byttet' - ,fi: 'Vaihdettu' - ,pt: 'Substituído' - ,es: 'Cambiado' - ,sk: 'Vymenený' - ,ko: '변경됨' - ,it: 'Cambiato' - ,nl: 'veranderd' - ,zh_cn: '已更换' - ,pl: 'Wymieniono' - ,tr: 'Değişmiş' - ,hu: 'Cserélve' - } - ,'IOB' : { - cs:'IOB' - ,he: 'IOB ' - ,de: 'IOB' - ,dk: 'IOB' - ,ro: 'IOB' - ,ru: 'АктИнс IOB' - ,fr: 'IOB' - ,bg: 'АИ' - ,hr: 'Aktivni inzulin' - ,sv: 'IOB' - ,nb: 'Aktivt insulin' - ,es: 'Insulina Activa IOB' - ,fi: 'IOB' - ,pt: 'IOB' - ,sk: 'IOB' - ,ko: 'IOB' - ,it: 'IOB' - ,nl: 'IOB' - ,zh_cn: '活性胰岛素IOB' - ,pl: 'Aktywna insulina' - ,tr: 'IOB' - ,hu: 'IOB' - } - ,'Careportal IOB' : { - cs:'IOB z ošetření' - ,he: 'Careportal IOB ' - ,de: 'Careportal IOB' - ,dk: 'IOB i Careportal' - ,ro: 'IOB în Careportal' - ,ru: 'АктИнс на портале лечения' - ,fr: 'Careportal IOB' - ,bg: 'АИ от Кеърпортал' - ,hr: 'Careportal IOB' - ,sv: 'IOB i Careportal' - ,nb: 'Aktivt insulin i Careportal' - ,fi: 'Careportal IOB' - ,es: 'Insulina activa en Careportal' - ,pt: 'IOB do Careportal' - ,sk: 'IOB z portálu starostlivosti' - ,ko: '케어포털 IOB' - ,it: 'IOB Somministrazioni' - ,nl: 'Careportal IOB' - ,zh_cn: '服务面板IOB(活性胰岛素)' - ,pl: 'Aktywna insulina z portalu' - ,tr: 'Careportal IOB (Aktif İnsülin)' - ,hu: 'Careportal IOB érték' - } - ,'Last Bolus' : { - cs:'Poslední bolus' - ,he: 'בולוס אחרון ' - ,de: 'Letzter Bolus' - ,dk: 'Seneste Bolus' - ,fr: 'Dernier Bolus' - ,ro: 'Ultimul bolus' - ,ru: 'Прошлый болюс' - ,bg: 'Последен болус' - ,hr: 'Prethodni bolus' - ,sv: 'Senaste Bolus' - ,nb: 'Siste Bolus' - ,fi: 'Viimeisin bolus' - ,pt: 'Último bolus' - ,es: 'Último bolo' - ,sk: 'Posledný bolus' - ,ko: '마지막 Bolus' - ,it: 'Ultimo bolo' - ,nl: 'Laatste bolus' - ,zh_cn: '上次大剂量' - ,pl: 'Ostatni bolus' - ,tr: 'Son Bolus' - ,hu: 'Utolsó bólus' - } - ,'Basal IOB' : { - cs:'IOB z bazálů' - ,he: 'IOB בזלי ' - ,de: 'Basal IOB' - ,dk: 'Basal IOB' - ,ro: 'IOB bazală' - ,ru: 'АктуальнБазал IOB' - ,fr: 'IOB du débit basal' - ,bg: 'Базален АИ' - ,hr: 'Bazalni aktivni inzulin' - ,sv: 'Basal IOB' - ,nb: 'Basal Aktivt Insulin' - ,fi: 'Basaalin IOB' - ,pt: 'IOB basal' - ,es: 'Basal Insulina activa' - ,sk: 'Bazálny IOB' - ,ko: 'Basal IOB' - ,it: 'Basale IOB' - ,nl: 'Basaal IOB' - ,zh_cn: '基础率IOB(活性胰岛素)' - ,pl: 'Aktywna insulina z dawki bazowej' - ,tr: 'Bazal IOB' - ,hu: 'Bazál IOB' - } - ,'Source' : { - cs:'Zdroj' - ,he: 'מקור ' - ,de: 'Quelle' - ,dk: 'Kilde' - ,ro: 'Sursă' - ,fr: 'Source' - ,ru: 'Источник' - ,bg: 'Източник' - ,hr: 'Izvor' - ,sv: 'Källa' - ,nb: 'Kilde' - ,fi: 'Lähde' - ,pt: 'Fonte' - ,es: 'Fuente' - ,sk: 'Zdroj' - ,ko: '출처' - ,it: 'Fonte' - ,nl: 'bron' - ,zh_cn: '来源' - ,pl: 'Źródło' - ,tr: 'Kaynak' - ,hu: 'Forrás' - } - ,'Stale data, check rig?' : { - cs:'Zastaralá data, zkontrolovat mobil?' - ,he: 'מידע ישן, בדוק את המערכת? ' - ,de: 'Daten sind veraltet, Übertragungsgerät prüfen?' - ,dk: 'Gammel data, kontrollere uploader?' - ,ro: 'Date învechite, verificați uploaderul!' - ,fr: 'Valeurs trop anciennes, vérifier l\'uploadeur' - ,ru: 'Старые данные, проверьте загрузчик' - ,bg: 'Стари данни, провери телефона' - ,hr: 'Nedostaju podaci, provjera opreme?' - ,es: 'Datos desactualizados, controlar la subida?' - ,sv: 'Gammal data, kontrollera rigg?' - ,nb: 'Gamle data, sjekk rigg?' - ,fi: 'Tiedot vanhoja, tarkista lähetin?' - , pl: 'Dane są nieaktualne, sprawdź urządzenie transmisyjne.' - ,pt: 'Dados antigos, verificar uploader?' - ,sk: 'Zastaralé dáta, skontrolujte uploader' - ,ko: '오래된 데이터입니다. 확인해 보시겠습니까?' - ,it: 'dati non aggiornati, controllare il telefono?' - ,nl: 'Geen data, controleer uploader' - ,zh_cn: '数据过期,检查一下设备?' - ,tr: 'Veri güncel değil, vericiyi kontrol et?' - ,hu: 'Öreg adatok, ellenőrizd a feltöltőt' - } - ,'Last received:' : { - cs:'Naposledy přijato:' - ,he: 'התקבל לאחרונה: ' - ,de: 'Zuletzt empfangen:' - ,dk: 'Senest modtaget:' - ,fr: 'Dernière réception:' - ,ro: 'Ultimile date:' - ,ru: 'Получено:' - ,bg: 'Последно получени' - ,hr: 'Zadnji podaci od:' - ,sv: 'Senast mottagen:' - ,nb: 'Sist mottatt:' - ,fi: 'Viimeksi vastaanotettu:' - ,pt: 'Último recebido:' - ,es: 'Último recibido:' - ,sk: 'Naposledy prijaté:' - ,ko: '마지막 수신' - ,it: 'Ultime ricevute:' - ,nl: 'laatste ontvangen' - ,zh_cn: '上次接收:' - ,pl: 'Ostatnio odebrane:' - ,tr: 'Son alınan:' - ,hu: 'Utóljára fogadott:' - } - ,'%1m ago' : { - cs:'%1m zpět' - ,he: 'לפני %1 דקות ' - ,de: 'vor %1m' - ,dk: '%1m siden' - ,ro: 'acum %1 minute' - ,fr: 'il y a %1 min' - ,ru: '% мин назад' - ,bg: 'преди %1 мин.' - ,hr: 'prije %1m' - ,sv: '%1m sedan' - ,nb: '%1m siden' - ,fi: '%1m sitten' - ,es: '%1min. atrás' - ,pt: '%1m atrás' - ,sk: 'pred %1m' - ,ko: '%1분 전' - ,it: '%1m fa' - ,nl: '%1m geleden' - ,zh_cn: '%1分钟前' - ,pl: '%1 minut temu' - ,tr: '%1 dk. önce' - ,hu: '%1p ezelőtt' - } - ,'%1h ago' : { - cs:'%1h zpět' - ,he: 'לפני %1 שעות ' - ,de: 'vor %1h' - ,dk: '%1t siden' - ,ro: 'acum %1 ore' - ,fr: '%1 heures plus tôt' - ,ru: '% час назад' - ,bg: 'преди %1 час' - ,hr: 'prije %1 sati' - ,sv: '%1h sedan' - ,nb: '%1h siden' - ,fi: '%1h sitten' - ,pt: '%1h atrás' - ,es: '%1h. atrás' - ,sk: 'pred %1h' - ,ko: '%1시간 전' - ,it: '%1h fa' - ,nl: '%1u geleden' - ,zh_cn: '%1小时前' - ,pl: '%1 godzin temu' - ,tr: '%1 sa. önce' - ,hu: '%1ó ezelőtt' - } - ,'%1d ago' : { - cs:'%1d zpět' - ,he: 'לפני %1 ימים ' - ,de: 'vor 1d' - ,dk: '%1d siden' - ,ro: 'acum %1 zile' - ,fr: '%1 jours plus tôt' - ,ru: '% дн назад' - ,bg: 'преди %1 ден' - ,hr: 'prije %1 dana' - ,sv: '%1d sedan' - ,nb: '%1d siden' - ,fi: '%1d sitten' - ,pt: '%1d atrás' - ,es: '%1d atrás' - ,sk: 'pred %1d' - ,ko: '%1일 전' - ,it: '%1d fa' - ,nl: '%1d geleden' - ,zh_cn: '%1天前' - ,pl: '%1 dni temu' - ,tr: '%1 gün önce' - ,hu: '%1n ezelőtt' - } - ,'RETRO' : { - cs:'RETRO' - ,he: 'רטרו ' - ,de: 'RETRO' - ,dk: 'RETRO' - ,ro: 'VECHI' - ,ru: 'ПРОШЛОЕ' - ,bg: 'РЕТРО' - ,hr: 'RETRO' - ,fr: 'RETRO' - ,sv: 'RETRO' - ,nb: 'GAMMELT' - ,fi: 'RETRO' - ,pt: 'RETRO' - ,es: 'RETRO' - ,sk: 'RETRO' - ,ko: 'RETRO' - ,it: 'RETRO' - ,nl: 'RETRO' - ,zh_cn: '历史数据' - ,pl: 'RETRO' - ,tr: 'RETRO Geçmiş' - ,hu: 'RETRO' - } - ,'SAGE' : { - cs:'SENZ' - ,he: 'גיל הסנסור ' - ,de:'SAGE' - ,dk: 'Sensoralder' - ,ro: 'VS' - ,ru: 'Сенсор работает' - ,fr: 'SAGE' - ,bg: 'ВС' - ,hr: 'Starost senzora' - ,sv: 'Sensor' - ,nb: 'Sensoralder' - ,fi: 'SIKÄ' - ,pt: 'IddS' - ,sk: 'SENZ' - ,es: 'Sensor desde' - ,ko: '센서사용기간' - ,it: 'SAGE' - ,nl: 'SAGE' - ,zh_cn: '探头' - ,zh_tw: '探頭' - ,pl: 'Wiek sensora' - ,tr: 'SAGE' - ,hu: 'SAGE' - } - ,'Sensor change/restart overdue!' : { - cs:'Čas na výměnu senzoru vypršel!' - ,he: 'שנה או אתחל את הסנסור! ' - ,de: 'Sensorwechsel/-neustart überfällig!' - ,dk: 'Sensor skift/genstart overskredet!' - ,ro: 'Depășire termen schimbare/restart senzor!' - ,fr: 'Changement/Redémarrage du senseur dépassé!' - ,ru: 'Рестарт сенсора пропущен' - ,bg: 'Смяната/рестартът на сензора са пресрочени' - ,hr: 'Prošao rok za zamjenu/restart senzora!' - ,sv: 'Sensor byte/omstart överskriden!' - ,nb: 'Sensor bytte/omstart overskredet!' - ,fi: 'Sensorin vaihto/uudelleenkäynnistys yli määräajan!' - ,pt: 'Substituição/reinício de sensor vencido' - ,es: 'Sustituir/reiniciar, sensor vencido' - ,sk: 'Čas na výmenu/reštart sensoru uplynul!' - ,ko: '센서 사용기한이 지났습니다. 센서를 교체/재시작 하세요!' - ,it: 'Cambio/riavvio del sensore in ritardo!' - ,nl: 'Sensor vevang/hertstart tijd gepasseerd' - ,zh_cn: '超过更换/重启探头的时间' - ,pl: 'Przekroczono czas wymiany/restartu sensora!' - ,tr: 'Sensör değişimi/yeniden başlatma gecikti!' - ,hu: 'Szenzor cseréjének / újraindításának ideje lejárt' - } - ,'Time to change/restart sensor' : { - cs:'Čas na výměnu senzoru' - ,he: 'הגיע הזמן לשנות או לאתחל את הסנסור ' - ,de: 'Es ist Zeit, den Sensor zu wechseln/neuzustarten' - ,dk: 'Tid til at skifte/genstarte sensor' - ,ro: 'Este timpul pentru schimbarea senzorului' - ,ru: 'Время замены/рестарта сенсора' - ,fr: 'C\'est le moment de changer/redémarrer le senseur' - ,bg: 'Време за смяна/рестарт на сензора' - ,hr: 'Vrijeme za zamjenu/restart senzora' - ,sv: 'Dags att byta/starta om sensorn' - ,nb: 'På tide å bytte/restarte sensoren' - ,fi: 'Aika vaihtaa / käynnistää sensori uudelleen' - ,pt: 'Hora de substituir/reiniciar sensor' - ,es: 'Hora de sustituir/reiniciar sensor' - ,sk: 'Čas na výmenu/reštart senzoru' - ,ko: '센서 교체/재시작 시간' - ,it: 'Tempo di cambiare/riavvio sensore' - ,nl: 'Sensor vervangen of herstarten' - ,zh_cn: '已到更换/重启探头的时间' - ,pl: 'Czas do wymiany/restartu sensora' - ,tr: 'Sensörü değiştirme/yeniden başlatma zamanı' - ,hu: 'Ideje a szenzort cserélni / újraindítani' - } - ,'Change/restart sensor soon' : { - cs:'Blíží se čas na výměnu senzoru' - ,he: 'שנה או אתחל את הסנסור בקרוב ' - ,de: 'Sensor bald wechseln/neustarten' - ,dk: 'Skift eller genstart sensor snart' - ,ro: 'Schimbați/restartați senzorul în curând' - ,fr: 'Changement/Redémarrage du senseur bientôt' - ,ru: 'Приближается срок замены/рестарта сенсора' - ,bg: 'Смени/рестартирай сензора скоро' - ,hr: 'Zamijena/restart senzora uskoro' - ,sv: 'Byt/starta om sensorn snart' - ,nb: 'Bytt/restarta sensoren snart' - ,fi: 'Vaihda/käynnistä sensori uudelleen pian' - ,pt: 'Mudar/reiniciar sensor em breve' - ,es: 'Cambiar/Reiniciar sensor en breve' - ,sk: 'Čoskoro bude potrebné vymeniť/reštartovať senzor' - ,ko: '센서를 곧 교체/재시작 하세요' - ,it: 'Modifica/riavvio sensore prossimamente' - ,nl: 'Herstart of vervang sensor binnenkort' - ,zh_cn: '接近更换/重启探头的时间' - ,pl: 'Wkrótce czas wymiany/restartu sensora' - ,tr: 'Sensörü yakında değiştir/yeniden başlat' - ,hu: 'Hamarosan indítsd újra vagy cseréld ki a szenzort' - } - ,'Sensor age %1 days %2 hours' : { - cs:'Stáří senzoru %1 dní %2 hodin' - ,he: 'גיל הסנסור %1 ימים %2 שעות ' - ,de: 'Sensor Alter %1 Tage %2 Stunden' - ,dk: 'Sensoralder %1 dage %2 timer' - ,ro: 'Senzori vechi de %1 zile și %2 ore' - ,fr: 'Âge su senseur %1 jours et %2 heures' - ,ru: 'Сенсор работает %1 дн %2 час' - ,bg: 'Сензорът е на %1 дни %2 часа ' - ,hr: 'Starost senzora %1 dana i %2 sati' - ,sv: 'Sensorålder %1 dagar %2 timmar' - ,nb: 'Sensoralder %1 dag %2 timer' - ,fi: 'Sensorin ikä %1 päivää, %2 tuntia' - ,pt: 'Idade do sensor %1 dias %2 horas' - ,es: 'Sensor desde %1 días %2 horas' - ,sk: 'Vek senzoru %1 dní %2 hodín' - ,ko: '센서사용기간 %1일 %2시간' - ,it: 'Durata Sensore %1 giorni %2 ore' - ,nl: 'Sensor leeftijd %1 dag(en) en %2 uur' - ,zh_cn: '探头使用了%1天%2小时' - ,pl: 'Wiek sensora: %1 dni %2 godzin' - ,tr: 'Sensör yaşı %1 gün %2 saat' - ,hu: 'Szenzor ideje %1 nap és %2 óra' - } - ,'Sensor Insert' : { - cs: 'Výměna sensoru' - ,he: 'הכנס סנסור ' - ,de: 'Sensor eingesetzt' - ,dk: 'Sensor isat' - ,ro: 'Inserția senzorului' - ,fr: 'Insertion du senseur' - ,ru: 'Сенсор установлен' - ,bg: 'Поставяне на сензора' - ,hr: 'Postavljanje senzora' - ,sv: 'Sensor insättning' - ,nb: 'Sensor satt inn' - ,fi: 'Sensorin Vaihto' - ,es: 'Insertar sensor' - ,pt: 'Inserção de sensor' - ,sk: 'Výmena senzoru' - ,ko: '센서삽입' - ,it: 'SAGE - inserimento sensore' - ,nl: 'Sensor ingebracht' - ,zh_cn: '植入探头' - ,pl: 'Zamontuj sensor' - ,tr: 'Sensor yerleştirme' - ,hu: 'Szenzor behelyezve' - } - ,'Sensor Start' : { - cs: 'Znovuspuštění sensoru' - ,he: 'סנסור התחיל ' - ,de: 'Sensorstart' - ,dk: 'Sensor start' - ,ro: 'Pornirea senzorului' - ,ru: 'Старт сенсора' - ,fr: 'Démarrage du senseur' - ,bg: 'Стартиране на сензора' - ,hr: 'Pokretanje senzora' - ,sv: 'Sensorstart' - ,nb: 'Sensorstart' - ,fi: 'Sensorin Aloitus' - ,pl: 'Uruchomienie sensora' - ,pt: 'Início de sensor' - ,es: 'Inicio del sensor' - ,sk: 'Štart senzoru' - ,ko: '센서시작' - ,it: 'SAGE - partenza sensore' - ,nl: 'Sensor start' - ,zh_cn: '启动探头' - ,tr: 'Sensör başlatma' - ,hu: 'Szenzor indítása' - } - ,'days' : { - cs: 'dní' - ,he: 'ימים ' - ,de: 'Tage' - ,dk: 'dage' - ,ro: 'zile' - ,fr: 'jours' - ,ru: 'дн' - ,bg: 'дни' - ,hr: 'dana' - ,sv: 'dagar' - ,nb: 'dager' - ,fi: 'päivää' - ,pt: 'dias' - ,es: 'días' - ,sk: 'dní' - ,ko: '일' - ,it: 'giorni' - ,nl: 'dagen' - ,zh_cn: '天' - ,pl: 'dni' - ,tr: 'Gün' - ,hu: 'napok' - } - ,'Insulin distribution' : { - cs: 'Rozložení inzulínu' - ,he: 'התפלגות אינסולין ' - ,de: 'Insulinverteilung' - ,dk: 'Insulinfordeling' - ,ro: 'Distribuția de insulină' - ,fr: 'Distribution de l\'insuline' - ,ru: 'распределение инсулина' - ,fi: 'Insuliinijakauma' - ,sv: 'Insulindistribution' - ,ko: '인슐린주입' - ,it: 'Distribuzione di insulina' - ,es: 'Distribución de la insulina' - ,nl: 'Insuline verdeling' - ,zh_cn: '胰岛素分布' - ,bg: 'разпределение на инсулина' - ,hr: 'Raspodjela inzulina' - ,pl: 'podawanie insuliny' - ,tr: 'İnsülin dağılımı' - ,hu: 'Inzulin disztribúció' - } - ,'To see this report, press SHOW while in this view' : { - cs: 'Pro zobrazení toho výkazu stiskněte Zobraz na této záložce' - ,he: 'כדי להציג דוח זה, לחץ על"הראה" בתצוגה זו ' - ,de: 'Auf ZEIGEN drücken, um den Bericht in dieser Ansicht anzuzeigen' - ,dk: 'For at se denne rapport, klick på "VIS"' - ,fr: 'Pour voir le rapport, cliquer sur MONTRER dans cette fenêtre' - ,ro: 'Pentru a vedea acest raport, apăsați butonul SHOW' - ,ru: 'чтобы увидеть отчет, нажмите show/показать' - ,fi: 'Nähdäksesi tämän raportin, paina NÄYTÄ tässä näkymässä' - ,ko: '이 보고서를 보려면 "확인"을 누르세요' - ,it: 'Per guardare questo report, premere SHOW all\'interno della finestra' - ,es: 'Presione SHOW para mostrar el informe en esta vista' - ,nl: 'Om dit rapport te zien, druk op "Laat zien"' - ,zh_cn: '要查看此报告,请在此视图中按生成' - ,sv: 'För att se denna rapport, klicka på "Visa"' - ,bg: 'За да видите тази статистика, натиснете ПОКАЖИ' - ,hr: 'Za prikaz ovog izvješća, pritisnite PRIKAŽI na ovom prozoru' - ,pl: 'Aby wyświetlić ten raport, naciśnij przycisk POKAŻ w tym widoku' - ,tr: 'Bu raporu görmek için bu görünümde GÖSTER düğmesine basın.' - ,hu: 'A jelentés megtekintéséhez kattints a MUTASD gombra' - } - ,'AR2 Forecast' : { - cs: 'AR2 predikci' - ,he: 'AR2 תחזית ' - ,de: 'AR2-Vorhersage' - ,dk: 'AR2 Forudsiglse' - ,ro: 'Predicție AR2' - ,fr: 'Prédiction AR2' - ,ru: 'прогноз AR2' - ,es: 'Pronóstico AR2' - ,fi: 'AR2 Ennusteet' - ,ko: 'AR2 예측' - ,it: 'Previsione AR2' - ,nl: 'AR2 Voorspelling' - ,zh_cn: 'AR2 预测' - ,sv: 'AR2 Förutsägelse' - ,bg: 'AR2 прогнози' - ,hr: 'AR2 procjena' - ,pl: 'Prognoza AR2' - ,tr: 'AR2 Tahmini' - ,hu: 'AR2 előrejelzés' - } - ,'OpenAPS Forecasts' : { - cs: 'OpenAPS predikci' - ,he: 'תחזית OPENAPS ' - ,de: 'OpenAPS-Vorhersage' - ,dk: 'OpenAPS Forudsiglse' - ,ro: 'Predicții OpenAPS' - ,fr: 'Prédictions OpenAPS' - ,ru: 'прогнозы OpenAPS' - ,es: 'Pronóstico OpenAPS' - ,fi: 'OpenAPS Ennusteet' - ,ko: 'OpenAPS 예측' - ,it: 'Previsione OpenAPS' - ,nl: 'OpenAPS Voorspelling' - ,zh_cn: 'OpenAPS 预测' - ,sv: 'OpenAPS Förutsägelse' - ,bg: 'OpenAPS прогнози' - ,hr: 'OpenAPS prognoze' - ,pl: 'Prognoza OpenAPS' - ,tr: 'OpenAPS Tahminleri' - ,hu: 'OpenAPS előrejelzés' - } - ,'Temporary Target' : { - cs: 'Dočasný cíl glykémie' - ,he: 'מטרה זמנית ' - ,de: 'Temporäres Ziel' - ,dk: 'Midlertidigt mål' - ,fr: 'Cible temporaire' - ,ro: 'Țintă temporară' - ,ru: 'Временная цель' - ,fi: 'Tilapäinen tavoite' - ,es: 'Objetivo temporal' - ,ko: '임시목표' - ,it: 'Obbiettivo temporaneo' - ,nl: 'Tijdelijk doel' - ,zh_cn: '临时目标' - ,sv: 'Tillfälligt mål' - ,bg: 'временна цел' - ,hr: 'Privremeni cilj' - ,pl: 'Cel tymczasowy' - ,tr: 'Geçici Hedef' - ,hu: 'Átmeneti cél' - } - ,'Temporary Target Cancel' : { - cs: 'Dočasný cíl glykémie konec' - ,he: 'בטל מטרה זמנית ' - ,de: 'Temporäres Ziel abbrechen' - ,dk: 'Afslut midlertidigt mål' - ,fr: 'Effacer la cible temporaire' - ,ro: 'Renunțare la ținta temporară' - ,ru: 'Отмена временной цели' - ,fi: 'Peruuta tilapäinen tavoite' - ,es: 'Objetivo temporal cancelado' - ,ko: '임시목표취소' - ,it: 'Obbiettivo temporaneo cancellato' - ,nl: 'Annuleer tijdelijk doel' - ,zh_cn: '临时目标取消' - ,sv: 'Avsluta tillfälligt mål' - ,bg: 'Отмяна на временна цел' - ,hr: 'Otkaz privremenog cilja' - ,pl: 'Zel tymczasowy anulowany' - ,tr: 'Geçici Hedef İptal' - ,hu: 'Átmeneti cél törlése' - } - ,'OpenAPS Offline' : { - cs: 'OpenAPS vypnuto' - ,he: 'OPENAPS לא פעיל ' - ,de: 'OpenAPS Offline' - ,dk: 'OpenAPS Offline' - ,ro: 'OpenAPS deconectat' - ,fr: 'OpenAPS déconnecté' - ,ru: 'OpenAPS вне сети' - ,fi: 'OpenAPS poissa verkosta' - ,ko: 'OpenAPS Offline' - ,it: 'OpenAPS disconnesso' - ,es: 'OpenAPS desconectado' - ,nl: 'OpenAPS Offline' - ,zh_cn: 'OpenAPS 离线' - ,sv: 'OpenAPS Offline' - ,bg: 'OpenAPS спрян' - ,hr: 'OpenAPS odspojen' - ,pl: 'OpenAPS nieaktywny' - ,tr: 'OpenAPS Offline (çevrimdışı)' - ,hu: 'OpenAPS nem elérhető (offline)' - } - ,'Profiles' : { - cs: 'Profily' - ,he: 'פרופילים ' - ,de: 'Profile' - ,dk: 'Profiler' - ,fr: 'Profils' - ,ro: 'Profile' - ,ru: 'Профили' - ,fi: 'Profiilit' - ,ko: '프로파일' - ,it: 'Profili' - ,es: 'Perfil' - ,nl: 'Profielen' - ,zh_cn: '配置文件' - ,sv: 'Profiler' - ,bg: 'Профили' - ,hr: 'Profili' - ,pl: 'Profile' - ,tr: 'Profiller' - ,hu: 'Profilok' - } - ,'Time in fluctuation' : { - cs: 'Doba měnící se glykémie' - ,he: 'זמן בתנודות ' - ,fi: 'Aika muutoksessa' - ,fr: 'Temps passé en fluctuation' - ,ko: '변동시간' - ,it: 'Tempo in fluttuazione' - ,ro: 'Timp în fluctuație' - ,es: 'Tiempo fluctuando' - ,ru: 'Время флуктуаций' - ,nl: 'Tijd met fluctuaties' - ,zh_cn: '波动时间' - ,sv: 'Tid i fluktation' - ,de: 'Zeit in Fluktuation (Schwankung)' - ,dk: 'Tid i fluktation' - ,bg: 'Време в промяна' - ,hr: 'Vrijeme u fluktuaciji' - ,pl: 'Czas fluaktacji (odchyleń)' - ,tr: 'Dalgalanmada geçen süre' - ,hu: 'Kilengésben töltött idő' - } - ,'Time in rapid fluctuation' : { - cs: 'Doba rychle se měnící glykémie' - ,he: 'זמן בתנודות מהירות ' - ,fi: 'Aika nopeassa muutoksessa' - ,fr: 'Temps passé en fluctuation rapide' - ,ko: '빠른변동시간' - ,it: 'Tempo in rapida fluttuazione' - ,ro: 'Timp în fluctuație rapidă' - ,es: 'Tiempo fluctuando rápido' - ,ru: 'Время быстрых флуктуаций' - ,nl: 'Tijd met grote fluctuaties' - ,zh_cn: '快速波动时间' - ,sv: 'Tid i snabb fluktation' - ,de: 'Zeit in starker Fluktuation (Schwankung)' - ,dk: 'Tid i hurtig fluktation' - ,bg: 'Време в бърза промяна' - ,hr: 'Vrijeme u brzoj fluktuaciji' - ,pl: 'Czas szybkich fluaktacji (odchyleń)' - ,tr: 'Hızlı dalgalanmalarda geçen süre' - ,hu: 'Magas kilengésekben töltött idő' - } - ,'This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:' : { - cs: 'Toto je pouze hrubý odhad, který může být nepřesný a nenahrazuje kontrolu z krve. Vzorec je převzatý z:' - ,he: 'זוהי רק הערכה גסה שיכולה להיות מאוד לא מדויקת ואינה מחליפה את בדיקת הדם בפועל. הנוסחה המשמשת נלקחת מ: ' - ,fi: 'Tämä on epätarkka arvio joka saattaa heittää huomattavasti mittaustuloksesta, eikä korvaa laboratoriotestiä. Laskentakaava on otettu artikkelista: ' - ,fr: 'Ceci est seulement une estimation grossière qui peut être très imprécise et ne remplace pas une mesure sanguine adéquate. La formule est empruntée à l\'article:' - ,ko: '이것은 대충 예측한 것이기 때문에 부정확할 수 있고 실제 혈당으로 대체되지 않습니다. 사용된 공식:' - ,it: 'Questa è solo un\'approssimazione che può essere molto inaccurata e che non sostituisce la misurazione capillare. La formula usata è presa da:' - ,ro: 'Aceasta este doar o aproximare brută, care poate fi foarte imprecisă și nu ține loc de testare capilară. Formula matematică folosită este luată din:' - ,es: 'Esto es sólo una estimación apróximada que puede ser muy inexacta y no reemplaza las pruebas de sangre reales. La fórmula utilizada está tomada de: ' - ,ru: 'Это приблизительная оценка не заменяющая фактический анализ крови. Используемая формула взята из:' - ,zh_cn: '这只是一个粗略的估计,可能非常不准确,并不能取代测指血' - ,nl: 'Dit is enkel een grove schatting die onjuist kan zijn welke geen bloedtest vervangt. De gebruikte formule is afkomstig van:' - ,sv: 'Detta är en grov uppskattning som kan vara missvisande. Det ersätter inte blodprov. Formeln är hämtad från:' - ,de: 'Dies ist lediglich eine grobe Schätzung, die sehr ungenau sein kann und eine Überprüfung des tatsächlichen Blutzuckers nicht ersetzen kann. Die verwendete Formel wurde genommen von:' - ,dk: 'Dette er kun en grov estimering som kan være misvisende. Det erstatter ikke en blodprøve. Formelen er hemtet fra:' - ,bg: 'Това е само грубо изчисление, което може да е много неточно и не изключва реалния кръвен тест. Формулата, кокято е използвана е взета от:' - ,hr: 'Ovo je samo gruba procjena koja može biti neprecizna i ne mijenja testiranje iz krvi. Formula je uzeta iz:' - ,pl: 'To tylko przybliżona ocena, która może być bardzo niedokładna i nie może zastąpić faktycznego poziomu cukru we krwi. Zastosowano formułę:' - ,tr: 'Bu bir kaba tahmindir ve çok hata içerebilir gerçek kan şekeri testlerinin yerini tutmayacaktır. Kullanılan formülde buradandır:' - ,hu: 'Ez egy nagyon durva számítás ami nem pontos és nem helyettesíti a cukorszint mérését. A képlet a következő helyről lett véve:' - } - , 'Filter by hours' : { - cs: ' Filtr podle hodin' - ,fi: 'Huomioi raportissa seuraavat tunnit' - ,ko: '시간으로 정렬' - ,it: 'Filtra per ore' - ,fr: 'Filtrer par heures' - ,ro: 'Filtrare pe ore' - ,es: 'Filtrar por horas' - ,ru: 'Почасовая фильтрация' - ,nl: 'Filter op uren' - ,zh_cn: '按小时过滤' - ,sv: 'Filtrera per timme' - ,de: 'Filtern nach Stunden' - ,dk: 'Filtrer per time' - ,bg: 'Филтър по часове' - ,hr: 'Filter po satima' - ,pl: 'Filtruj po godzinach' - ,tr: 'Saatlere göre filtrele' - ,hu: 'Megszűrni órák alapján' - } - , 'Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.' : { - cs: 'Doba měnící se glykémie a rapidně se měnící glykémie měří % času ve zkoumaném období, během kterého se glykémie měnila relativně rychle nebo rapidně. Nižší hodnota je lepší.' - ,fi: 'Aika Muutoksessa ja Aika Nopeassa Muutoksessa mittaa osuutta tarkkailtavasta aikaperiodista, jolloin glukoosi on ollut nopeassa tai hyvin nopeassa muutoksessa. Pienempi arvo on parempi.' - ,fr: 'Le Temps passé en fluctuation et le temps passé en fluctuation rapide mesurent la part de temps durant la période examinée, pendant laquelle la glycémie a évolué relativement ou très rapidement. Les valeurs basses sont les meilleures.' - ,ko: '변동시간과 빠른 변동시간은 조사된 기간 동안 %의 시간으로 측정되었습니다.혈당은 비교적 빠르게 변화되었습니다. 낮을수록 좋습니다.' - ,it: 'Tempo in fluttuazione e Tempo in rapida fluttuazione misurano la % di tempo durante il periodo esaminato, durante il quale la glicemia stà variando velocemente o rapidamente. Bassi valori sono migliori.' - ,ro: 'Timpul în fluctuație și timpul în fluctuație rapidă măsoară procentul de timp, din perioada examinată, în care glicemia din sânge a avut o variație relativ rapidă sau rapidă. Valorile mici sunt de preferat.' - ,es: 'Tiempo en fluctuación y Tiempo en fluctuación rápida miden el % de tiempo del período exáminado, durante la cual la glucosa en sangre ha estado cambiando relativamente rápido o rápidamente. Valores más bajos son mejores.' - ,ru: 'Время флуктуаций и время быстрых флуктуаций означает % времени в рассматриваемый период в течение которого ГК менялась относительно быстро или просто быстро. Более низкие значения предпочтительней' - ,nl: 'Tijd met fluctuaties of grote fluctuaties in % van de geevalueerde periode, waarbij de bloed glucose relatief snel wijzigde.Lagere waarden zijn beter.' - ,zh_cn: '在检查期间血糖波动时间和快速波动时间占的时间百分比,在此期间血糖相对快速或快速地变化。百分比值越低越好。' - ,sv: 'Tid i fluktuation och tid i snabb fluktuation mäter% av tiden under den undersökta perioden, under vilken blodsockret har förändrats relativt snabbt eller snabbt. Lägre värden är bättre' - ,de: 'Zeit in Fluktuation und Zeit in starker Fluktuation messen den Teil der Zeit, in der sich der Blutzuckerwert relativ oder sehr schnell verändert hat. Niedrigere Werte sind besser.' - ,dk: 'Tid i fluktuation og tid i hurtig fluktuation måler % af tiden i den undersøgte periode, under vilket blodsukkret har ændret sig relativt hurtigt. Lavere værdier er bedre.' - ,bg: 'Време в промяна и време в бърза промяна измерват % от време в разгледания период, през който КЗ са се променяли бързо или много бързо. По-ниски стойности са по-добри.' - ,hr: 'Vrijeme u fluktuaciji i vrijeme u brzoj fluktuaciji mjere % vremena u gledanom periodu, tijekom kojeg se GUK mijenja relativno brzo ili brzo. Niže vrijednosti su bolje.' - ,pl: 'Czas fluktuacji i szybki czas fluktuacji mierzą % czasu w badanym okresie, w którym poziom glukozy we krwi zmieniał się szybko lub bardzo szybko. Preferowane są wolniejsze zmiany' - ,tr: 'Dalgalanmadaki zaman ve Hızlı dalgalanmadaki zaman, kan şekerinin nispeten hızlı veya çok hızlı bir şekilde değiştiği, incelenen dönemdeki zamanın %\'sini ölçer. Düşük değerler daha iyidir.' - ,hu: 'A sima és magas kilengésnél mért idő százalékban kifelyezve, ahol a cukorszint aránylag nagyokat változott. A kisebb értékek jobbak ebben az esetben' - } - , 'Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.' : { - cs: 'Průměrná celková denní změna je součet absolutních hodnoty všech glykémií za sledované období, děleno počtem dní. Nižší hodnota je lepší.' - ,fi: 'Keskimääräinen Kokonaismuutos kertoo kerkimääräisen päivätason verensokerimuutoksien yhteenlasketun arvon. Pienempi arvo on parempi.' - ,fr: 'La Variation Totale Journalière Moyenne est la somme de toute les excursions glycémiques absolues pour une période analysée, divisée par le nombre de jours. Les valeurs basses sont les meilleures.' - ,ko: '전체 일일 변동 평균은 조사된 기간동안 전체 혈당 절대값의 합을 전체 일수로 나눈 값입니다. 낮을수록 좋습니다.' - ,it: 'Media Totale Giornaliera Variazioni è la somma dei valori assoluti di tutte le escursioni glicemiche per il periodo esaminato, diviso per il numero di giorni. Bassi valori sono migliori.' - ,ro: 'Schimbarea medie totală zilnică este suma valorilor absolute ale tuturor excursiilor glicemice din perioada examinată, împărțite la numărul de zile. Valorile mici sunt de preferat.' - ,ru: 'Усредненное ежедневное изменение это сумма абсолютных величин всех отклонений ГК в рассматриваемый период, деленная на количество дней. Меньшая величина предпочтительней' - ,es: 'El cambio medio diario total es la suma de los valores absolutos de todas las glucémias en el período examinado, dividido por el número de días. Mejor valores bajos.' - ,nl: 'Gemiddelde veranderingen per dag is een som van alle waardes die uitschieten over de bekeken periode, gedeeld door het aantal dagen in deze periode. Lager is beter.' - ,zh_cn: '平均每日总变化是检查期间所有血糖偏移的绝对值之和除以天数。越低越好' - ,sv: 'Medel Total Daglig Förändring är summan av absolutvärdet av alla glukosförändringar under den undersökta perioden, dividerat med antalet dagar. Lägre är bättre.' - ,de: 'Die gesamte mittlere Änderung pro Tag ist die Summe der absoluten Werte aller Glukoseveränderungen im Betrachtungszeitraum geteilt durch die Anzahl der Tage. Niedrigere Werte sind besser.' - ,dk: 'Middel Total Daglig Ændring er summen af absolutværdier af alla glukoseændringer i den undersøgte periode, divideret med antallet af dage. Lavere er bedre.' - ,bg: 'Средната дневна промяна е сумата на всички промени в стойностите на КЗ за разгледания период, разделена на броя дни в периода. По-ниската стойност е по-добра' - ,hr: 'Srednja ukupna dnevna promjena je suma apsolutnih vrijednosti svih pomaka u gledanom periodu, podijeljeno s brojem dana. Niže vrijednosti su bolje.' - ,pl: 'Sednia całkowita dziennych zmian jest sumą wszystkich zmian glikemii w badanym okresie, podzielonym przez liczbę dni. Mniejsze są lepsze' - ,tr: 'Toplam Günlük Değişim, incelenen süre için, gün sayısına bölünen tüm glukoz değerlerinin mutlak değerinin toplamıdır. Düşük değer daha iyidir.' - ,hu: 'Az átlagos napi változás az abszolút értékek összege elosztva a napok számával. A kisebb érték jobb ebben az esetben.' - } - , 'Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.' : { - cs: 'Průměrná hodinová změna je součet absolutní hodnoty všech glykémií za sledované období, dělených počtem hodin v daném období. Nižší hodnota je lepší.' - ,fi: 'Keskimääräinen tunti kertoo keskimääräisen tuntitason verensokerimuutoksien yhteenlasketun arvon. Pienempi arvo on parempi.' - ,fr: 'La Variation Horaire Moyenne est la somme de toute les excursions glycémiques absolues pour une période analysée, divisée par le nombre d\'heures dans la période. Les valeures basses sont les meilleures.' - ,ko: '시간당 변동 평균은 조사된 기간 동안 전체 혈당 절대값의 합을 기간의 시간으로 나눈 값입니다.낮을수록 좋습니다.' - ,it: 'Media Oraria Variazioni è la somma del valore assoluto di tutte le escursioni glicemiche per il periodo esaminato, diviso per il numero di ore. Bassi valori sono migliori.' - ,ro: 'Variația media orară este suma valorilor absolute ale tuturor excursiilor glicemice din perioada examinată, împărțite la numărul de ore din aceeași perioadă. Valorile mici sunt de preferat.' - ,ru: 'Усредненное часовое изменение это сумма абсолютных величин всех отклонений ГК в рассматриваемый период, деленная на количество часов в этот период. Более низкое предпочтительней' - ,es: 'El cambio medio por hora, es la suma del valor absoluto de todas las glucemias para el período examinado, dividido por el número de horas en el período. Más bajo es mejor.' - ,nl: 'Gemiddelde veranderingen per uur is een som van alle waardes die uitschieten over de bekeken periode, gedeeld door het aantal uur in deze periode. Lager is beter.' - ,zh_cn: '平均每小时变化是检查期间所有血糖偏移的绝对值之和除以该期间的小时数。 越低越好' - ,sv: 'Medelvärde per timme är summan av absolutvärdet av alla glukosförändringar under den undersökta perioden dividerat med antalet timmar under perioden. Lägre är bättre.' - ,de: 'Die mittlere Änderung pro Stunde ist die Summe der absoluten Werte aller Glukoseveränderungen im Betrachtungszeitraum geteilt durch die Anzahl der Stunden. Niedrigere Werte sind besser.' - ,dk: 'Middelværdier per time er summen af absolutværdier fra alle glukoseændringer i den undersøgte periode divideret med antallet af timer. Lavere er bedre.' - ,bg: 'Средната промяна за час е сумата на всички промени в стойностите на КЗ за разгледания период, разделена на броя часове в периода. По-ниската стойност е по-добра' - ,hr: 'Srednja ukupna promjena po satu je suma apsolutnih vrijednosti svih pomaka u gledanom periodu, podijeljeno s brojem sati. Niže vrijednosti su bolje.' - ,pl: 'Sednia całkowita godzinnych zmian jest sumą wszystkich zmian glikemii w badanym okresie, podzielonym przez liczbę godzin. Mniejsze są lepsze' - ,tr: 'Saat başına ortalama değişim, gözlem periyodu üzerindeki tüm glikoz değişikliklerinin mutlak değerlerinin saat sayısına bölünmesiyle elde edilen toplam değerdir. Düşük değerler daha iyidir.' - ,hu: 'Az átlagos óránkénti változás az abszút értékek összege elosztva a napok számával. A kisebb érték jobb ebben az esetben.' - } - , 'GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.' : { - cs: '">zde.' - ,he: '">here.' - ,fi: '">here.' - ,ko: '">here.' - ,it: '">qui.' - ,es: '">here.' - ,fr: '">ici.' - ,ro: '">aici.' - ,ru: '">здесь.' - ,nl: '">is hier te vinden.' - ,zh_cn: '">here.' - ,sv: '">här.' - ,de: '">hier.' - ,dk: '">her.' - ,bg: '">тук.' - ,hr: '">ovdje.' - ,pl: '">tutaj.' - ,tr: '">buradan.' - ,hu: '">itt találhatóak.' - } - , 'Mean Total Daily Change' : { - cs: 'Průměrná celková denní změna' - ,he: 'שינוי יומי ממוצע ' - ,fi: 'Keskimääräinen Kokonaismuutos' - ,fr: 'Variation Totale Journalière Moyenne' - ,ko: '전체 일일 변동 평균' - ,it: 'Media Totale Giornaliera Variazioni' - ,ro: 'Variația medie totală zilnică' - ,ru: 'Усредненное изменение за день' - ,es: 'Variación media total diaria' - ,nl: 'Gemiddelde veranderingen per dag' - ,zh_cn: '平均每日总变化' - ,sv: 'Medel Total Daglig Förändring' - ,de: 'Gesamte mittlere Änderung pro Tag' - ,dk: 'Middel Total Daglig Ændring' - ,bg: 'Средна промяна за ден' - ,hr: 'Srednja ukupna dnevna promjena' - ,pl: 'Średnia całkowita dziennych zmian' - ,tr: 'Günde toplam ortalama değişim' - ,hu: 'Áltagos napi változás' - } - , 'Mean Hourly Change' : { - cs: 'Průměrná hodinová změna' - ,he: 'שינוי ממוצע לשעה ' - ,fi: 'Keskimääräinen tuntimuutos' - ,fr: 'Variation Horaire Moyenne' - ,ko: '시간당 변동 평균' - ,it: 'Media Oraria Variazioni' - ,ro: 'Variația medie orară' - ,es: 'Variación media total por horas' - ,ru: 'Усредненное изменение за час' - ,nl: 'Gemiddelde veranderingen per uur' - ,zh_cn: '平均每小时变化' - ,sv: 'Medelvärde per timme' - ,de: 'Mittlere Änderung pro Stunde' - ,dk: 'Middelværdier per time' - ,bg: 'Средна промяна за час' - ,hr: 'Srednja ukupna promjena po satu' - ,pl: 'Średnia całkowita godzinnych zmian' - ,tr: 'Saatte ortalama değişim' - ,hu: 'Átlagos óránkénti változás' - } - , 'FortyFiveDown': { - bg: 'slightly dropping' - , cs: 'lehce dolů' - , de: 'leicht sinkend' - , dk: 'svagt faldende' - , el: 'slightly dropping' - , en: 'slightly dropping' - , es: 'Disminuye lentamente' - , fi: 'laskee hitaasti' - , fr: 'en chute lente' - , he: 'slightly dropping' - , hr: 'sporo padajuće' - , ko: 'slightly dropping' - , it: 'leggera diminuzione' - , nb: 'svakt fallende' - , pl: 'niewielki spadek' - , pt: 'slightly dropping' - , ro: 'scădere ușoară' - , ru: 'незначительное падение' - , sk: 'slightly dropping' - , sv: 'slightly dropping' - , nl: 'slightly dropping' - , tr: 'biraz düşen' - , zh_cn: '缓慢下降' - , zh_tw: 'slightly dropping' - , hu: 'lassan csökken' - - }, - 'FortyFiveUp': { - bg: 'slightly rising' - , cs: 'lehce nahoru' - , de: 'leicht steigend' - , dk: 'svagt stigende' - , el: 'slightly rising' - , en: 'slightly rising' - , es: 'Asciende lentamente' - , fi: 'nousee hitaasti' - , fr: 'en montée lente' - , he: 'slightly rising' - , hr: 'sporo rastuće' - , it: 'leggero aumento' - , ko: 'slightly rising' - , nb: 'svakt stigende' - , pl: 'niewielki wzrost' - , pt: 'slightly rising' - , ro: 'creștere ușoară' - , ru: 'незначительный подъем' - , sk: 'slightly rising' - , sv: 'slightly rising' - , nl: 'slightly rising' - , tr: 'biraz yükselen' - , zh_cn: '缓慢上升' - , zh_tw: 'slightly rising' - , hu: 'lassan növekszik' - }, - 'Flat': { - bg: 'holding' - , cs: 'stabilní' - , de: 'gleichbleibend' - , dk: 'stabilt' - , el: 'holding' - , en: 'holding' - , es: 'Sin variación' - , fi: 'tasainen' - , fr: 'stable' - , he: 'holding' - , hr: 'ravno' - , it: 'stabile' - , ko: 'holding' - , nb: 'stabilt' - , pl: 'stabilny' - , pt: 'holding' - , ro: 'stabil' - , ru: 'ровный' - , sk: 'holding' - , sv: 'holding' - , nl: 'holding' - , tr: 'sabit' - , zh_cn: '平' - , zh_tw: 'holding' - , hu: 'stabil' - }, - 'SingleUp': { - bg: 'rising' - , cs: 'nahoru' - , de: 'steigend' - , dk: 'stigende' - , el: 'rising' - , en: 'rising' - , es: 'Ascendiendo' - , fi: 'nousussa' - , fr: 'en montée' - , he: 'rising' - , hr: 'rastuće' - , it: 'aumento' - , ko: 'rising' - , nb: 'stigende' - , pl: 'wzrost' - , pt: 'rising' - , ro: 'creștere' - , ru: 'растет' - , sk: 'rising' - , sv: 'rising' - , nl: 'rising' - , tr: 'yükseliyor' - , zh_cn: '上升' - , zh_tw: 'rising' - , hu: 'emelkedik' - }, - 'SingleDown': { - bg: 'dropping' - , cs: 'dolů' - , de: 'sinkend' - , dk: 'faldende' - , el: 'dropping' - , en: 'dropping' - , es: 'Bajando' - , fi: 'laskussa' - , fr: 'en chute' - , he: 'dropping' - , hr: 'padajuće' - , it: 'diminuzione' - , ko: 'dropping' - , nb: 'fallende' - , pl: 'spada' - , pt: 'dropping' - , ro: 'scădere' - , ru: 'падает' - , sk: 'dropping' - , sv: 'dropping' - , nl: 'dropping' - , tr: 'düşüyor' - , zh_cn: '下降' - , zh_tw: 'dropping' - , hu: 'csökken' - }, - 'DoubleDown': { - bg: 'rapidly dropping' - , cs: 'rychle dolů' - , de: 'schnell sinkend' - , dk: 'hurtigt faldende' - , el: 'rapidly dropping' - , en: 'rapidly dropping' - , es: 'Bajando rápido' - , fi: 'laskee nopeasti' - , fr: 'en chute rapide' - , he: 'rapidly dropping' - , hr: 'brzo padajuće' - , it: 'rapida diminuzione' - , ko: 'rapidly dropping' - , nb: 'hurtig stigende' - , pl: 'szybko spada' - , pt: 'rapidly dropping' - , ro: 'scădere bruscă' - , ru: 'быстро падает' - , sk: 'rapidly dropping' - , sv: 'rapidly dropping' - , nl: 'rapidly dropping' - , tr: 'hızlı düşen' - , zh_cn: '快速下降' - , zh_tw: 'rapidly dropping' - , hu: 'gyorsan csökken' - }, - 'DoubleUp': { - bg: 'rapidly rising' - , cs: 'rychle nahoru' - , de: 'schnell steigend' - , dk: 'hurtigt stigende' - , el: 'rapidly rising' - , en: 'rapidly rising' - , es: 'Subiendo rápido' - , fi: 'nousee nopeasti' - , fr: 'en montée rapide' - , he: 'rapidly rising' - , hr: 'brzo rastuće' - , it: 'rapido aumento' - , ko: 'rapidly rising' - , nb: 'hurtig fallende' - , pl: 'szybko rośnie' - , pt: 'rapidly rising' - , ro: 'creștere rapidă' - , ru: 'быстрый рост' - , sk: 'rapidly rising' - , sv: 'rapidly rising' - , nl: 'rapidly rising' - , tr: 'hızla yükselen' - , zh_cn: '快速上升' - , zh_tw: 'rapidly rising' - , hu: 'gyorsan emelkedik' - }, - 'virtAsstUnknown': { - bg: 'That value is unknown at the moment. Please see your Nightscout site for more details.' - , cs: 'That value is unknown at the moment. Please see your Nightscout site for more details.' - , de: 'Dieser Wert ist momentan unbekannt. Prüfe deine Nightscout-Webseite für weitere Details!' - , dk: 'That value is unknown at the moment. Please see your Nightscout site for more details.' - , el: 'That value is unknown at the moment. Please see your Nightscout site for more details.' - , en: 'That value is unknown at the moment. Please see your Nightscout site for more details.' - , es: 'That value is unknown at the moment. Please see your Nightscout site for more details.' - , fi: 'That value is unknown at the moment. Please see your Nightscout site for more details.' - , fr: 'That value is unknown at the moment. Please see your Nightscout site for more details.' - , he: 'That value is unknown at the moment. Please see your Nightscout site for more details.' - , hr: 'That value is unknown at the moment. Please see your Nightscout site for more details.' - , it: 'That value is unknown at the moment. Please see your Nightscout site for more details.' - , ko: 'That value is unknown at the moment. Please see your Nightscout site for more details.' - , nb: 'That value is unknown at the moment. Please see your Nightscout site for more details.' - , pl: 'That value is unknown at the moment. Please see your Nightscout site for more details.' - , pt: 'That value is unknown at the moment. Please see your Nightscout site for more details.' - , ro: 'That value is unknown at the moment. Please see your Nightscout site for more details.' - , nl: 'That value is unknown at the moment. Please see your Nightscout site for more details.' - , ru: 'В настоящий момент величина неизвестна. Зайдите на сайт Nightscout.' - , sk: 'That value is unknown at the moment. Please see your Nightscout site for more details.' - , sv: 'That value is unknown at the moment. Please see your Nightscout site for more details.' - , tr: 'That value is unknown at the moment. Please see your Nightscout site for more details.' - , zh_cn: 'That value is unknown at the moment. Please see your Nightscout site for more details.' - , zh_tw: 'That value is unknown at the moment. Please see your Nightscout site for more details.' - , hu: 'Az adat ismeretlen. Kérem nézd meg a Nightscout oldalt részletekért' - }, - 'virtAsstTitleAR2Forecast': { - bg: 'AR2 Forecast' - , cs: 'AR2 Forecast' - , de: 'AR2-Vorhersage' - , dk: 'AR2 Forecast' - , el: 'AR2 Forecast' - , en: 'AR2 Forecast' - , es: 'AR2 Forecast' - , fi: 'AR2 Forecast' - , fr: 'AR2 Forecast' - , he: 'AR2 Forecast' - , hr: 'AR2 Forecast' - , it: 'AR2 Forecast' - , ko: 'AR2 Forecast' - , nb: 'AR2 Forecast' - , pl: 'AR2 Forecast' - , pt: 'AR2 Forecast' - , ro: 'AR2 Forecast' - , nl: 'AR2 Forecast' - , ru: 'Прогноз AR2' - , sk: 'AR2 Forecast' - , sv: 'AR2 Forecast' - , tr: 'AR2 Forecast' - , zh_cn: 'AR2 Forecast' - , zh_tw: 'AR2 Forecast' - , hu: 'AR2 Előrejelzés' - }, - 'virtAsstTitleCurrentBasal': { - bg: 'Current Basal' - , cs: 'Current Basal' - , de: 'Aktuelles Basalinsulin' - , dk: 'Current Basal' - , el: 'Current Basal' - , en: 'Current Basal' - , es: 'Current Basal' - , fi: 'Current Basal' - , fr: 'Current Basal' - , he: 'Current Basal' - , hr: 'Current Basal' - , it: 'Current Basal' - , ko: 'Current Basal' - , nb: 'Current Basal' - , pl: 'Current Basal' - , pt: 'Current Basal' - , ro: 'Current Basal' - , nl: 'Current Basal' - , ru: 'Актуальный Базал' - , sk: 'Current Basal' - , sv: 'Current Basal' - , tr: 'Current Basal' - , zh_cn: 'Current Basal' - , zh_tw: 'Current Basal' - , hu: 'Jelenlegi Bazál' - }, - 'virtAsstTitleCurrentCOB': { - bg: 'Current COB' - , cs: 'Current COB' - , de: 'Aktuelle Kohlenhydrate' - , dk: 'Current COB' - , el: 'Current COB' - , en: 'Current COB' - , es: 'Current COB' - , fi: 'Current COB' - , fr: 'Current COB' - , he: 'Current COB' - , hr: 'Current COB' - , it: 'Current COB' - , ko: 'Current COB' - , nb: 'Current COB' - , pl: 'Current COB' - , pt: 'Current COB' - , ro: 'Current COB' - , nl: 'Current COB' - , ru: 'АктивнУгл COB' - , sk: 'Current COB' - , sv: 'Current COB' - , tr: 'Current COB' - , zh_cn: 'Current COB' - , zh_tw: 'Current COB' - , hu: 'Jelenlegi COB' - }, - 'virtAsstTitleCurrentIOB': { - bg: 'Current IOB' - , cs: 'Current IOB' - , de: 'Aktuelles Restinsulin' - , dk: 'Current IOB' - , el: 'Current IOB' - , en: 'Current IOB' - , es: 'Current IOB' - , fi: 'Current IOB' - , fr: 'Current IOB' - , he: 'Current IOB' - , hr: 'Current IOB' - , it: 'Current IOB' - , ko: 'Current IOB' - , nb: 'Current IOB' - , pl: 'Current IOB' - , pt: 'Current IOB' - , ro: 'Current IOB' - , nl: 'Current IOB' - , ru: 'АктИнс IOB' - , sk: 'Current IOB' - , sv: 'Current IOB' - , tr: 'Current IOB' - , zh_cn: 'Current IOB' - , zh_tw: 'Current IOB' - , hu: 'Jelenlegi IOB' - }, - 'virtAsstTitleLaunch': { - bg: 'Welcome to Nightscout' - , cs: 'Welcome to Nightscout' - , de: 'Willkommen bei Nightscout' - , dk: 'Welcome to Nightscout' - , el: 'Welcome to Nightscout' - , en: 'Welcome to Nightscout' - , es: 'Welcome to Nightscout' - , fi: 'Welcome to Nightscout' - , fr: 'Welcome to Nightscout' - , he: 'Welcome to Nightscout' - , hr: 'Welcome to Nightscout' - , it: 'Welcome to Nightscout' - , ko: 'Welcome to Nightscout' - , nb: 'Welcome to Nightscout' - , pl: 'Welcome to Nightscout' - , pt: 'Welcome to Nightscout' - , ro: 'Welcome to Nightscout' - , nl: 'Welcome to Nightscout' - , ru: 'Добро пожаловать в Nightscout' - , sk: 'Welcome to Nightscout' - , sv: 'Welcome to Nightscout' - , tr: 'Welcome to Nightscout' - , zh_cn: 'Welcome to Nightscout' - , zh_tw: 'Welcome to Nightscout' - , hu: 'Üdvözöllek a Nightscouton' - }, - 'virtAsstTitleLoopForecast': { - bg: 'Loop Forecast' - , cs: 'Loop Forecast' - , de: 'Loop-Vorhersage' - , dk: 'Loop Forecast' - , el: 'Loop Forecast' - , en: 'Loop Forecast' - , es: 'Loop Forecast' - , fi: 'Loop Forecast' - , fr: 'Loop Forecast' - , he: 'Loop Forecast' - , hr: 'Loop Forecast' - , it: 'Loop Forecast' - , ko: 'Loop Forecast' - , nb: 'Loop Forecast' - , pl: 'Loop Forecast' - , pt: 'Loop Forecast' - , ro: 'Loop Forecast' - , nl: 'Loop Forecast' - , ru: 'Прогноз Loop' - , sk: 'Loop Forecast' - , sv: 'Loop Forecast' - , tr: 'Loop Forecast' - , zh_cn: 'Loop Forecast' - , zh_tw: 'Loop Forecast' - , hu: 'Loop Előrejelzés' - }, - 'virtAsstTitleLastLoop': { - bg: 'Last Loop' - , cs: 'Last Loop' - , de: 'Letzter Loop' - , dk: 'Last Loop' - , el: 'Last Loop' - , en: 'Last Loop' - , es: 'Last Loop' - , fi: 'Last Loop' - , fr: 'Last Loop' - , he: 'Last Loop' - , hr: 'Last Loop' - , it: 'Last Loop' - , ko: 'Last Loop' - , nb: 'Last Loop' - , pl: 'Last Loop' - , pt: 'Last Loop' - , ro: 'Last Loop' - , nl: 'Last Loop' - , ru: 'Прошлый Loop' - , sk: 'Last Loop' - , sv: 'Last Loop' - , tr: 'Last Loop' - , zh_cn: 'Last Loop' - , zh_tw: 'Last Loop' - , hu: 'Utolsó Loop' - }, - 'virtAsstTitleOpenAPSForecast': { - bg: 'OpenAPS Forecast' - , cs: 'OpenAPS Forecast' - , de: 'OpenAPS-Vorhersage' - , dk: 'OpenAPS Forecast' - , el: 'OpenAPS Forecast' - , en: 'OpenAPS Forecast' - , es: 'OpenAPS Forecast' - , fi: 'OpenAPS Forecast' - , fr: 'OpenAPS Forecast' - , he: 'OpenAPS Forecast' - , hr: 'OpenAPS Forecast' - , it: 'OpenAPS Forecast' - , ko: 'OpenAPS Forecast' - , nb: 'OpenAPS Forecast' - , pl: 'OpenAPS Forecast' - , pt: 'OpenAPS Forecast' - , ro: 'OpenAPS Forecast' - , nl: 'OpenAPS Forecast' - , ru: 'Прогноз OpenAPS' - , sk: 'OpenAPS Forecast' - , sv: 'OpenAPS Forecast' - , tr: 'OpenAPS Forecast' - , zh_cn: 'OpenAPS Forecast' - , zh_tw: 'OpenAPS Forecast' - , hu: 'OpenAPS Előrejelzés' - }, - 'virtAsstTitlePumpReservoir': { - bg: 'Insulin Remaining' - , cs: 'Insulin Remaining' - , de: 'Verbleibendes Insulin' - , dk: 'Insulin Remaining' - , el: 'Insulin Remaining' - , en: 'Insulin Remaining' - , es: 'Insulin Remaining' - , fi: 'Insulin Remaining' - , fr: 'Insulin Remaining' - , he: 'Insulin Remaining' - , hr: 'Insulin Remaining' - , it: 'Insulin Remaining' - , ko: 'Insulin Remaining' - , nb: 'Insulin Remaining' - , pl: 'Insulin Remaining' - , pt: 'Insulin Remaining' - , ro: 'Insulin Remaining' - , nl: 'Insulin Remaining' - , ru: 'Осталось Инсулина' - , sk: 'Insulin Remaining' - , sv: 'Insulin Remaining' - , tr: 'Insulin Remaining' - , zh_cn: 'Insulin Remaining' - , zh_tw: 'Insulin Remaining' - , hu: 'Fennmaradó inzulin' - }, - 'virtAsstTitlePumpBattery': { - bg: 'Pump Battery' - , cs: 'Pump Battery' - , de: 'Pumpenbatterie' - , dk: 'Pump Battery' - , el: 'Pump Battery' - , en: 'Pump Battery' - , es: 'Pump Battery' - , fi: 'Pump Battery' - , fr: 'Pump Battery' - , he: 'Pump Battery' - , hr: 'Pump Battery' - , it: 'Pump Battery' - , ko: 'Pump Battery' - , nb: 'Pump Battery' - , pl: 'Pump Battery' - , pt: 'Pump Battery' - , ro: 'Pump Battery' - , nl: 'Pump Battery' - , ru: 'Батарея помпы' - , sk: 'Pump Battery' - , sv: 'Pump Battery' - , tr: 'Pump Battery' - , zh_cn: 'Pump Battery' - , zh_tw: 'Pump Battery' - , hu: 'Pumpa töltöttsége' - }, - 'virtAsstTitleRawBG': { - bg: 'Current Raw BG' - , cs: 'Current Raw BG' - , de: 'Aktueller Blutzucker-Rohwert' - , dk: 'Current Raw BG' - , el: 'Current Raw BG' - , en: 'Current Raw BG' - , es: 'Current Raw BG' - , fi: 'Current Raw BG' - , fr: 'Current Raw BG' - , he: 'Current Raw BG' - , hr: 'Current Raw BG' - , it: 'Current Raw BG' - , ko: 'Current Raw BG' - , nb: 'Current Raw BG' - , pl: 'Current Raw BG' - , pt: 'Current Raw BG' - , ro: 'Current Raw BG' - , nl: 'Current Raw BG' - , ru: 'Актуальн RAW ГК ' - , sk: 'Current Raw BG' - , sv: 'Current Raw BG' - , tr: 'Current Raw BG' - , zh_cn: 'Current Raw BG' - , zh_tw: 'Current Raw BG' - , hu: 'Jelenlegi nyers cukorszint' - }, - 'virtAsstTitleUploaderBattery': { - bg: 'Uploader Battery' - , cs: 'Uploader Battery' - , de: 'Uploader Batterie' - , dk: 'Uploader Battery' - , el: 'Uploader Battery' - , en: 'Uploader Battery' - , es: 'Uploader Battery' - , fi: 'Uploader Battery' - , fr: 'Uploader Battery' - , he: 'Uploader Battery' - , hr: 'Uploader Battery' - , it: 'Uploader Battery' - , ko: 'Uploader Battery' - , nb: 'Uploader Battery' - , pl: 'Uploader Battery' - , pt: 'Uploader Battery' - , ro: 'Uploader Battery' - , nl: 'Uploader Battery' - , ru: 'Батарея загрузчика' - , sk: 'Uploader Battery' - , sv: 'Uploader Battery' - , tr: 'Uploader Battery' - , zh_cn: 'Uploader Battery' - , zh_tw: 'Current Raw BG' - , hu: 'Feltöltő töltöttsége' - }, - 'virtAsstTitleCurrentBG': { - bg: 'Current BG' - , cs: 'Current BG' - , de: 'Aktueller Blutzucker' - , dk: 'Current BG' - , el: 'Current BG' - , en: 'Current BG' - , es: 'Current BG' - , fi: 'Current BG' - , fr: 'Current BG' - , he: 'Current BG' - , hr: 'Current BG' - , it: 'Current BG' - , ko: 'Current BG' - , nb: 'Current BG' - , pl: 'Current BG' - , pt: 'Current BG' - , ro: 'Current BG' - , nl: 'Current BG' - , ru: 'Актуальная ГК' - , sk: 'Current BG' - , sv: 'Current BG' - , tr: 'Current BG' - , zh_cn: 'Current BG' - , zh_tw: 'Current BG' - , hu: 'Jelenlegi Cukorszint' - }, - 'virtAsstTitleFullStatus': { - bg: 'Full Status' - , cs: 'Full Status' - , de: 'Gesamtstatus' - , dk: 'Full Status' - , el: 'Full Status' - , en: 'Full Status' - , es: 'Full Status' - , fi: 'Full Status' - , fr: 'Full Status' - , he: 'Full Status' - , hr: 'Full Status' - , it: 'Full Status' - , ko: 'Full Status' - , nb: 'Full Status' - , pl: 'Full Status' - , pt: 'Full Status' - , ro: 'Full Status' - , nl: 'Full Status' - , ru: 'Полная информация о статусе' - , sk: 'Full Status' - , sv: 'Full Status' - , tr: 'Full Status' - , zh_cn: 'Full Status' - , zh_tw: 'Full Status' - , hu: 'Teljes Státusz' - }, - 'virtAsstTitleCGMMode': { - bg: 'CGM Mode' - , cs: 'CGM Mode' - , de: 'CGM Mode' - , dk: 'CGM Mode' - , el: 'CGM Mode' - , en: 'CGM Mode' - , es: 'CGM Mode' - , fi: 'CGM Mode' - , fr: 'CGM Mode' - , he: 'CGM Mode' - , hr: 'CGM Mode' - , it: 'CGM Mode' - , ko: 'CGM Mode' - , nb: 'CGM Mode' - , pl: 'CGM Mode' - , pt: 'CGM Mode' - , ro: 'CGM Mode' - , nl: 'CGM Mode' - , ru: 'CGM Mode' - , sk: 'CGM Mode' - , sv: 'CGM Mode' - , tr: 'CGM Mode' - , zh_cn: 'CGM Mode' - , zh_tw: 'CGM Mode' - , hu: 'CGM Mód' - }, - 'virtAsstTitleCGMStatus': { - bg: 'CGM Status' - , cs: 'CGM Status' - , de: 'CGM Status' - , dk: 'CGM Status' - , el: 'CGM Status' - , en: 'CGM Status' - , es: 'CGM Status' - , fi: 'CGM Status' - , fr: 'CGM Status' - , he: 'CGM Status' - , hr: 'CGM Status' - , it: 'CGM Status' - , ko: 'CGM Status' - , nb: 'CGM Status' - , pl: 'CGM Status' - , pt: 'CGM Status' - , ro: 'CGM Status' - , nl: 'CGM Status' - , ru: 'CGM Status' - , sk: 'CGM Status' - , sv: 'CGM Status' - , tr: 'CGM Status' - , zh_cn: 'CGM Status' - , zh_tw: 'CGM Status' - , hu: 'CGM Státusz' - }, - 'virtAsstTitleCGMSessionAge': { - bg: 'CGM Session Age' - , cs: 'CGM Session Age' - , de: 'CGM Session Age' - , dk: 'CGM Session Age' - , el: 'CGM Session Age' - , en: 'CGM Session Age' - , es: 'CGM Session Age' - , fi: 'CGM Session Age' - , fr: 'CGM Session Age' - , he: 'CGM Session Age' - , hr: 'CGM Session Age' - , it: 'CGM Session Age' - , ko: 'CGM Session Age' - , nb: 'CGM Session Age' - , pl: 'CGM Session Age' - , pt: 'CGM Session Age' - , ro: 'CGM Session Age' - , nl: 'CGM Session Age' - , ru: 'CGM Session Age' - , sk: 'CGM Session Age' - , sv: 'CGM Session Age' - , tr: 'CGM Session Age' - , zh_cn: 'CGM Session Age' - , zh_tw: 'CGM Session Age' - , hu: 'CGM életkora' - }, - 'virtAsstTitleCGMTxStatus': { - bg: 'CGM Transmitter Status' - , cs: 'CGM Transmitter Status' - , de: 'CGM Transmitter Status' - , dk: 'CGM Transmitter Status' - , el: 'CGM Transmitter Status' - , en: 'CGM Transmitter Status' - , es: 'CGM Transmitter Status' - , fi: 'CGM Transmitter Status' - , fr: 'CGM Transmitter Status' - , he: 'CGM Transmitter Status' - , hr: 'CGM Transmitter Status' - , it: 'CGM Transmitter Status' - , ko: 'CGM Transmitter Status' - , nb: 'CGM Transmitter Status' - , pl: 'CGM Transmitter Status' - , pt: 'CGM Transmitter Status' - , ro: 'CGM Transmitter Status' - , nl: 'CGM Transmitter Status' - , ru: 'CGM Transmitter Status' - , sk: 'CGM Transmitter Status' - , sv: 'CGM Transmitter Status' - , tr: 'CGM Transmitter Status' - , zh_cn: 'CGM Transmitter Status' - , zh_tw: 'CGM Transmitter Status' - , hu: 'CGM kapcsolat státusza' - }, - 'virtAsstTitleCGMTxAge': { - bg: 'CGM Transmitter Age' - , cs: 'CGM Transmitter Age' - , de: 'CGM Transmitter Age' - , dk: 'CGM Transmitter Age' - , el: 'CGM Transmitter Age' - , en: 'CGM Transmitter Age' - , es: 'CGM Transmitter Age' - , fi: 'CGM Transmitter Age' - , fr: 'CGM Transmitter Age' - , he: 'CGM Transmitter Age' - , hr: 'CGM Transmitter Age' - , it: 'CGM Transmitter Age' - , ko: 'CGM Transmitter Age' - , nb: 'CGM Transmitter Age' - , pl: 'CGM Transmitter Age' - , pt: 'CGM Transmitter Age' - , ro: 'CGM Transmitter Age' - , nl: 'CGM Transmitter Age' - , ru: 'CGM Transmitter Age' - , sk: 'CGM Transmitter Age' - , sv: 'CGM Transmitter Age' - , tr: 'CGM Transmitter Age' - , zh_cn: 'CGM Transmitter Age' - , zh_tw: 'CGM Transmitter Age' - }, - 'virtAsstTitleCGMNoise': { - bg: 'CGM Noise' - , cs: 'CGM Noise' - , de: 'CGM Noise' - , dk: 'CGM Noise' - , el: 'CGM Noise' - , en: 'CGM Noise' - , es: 'CGM Noise' - , fi: 'CGM Noise' - , fr: 'CGM Noise' - , he: 'CGM Noise' - , hr: 'CGM Noise' - , it: 'CGM Noise' - , ko: 'CGM Noise' - , nb: 'CGM Noise' - , pl: 'CGM Noise' - , pt: 'CGM Noise' - , ro: 'CGM Noise' - , nl: 'CGM Noise' - , ru: 'CGM Noise' - , sk: 'CGM Noise' - , sv: 'CGM Noise' - , tr: 'CGM Noise' - , zh_cn: 'CGM Noise' - , zh_tw: 'CGM Noise' - , hu: 'CGM Zaj' - }, - 'virtAsstTitleDelta': { - bg: 'Blood Glucose Delta' - , cs: 'Blood Glucose Delta' - , de: 'Blutzucker-Delta' - , dk: 'Blood Glucose Delta' - , el: 'Blood Glucose Delta' - , en: 'Blood Glucose Delta' - , es: 'Blood Glucose Delta' - , fi: 'Blood Glucose Delta' - , fr: 'Blood Glucose Delta' - , he: 'Blood Glucose Delta' - , hr: 'Blood Glucose Delta' - , it: 'Blood Glucose Delta' - , ko: 'Blood Glucose Delta' - , nb: 'Blood Glucose Delta' - , pl: 'Blood Glucose Delta' - , pt: 'Blood Glucose Delta' - , ro: 'Blood Glucose Delta' - , nl: 'Blood Glucose Delta' - , ru: 'Дельта ГК' - , sk: 'Blood Glucose Delta' - , sv: 'Blood Glucose Delta' - , tr: 'Blood Glucose Delta' - , zh_cn: 'Blood Glucose Delta' - , zh_tw: 'Blood Glucose Delta' - , hu: 'Csukoszint delta' - }, - 'virtAsstStatus': { - bg: '%1 and %2 as of %3.' - , cs: '%1 %2 čas %3.' - , de: '%1 und bis %3 %2.' - , dk: '%1 og %2 af %3.' - , el: '%1 and %2 as of %3.' - , en: '%1 and %2 as of %3.' - , es: '%1 y %2 como de %3.' - , fi: '%1 ja %2 alkaen %3.' - , fr: '%1 and %2 as of %3.' - , he: '%1 and %2 as of %3.' - , hr: '%1 and %2 as of %3.' - , it: '%1 e %2 come %3.' - , ko: '%1 and %2 as of %3.' - , nb: '%1 and %2 as of %3.' - , pl: '%1 i %2 rozpoczęte od %3.' - , pt: '%1 and %2 as of %3.' - , ro: '%1 și %2 din %3.' - , nl: '%1 and %2 as of %3.' - , ru: '%1 и %2 начиная с %3.' - , sk: '%1 and %2 as of %3.' - , sv: '%1 and %2 as of %3.' - , tr: '%1 ve %2 e kadar %3.' - , zh_cn: '%1 和 %2 到 %3.' - , zh_tw: '%1 and %2 as of %3.' - , hu: '%1 es %2 %3-tól.' - }, - 'virtAsstBasal': { - bg: '%1 současný bazál je %2 jednotek za hodinu' - , cs: '%1 current basal is %2 units per hour' - , de: '%1 aktuelle Basalrate ist %2 Einheiten je Stunde' - , dk: '%1 nuværende basal er %2 enheder per time' - , el: '%1 current basal is %2 units per hour' - , en: '%1 current basal is %2 units per hour' - , es: '%1 basal actual es %2 unidades por hora' - , fi: '%1 nykyinen basaali on %2 yksikköä tunnissa' - , fr: '%1 current basal is %2 units per hour' - , he: '%1 current basal is %2 units per hour' - , hr: '%1 current basal is %2 units per hour' - , it: '%1 basale attuale è %2 unità per ora' - , ko: '%1 current basal is %2 units per hour' - , nb: '%1 current basal is %2 units per hour' - , pl: '%1 obecna dawka bazalna %2 J na godzinę' - , pt: '%1 current basal is %2 units per hour' - , ro: '%1 bazala curentă este %2 unități pe oră' - , ru: '%1 текущий базал %2 ед в час' - , sk: '%1 current basal is %2 units per hour' - , sv: '%1 current basal is %2 units per hour' - , nl: '%1 current basal is %2 units per hour' - , tr: '%1 geçerli bazal oranı saatte %2 ünite' - , zh_cn: '%1 当前基础率是 %2 U/小时' - , zh_tw: '%1 current basal is %2 units per hour' - , hu: '%1 a jelenlegi bazál %2 egység óránként' - }, - 'virtAsstBasalTemp': { - bg: '%1 dočasný bazál %2 jednotek za hodinu skončí %3' - , cs: '%1 temp basal of %2 units per hour will end %3' - , de: '%1 temporäre Basalrate von %2 Einheiten endet %3' - , dk: '%1 midlertidig basal af %2 enheder per time stopper %3' - , el: '%1 temp basal of %2 units per hour will end %3' - , en: '%1 temp basal of %2 units per hour will end %3' - , es: '%1 Basal temporal de %2 unidades por hora hasta el fin %3' - , fi: '%1 tilapäinen basaali on %2 tunnissa, päättyy %3' - , fr: '%1 temp basal of %2 units per hour will end %3' - , he: '%1 temp basal of %2 units per hour will end %3' - , hr: '%1 temp basal of %2 units per hour will end %3' - , it: '%1 basale temporanea di %2 unità per ora finirà %3' - , ko: '%1 temp basal of %2 units per hour will end %3' - , nb: '%1 temp basal of %2 units per hour will end %3' - , pl: '%1 tymczasowa dawka bazalna %2 J na godzinę zakoczy się o %3' - , pt: '%1 temp basal of %2 units per hour will end %3' - , ro: '%1 bazala temporară de %2 unități pe oră se va termina la %3' - , ru: '%1 временный базал %2 ед в час закончится в %3' - , sk: '%1 temp basal of %2 units per hour will end %3' - , sv: '%1 temp basal of %2 units per hour will end %3' - , nl: '%1 temp basal of %2 units per hour will end %3' - , tr: '%1 geçici bazal %2 ünite %3 sona eriyor' - , zh_cn: '%1 临时基础率 %2 U/小时将会在 %3结束' - , zh_tw: '%1 temp basal of %2 units per hour will end %3' - , hu: '%1 átmeneti bazál %2 egység óránként ami %3 -kor jár le' - }, - 'virtAsstIob': { - bg: 'a máte %1 jednotek aktivního inzulínu.' - , cs: 'and you have %1 insulin on board.' - , de: 'und du hast %1 Insulin wirkend.' - , dk: 'og du har %1 insulin i kroppen.' - , el: 'and you have %1 insulin on board.' - , en: 'and you have %1 insulin on board.' - , es: 'y tu tienes %1 insulina activa.' - , fi: 'ja sinulla on %1 aktivista insuliinia.' - , fr: 'and you have %1 insulin on board.' - , he: 'and you have %1 insulin on board.' - , hr: 'and you have %1 insulin on board.' - , it: 'e tu hai %1 insulina attiva.' - , ko: 'and you have %1 insulin on board.' - , nb: 'and you have %1 insulin on board.' - , pl: 'i masz %1 aktywnej insuliny.' - , pt: 'and you have %1 insulin on board.' - , ro: 'și mai aveți %1 insulină activă.' - , ru: 'и вы имеете %1 инсулина в организме.' - , sk: 'and you have %1 insulin on board.' - , sv: 'and you have %1 insulin on board.' - , nl: 'and you have %1 insulin on board.' - , tr: 've Sizde %1 aktif insulin var' - , zh_cn: '并且你有 %1 的活性胰岛素.' - , zh_tw: 'and you have %1 insulin on board.' - , hu: 'és neked %1 inzulin van a testedben.' - }, - 'virtAsstIobIntent': { - bg: 'Máte %1 jednotek aktivního inzulínu' - , cs: 'You have %1 insulin on board' - , de: 'Du hast noch %1 Insulin wirkend' - , dk: 'Du har %1 insulin i kroppen' - , el: 'You have %1 insulin on board' - , en: 'You have %1 insulin on board' - , es: 'Tienes %1 insulina activa' - , fi: 'Sinulla on %1 aktiivista insuliinia' - , fr: 'You have %1 insulin on board' - , he: 'You have %1 insulin on board' - , hr: 'You have %1 insulin on board' - , it: 'Tu hai %1 insulina attiva' - , ko: 'You have %1 insulin on board' - , nb: 'You have %1 insulin on board' - , pl: 'Masz %1 aktywnej insuliny' - , pt: 'You have %1 insulin on board' - , ro: 'Aveți %1 insulină activă' - , ru: 'вы имеете %1 инсулина в организме' - , sk: 'You have %1 insulin on board' - , sv: 'You have %1 insulin on board' - , nl: 'You have %1 insulin on board' - , tr: 'Sizde %1 aktif insülin var' - , zh_cn: '你有 %1 的活性胰岛素' - , zh_tw: 'You have %1 insulin on board' - , hu: 'Neked %1 inzulin van a testedben' - }, - 'virtAsstIobUnits': { - bg: '%1 units of' - , cs: '%1 jednotek' - , de: 'noch %1 Einheiten' - , dk: '%1 enheder af' - , el: '%1 units of' - , en: '%1 units of' - , es: '%1 unidades de' - , fi: '%1 yksikköä' - , fr: '%1 units of' - , he: '%1 units of' - , hr: '%1 units of' - , it: '%1 unità di' - , ko: '%1 units of' - , nb: '%1 units of' - , pl: '%1 jednostek' - , pt: '%1 units of' - , ro: '%1 unități' - , nl: '%1 units of' - , ru: '%1 единиц' - , sk: '%1 units of' - , sv: '%1 units of' - , tr: 'hala %1 birim' - , zh_cn: '%1 单位' - , zh_tw: '%1 units of' - , hu: '%1 egység' - }, - 'virtAsstLaunch': { - bg: 'What would you like to check on Nightscout?' - , cs: 'What would you like to check on Nightscout?' - , de: 'Was möchtest du von Nightscout wissen?' - , dk: 'What would you like to check on Nightscout?' - , el: 'What would you like to check on Nightscout?' - , en: 'What would you like to check on Nightscout?' - , es: 'What would you like to check on Nightscout?' - , fi: 'What would you like to check on Nightscout?' - , fr: 'What would you like to check on Nightscout?' - , he: 'What would you like to check on Nightscout?' - , hr: 'What would you like to check on Nightscout?' - , it: 'What would you like to check on Nightscout?' - , ko: 'What would you like to check on Nightscout?' - , nb: 'What would you like to check on Nightscout?' - , pl: 'What would you like to check on Nightscout?' - , pt: 'What would you like to check on Nightscout?' - , ro: 'What would you like to check on Nightscout?' - , nl: 'What would you like to check on Nightscout?' - , ru: 'Что проверить в Nightscout?' - , sk: 'What would you like to check on Nightscout?' - , sv: 'What would you like to check on Nightscout?' - , tr: 'What would you like to check on Nightscout?' - , zh_cn: 'What would you like to check on Nightscout?' - , zh_tw: 'What would you like to check on Nightscout?' - , hu: 'Mit szeretnél ellenőrizni a Nightscout oldalon?' - }, - 'virtAsstPreamble': { - bg: 'Your' - , cs: 'Vaše' - , de: 'Deine' - , dk: 'Dine' - , el: 'Your' - , en: 'Your' - , es: 'Tú' - , fi: 'Sinun' - , fr: 'Your' - , he: 'Your' - , hr: 'Your' - , it: 'Tuo' - , ko: 'Your' - , nb: 'Your' - , pl: 'twój' - , pt: 'Your' - , nl: 'Jouw' - , ro: '' - , ru: 'ваш' - , sk: 'Your' - , sv: 'Your' - , tr: 'Senin' - , zh_cn: '你的' - , zh_tw: 'Your' - , hu: 'A tied' - }, - 'virtAsstPreamble3person': { - bg: '%1 has a ' - , cs: '%1 má ' - , de: '%1 hat eine' - , dk: '%1 har en ' - , el: '%1 has a ' - , en: '%1 has a ' - , es: '%1 tiene un ' - , fi: '%1 on ' - , fr: '%1 has a ' - , he: '%1 has a ' - , hr: '%1 has a ' - , it: '%1 ha un ' - , ko: '%1 has a ' - , nb: '%1 has a ' - , nl: '%1 heeft een ' - , pl: '%1 ma ' - , pt: '%1 has a ' - , ro: '%1 are ' - , ru: '%1 имеет ' - , sk: '%1 has a ' - , sv: '%1 has a ' - , tr: '%1 bir tane var' - , zh_cn: '%1 有一个 ' - , zh_tw: '%1 has a ' - , hu: '%1 -nak van ' - }, - 'virtAsstNoInsulin': { - bg: 'no' - , cs: 'žádný' - , de: 'kein' - , dk: 'nej' - , el: 'no' - , en: 'no' - , es: 'no' - , fi: 'ei' - , fr: 'no' - , he: 'no' - , hr: 'no' - , it: 'no' - , ko: 'no' - , nb: 'no' - , nl: 'geen' - , pl: 'nie' - , pt: 'no' - , ro: 'fără' - , ru: 'нет' - , sk: 'no' - , sv: 'no' - , tr: 'yok' - , zh_cn: '否' - , zh_tw: 'no' - , hu: 'semmilyen' - }, - 'virtAsstUploadBattery': { - bg: 'Your uploader battery is at %1' - , cs: 'Baterie mobilu má %1' - , en: 'Your uploader battery is at %1' - , hr: 'Your uploader battery is at %1' - , de: 'Der Akku deines Uploader-Handys ist bei %1' - , dk: 'Din uploaders batteri er %1' - , ko: 'Your uploader battery is at %1' - , nl: 'De batterij van je mobiel is bij %l' - , zh_cn: '你的手机电池电量是 %1 ' - , sv: 'Din uppladdares batteri är %1' - , fi: 'Lähettimen paristoa jäljellä %1' - , ro: 'Bateria uploaderului este la %1' - , pl: 'Twoja bateria ma %1' - , ru: 'батарея загрузчика %1' - , tr: 'Yükleyici piliniz %1' - , hu: 'A felöltőd töltöttsége %1' - }, - 'virtAsstReservoir': { - bg: 'You have %1 units remaining' - , cs: 'V zásobníku zbývá %1 jednotek' - , en: 'You have %1 units remaining' - , hr: 'You have %1 units remaining' - , de: 'Du hast %1 Einheiten übrig' - , dk: 'Du har %1 enheder tilbage' - , ko: 'You have %1 units remaining' - , nl: 'Je hebt nog %l eenheden in je reservoir' - , zh_cn: '你剩余%1 U的胰岛素' - , sv: 'Du har %1 enheter kvar' - , fi: '%1 yksikköä insuliinia jäljellä' - , ro: 'Mai aveți %1 unități rămase' - , pl: 'W zbiorniku pozostało %1 jednostek' - , ru: 'остается %1 ед' - , tr: '%1 birim kaldı' - , hu: '%1 egység maradt hátra' - }, - 'virtAsstPumpBattery': { - bg: 'Your pump battery is at %1 %2' - , cs: 'Baterie v pumpě má %1 %2' - , en: 'Your pump battery is at %1 %2' - , hr: 'Your pump battery is at %1 %2' - , de: 'Der Batteriestand deiner Pumpe ist bei %1 %2' - , dk: 'Din pumpes batteri er %1 %2' - , ko: 'Your pump battery is at %1 %2' - , nl: 'Je pomp batterij is bij %1 %2' - , zh_cn: '你的泵电池电量是%1 %2' - , sv: 'Din pumps batteri är %1 %2' - , fi: 'Pumppu on %1 %2' - , ro: 'Bateria pompei este la %1 %2' - , pl: 'Bateria pompy jest w %1 %2' - , ru: 'батарея помпы %1 %2' - , tr: 'Pompa piliniz %1 %2' - , hu: 'A pumpád töltöttsége %1 %2' - }, - 'virtAsstUploaderBattery': { - bg: 'Your uploader battery is at %1' - , cs: 'Your uploader battery is at %1' - , en: 'Your uploader battery is at %1' - , hr: 'Your uploader battery is at %1' - , de: 'Der Akku deines Uploader-Handys ist bei %1' - , dk: 'Your uploader battery is at %1' - , ko: 'Your uploader battery is at %1' - , nl: 'Your uploader battery is at %1' - , zh_cn: 'Your uploader battery is at %1' - , sv: 'Your uploader battery is at %1' - , fi: 'Your uploader battery is at %1' - , ro: 'Your uploader battery is at %1' - , pl: 'Your uploader battery is at %1' - , ru: 'Батарея загрузчика %1' - , tr: 'Your uploader battery is at %1' - , hu: 'A feltöltőd töltöttsége %1' - }, - 'virtAsstLastLoop': { - bg: 'The last successful loop was %1' - , cs: 'Poslední úšpěšné provedení smyčky %1' - , en: 'The last successful loop was %1' - , hr: 'The last successful loop was %1' - , de: 'Der letzte erfolgreiche Loop war %1' - , dk: 'Seneste successfulde loop var %1' - , ko: 'The last successful loop was %1' - , nl: 'De meest recente goede loop was %1' - , zh_cn: '最后一次成功闭环的是在%1' - , sv: 'Senaste lyckade loop var %1' - , fi: 'Viimeisin onnistunut loop oli %1' - , ro: 'Ultima decizie loop implementată cu succes a fost %1' - , pl: 'Ostatnia pomyślna pętla była %1' - , ru: 'недавний успешный цикл был %1' - , tr: 'Son başarılı döngü %1 oldu' - , hu: 'Az utolsó sikeres loop %1-kor volt' - }, - 'virtAsstLoopNotAvailable': { - bg: 'Loop plugin does not seem to be enabled' - , cs: 'Plugin smyčka není patrně povolený' - , en: 'Loop plugin does not seem to be enabled' - , hr: 'Loop plugin does not seem to be enabled' - , de: 'Das Loop-Plugin scheint nicht aktiviert zu sein' - , dk: 'Loop plugin lader ikke til at være slået til' - , ko: 'Loop plugin does not seem to be enabled' - , nl: 'De Loop plugin is niet geactiveerd' - , zh_cn: 'Loop插件看起来没有被启用' - , sv: 'Loop plugin verkar inte vara aktiverad' - , fi: 'Loop plugin ei ole aktivoitu' - , ro: 'Extensia loop pare a fi dezactivată' - , pl: 'Plugin Loop prawdopodobnie nie jest włączona' - , ru: 'Расширение ЗЦ Loop не активировано' - , tr: 'Döngü eklentisi etkin görünmüyor' - , hu: 'A loop kiegészítés valószínűleg nincs bekapcsolva' - }, - 'virtAsstLoopForecastAround': { - bg: 'According to the loop forecast you are expected to be around %1 over the next %2' - , cs: 'Podle přepovědi smyčky je očekávána glykémie around %1 během následujících %2' - , en: 'According to the loop forecast you are expected to be around %1 over the next %2' - , hr: 'According to the loop forecast you are expected to be around %1 over the next %2' - , de: 'Entsprechend der Loop-Vorhersage landest in den nächsten %2 bei %1' - , dk: 'Ifølge Loops forudsigelse forventes du at blive around %1 i den næste %2' - , ko: 'According to the loop forecast you are expected to be around %1 over the next %2' - , nl: 'Volgens de Loop voorspelling is je waarde around %1 over de volgnede %2' - , zh_cn: '根据loop的预测,在接下来的%2你的血糖将会是around %1' - , sv: 'Enligt Loops förutsägelse förväntas du bli around %1 inom %2' - , fi: 'Ennusteen mukaan olet around %1 seuraavan %2 ajan' - , ro: 'Potrivit previziunii date de loop se estiemază around %1 pentru următoarele %2' - , pl: 'Zgodnie z prognozą pętli, glikemia around %1 będzie podczas następnego %2' - , ru: 'по прогнозу алгоритма ЗЦ ожидается около %1 за последующие %2' - , tr: 'Döngü tahminine göre sonraki %2 ye göre around %1 olması bekleniyor' - , hu: 'A loop előrejelzése alapján a követlező %2 időszakban körülbelül %1 lesz' - }, - 'virtAsstLoopForecastBetween': { - bg: 'According to the loop forecast you are expected to be between %1 and %2 over the next %3' - , cs: 'Podle přepovědi smyčky je očekávána glykémie between %1 and %2 během následujících %3' - , en: 'According to the loop forecast you are expected to be between %1 and %2 over the next %3' - , hr: 'According to the loop forecast you are expected to be between %1 and %2 over the next %3' - , de: 'Entsprechend der Loop-Vorhersage landest du zwischen %1 und %2 während der nächsten %3' - , dk: 'Ifølge Loops forudsigelse forventes du at blive between %1 and %2 i den næste %3' - , ko: 'According to the loop forecast you are expected to be between %1 and %2 over the next %3' - , nl: 'Volgens de Loop voorspelling is je waarde between %1 and %2 over de volgnede %3' - , zh_cn: '根据loop的预测,在接下来的%3你的血糖将会是between %1 and %2' - , sv: 'Enligt Loops förutsägelse förväntas du bli between %1 and %2 inom %3' - , fi: 'Ennusteen mukaan olet between %1 and %2 seuraavan %3 ajan' - , ro: 'Potrivit previziunii date de loop se estiemază between %1 and %2 pentru următoarele %3' - , pl: 'Zgodnie z prognozą pętli, glikemia between %1 and %2 będzie podczas następnego %3' - , ru: 'по прогнозу алгоритма ЗЦ ожидается между %1 и %2 за последующие %3' - , tr: 'Döngü tahminine göre sonraki %3 ye göre between %1 and %2 olması bekleniyor' - , hu: 'A loop előrejelzése alapján a követlező %3 időszakban %1 és %2 között leszel' - }, - 'virtAsstAR2ForecastAround': { - bg: 'According to the AR2 forecast you are expected to be around %1 over the next %2' - , cs: 'According to the AR2 forecast you are expected to be around %1 over the next %2' - , en: 'According to the AR2 forecast you are expected to be around %1 over the next %2' - , hr: 'According to the AR2 forecast you are expected to be around %1 over the next %2' - , de: 'Entsprechend der AR2-Vorhersage landest du in %2 bei %1' - , dk: 'According to the AR2 forecast you are expected to be around %1 over the next %2' - , ko: 'According to the AR2 forecast you are expected to be around %1 over the next %2' - , nl: 'According to the AR2 forecast you are expected to be around %1 over the next %2' - , zh_cn: 'According to the AR2 forecast you are expected to be around %1 over the next %2' - , sv: 'According to the AR2 forecast you are expected to be around %1 over the next %2' - , fi: 'According to the AR2 forecast you are expected to be around %1 over the next %2' - , ro: 'According to the AR2 forecast you are expected to be around %1 over the next %2' - , pl: 'According to the AR2 forecast you are expected to be around %1 over the next %2' - , ru: 'По прогнозу AR2 ожидается около %1 в следующие %2' - , tr: 'According to the AR2 forecast you are expected to be around %1 over the next %2' - , hu: 'Az AR2ües előrejelzés alapján a követlező %2 időszakban körülbelül %1 lesz' - }, - 'virtAsstAR2ForecastBetween': { - bg: 'According to the AR2 forecast you are expected to be between %1 and %2 over the next %3' - , cs: 'According to the AR2 forecast you are expected to be between %1 and %2 over the next %3' - , en: 'According to the AR2 forecast you are expected to be between %1 and %2 over the next %3' - , hr: 'According to the AR2 forecast you are expected to be between %1 and %2 over the next %3' - , de: 'Entsprechend der AR2-Vorhersage landest du in %3 zwischen %1 and %2' - , dk: 'According to the AR2 forecast you are expected to be between %1 and %2 over the next %3' - , ko: 'According to the AR2 forecast you are expected to be between %1 and %2 over the next %3' - , nl: 'According to the AR2 forecast you are expected to be between %1 and %2 over the next %3' - , zh_cn: 'According to the AR2 forecast you are expected to be between %1 and %2 over the next %3' - , sv: 'According to the AR2 forecast you are expected to be between %1 and %2 over the next %3' - , fi: 'According to the AR2 forecast you are expected to be between %1 and %2 over the next %3' - , ro: 'According to the AR2 forecast you are expected to be between %1 and %2 over the next %3' - , pl: 'According to the AR2 forecast you are expected to be between %1 and %2 over the next %3' - , ru: 'По прогнозу AR2 ожидается между %1 и %2 в следующие %3' - , tr: 'According to the AR2 forecast you are expected to be between %1 and %2 over the next %3' - , hu: 'Az AR2 előrejelzése alapján a követlező %3 időszakban %1 és %2 között leszel' - }, - 'virtAsstForecastUnavailable': { - bg: 'Unable to forecast with the data that is available' - , cs: 'S dostupnými daty přepověď není možná' - , en: 'Unable to forecast with the data that is available' - , hr: 'Unable to forecast with the data that is available' - , de: 'Mit den verfügbaren Daten ist eine Loop-Vorhersage nicht möglich' - , dk: 'Det er ikke muligt at forudsige md de tilgængelige data' - , ko: 'Unable to forecast with the data that is available' - , nl: 'Niet mogelijk om een voorspelling te doen met de data die beschikbaar is' - , zh_cn: '血糖数据不可用,无法预测未来走势' - , sv: 'Förutsägelse ej möjlig med tillgänlig data' - , fi: 'Ennusteet eivät ole toiminnassa puuttuvan tiedon vuoksi' - , ro: 'Estimarea este imposibilă pe baza datelor disponibile' - , pl: 'Prognoza pętli nie jest możliwa, z dostępnymi danymi.' - , ru: 'прогноз при таких данных невозможен' - , tr: 'Mevcut verilerle tahmin edilemedi' - , hu: 'Nem tudok előrejelzést készíteni hiányos adatokból' - }, - 'virtAsstRawBG': { - en: 'Your raw bg is %1' - , cs: 'Raw glykémie je %1' - , de: 'Dein Rohblutzucker ist %1' - , dk: 'Dit raw blodsukker er %1' - , ko: 'Your raw bg is %1' - , nl: 'Je raw bloedwaarde is %1' - , zh_cn: '你的血糖是 %1' - , sv: 'Ditt raw blodsocker är %1' - , fi: 'Suodattamaton verensokeriarvo on %1' - , ro: 'Glicemia brută este %1' - , bg: 'Your raw bg is %1' - , hr: 'Your raw bg is %1' - , pl: 'Glikemia RAW wynosi %1' - , ru: 'ваши необработанные данные RAW %1' - , tr: 'Ham kan şekeriniz %1' - , hu: 'A nyers cukorszinted %1' - }, - 'virtAsstOpenAPSForecast': { - en: 'The OpenAPS Eventual BG is %1' - , cs: 'OpenAPS Eventual BG je %1' - , de: 'Der von OpenAPS vorhergesagte Blutzucker ist %1' - , dk: 'OpenAPS forventet blodsukker er %1' - , ko: 'The OpenAPS Eventual BG is %1' - , nl: 'OpenAPS uiteindelijke bloedglucose van %1' - , zh_cn: 'OpenAPS 预测最终血糖是 %1' - , sv: 'OpenAPS slutgiltigt blodsocker är %1' - , fi: 'OpenAPS verensokeriarvio on %1' - , ro: 'Glicemia estimată de OpenAPS este %1' - , bg: 'The OpenAPS Eventual BG is %1' - , hr: 'The OpenAPS Eventual BG is %1' - , pl: 'Glikemia prognozowana przez OpenAPS wynosi %1' - , ru: 'OpenAPS прогнозирует ваш СК как %1 ' - , tr: 'OpenAPS tarafından tahmin edilen kan şekeri %1' - , hu: 'Az OpenAPS cukorszinted %1' - }, - 'virtAsstCob3person': { - bg: '%1 has %2 carbohydrates on board' - , cs: '%1 has %2 carbohydrates on board' - , de: '%1 hat %2 Kohlenhydrate wirkend' - , dk: '%1 has %2 carbohydrates on board' - , el: '%1 has %2 carbohydrates on board' - , en: '%1 has %2 carbohydrates on board' - , es: '%1 has %2 carbohydrates on board' - , fi: '%1 has %2 carbohydrates on board' - , fr: '%1 has %2 carbohydrates on board' - , he: '%1 has %2 carbohydrates on board' - , hr: '%1 has %2 carbohydrates on board' - , it: '%1 has %2 carbohydrates on board' - , ko: '%1 has %2 carbohydrates on board' - , nb: '%1 has %2 carbohydrates on board' - , nl: '%1 has %2 carbohydrates on board' - , pl: '%1 has %2 carbohydrates on board' - , pt: '%1 has %2 carbohydrates on board' - , ro: '%1 has %2 carbohydrates on board' - , ru: '%1 имеет %2 активных углеводов' - , sk: '%1 has %2 carbohydrates on board' - , sv: '%1 has %2 carbohydrates on board' - , tr: '%1 has %2 carbohydrates on board' - , zh_cn: '%1 has %2 carbohydrates on board' - , zh_tw: '%1 has %2 carbohydrates on board' - , hu: '%1 -nak %2 szénhodrátja van a testében' - }, - 'virtAsstCob': { - bg: 'You have %1 carbohydrates on board' - , cs: 'You have %1 carbohydrates on board' - , de: 'Du hast noch %1 Kohlenhydrate wirkend.' - , dk: 'You have %1 carbohydrates on board' - , el: 'You have %1 carbohydrates on board' - , en: 'You have %1 carbohydrates on board' - , es: 'You have %1 carbohydrates on board' - , fi: 'You have %1 carbohydrates on board' - , fr: 'You have %1 carbohydrates on board' - , he: 'You have %1 carbohydrates on board' - , hr: 'You have %1 carbohydrates on board' - , it: 'You have %1 carbohydrates on board' - , ko: 'You have %1 carbohydrates on board' - , nb: 'You have %1 carbohydrates on board' - , nl: 'You have %1 carbohydrates on board' - , pl: 'You have %1 carbohydrates on board' - , pt: 'You have %1 carbohydrates on board' - , ro: 'You have %1 carbohydrates on board' - , ru: 'У вас %1 активных углеводов' - , sk: 'You have %1 carbohydrates on board' - , sv: 'You have %1 carbohydrates on board' - , tr: 'You have %1 carbohydrates on board' - , zh_cn: 'You have %1 carbohydrates on board' - , zh_tw: 'You have %1 carbohydrates on board' - , hu: 'Neked %1 szénhidrát van a testedben' - }, - 'virtAsstCGMMode': { - bg: 'Your CGM mode was %1 as of %2.' - , cs: 'Your CGM mode was %1 as of %2.' - , de: 'Your CGM mode was %1 as of %2.' - , dk: 'Your CGM mode was %1 as of %2.' - , el: 'Your CGM mode was %1 as of %2.' - , en: 'Your CGM mode was %1 as of %2.' - , es: 'Your CGM mode was %1 as of %2.' - , fi: 'Your CGM mode was %1 as of %2.' - , fr: 'Your CGM mode was %1 as of %2.' - , he: 'Your CGM mode was %1 as of %2.' - , hr: 'Your CGM mode was %1 as of %2.' - , it: 'Your CGM mode was %1 as of %2.' - , ko: 'Your CGM mode was %1 as of %2.' - , nb: 'Your CGM mode was %1 as of %2.' - , nl: 'Your CGM mode was %1 as of %2.' - , pl: 'Your CGM mode was %1 as of %2.' - , pt: 'Your CGM mode was %1 as of %2.' - , ro: 'Your CGM mode was %1 as of %2.' - , ru: 'Your CGM mode was %1 as of %2.' - , sk: 'Your CGM mode was %1 as of %2.' - , sv: 'Your CGM mode was %1 as of %2.' - , tr: 'Your CGM mode was %1 as of %2.' - , zh_cn: 'Your CGM mode was %1 as of %2.' - , zh_tw: 'Your CGM mode was %1 as of %2.' - , hu: 'A CGM módod %1 volt %2 -kor.' - }, - 'virtAsstCGMStatus': { - bg: 'Your CGM status was %1 as of %2.' - , cs: 'Your CGM status was %1 as of %2.' - , de: 'Your CGM status was %1 as of %2.' - , dk: 'Your CGM status was %1 as of %2.' - , el: 'Your CGM status was %1 as of %2.' - , en: 'Your CGM status was %1 as of %2.' - , es: 'Your CGM status was %1 as of %2.' - , fi: 'Your CGM status was %1 as of %2.' - , fr: 'Your CGM status was %1 as of %2.' - , he: 'Your CGM status was %1 as of %2.' - , hr: 'Your CGM status was %1 as of %2.' - , it: 'Your CGM status was %1 as of %2.' - , ko: 'Your CGM status was %1 as of %2.' - , nb: 'Your CGM status was %1 as of %2.' - , nl: 'Your CGM status was %1 as of %2.' - , pl: 'Your CGM status was %1 as of %2.' - , pt: 'Your CGM status was %1 as of %2.' - , ro: 'Your CGM status was %1 as of %2.' - , ru: 'Your CGM status was %1 as of %2.' - , sk: 'Your CGM status was %1 as of %2.' - , sv: 'Your CGM status was %1 as of %2.' - , tr: 'Your CGM status was %1 as of %2.' - , zh_cn: 'Your CGM status was %1 as of %2.' - , zh_tw: 'Your CGM status was %1 as of %2.' - , hu: 'A CGM státuszod %1 volt %2 -kor.' - }, - 'virtAsstCGMSessAge': { - bg: 'Your CGM session has been active for %1 days and %2 hours.' - , cs: 'Your CGM session has been active for %1 days and %2 hours.' - , de: 'Your CGM session has been active for %1 days and %2 hours.' - , dk: 'Your CGM session has been active for %1 days and %2 hours.' - , el: 'Your CGM session has been active for %1 days and %2 hours.' - , en: 'Your CGM session has been active for %1 days and %2 hours.' - , es: 'Your CGM session has been active for %1 days and %2 hours.' - , fi: 'Your CGM session has been active for %1 days and %2 hours.' - , fr: 'Your CGM session has been active for %1 days and %2 hours.' - , he: 'Your CGM session has been active for %1 days and %2 hours.' - , hr: 'Your CGM session has been active for %1 days and %2 hours.' - , it: 'Your CGM session has been active for %1 days and %2 hours.' - , ko: 'Your CGM session has been active for %1 days and %2 hours.' - , nb: 'Your CGM session has been active for %1 days and %2 hours.' - , nl: 'Your CGM session has been active for %1 days and %2 hours.' - , pl: 'Your CGM session has been active for %1 days and %2 hours.' - , pt: 'Your CGM session has been active for %1 days and %2 hours.' - , ro: 'Your CGM session has been active for %1 days and %2 hours.' - , ru: 'Your CGM session has been active for %1 days and %2 hours.' - , sk: 'Your CGM session has been active for %1 days and %2 hours.' - , sv: 'Your CGM session has been active for %1 days and %2 hours.' - , tr: 'Your CGM session has been active for %1 days and %2 hours.' - , zh_cn: 'Your CGM session has been active for %1 days and %2 hours.' - , zh_tw: 'Your CGM session has been active for %1 days and %2 hours.' - , hu: 'A CGM kapcsolatod %1 napja és %2 órája aktív' - }, - 'virtAsstCGMSessNotStarted': { - bg: 'There is no active CGM session at the moment.' - , cs: 'There is no active CGM session at the moment.' - , de: 'There is no active CGM session at the moment.' - , dk: 'There is no active CGM session at the moment.' - , el: 'There is no active CGM session at the moment.' - , en: 'There is no active CGM session at the moment.' - , es: 'There is no active CGM session at the moment.' - , fi: 'There is no active CGM session at the moment.' - , fr: 'There is no active CGM session at the moment.' - , he: 'There is no active CGM session at the moment.' - , hr: 'There is no active CGM session at the moment.' - , it: 'There is no active CGM session at the moment.' - , ko: 'There is no active CGM session at the moment.' - , nb: 'There is no active CGM session at the moment.' - , nl: 'There is no active CGM session at the moment.' - , pl: 'There is no active CGM session at the moment.' - , pt: 'There is no active CGM session at the moment.' - , ro: 'There is no active CGM session at the moment.' - , ru: 'There is no active CGM session at the moment.' - , sk: 'There is no active CGM session at the moment.' - , sv: 'There is no active CGM session at the moment.' - , tr: 'There is no active CGM session at the moment.' - , zh_cn: 'There is no active CGM session at the moment.' - , zh_tw: 'There is no active CGM session at the moment.' - , hu: 'Jelenleg nincs aktív CGM kapcsolatod' - }, - 'virtAsstCGMTxStatus': { - bg: 'Your CGM transmitter status was %1 as of %2.' - , cs: 'Your CGM transmitter status was %1 as of %2.' - , de: 'Your CGM transmitter status was %1 as of %2.' - , dk: 'Your CGM transmitter status was %1 as of %2.' - , el: 'Your CGM transmitter status was %1 as of %2.' - , en: 'Your CGM transmitter status was %1 as of %2.' - , es: 'Your CGM transmitter status was %1 as of %2.' - , fi: 'Your CGM transmitter status was %1 as of %2.' - , fr: 'Your CGM transmitter status was %1 as of %2.' - , he: 'Your CGM transmitter status was %1 as of %2.' - , hr: 'Your CGM transmitter status was %1 as of %2.' - , it: 'Your CGM transmitter status was %1 as of %2.' - , ko: 'Your CGM transmitter status was %1 as of %2.' - , nb: 'Your CGM transmitter status was %1 as of %2.' - , nl: 'Your CGM transmitter status was %1 as of %2.' - , pl: 'Your CGM transmitter status was %1 as of %2.' - , pt: 'Your CGM transmitter status was %1 as of %2.' - , ro: 'Your CGM transmitter status was %1 as of %2.' - , ru: 'Your CGM transmitter status was %1 as of %2.' - , sk: 'Your CGM transmitter status was %1 as of %2.' - , sv: 'Your CGM transmitter status was %1 as of %2.' - , tr: 'Your CGM transmitter status was %1 as of %2.' - , zh_cn: 'Your CGM transmitter status was %1 as of %2.' - , zh_tw: 'Your CGM transmitter status was %1 as of %2.' - , hu: 'A CGM jeladód státusza %1 volt %2-kor' - }, - 'virtAsstCGMTxAge': { - bg: 'Your CGM transmitter is %1 days old.' - , cs: 'Your CGM transmitter is %1 days old.' - , de: 'Your CGM transmitter is %1 days old.' - , dk: 'Your CGM transmitter is %1 days old.' - , el: 'Your CGM transmitter is %1 days old.' - , en: 'Your CGM transmitter is %1 days old.' - , es: 'Your CGM transmitter is %1 days old.' - , fi: 'Your CGM transmitter is %1 days old.' - , fr: 'Your CGM transmitter is %1 days old.' - , he: 'Your CGM transmitter is %1 days old.' - , hr: 'Your CGM transmitter is %1 days old.' - , it: 'Your CGM transmitter is %1 days old.' - , ko: 'Your CGM transmitter is %1 days old.' - , nb: 'Your CGM transmitter is %1 days old.' - , nl: 'Your CGM transmitter is %1 days old.' - , pl: 'Your CGM transmitter is %1 days old.' - , pt: 'Your CGM transmitter is %1 days old.' - , ro: 'Your CGM transmitter is %1 days old.' - , ru: 'Your CGM transmitter is %1 days old.' - , sk: 'Your CGM transmitter is %1 days old.' - , sv: 'Your CGM transmitter is %1 days old.' - , tr: 'Your CGM transmitter is %1 days old.' - , zh_cn: 'Your CGM transmitter is %1 days old.' - , zh_tw: 'Your CGM transmitter is %1 days old.' - , hu: 'A CGM jeladód %1 napos.' - }, - 'virtAsstCGMNoise': { - bg: 'Your CGM noise was %1 as of %2.' - , cs: 'Your CGM noise was %1 as of %2.' - , de: 'Your CGM noise was %1 as of %2.' - , dk: 'Your CGM noise was %1 as of %2.' - , el: 'Your CGM noise was %1 as of %2.' - , en: 'Your CGM noise was %1 as of %2.' - , es: 'Your CGM noise was %1 as of %2.' - , fi: 'Your CGM noise was %1 as of %2.' - , fr: 'Your CGM noise was %1 as of %2.' - , he: 'Your CGM noise was %1 as of %2.' - , hr: 'Your CGM noise was %1 as of %2.' - , it: 'Your CGM noise was %1 as of %2.' - , ko: 'Your CGM noise was %1 as of %2.' - , nb: 'Your CGM noise was %1 as of %2.' - , nl: 'Your CGM noise was %1 as of %2.' - , pl: 'Your CGM noise was %1 as of %2.' - , pt: 'Your CGM noise was %1 as of %2.' - , ro: 'Your CGM noise was %1 as of %2.' - , ru: 'Your CGM noise was %1 as of %2.' - , sk: 'Your CGM noise was %1 as of %2.' - , sv: 'Your CGM noise was %1 as of %2.' - , tr: 'Your CGM noise was %1 as of %2.' - , zh_cn: 'Your CGM noise was %1 as of %2.' - , zh_tw: 'Your CGM noise was %1 as of %2.' - , hu: 'A CGM jeladó zaja %1 volt %2-kor' - }, - 'virtAsstCGMBattOne': { - bg: 'Your CGM battery was %1 volts as of %2.' - , cs: 'Your CGM battery was %1 volts as of %2.' - , de: 'Your CGM battery was %1 volts as of %2.' - , dk: 'Your CGM battery was %1 volts as of %2.' - , el: 'Your CGM battery was %1 volts as of %2.' - , en: 'Your CGM battery was %1 volts as of %2.' - , es: 'Your CGM battery was %1 volts as of %2.' - , fi: 'Your CGM battery was %1 volts as of %2.' - , fr: 'Your CGM battery was %1 volts as of %2.' - , he: 'Your CGM battery was %1 volts as of %2.' - , hr: 'Your CGM battery was %1 volts as of %2.' - , it: 'Your CGM battery was %1 volts as of %2.' - , ko: 'Your CGM battery was %1 volts as of %2.' - , nb: 'Your CGM battery was %1 volts as of %2.' - , nl: 'Your CGM battery was %1 volts as of %2.' - , pl: 'Your CGM battery was %1 volts as of %2.' - , pt: 'Your CGM battery was %1 volts as of %2.' - , ro: 'Your CGM battery was %1 volts as of %2.' - , ru: 'Your CGM battery was %1 volts as of %2.' - , sk: 'Your CGM battery was %1 volts as of %2.' - , sv: 'Your CGM battery was %1 volts as of %2.' - , tr: 'Your CGM battery was %1 volts as of %2.' - , zh_cn: 'Your CGM battery was %1 volts as of %2.' - , zh_tw: 'Your CGM battery was %1 volts as of %2.' - , hu: 'A CGM töltöttsége %1 VOLT volt %2-kor' - }, - 'virtAsstCGMBattTwo': { - bg: 'Your CGM battery levels were %1 volts and %2 volts as of %3.' - , cs: 'Your CGM battery levels were %1 volts and %2 volts as of %3.' - , de: 'Your CGM battery levels were %1 volts and %2 volts as of %3.' - , dk: 'Your CGM battery levels were %1 volts and %2 volts as of %3.' - , el: 'Your CGM battery levels were %1 volts and %2 volts as of %3.' - , en: 'Your CGM battery levels were %1 volts and %2 volts as of %3.' - , es: 'Your CGM battery levels were %1 volts and %2 volts as of %3.' - , fi: 'Your CGM battery levels were %1 volts and %2 volts as of %3.' - , fr: 'Your CGM battery levels were %1 volts and %2 volts as of %3.' - , he: 'Your CGM battery levels were %1 volts and %2 volts as of %3.' - , hr: 'Your CGM battery levels were %1 volts and %2 volts as of %3.' - , it: 'Your CGM battery levels were %1 volts and %2 volts as of %3.' - , ko: 'Your CGM battery levels were %1 volts and %2 volts as of %3.' - , nb: 'Your CGM battery levels were %1 volts and %2 volts as of %3.' - , nl: 'Your CGM battery levels were %1 volts and %2 volts as of %3.' - , pl: 'Your CGM battery levels were %1 volts and %2 volts as of %3.' - , pt: 'Your CGM battery levels were %1 volts and %2 volts as of %3.' - , ro: 'Your CGM battery levels were %1 volts and %2 volts as of %3.' - , ru: 'Your CGM battery levels were %1 volts and %2 volts as of %3.' - , sk: 'Your CGM battery levels were %1 volts and %2 volts as of %3.' - , sv: 'Your CGM battery levels were %1 volts and %2 volts as of %3.' - , tr: 'Your CGM battery levels were %1 volts and %2 volts as of %3.' - , zh_cn: 'Your CGM battery levels were %1 volts and %2 volts as of %3.' - , zh_tw: 'Your CGM battery levels were %1 volts and %2 volts as of %3.' - , hu: 'A CGM töltöttsége %1 és %2 VOLT volt %3-kor' - }, - 'virtAsstDelta': { - bg: 'Your delta was %1 between %2 and %3.' - , cs: 'Your delta was %1 between %2 and %3.' - , de: 'Dein Delta war %1 zwischen %2 und %3.' - , dk: 'Your delta was %1 between %2 and %3.' - , el: 'Your delta was %1 between %2 and %3.' - , en: 'Your delta was %1 between %2 and %3.' - , es: 'Your delta was %1 between %2 and %3.' - , fi: 'Your delta was %1 between %2 and %3.' - , fr: 'Your delta was %1 between %2 and %3.' - , he: 'Your delta was %1 between %2 and %3.' - , hr: 'Your delta was %1 between %2 and %3.' - , it: 'Your delta was %1 between %2 and %3.' - , ko: 'Your delta was %1 between %2 and %3.' - , nb: 'Your delta was %1 between %2 and %3.' - , nl: 'Your delta was %1 between %2 and %3.' - , pl: 'Your delta was %1 between %2 and %3.' - , pt: 'Your delta was %1 between %2 and %3.' - , ro: 'Your delta was %1 between %2 and %3.' - , ru: 'Дельта была %1 между %2 и %3.' - , sk: 'Your delta was %1 between %2 and %3.' - , sv: 'Your delta was %1 between %2 and %3.' - , tr: 'Your delta was %1 between %2 and %3.' - , zh_cn: 'Your delta was %1 between %2 and %3.' - , zh_tw: 'Your delta was %1 between %2 and %3.' - , hu: 'A deltád %1 volt %2 és %3 között' - }, - 'virtAsstUnknownIntentTitle': { - en: 'Unknown Intent' - , cs: 'Unknown Intent' - , de: 'Unbekannte Absicht' - , dk: 'Unknown Intent' - , ko: 'Unknown Intent' - , nl: 'Unknown Intent' - , zh_cn: 'Unknown Intent' - , sv: 'Unknown Intent' - , fi: 'Unknown Intent' - , ro: 'Unknown Intent' - , bg: 'Unknown Intent' - , hr: 'Unknown Intent' - , pl: 'Unknown Intent' - , ru: 'Неизвестное намерение' - , tr: 'Ismeretlen szándék' - }, - 'virtAsstUnknownIntentText': { - en: 'I\'m sorry, I don\'t know what you\'re asking for.' - , cs: 'I\'m sorry, I don\'t know what you\'re asking for.' - , de: 'Tut mir leid, ich hab deine Frage nicht verstanden.' - , dk: 'I\'m sorry, I don\'t know what you\'re asking for.' - , ko: 'I\'m sorry, I don\'t know what you\'re asking for.' - , nl: 'I\'m sorry, I don\'t know what you\'re asking for.' - , zh_cn: 'I\'m sorry, I don\'t know what you\'re asking for.' - , sv: 'I\'m sorry, I don\'t know what you\'re asking for.' - , fi: 'I\'m sorry, I don\'t know what you\'re asking for.' - , ro: 'I\'m sorry, I don\'t know what you\'re asking for.' - , bg: 'I\'m sorry, I don\'t know what you\'re asking for.' - , hr: 'I\'m sorry, I don\'t know what you\'re asking for.' - , pl: 'I\'m sorry, I don\'t know what you\'re asking for.' - , ru: 'Ваш запрос непонятен' - , tr: 'I\'m sorry, I don\'t know what you\'re asking for.' - , hu: 'Sajnálom, nem tudom mit szeretnél tőlem.' - }, - 'Fat [g]': { - cs: 'Tuk [g]' - ,de: 'Fett [g]' - ,dk: 'Fet [g]' - ,es: 'Grasas [g]' - ,fi: 'Rasva [g]' - ,fr: 'Graisses [g]' - ,ko: 'Fat [g]' - ,nl: 'Vet [g]' - ,zh_cn: '脂肪[g]' - ,ro: 'Grăsimi [g]' - ,ru: 'жиры [g]' - ,it: 'Grassi [g]' - ,sv: 'Fett [g]' - ,bg: 'Мазнини [гр]' - ,hr: 'Masnoće [g]' - ,pl: 'Tłuszcz [g]' - ,tr: 'Yağ [g]' - ,he: '[g] שמן' - ,hu: 'Zsír [g]' - }, - 'Protein [g]': { - cs: 'Proteiny [g]' - ,de: 'Proteine [g]' - ,dk: 'Protein [g]' - ,es: 'Proteina [g]' - ,fi: 'Proteiini [g]' - ,fr: 'Protéines [g]' - ,ko: 'Protein [g]' - ,nl: 'Proteine [g]' - ,zh_cn: '蛋白质[g]' - ,ro: 'Proteine [g]' - ,ru: 'белки [g]' - ,it: 'Proteine [g]' - ,sv: 'Protein [g]' - ,bg: 'Протеини [гр]' - ,hr: 'Proteini [g]' - ,pl: 'Białko [g]' - ,tr: 'Protein [g]' - ,he: '[g] חלבון' - ,hu: 'Protein [g]' - }, - 'Energy [kJ]': { - cs: 'Energie [kJ]' - ,de: 'Energie [kJ]' - ,dk: 'Energi [kJ]' - ,fi: 'Energia [kJ]' - ,es: 'Energía [Kj]' - ,fr: 'Énergie [kJ]' - ,ro: 'Energie [g]' - ,ru: 'энергия [kJ]' - ,it: 'Energia [kJ]' - ,zh_cn: '能量 [kJ]' - ,ko: 'Energy [kJ]' - ,nl: 'Energie [kJ]' - ,sv: 'Energi [kJ]' - ,bg: 'Енергия [kJ]' - ,hr: 'Energija [kJ]' - ,pl: 'Energia [kJ}' - ,tr: 'Enerji [kJ]' - ,he: '[kJ] אנרגיה' - ,hu: 'Energia [kJ]' - }, - 'Clock Views:': { - cs: 'Hodiny:' - ,fi: 'Kellonäkymä:' - ,ko: '시계 보기' - ,nl: 'Klokweergave:' - ,es: 'Vista del reloj:' - ,fr: 'Vue Horloge:' - ,ro: 'Vedere tip ceas:' - ,ru: 'цифры крупно:' - ,it: 'Vista orologio:' - ,zh_cn: '时钟视图' - ,sv: 'Visa klocka:' - ,de: 'Uhr-Anzeigen' - ,dk: 'Vis klokken:' - ,bg: 'Часовник изглед:' - ,hr: 'Satovi:' - ,pl: 'Widoki zegarów' - ,tr: 'Saat Görünümü' - ,he: 'צגים השעון' - ,hu: 'Óra:' - }, - 'Clock': { - cs: 'Hodiny' - ,fr: 'L\'horloge' - ,ko: '시계모드' - ,nl: 'Klok' - ,zh_cn: '时钟' - ,sv: 'Klocka' - ,de: 'Uhr' - ,dk: 'Klokken' - ,fi: 'Kello' - ,ro: 'Ceas' - ,it: 'Orologio' - ,bg: 'Часовник' - ,hr: 'Sat' - ,pl: 'Zegar' - ,ru: 'часы' - ,tr: 'Saat' - ,he: 'שעון' - ,hu: 'Óra:' - }, - 'Color': { - cs: 'Barva' - ,fr: 'Couleur' - ,ko: '색상모드' - ,nl: 'Kleur' - ,zh_cn: '彩色' - ,sv: 'Färg' - ,de: 'Farbe' - ,dk: 'Farve' - ,fi: 'Väri' - ,ro: 'Culoare' - ,it: 'Colore' - ,bg: 'Цвят' - ,hr: 'Boja' - ,pl: 'Kolor' - ,ru: 'цвет' - ,tr: 'Renk' - ,he: 'צבע' - ,hu: 'Szinek' - }, - 'Simple': { - cs: 'Jednoduchý' - ,fr: 'Simple' - ,ko: '간편 모드' - ,nl: 'Simpel' - ,zh_cn: '简单' - ,sv: 'Simpel' - ,de: 'Einfach' - ,dk: 'Simpel' - ,fi: 'Yksinkertainen' - ,ro: 'Simplu' - ,it: 'Semplice' - ,bg: 'Прост' - ,hr: 'Jednostavan' - ,pl: 'Prosty' - ,ru: 'простой' - ,tr: 'Basit' - ,he: 'פשוט' - ,hu: 'Csak cukor' - }, - 'TDD average': { - cs: 'Průměrná denní dávka' - , fi: 'Päivän kokonaisinsuliinin keskiarvo' - , ko: 'TDD average' - , nl: 'Gemiddelde dagelijkse insuline (TDD)' - ,zh_cn: '日胰岛素用量平均值' - , sv: 'Genomsnittlig daglig mängd insulin' - , de: 'durchschnittliches Insulin pro Tag (TDD)' - , dk: 'Gennemsnitlig daglig mængde insulin' - , ro: 'Media Dozei Zilnice Totale de insulină (TDD)' - , it: 'Totale Dose Giornaliera media (TDD)' - , bg: 'Обща дневна доза средно' - , hr: 'Srednji TDD' - , pl: 'Średnia dawka dzienna' - , ru: 'средняя суточная доза инсулина' - , tr: 'Ortalama günlük Toplam Doz (TDD)' - , hu: 'Átlagos napi adag (TDD)' - }, - 'Carbs average': { - cs: 'Průměrné množství sacharidů' - , fi: 'Hiilihydraatit keskiarvo' - , ko: 'Carbs average' - , nl: 'Gemiddelde koolhydraten per dag' - ,zh_cn: '碳水化合物平均值' - , sv: 'Genomsnittlig mängd kolhydrater per dag' - , de: 'durchschnittliche Kohlenhydrate pro Tag' - , dk: 'Gennemsnitlig mængde kulhydrater per dag' - , ro: 'Media carbohidraților' - , it: 'Media carboidrati' - , bg: 'Въглехидрати средно' - , hr: 'Prosjek UGH' - , pl: 'Średnia ilość węglowodanów' - , ru: 'среднее кол-во углеводов за сутки' - , tr: 'Günde ortalama karbonhidrat' - , he: 'פחמימות ממוצע' - , hu: 'Szenhidrát átlag' - }, - 'Eating Soon': { - cs: 'Blížící se jídlo' - , fi: 'Ruokailu pian' - , ko: 'Eating Soon' - , nl: 'Pre-maaltijd modus' - ,zh_cn: '过会吃饭' - , sv: 'Äter snart' - , de: 'Bald Essen' - , dk: 'Spiser snart' - , ro: 'Mâncare în curând' - , it: 'Mangiare presto' - , bg: 'Преди хранене' - , hr: 'Uskoro obrok' - , pl: 'Przed jedzeniem' - , ru: 'Ожидаемый прием пищи' - , tr: 'Yakında Yenecek' - , he: 'אוכל בקרוב' - , hu: 'Hamarosan evés' - }, - 'Last entry {0} minutes ago': { - cs: 'Poslední hodnota {0} minut zpět' - , fi: 'Edellinen verensokeri {0} minuuttia sitten' - , ko: 'Last entry {0} minutes ago' - , nl: 'Laatste waarde {0} minuten geleden' - ,zh_cn: '最后一个条目 {0} 分钟之前' - , sv: 'Senaste värde {0} minuter sedan' - , de: 'Letzter Eintrag vor {0} Minuten' - , dk: 'Seneste værdi {0} minutter siden' - , ro: 'Ultima înregistrare acum {0} minute' - , it: 'Ultimo inserimento {0} minuti fa' - , bg: 'Последен запис преди {0} минути' - , hr: 'Posljednji zapis prije {0} minuta' - , pl: 'Ostatni wpis przed {0} minutami' - , ru: 'предыдущая запись {0} минут назад' - , tr: 'Son giriş {0} dakika önce' - , hu: 'Utolsó bejegyzés {0} volt' - }, - 'change': { - cs: 'změna' - , fi: 'muutos' - , ko: 'change' - , nl: 'wijziging' - ,zh_cn: '改变' - , sv: 'byta' - , de: 'verändern' - , dk: 'ændre' - , ro: 'schimbare' - , it: 'cambio' - , bg: 'промяна' - , hr: 'promjena' - , pl: 'zmiana' - , ru: 'замена' - , tr: 'değişiklik' - , he: 'שינוי' - , hu: 'változás' - }, - 'Speech': { - cs: 'Hlas' - , fi: 'Puhe' - , ko: 'Speech' - , nl: 'Spraak' - ,zh_cn: '朗读' - , sv: 'Tal' - , de: 'Sprache' - , dk: 'Tale' - , ro: 'Vorbă' - , it: 'Voce' - , bg: 'Глас' - , hr: 'Govor' - , pl: 'Głos' - , ru: 'речь' - , tr: 'Konuş' - , he: 'דיבור' - , hu: 'Beszéd' - }, - 'Target Top': { - cs: 'Horní cíl' - , dk: 'Højt mål' - , fi: 'Tavoite ylä' - , ko: 'Target Top' - , nl: 'Hoog tijdelijk doel' - , ro: 'Țintă superioară' - , it: 'Limite superiore' - ,zh_cn: '目标高值' - , sv: 'Högt målvärde' - , bg: 'Горна граница' - , hr: 'Gornja granica' - , pl: 'Górny limit' - , ru: 'верхняя граница цели' - , de: 'Oberes Ziel' - , tr: 'Hedef Üst' - , he: 'ראש היעד' - , hu: 'Felsó cél' - }, - 'Target Bottom': { - cs: 'Dolní cíl' - , dk: 'Lavt mål' - , fi: 'Tavoite ala' - , ko: 'Target Bottom' - , nl: 'Laag tijdelijk doel' - ,zh_cn: '目标低值' - , ro: 'Țintă inferioară' - , it: 'Limite inferiore' - , sv: 'Lågt målvärde' - , bg: 'Долна граница' - , hr: 'Donja granica' - , pl: 'Dolny limit' - , ru: 'нижняя граница цели' - , de: 'Unteres Ziel' - , tr: 'Hedef Alt' - , he: 'תחתית היעד' - , hu: 'Alsó cél' - }, - 'Canceled': { - cs: 'Zrušený' - , dk: 'Afbrudt' - , fi: 'Peruutettu' - , ko: 'Canceled' - , nl: 'Geannuleerd' - ,zh_cn: '被取消了' - , ro: 'Anulat' - , it: 'Cancellato' - , sv: 'Avbruten' - , bg: 'Отказан' - , hr: 'Otkazano' - , pl: 'Anulowane' - , ru: 'отменено' - , de: 'Abgebrochen' - , tr: 'İptal edildi' - , he: 'מבוטל' - , hu: 'Megszüntetett' - }, - 'Meter BG': { - cs: 'Hodnota z glukoměru' - , dk: 'Blodsukkermåler BS' - , fi: 'Mittarin VS' - , ko: 'Meter BG' - , nl: 'Bloedglucosemeter waarde' - ,zh_cn: '指血血糖值' - , ro: 'Glicemie din glucometru' - , it: 'Glicemia Capillare' - , sv: 'Blodsockermätare BG' - , bg: 'Измерена КЗ' - , hr: 'GUK iz krvi' - , pl: 'Glikemia z krwi' - , ru: 'ГК по глюкометру' - , de: 'Wert Blutzuckermessgerät' - , tr: 'Glikometre KŞ' - , he: 'סוכר הדם של מד' - , hu: 'Cukorszint a mérőből' - }, - 'predicted': { - cs: 'přepověď' - , dk: 'forudset' - , fi: 'ennuste' - , ko: 'predicted' - , nl: 'verwachting' - ,zh_cn: '预测' - , ro: 'estimat' - , it: 'predetto' - , sv: 'prognos' - ,bg: 'прогнозна' - , hr: 'prognozirano' - , pl: 'prognoza' - , ru: 'прогноз' - , de: 'vorhergesagt' - , tr: 'tahmin' - , he: 'חזה' - , hu: 'előrejelzés' - }, - 'future': { - cs: 'budoucnost' - , dk: 'fremtidige' - , fi: 'tulevaisuudessa' - , ko: 'future' - , nl: 'toekomstig' - ,zh_cn: '将来' - , ro: 'viitor' - , it: 'futuro' - , sv: 'framtida' - , bg: 'бъдеще' - , hr: 'budućnost' - , pl: 'przyszłość' - , ru: 'будущее' - , de: 'Zukunft' - , tr: 'gelecek' - , he: 'עתיד' - , hu: 'jövő' - }, - 'ago': { - cs: 'zpět' - , dk: 'siden' - , fi: 'sitten' - , ko: 'ago' - , nl: 'geleden' - ,zh_cn: '之前' - , ro: 'în trecut' - , sv: 'förfluten' - , bg: 'преди' - , hr: 'prije' - , pl: 'temu' - , ru: 'в прошлом' - , de: 'vor' - , tr: 'önce' - , he: 'לפני' - , hu: 'ezelött' - }, - 'Last data received': { - cs: 'Poslední data přiajata' - , dk: 'Sidste data modtaget' - , fi: 'Tietoa vastaanotettu viimeksi' - , ko: 'Last data received' - , nl: 'Laatste gegevens ontvangen' - ,zh_cn: '上次收到数据' - , ro: 'Ultimele date primite' - , it: 'Ultimo dato ricevuto' - , sv: 'Data senast mottagen' - , bg: 'Последни данни преди' - , hr: 'Podaci posljednji puta primljeni' - , pl: 'Ostatnie otrzymane dane' - , ru: 'прошлые данные получены' - , de: 'Zuletzt Daten empfangen' - , tr: 'Son veri alındı' - , he: 'הנתונים המקבל אחרונים' - , hu: 'Utólsó adatok fogadva' - }, - 'Clock View': { - cs: 'Hodiny' - ,dk: 'Vis klokken' - ,fi: 'Kellonäkymä' - ,es: 'Vista del reloj' - ,fr: 'Vue Horloge' - ,ro: 'Vedere tip ceas' - ,ru: 'вид циферблата' - ,ko: 'Clock View' - ,it: 'Vista orologio' - ,sv: 'Visa klocka' - ,bg: 'Изглед часовник' - ,hr: 'Prikaz sata' - ,nl: 'Klokweergave' - ,zh_cn: '时钟视图' - ,de: 'Uhr-Anzeigen' - ,pl: 'Widok zegara' - ,tr: 'Saat Görünümü' - ,he: 'צג השעון' - ,hu: 'Idő' - }, - 'Protein': { - fi: 'Proteiini' - ,de: 'Protein' - ,tr: 'Protein' - ,hr: 'Proteini' - , pl: 'Białko' - ,ru: 'Белки' - ,he: 'חלבון' - ,nl: 'Eiwit' - ,hu: 'Protein' - }, - 'Fat': { - fi: 'Rasva' - ,de: 'Fett' - ,tr: 'Yağ' - ,hr: 'Masti' - , pl: 'Tłuszcz' - ,ru: 'Жиры' - ,he: 'שמן' - ,nl: 'Vet' - ,hu: 'Zsír' - }, - 'Protein average': { - fi: 'Proteiini keskiarvo' - ,de: 'Proteine Durchschnitt' - ,tr: 'Protein Ortalaması' - ,hr: 'Prosjek proteina' - , pl: 'Średnia białka' - ,ru: 'Средний белок' - ,he: 'חלבון ממוצע' - ,nl: 'eiwitgemiddelde' - ,hu: 'Protein átlag' - }, - 'Fat average': { - fi: 'Rasva keskiarvo' - ,de: 'Fett Durchschnitt' - ,tr: 'Yağ Ortalaması' - ,hr: 'Prosjek masti' - , pl: 'Średnia tłuszczu' - ,ru: 'Средний жир' - ,he: 'שמן ממוצע' - ,nl: 'Vetgemiddelde' - ,hu: 'Zsír átlag' - }, - 'Total carbs': { - fi: 'Hiilihydraatit yhteensä' - , de: 'Kohlenhydrate gesamt' - ,tr: 'Toplam Karbonhidrat' - ,hr: 'Ukupno ugh' - , pl: 'Węglowodany ogółem' - ,ru: 'Всего углеводов' - ,he: 'כל פחמימות' - ,nl: 'Totaal koolhydraten' - ,hu: 'Összes szénhidrát' - }, - 'Total protein': { - fi: 'Proteiini yhteensä' - , de: 'Protein gesamt' - ,tr: 'Toplam Protein' - ,hr: 'Ukupno proteini' - , pl: 'Białko ogółem' - ,ru: 'Всего белков' - ,he: 'כל חלבונים' - ,nl: 'Totaal eiwitten' - ,hu: 'Összes protein' - }, - 'Total fat': { - fi: 'Rasva yhteensä' - , de: 'Fett gesamt' - ,tr: 'Toplam Yağ' - ,hr: 'Ukupno masti' - , pl: 'Tłuszcz ogółem' - ,ru: 'Всего жиров' - ,he: 'כל שומנים' - ,nl: 'Totaal vetten' - ,hu: 'Összes zsír' - }, - 'Database Size': { - pl: 'Rozmiar Bazy Danych' - ,nl: 'Grootte database' - ,de: 'Datenbankgröße' - ,hu: 'Adatbázis mérete' - }, - 'Database Size near its limits!': { - pl: 'Rozmiar bazy danych zbliża się do limitu!' - ,nl: 'Database grootte nadert limiet!' - ,de: 'Datenbank fast voll!' - ,hu: 'Az adatbázis majdnem megtelt!' - }, - 'Database size is %1 MiB out of %2 MiB. Please backup and clean up database!': { - pl: 'Baza danych zajmuje %1 MiB z dozwolonych %2 MiB. Proszę zrób kopię zapasową i oczyść bazę danych!' - ,nl: 'Database grootte is %1 MiB van de %2 MiB. Maak een backup en verwijder oude data' - ,de: 'Die Datenbankgröße beträgt %1 MiB von %2 MiB. Bitte sichere deine Daten und bereinige die Datenbank!' - ,hu: 'Az adatbázis mérete %1 MiB a rendelkezésre álló %2 MiB-ból. Készítsen biztonsági másolatot!' - }, - 'Database file size': { - pl: 'Rozmiar pliku bazy danych' - ,nl: 'Database bestandsgrootte' - ,de: 'Datenbank-Dateigröße' - ,hu: 'Adatbázis file mérete' - }, - '%1 MiB of %2 MiB (%3%)': { - pl: '%1 MiB z %2 MiB (%3%)' - ,nl: '%1 MiB van de %2 MiB (%3%)' - ,de: '%1 MiB von %2 MiB (%3%)' - ,hu: '%1 MiB %2 MiB-ból (%3%)' - }, - 'Data size': { - pl: 'Rozmiar danych' - ,nl: 'Datagrootte' - ,de: 'Datengröße' - ,hu: 'Adatok mérete' - }, - 'virtAsstDatabaseSize': { - en: '%1 MiB. That is %2% of available database space.' - ,pl: '%1 MiB co stanowi %2% przestrzeni dostępnej dla bazy danych' - ,nl: '%1 MiB dat is %2% van de beschikbaare database ruimte' - ,de: '%1 MiB. Das sind %2% des verfügbaren Datenbank-Speicherplatzes.' - ,hu: '%1 MiB ami %2% a rendelkezésre álló méretből' - }, - 'virtAsstTitleDatabaseSize': { - en: 'Database file size' - ,pl: 'Rozmiar pliku bazy danych' - ,nl: 'Database bestandsgrootte' - ,de: 'Datenbank-Dateigröße' - ,hu: 'Adatbázis file méret' - } - }; + var translations = {}; language.translations = translations; + language.offerTranslations = function offerTranslations (localization) { + translations = localization; + language.translations = translations; + } // case sensitive - language.translateCS = function translateCaseSensitive(text) { - if (translations[text] && translations[text][language.lang]) { - return translations[text][language.lang]; + language.translateCS = function translateCaseSensitive (text) { + if (translations[text]) { + return translations[text]; } + // console.log('localization:', text, 'not found'); return text; }; // case insensitive - language.translateCI = function translateCaseInsensitive(text) { + language.translateCI = function translateCaseInsensitive (text) { var utext = text.toUpperCase(); - _.forEach(translations, function (ts, key) { + _.forEach(translations, function(ts, key) { var ukey = key.toUpperCase(); - if (ukey === utext && ts[language.lang]) { - text = ts[language.lang]; + if (ukey === utext) { + text = ts; } }); return text; }; - language.translate = function translate(text, options) { + language.translate = function translate (text, options) { var translated; if (options && options.ci) { translated = language.translateCI(text); } else { translated = language.translateCS(text); } - if (options && options.params) { - for (var i = 0; i < options.params.length; i++) { - // eslint-disable-next-line no-useless-escape - var r = new RegExp('\%' + (i+1), 'g'); - translated = translated.replace(r, options.params[i]); + + var hasCI = false; + var hasParams = false; + + if (options) { + hasCI = Object.prototype.hasOwnProperty.call(options,'ci'); + hasParams = Object.prototype.hasOwnProperty.call(options,'params'); + } + + var keys = hasParams ? options.params : null; + + if (options && !hasCI && !hasParams) { + keys = []; + for (var i = 1; i < arguments.length; i++) { + keys.push(arguments[i]); + } + } + + if (options && (hasCI || hasParams) && arguments.length > 2) { + if (!keys) keys = []; + for (i = 2; i < arguments.length; i++) { + keys.push(arguments[i]); + } + } + + if (keys) { + for (i = 0; i < keys.length; i++) { + /* eslint-disable-next-line no-useless-escape, security/detect-non-literal-regexp */ // validated false positive + var r = new RegExp('\%' + (i + 1), 'g'); + translated = translated.replace(r, keys[i]); } } + return translated; }; - language.DOMtranslate = function DOMtranslate($) { + language.DOMtranslate = function DOMtranslate ($) { // do translation of static text on load - $('.translate').each(function () { + $('.translate').each(function() { $(this).text(language.translate($(this).text())); - }); - $('.titletranslate, .tip').each(function () { - $(this).attr('title',language.translate($(this).attr('title'))); - $(this).attr('original-title',language.translate($(this).attr('original-title'))); - $(this).attr('placeholder',language.translate($(this).attr('placeholder'))); - }); + }); + $('.titletranslate, .tip').each(function() { + $(this).attr('title', language.translate($(this).attr('title'))); + $(this).attr('original-title', language.translate($(this).attr('original-title'))); + $(this).attr('placeholder', language.translate($(this).attr('placeholder'))); + }); }; - language.set = function set(newlang) { + language.getFilename = function getFilename (code) { + + if (code == 'en') { + return 'en/en.json'; + } + + let file; + language.languages.forEach(function(l) { + if (l.code == code) file = l.file; + }); + return file + '.json'; + } + + // this is a server only call and needs fs by reference as the class is also used in the client + language.loadLocalization = function loadLocalization (fs, path) { + let filename = './translations/' + this.getFilename(this.lang); + if (path) filename = path.resolve(__dirname, filename); + /* eslint-disable-next-line security/detect-non-literal-fs-filename */ // verified false positive; well defined set of values + const l = fs.readFileSync(filename); + this.offerTranslations(JSON.parse(l)); + } + + language.set = function set (newlang) { + if (!newlang) return; language.lang = newlang; - language.languages.forEach(function (l) { + language.languages.forEach(function(l) { if (l.code === language.lang && l.speechCode) language.speechCode = l.speechCode; }); return language(); }; + language.get = function get (lang) { + var r; + language.languages.forEach(function(l) { + if (l.code === lang) r = l; + }); + return r; + } + + // if run on server and we get a filesystem handle, load english by default + if (fs) { + language.set('en'); + language.loadLocalization(fs); + } + return language(); } diff --git a/lib/levels.js b/lib/levels.js index 94dac71416c..6602e64afea 100644 --- a/lib/levels.js +++ b/lib/levels.js @@ -1,12 +1,14 @@ 'use strict'; +var constants = require('./constants'); + var levels = { - URGENT: 2 - , WARN: 1 - , INFO: 0 - , LOW: -1 - , LOWEST: -2 - , NONE: -3 + URGENT: constants.LEVEL_URGENT + , WARN: constants.LEVEL_WARN + , INFO: constants.LEVEL_INFO + , LOW: constants.LEVEL_LOW + , LOWEST: constants.LEVEL_LOWEST + , NONE: constants.LEVEL_NONE }; levels.language = require('./language')(); diff --git a/lib/notifications.js b/lib/notifications.js index b4a8767afbe..9b6adab3ac4 100644 --- a/lib/notifications.js +++ b/lib/notifications.js @@ -1,8 +1,6 @@ 'use strict'; var _ = require('lodash'); -var levels = require('./levels'); - var THIRTY_MINUTES = 30 * 60 * 1000; var DEFAULT_GROUPS = ['default']; @@ -18,6 +16,7 @@ var Alarm = function(level, group, label) { var alarms = {}; function init (env, ctx) { + function notifications () { return notifications; } @@ -26,7 +25,7 @@ function init (env, ctx) { var key = level + '-' + group; var alarm = alarms[key]; if (!alarm) { - var display = group === 'default' ? levels.toDisplay(level) : group + ':' + level; + var display = group === 'default' ? ctx.levels.toDisplay(level) : group + ':' + level; alarm = new Alarm(level, group, display); alarms[key] = alarm; } @@ -83,12 +82,12 @@ function init (env, ctx) { notifications.findHighestAlarm = function findHighestAlarm (group) { group = group || 'default'; var filtered = _.filter(requests.notifies, { group: group }); - return _.find(filtered, { level: levels.URGENT }) || _.find(filtered, { level: levels.WARN }); + return _.find(filtered, { level: ctx.levels.URGENT }) || _.find(filtered, { level: ctx.levels.WARN }); }; notifications.findUnSnoozeable = function findUnSnoozeable () { return _.filter(requests.notifies, function(notify) { - return notify.level <= levels.INFO || notify.isAnnouncement; + return notify.level <= ctx.levels.INFO || notify.isAnnouncement; }); }; @@ -190,7 +189,7 @@ function init (env, ctx) { var notify = { clear: true , title: 'All Clear' - , message: group + ' - ' + levels.toDisplay(level) + ' was ack\'d' + , message: group + ' - ' + ctx.levels.toDisplay(level) + ' was ack\'d' , group: group }; ctx.bus.emit('notification', notify); @@ -225,7 +224,7 @@ function init (env, ctx) { function notifyToView (notify) { return { - level: levels.toDisplay(notify.level) + level: ctx.levels.toDisplay(notify.level) , title: notify.title , message: notify.message , group: notify.group @@ -236,7 +235,7 @@ function init (env, ctx) { function snoozeToView (snooze) { return { - level: levels.toDisplay(snooze.level) + level: ctx.levels.toDisplay(snooze.level) , title: snooze.title , message: snooze.message , group: snooze.group @@ -244,7 +243,7 @@ function init (env, ctx) { } function logEmitEvent (notify) { - var type = notify.level >= levels.WARN ? 'ALARM' : (notify.clear ? 'ALL CLEAR' : 'NOTIFICATION'); + var type = notify.level >= ctx.levels.WARN ? 'ALARM' : (notify.clear ? 'ALL CLEAR' : 'NOTIFICATION'); console.info([ logTimestamp() + '\tEMITTING ' + type + ':' , ' ' + JSON.stringify(notifyToView(notify)) diff --git a/lib/plugins/batteryage.js b/lib/plugins/batteryage.js index ffdb51bc6cc..466c4faa77a 100644 --- a/lib/plugins/batteryage.js +++ b/lib/plugins/batteryage.js @@ -2,14 +2,14 @@ var _ = require('lodash'); var moment = require('moment'); -var levels = require('../levels'); function init(ctx) { var translate = ctx.language.translate; + var levels = ctx.levels; var bage = { name: 'bage' - , label: 'Pump Battery Change' + , label: 'Pump Battery Age' , pluginType: 'pill-minor' }; diff --git a/lib/plugins/bgnow.js b/lib/plugins/bgnow.js index f3d835788bf..35b96c024b4 100644 --- a/lib/plugins/bgnow.js +++ b/lib/plugins/bgnow.js @@ -85,6 +85,7 @@ function init (ctx) { }); if (bucket) { + sbx.scaleEntry(sgv); bucket.sgvs.push(sgv); } @@ -165,6 +166,11 @@ function init (ctx) { delta.mean5MinsAgo = delta.interpolated ? recent.mean - delta.absolute / delta.elapsedMins * 5 : recent.mean - delta.absolute; + delta.times = { + recent: recent.mills + , previous: previous.mills + }; + delta.mgdl = Math.round(recent.mean - delta.mean5MinsAgo); delta.scaled = sbx.settings.units === 'mmol' ? @@ -253,6 +259,31 @@ function init (ctx) { }); }; + function virtAsstDelta(next, slots, sbx) { + var delta = sbx.properties.delta; + + next( + translate('virtAsstTitleDelta') + , translate(delta.interpolated ? 'virtAsstDeltaEstimated' : 'virtAsstDelta' + , { + params: [ + delta.display == '+0' ? '0' : delta.display + , moment(delta.times.recent).from(moment(sbx.time)) + , moment(delta.times.previous).from(moment(sbx.time)) + ] + } + ) + ); + } + + bgnow.virtAsst = { + intentHandlers: [{ + intent: "MetricNow" + , metrics: ["delta"] + , intentHandler: virtAsstDelta + }] + }; + return bgnow; } diff --git a/lib/plugins/bolus.js b/lib/plugins/bolus.js new file mode 100644 index 00000000000..bc2f9a322b9 --- /dev/null +++ b/lib/plugins/bolus.js @@ -0,0 +1,22 @@ +'use strict'; + +function init () { + + var bolus = { + name: 'bolus' + , label: 'Bolus' + , pluginType: 'fake' + }; + + bolus.getPrefs = function getPrefs(sbx) { + return { + renderFormat: sbx.extendedSettings.renderFormat ? sbx.extendedSettings.renderFormat : 'default' + , renderOver: sbx.extendedSettings.renderOver ? sbx.extendedSettings.renderOver : 0 + , notifyOver: sbx.extendedSettings.notifyOver ? sbx.extendedSettings.notifyOver : 0 + }; + }; + + return bolus; +} + +module.exports = init; \ No newline at end of file diff --git a/lib/plugins/boluswizardpreview.js b/lib/plugins/boluswizardpreview.js index 6eff19dc663..3559d35760c 100644 --- a/lib/plugins/boluswizardpreview.js +++ b/lib/plugins/boluswizardpreview.js @@ -1,12 +1,12 @@ 'use strict'; var _ = require('lodash'); -var levels = require('../levels'); var times = require('../times'); function init (ctx) { var translate = ctx.language.translate; + var levels = ctx.levels; var bwp = { name: 'bwp' diff --git a/lib/plugins/cannulaage.js b/lib/plugins/cannulaage.js index 53914ac5a75..841848b9549 100644 --- a/lib/plugins/cannulaage.js +++ b/lib/plugins/cannulaage.js @@ -2,10 +2,10 @@ var _ = require('lodash'); var moment = require('moment'); -var levels = require('../levels'); function init(ctx) { var translate = ctx.language.translate; + var levels = ctx.levels; var cage = { name: 'cage' diff --git a/lib/plugins/careportal.js b/lib/plugins/careportal.js index 90f9bbd992a..2dc992341c6 100644 --- a/lib/plugins/careportal.js +++ b/lib/plugins/careportal.js @@ -15,87 +15,87 @@ function init() { return [ { val: '' , name: '' - , bg: true, insulin: true, carbs: true, protein: false, fat: false, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false + , bg: true, insulin: true, carbs: true, protein: false, fat: false, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false, sensor: false } , { val: 'BG Check' , name: 'BG Check' - , bg: true, insulin: false, carbs: false, protein: false, fat: false, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false + , bg: true, insulin: false, carbs: false, protein: false, fat: false, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false, sensor: false } , { val: 'Snack Bolus' , name: 'Snack Bolus' - , bg: true, insulin: true, carbs: true, protein: true, fat: true, prebolus: true, duration: false, percent: false, absolute: false, profile: false, split: false + , bg: true, insulin: true, carbs: true, protein: true, fat: true, prebolus: true, duration: false, percent: false, absolute: false, profile: false, split: false, sensor: false } , { val: 'Meal Bolus' , name: 'Meal Bolus' - , bg: true, insulin: true, carbs: true, protein: true, fat: true, prebolus: true, duration: false, percent: false, absolute: false, profile: false, split: false + , bg: true, insulin: true, carbs: true, protein: true, fat: true, prebolus: true, duration: false, percent: false, absolute: false, profile: false, split: false, sensor: false } , { val: 'Correction Bolus' , name: 'Correction Bolus' - , bg: true, insulin: true, carbs: false, protein: false, fat: false, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false + , bg: true, insulin: true, carbs: false, protein: false, fat: false, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false, sensor: false } , { val: 'Carb Correction' , name: 'Carb Correction' - , bg: true, insulin: false, carbs: true, protein: true, fat: true, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false + , bg: true, insulin: false, carbs: true, protein: true, fat: true, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false, sensor: false } , { val: 'Combo Bolus' , name: 'Combo Bolus' - , bg: true, insulin: true, carbs: true, protein: true, fat: true, prebolus: true, duration: true, percent: false, absolute: false, profile: false, split: true + , bg: true, insulin: true, carbs: true, protein: true, fat: true, prebolus: true, duration: true, percent: false, absolute: false, profile: false, split: true, sensor: false } , { val: 'Announcement' , name: 'Announcement' - , bg: true, insulin: false, carbs: false, protein: false, fat: false, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false + , bg: true, insulin: false, carbs: false, protein: false, fat: false, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false, sensor: false } , { val: 'Note' , name: 'Note' - , bg: true, insulin: false, carbs: false, protein: false, fat: false, prebolus: false, duration: true, percent: false, absolute: false, profile: false, split: false + , bg: true, insulin: false, carbs: false, protein: false, fat: false, prebolus: false, duration: true, percent: false, absolute: false, profile: false, split: false, sensor: false } , { val: 'Question' , name: 'Question' - , bg: true, insulin: false, carbs: false, protein: false, fat: false, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false + , bg: true, insulin: false, carbs: false, protein: false, fat: false, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false, sensor: false } , { val: 'Exercise' , name: 'Exercise' - , bg: false, insulin: false, carbs: false, protein: false, fat: false, prebolus: false, duration: true, percent: false, absolute: false, profile: false, split: false + , bg: false, insulin: false, carbs: false, protein: false, fat: false, prebolus: false, duration: true, percent: false, absolute: false, profile: false, split: false, sensor: false } , { val: 'Site Change' , name: 'Pump Site Change' - , bg: true, insulin: true, carbs: false, protein: false, fat: false, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false + , bg: true, insulin: true, carbs: false, protein: false, fat: false, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false, sensor: false } , { val: 'Sensor Start' , name: 'CGM Sensor Start' - , bg: true, insulin: false, carbs: false, protein: false, fat: false, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false + , bg: true, insulin: false, carbs: false, protein: false, fat: false, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false, sensor: true } , { val: 'Sensor Change' , name: 'CGM Sensor Insert' - , bg: true, insulin: false, carbs: false, protein: false, fat: false, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false + , bg: true, insulin: false, carbs: false, protein: false, fat: false, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false, sensor: true } , { val: 'Sensor Stop' , name: 'CGM Sensor Stop' - , bg: true, insulin: false, carbs: false, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false + , bg: true, insulin: false, carbs: false, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false, sensor: false } , { val: 'Pump Battery Change' , name: 'Pump Battery Change' - , bg: true, insulin: false, carbs: false, protein: false, fat: false, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false + , bg: true, insulin: false, carbs: false, protein: false, fat: false, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false, sensor: false } , { val: 'Insulin Change' , name: 'Insulin Cartridge Change' - , bg: true, insulin: false, carbs: false, protein: false, fat: false, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false + , bg: true, insulin: false, carbs: false, protein: false, fat: false, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false, sensor: false } , { val: 'Temp Basal Start' , name: 'Temp Basal Start' - , bg: true, insulin: false, carbs: false, protein: false, fat: false, prebolus: false, duration: true, percent: true, absolute: true, profile: false, split: false + , bg: true, insulin: false, carbs: false, protein: false, fat: false, prebolus: false, duration: true, percent: true, absolute: true, profile: false, split: false, sensor: false } , { val: 'Temp Basal End' , name: 'Temp Basal End' - , bg: true, insulin: false, carbs: false, protein: false, fat: false, prebolus: false, duration: true, percent: false, absolute: false, profile: false, split: false + , bg: true, insulin: false, carbs: false, protein: false, fat: false, prebolus: false, duration: true, percent: false, absolute: false, profile: false, split: false, sensor: false } , { val: 'Profile Switch' , name: 'Profile Switch' - , bg: true, insulin: false, carbs: false, protein: false, fat: false, prebolus: false, duration: true, percent: false, absolute: false, profile: true, split: false + , bg: true, insulin: false, carbs: false, protein: false, fat: false, prebolus: false, duration: true, percent: false, absolute: false, profile: true, split: false, sensor: false } , { val: 'D.A.D. Alert' , name: 'D.A.D. Alert' - , bg: true, insulin: false, carbs: false, protein: false, fat: false, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false + , bg: true, insulin: false, carbs: false, protein: false, fat: false, prebolus: false, duration: false, percent: false, absolute: false, profile: false, split: false, sensor: false } ]; diff --git a/lib/plugins/dbsize.js b/lib/plugins/dbsize.js index 1b6b43da8ed..9c3e0c50c35 100644 --- a/lib/plugins/dbsize.js +++ b/lib/plugins/dbsize.js @@ -1,6 +1,5 @@ 'use strict'; -var levels = require('../levels'); var _ = require('lodash'); function init (ctx) { @@ -50,7 +49,7 @@ function init (ctx) { result.totalDataSize = totalDataSize; result.dataPercentage = dataPercentage; - result.notificationLevel = levels.INFO; + result.notificationLevel = ctx.levels.INFO; result.details = { maxSize: parseFloat(maxSize.toFixed(2)) , dataSize: parseFloat(totalDataSize.toFixed(2)) @@ -64,13 +63,13 @@ function init (ctx) { var urgentSize = Math.floor((boundUrgentPercentage/100) * maxSize); if ((totalDataSize >= urgentSize)&&(boundUrgentPercentage > 0)) { - result.notificationLevel = levels.URGENT; + result.notificationLevel = ctx.levels.URGENT; } else if ((totalDataSize >= warnSize)&&(boundWarnPercentage > 0)) { - result.notificationLevel = levels.WARN; + result.notificationLevel = ctx.levels.WARN; } result.display = prefs.inMib ? parseFloat(totalDataSize.toFixed(0)) + 'MiB' : dataPercentage + '%'; - result.status = levels.toStatusClass(result.notificationLevel); + result.status = ctx.levels.toStatusClass(result.notificationLevel); return result; }; @@ -82,10 +81,10 @@ function init (ctx) { var prop = sbx.properties.dbsize; - if (prop.dataPercentage && prop.notificationLevel && prop.notificationLevel >= levels.WARN) { + if (prop.dataPercentage && prop.notificationLevel && prop.notificationLevel >= ctx.levels.WARN) { sbx.notifications.requestNotify({ level: prop.notificationLevel - , title: levels.toDisplay(prop.notificationLevel) + ' ' + translate('Database Size near its limits!') + , title: ctx.levels.toDisplay(prop.notificationLevel) + ' ' + translate('Database Size near its limits!') , message: translate('Database size is %1 MiB out of %2 MiB. Please backup and clean up database!', { params: [prop.details.dataSize, prop.details.maxSize] }) diff --git a/lib/plugins/errorcodes.js b/lib/plugins/errorcodes.js index cf3072aa52a..bd01a189aeb 100644 --- a/lib/plugins/errorcodes.js +++ b/lib/plugins/errorcodes.js @@ -1,10 +1,9 @@ 'use strict'; var _ = require('lodash'); -var levels = require('../levels'); var times = require('../times'); -function init() { +function init(ctx) { var errorcodes = { name: 'errorcodes' @@ -79,9 +78,9 @@ function init() { }); } - addValuesToMapping(extendedSettings.info || '1 2 3 4 5 6 7 8', levels.INFO); - addValuesToMapping(extendedSettings.warn || false, levels.WARN); - addValuesToMapping(extendedSettings.urgent || '9 10', levels.URGENT); + addValuesToMapping(extendedSettings.info || '1 2 3 4 5 6 7 8', ctx.levels.INFO); + addValuesToMapping(extendedSettings.warn || false, ctx.levels.WARN); + addValuesToMapping(extendedSettings.urgent || '9 10', ctx.levels.URGENT); return mapping; } diff --git a/lib/plugins/index.js b/lib/plugins/index.js index d6bae73bdbc..fefba1406b9 100644 --- a/lib/plugins/index.js +++ b/lib/plugins/index.js @@ -46,6 +46,7 @@ function init (ctx) { , require('./insulinage')(ctx) , require('./batteryage')(ctx) , require('./basalprofile')(ctx) + , require('./bolus')(ctx) // fake plugin to hold extended settings , require('./boluscalc')(ctx) // fake plugin to show/hide , require('./profile')(ctx) // fake plugin to hold extended settings , require('./speech')(ctx) @@ -128,7 +129,7 @@ function init (ctx) { }; //these plugins are either always on or have custom settings - plugins.specialPlugins = 'ar2 bgnow delta direction timeago upbat rawbg errorcodes profile'; + plugins.specialPlugins = 'ar2 bgnow delta direction timeago upbat rawbg errorcodes profile bolus'; plugins.shownPlugins = function(sbx) { return _filter(enabledPlugins, function filterPlugins (plugin) { diff --git a/lib/plugins/insulinage.js b/lib/plugins/insulinage.js index ffd56c925c5..0346ab24cc2 100644 --- a/lib/plugins/insulinage.js +++ b/lib/plugins/insulinage.js @@ -2,10 +2,10 @@ var _ = require('lodash'); var moment = require('moment'); -var levels = require('../levels'); function init(ctx) { var translate = ctx.language.translate; + var levels = ctx.levels; var iage = { name: 'iage' diff --git a/lib/plugins/loop.js b/lib/plugins/loop.js index e7d3ae91c93..5b86175cd79 100644 --- a/lib/plugins/loop.js +++ b/lib/plugins/loop.js @@ -3,13 +3,13 @@ var _ = require('lodash'); var moment = require('moment'); var times = require('../times'); -var levels = require('../levels'); // var ALL_STATUS_FIELDS = ['status-symbol', 'status-label', 'iob', 'freq', 'rssi']; Unused variable function init (ctx) { var utils = require('../utils')(ctx); var translate = ctx.language.translate; + var levels = ctx.levels; var loop = { name: 'loop' diff --git a/lib/plugins/openaps.js b/lib/plugins/openaps.js index cf5e240ce99..fc9b7d04603 100644 --- a/lib/plugins/openaps.js +++ b/lib/plugins/openaps.js @@ -3,7 +3,6 @@ var _ = require('lodash'); var moment = require('moment'); var times = require('../times'); -var levels = require('../levels'); var consts = require('../constants'); // var ALL_STATUS_FIELDS = ['status-symbol', 'status-label', 'iob', 'meal-assist', 'freq', 'rssi']; Unused variable @@ -17,6 +16,7 @@ function init (ctx) { }; var translate = ctx.language.translate; var firstPrefs = true; + var levels = ctx.levels; openaps.getClientPrefs = function getClientPrefs() { return ([{ diff --git a/lib/plugins/pump.js b/lib/plugins/pump.js index 52dc7ade769..8a0d397a300 100644 --- a/lib/plugins/pump.js +++ b/lib/plugins/pump.js @@ -2,7 +2,6 @@ var _ = require('lodash'); var moment = require('moment'); -var levels = require('../levels'); var times = require('../times'); var ALL_STATUS_FIELDS = ['reservoir', 'battery', 'clock', 'status', 'device']; @@ -11,6 +10,7 @@ function init (ctx) { var translate = ctx.language.translate; var timeago = require('./timeago')(ctx); var openaps = require('./openaps')(ctx); + var levels = ctx.levels; var pump = { name: 'pump' @@ -34,6 +34,14 @@ function init (ctx) { var retroFields = cleanList(sbx.extendedSettings.retroFields); retroFields = isEmpty(retroFields) ? ['reservoir', 'battery'] : retroFields; + var profile = sbx.data.profile; + var warnBattQuietNight = sbx.extendedSettings.warnBattQuietNight; + + if (warnBattQuietNight && (!profile || !profile.hasData() || !profile.getTimezone())) { + console.warn('PUMP_WARN_BATT_QUIET_NIGHT requires a treatment profile with time zone set to obtain user time zone'); + warnBattQuietNight = false; + } + return { fields: fields , retroFields: retroFields @@ -47,6 +55,9 @@ function init (ctx) { , urgentBattP: sbx.extendedSettings.urgentBattP || 20 , warnOnSuspend: sbx.extendedSettings.warnOnSuspend || false , enableAlerts: sbx.extendedSettings.enableAlerts || false + , warnBattQuietNight: warnBattQuietNight || false + , dayStart: sbx.settings.dayStart + , dayEnd: sbx.settings.dayEnd }; }; @@ -225,7 +236,11 @@ function init (ctx) { function updateReservoir (prefs, result) { if (result.reservoir) { result.reservoir.label = 'Reservoir'; - result.reservoir.display = result.reservoir.value.toPrecision(3) + 'U'; + if (result.reservoir_display_override) { + result.reservoir.display = result.reservoir_display_override; + } else { + result.reservoir.display = result.reservoir.value.toPrecision(3) + 'U'; + } if (result.reservoir.value < prefs.urgentRes) { result.reservoir.level = levels.URGENT; result.reservoir.message = 'URGENT: Pump Reservoir Low'; @@ -242,17 +257,17 @@ function init (ctx) { } } - function updateBattery (type, prefs, result) { + function updateBattery (type, prefs, result, batteryWarn) { if (result.battery) { result.battery.label = 'Battery'; result.battery.display = result.battery.value + type; var urgent = type === 'v' ? prefs.urgentBattV : prefs.urgentBattP; var warn = type === 'v' ? prefs.warnBattV : prefs.warnBattP; - if (result.battery.value < urgent) { + if (result.battery.value < urgent && batteryWarn) { result.battery.level = levels.URGENT; result.battery.message = 'URGENT: Pump Battery Low'; - } else if (result.battery.value < warn) { + } else if (result.battery.value < warn && batteryWarn) { result.battery.level = levels.WARN; result.battery.message = 'Warning, Pump Battery Low'; } else { @@ -296,11 +311,14 @@ function init (ctx) { function prepareData (prop, prefs, sbx) { var pump = (prop && prop.pump) || { }; - + var time = (sbx.data.profile && sbx.data.profile.getTimezone()) ? moment(sbx.time).tz(sbx.data.profile.getTimezone()) : moment(sbx.time); + var now = time.hours() + time.minutes() / 60.0 + time.seconds() / 3600.0; + var batteryWarn = !(prefs.warnBattQuietNight && (now < prefs.dayStart || now > prefs.dayEnd)); var result = { level: levels.NONE , clock: pump.clock ? { value: moment(pump.clock) } : null , reservoir: pump.reservoir || pump.reservoir === 0 ? { value: pump.reservoir } : null + , reservoir_display_override: pump.reservoir_display_override || null , manufacturer: pump.manufacturer , model: pump.model , extended: pump.extended || null @@ -312,10 +330,10 @@ function init (ctx) { if (pump.battery && pump.battery.percent) { result.battery = { value: pump.battery.percent, unit: 'percent' }; - updateBattery('%', prefs, result); + updateBattery('%', prefs, result, batteryWarn); } else if (pump.battery && pump.battery.voltage) { result.battery = { value: pump.battery.voltage, unit: 'volts'}; - updateBattery('v', prefs, result); + updateBattery('v', prefs, result, batteryWarn); } result.device = { label: translate('Device'), display: prop.device }; diff --git a/lib/plugins/pushover.js b/lib/plugins/pushover.js index 8c63a905e00..7bb1274593e 100644 --- a/lib/plugins/pushover.js +++ b/lib/plugins/pushover.js @@ -3,10 +3,9 @@ var _ = require('lodash'); var Pushover = require('pushover-notifications'); var request = require('request'); -var levels = require('../levels'); var times = require('../times'); -function init (env) { +function init (env, ctx) { var pushover = { PRIORITY_NORMAL: 0 , PRIORITY_EMERGENCY: 2 @@ -19,7 +18,7 @@ function init (env) { if (notify.isAnnouncement) { keys = pushoverAPI.announcementKeys; - } else if (levels.isAlarm(notify.level)) { + } else if (ctx.levels.isAlarm(notify.level)) { keys = pushoverAPI.alarmKeys; } else { keys = pushoverAPI.userKeys; @@ -39,12 +38,12 @@ function init (env) { , sound: notify.pushoverSound || 'gamelan' , timestamp: new Date() //USE PUSHOVER_EMERGENCY for WARN and URGENT so we get the acks - , priority: notify.level >= levels.WARN ? pushover.PRIORITY_EMERGENCY : pushover.PRIORITY_NORMAL + , priority: notify.level >= ctx.levels.WARN ? pushover.PRIORITY_EMERGENCY : pushover.PRIORITY_NORMAL }; - if (levels.isAlarm(notify.level)) { + if (ctx.levels.isAlarm(notify.level)) { //ADJUST RETRY TIME based on WARN or URGENT - msg.retry = notify.level === levels.URGENT ? times.mins(2).secs : times.mins(15).secs; + msg.retry = notify.level === ctx.levels.URGENT ? times.mins(2).secs : times.mins(15).secs; if (env.settings && env.settings.baseURL) { msg.callback = env.settings.baseURL + '/api/v1/notifications/pushovercallback'; } diff --git a/lib/plugins/sensorage.js b/lib/plugins/sensorage.js index 6b5bc9b3308..a28db2109df 100644 --- a/lib/plugins/sensorage.js +++ b/lib/plugins/sensorage.js @@ -3,10 +3,10 @@ var _ = require('lodash'); var moment = require('moment'); var times = require('../times'); -var levels = require('../levels'); function init(ctx) { var translate = ctx.language.translate; + var levels = ctx.levels; var sage = { name: 'sage' @@ -184,6 +184,12 @@ function init(ctx) { if (!_.isEmpty(latest[event].notes)) { info.push({label: translate('Notes'), value: latest[event].notes}); } + if (!_.isEmpty(latest[event].transmitterId)) { + info.push({label: translate('Transmitter ID'), value: latest[event].transmitterId}); + } + if (!_.isEmpty(latest[event].sensorCode)) { + info.push({label: translate('Sensor Code'), value: latest[event].sensorCode}); + } } }); diff --git a/lib/plugins/simplealarms.js b/lib/plugins/simplealarms.js index 17529eabee8..6a99060fe1b 100644 --- a/lib/plugins/simplealarms.js +++ b/lib/plugins/simplealarms.js @@ -1,15 +1,16 @@ 'use strict'; -var levels = require('../levels'); var times = require('../times'); -function init() { +function init(ctx) { var simplealarms = { name: 'simplealarms' , label: 'Simple Alarms' , pluginType: 'notification' }; + + var levels = ctx.levels; simplealarms.checkNotifications = function checkNotifications(sbx) { diff --git a/lib/plugins/timeago.js b/lib/plugins/timeago.js index 4b713a60217..592fa2943b7 100644 --- a/lib/plugins/timeago.js +++ b/lib/plugins/timeago.js @@ -1,12 +1,12 @@ 'use strict'; -var levels = require('../levels'); var times = require('../times'); var lastChecked = new Date(); var lastRecoveryTimeFromSuspend = new Date("1900-01-01"); function init(ctx) { var translate = ctx.language.translate; + var levels = ctx.levels; var timeago = { name: 'timeago', diff --git a/lib/plugins/treatmentnotify.js b/lib/plugins/treatmentnotify.js index abb47c78dae..40216d97ace 100644 --- a/lib/plugins/treatmentnotify.js +++ b/lib/plugins/treatmentnotify.js @@ -2,12 +2,11 @@ const _ = require('lodash'); const times = require('../times'); -const simplealarms = require('./simplealarms')(); const crypto = require('crypto'); const MANUAL_TREATMENTS = ['BG Check', 'Meal Bolus', 'Carb Correction', 'Correction Bolus']; -function init() { +function init(ctx) { const treatmentnotify = { name: 'treatmentnotify' @@ -15,16 +14,23 @@ function init() { , pluginType: 'notification' }; + const simplealarms = require('./simplealarms')(ctx); + //automated treatments from OpenAPS or Loop shouldn't trigger notifications or snooze alarms function filterTreatments (sbx) { var treatments = sbx.data.treatments; + var includeBolusesOver = sbx.extendedSettings.includeBolusesOver || 0; + treatments = _.filter(treatments, function notOpenAPS (treatment) { var ok = true; var enteredBy = treatment.enteredBy; if (enteredBy && (enteredBy.indexOf('openaps://') === 0 || enteredBy.indexOf('loop://') === 0)) { ok = _.indexOf(MANUAL_TREATMENTS, treatment.eventType) >= 0; } + if (ok && _.isNumber(treatment.insulin) && _.includes(['Meal Bolus', 'Correction Bolus'], treatment.eventType)) { + ok = treatment.insulin >= includeBolusesOver; + } return ok; }); diff --git a/lib/plugins/upbat.js b/lib/plugins/upbat.js index 71547eca6a2..5d25ff2447b 100644 --- a/lib/plugins/upbat.js +++ b/lib/plugins/upbat.js @@ -2,7 +2,6 @@ var _ = require('lodash'); var times = require('../times'); -var levels = require('../levels'); function init(ctx) { var translate = ctx.language.translate; @@ -107,9 +106,9 @@ function init(ctx) { } if (battery <= prefs.warn && battery > prefs.urgent) { - uploaderStatus.notification = levels.WARN; + uploaderStatus.notification = ctx.levels.WARN; } else if (battery <= prefs.urgent) { - uploaderStatus.notification = levels.URGENT; + uploaderStatus.notification = ctx.levels.URGENT; } } @@ -144,7 +143,7 @@ function init(ctx) { if (min && min.uploader) { result.level = min.uploader.level; result.display = min.uploader.display; - result.status = levels.toStatusClass(min.uploader.notification); + result.status = ctx.levels.toStatusClass(min.uploader.notification); result.min = min.uploader; } @@ -157,7 +156,7 @@ function init(ctx) { var prop = sbx.properties.upbat; if (!prop || !prefs.enableAlerts) { return; } - if (prop.min && prop.min.notification && prop.min.notification >= levels.WARN) { + if (prop.min && prop.min.notification && prop.min.notification >= ctx.levels.WARN) { var message = _.map(_.values(prop.devices), function toMessage (device) { var info = [ device.name @@ -173,7 +172,7 @@ function init(ctx) { sbx.notifications.requestNotify({ level: prop.min.notification - , title: levels.toDisplay(prop.min.notification) + ' Uploader Battery is Low' + , title: ctx.levels.toDisplay(prop.min.notification) + ' Uploader Battery is Low' , message: message , pushoverSound: 'echo' , group: 'Uploader Battery' diff --git a/lib/plugins/virtAsstBase.js b/lib/plugins/virtAsstBase.js index 781f56969cf..591bc5a24b9 100644 --- a/lib/plugins/virtAsstBase.js +++ b/lib/plugins/virtAsstBase.js @@ -58,26 +58,6 @@ function init(env, ctx) { callback(translate('virtAsstTitleCurrentBG'), status); }); }, ['bg', 'blood glucose', 'number']); - - // blood sugar delta - configuredPlugin.configureIntentHandler('MetricNow', function (callback, slots, sbx) { - if (sbx.properties.delta && sbx.properties.delta.display) { - entries.list({count: 2}, function(err, records) { - callback( - translate('virtAsstTitleDelta'), - translate('virtAsstDelta', { - params: [ - sbx.properties.delta.display == '+0' ? '0' : sbx.properties.delta.display, - moment(records[0].date).from(moment(sbx.time)), - moment(records[1].date).from(moment(sbx.time)) - ] - }) - ); - }); - } else { - callback(translate('virtAsstTitleDelta'), translate('virtAsstUnknown')); - } - }, ['delta']); }; virtAsstBase.setupVirtAsstHandlers = function (configuredPlugin) { diff --git a/lib/plugins/xdripjs.js b/lib/plugins/xdripjs.js index dd5b55eb816..ffecc78c336 100644 --- a/lib/plugins/xdripjs.js +++ b/lib/plugins/xdripjs.js @@ -3,9 +3,9 @@ var _ = require('lodash'); var moment = require('moment'); var times = require('../times'); -var levels = require('../levels'); function init(ctx) { + var levels = ctx.levels; var utils = require('../utils')(ctx); var firstPrefs = true; var lastStateNotification = null; diff --git a/static/profile/js/profileeditor.js b/lib/profile/profileeditor.js similarity index 98% rename from static/profile/js/profileeditor.js rename to lib/profile/profileeditor.js index 77a1b205d7a..d05d4ba1161 100644 --- a/static/profile/js/profileeditor.js +++ b/lib/profile/profileeditor.js @@ -1,5 +1,6 @@ -(function () { - 'use strict'; +'use strict'; + +var init = function init () { //for the tests window isn't the global object var $ = window.$; var _ = window._; @@ -99,12 +100,12 @@ _.each(mongoprofile.store, function eachStoredProfile (p) { // allign with default profile for (var key in defaultprofile) { - if (defaultprofile.hasOwnProperty(key) && !p.hasOwnProperty(key)) { + if (Object.prototype.hasOwnProperty.call(defaultprofile,key) && !Object.prototype.hasOwnProperty.call(p,key)) { p[key] = defaultprofile[key]; } } for (key in p) { - if (p.hasOwnProperty(key) && !defaultprofile.hasOwnProperty(key)) { + if (Object.prototype.hasOwnProperty.call(p,key) && !Object.prototype.hasOwnProperty.call(defaultprofile,key)) { delete p[key]; } } @@ -231,7 +232,7 @@ $('#pe_profiles').empty(); for (var key in record.store) { - if (record.store.hasOwnProperty(key)) { + if (Object.prototype.hasOwnProperty.call(record.store,key)) { $('#pe_profiles').append(''); } } @@ -655,7 +656,7 @@ var adjustedRecord = _.cloneDeep(record); for (var key in adjustedRecord.store) { - if (adjustedRecord.store.hasOwnProperty(key)) { + if (Object.prototype.hasOwnProperty.call(adjustedRecord.store,key)) { var profile = adjustedRecord.store[key]; if (!profile.perGIvalues) { delete profile.perGIvalues; @@ -706,7 +707,7 @@ function getFirstAvailableProfile(record) { var availableProfiles = []; for (var key in record.store) { - if (record.store.hasOwnProperty(key)) { + if (Object.prototype.hasOwnProperty.call(record.store,key)) { if (key !== currentprofile) { availableProfiles.push(key); } @@ -721,4 +722,6 @@ } } }); -})(); +}; + +module.exports = init; diff --git a/lib/profilefunctions.js b/lib/profilefunctions.js index 9fac4984949..167e64ca5e7 100644 --- a/lib/profilefunctions.js +++ b/lib/profilefunctions.js @@ -7,10 +7,10 @@ var times = require('./times'); var cacheTTL = 5000; var prevBasalTreatment = null; -var cache = new c.Cache(); function init (profileData) { + var cache = new c.Cache(); var profile = {}; profile.clear = function clear() { @@ -19,6 +19,8 @@ function init (profileData) { prevBasalTreatment = null; } + profile.clear(); + profile.loadData = function loadData (profileData) { if (profileData && profileData.length) { profile.data = profile.convertToProfileStore(profileData); @@ -36,7 +38,7 @@ function init (profileData) { var newObject = {}; newObject.defaultProfile = 'Default'; newObject.store = {}; - newObject.startDate = profile.startDate; + newObject.startDate = profile.startDate ? profile.startDate : '1980-01-01'; newObject._id = profile._id; newObject.convertedOnTheFly = true; delete profile.startDate; diff --git a/lib/report/reportclient.js b/lib/report/reportclient.js new file mode 100644 index 00000000000..b62a5467b64 --- /dev/null +++ b/lib/report/reportclient.js @@ -0,0 +1,913 @@ + +var init = function init () { + 'use strict'; + //for the tests window isn't the global object + var $ = window.$; + var _ = window._; + var moment = window.moment; + var Nightscout = window.Nightscout; + var client = Nightscout.client; + var report_plugins_preinit = Nightscout.report_plugins_preinit; + var report_plugins; + + client.init(function loaded () { + + report_plugins = report_plugins_preinit(client.ctx); + Nightscout.report_plugins = report_plugins; + + // init HTML code + report_plugins.addHtmlFromPlugins(client); + // make show() accessible outside for treatments.js + report_plugins.show = show; + + var translate = client.translate; + + var maxInsulinValue = 0 + , maxCarbsValue = 0 + , maxDailyCarbsValue = 0; + var maxdays = 6 * 31; + var datastorage = {}; + var daystoshow = {}; + var sorteddaystoshow = []; + + var targetBGdefault = { + 'mg/dl': { + low: client.settings.thresholds.bgTargetBottom + , high: client.settings.thresholds.bgTargetTop + } + , 'mmol': { + low: client.utils.scaleMgdl(client.settings.thresholds.bgTargetBottom) + , high: client.utils.scaleMgdl(client.settings.thresholds.bgTargetTop) + } + }; + + var ONE_MIN_IN_MS = 60000; + + prepareGUI(); + + // ****** FOOD CODE START ****** + var food_categories = []; + var food_list = []; + + var filter = { + category: '' + , subcategory: '' + , name: '' + }; + + function fillFoodForm (event) { + $('#rp_category').empty().append(''); + Object.keys(food_categories).forEach(function eachCategory (s) { + $('#rp_category').append(''); + }); + filter.category = ''; + fillFoodSubcategories(); + + $('#rp_category').change(fillFoodSubcategories); + $('#rp_subcategory').change(doFoodFilter); + $('#rp_name').on('input', doFoodFilter); + + return maybePrevent(event); + } + + function fillFoodSubcategories (event) { + filter.category = $('#rp_category').val(); + filter.subcategory = ''; + $('#rp_subcategory').empty().append(''); + if (filter.category !== '') { + Object.keys(food_categories[filter.category] || {}).forEach(function eachSubCategory (s) { + $('#rp_subcategory').append(''); + }); + } + doFoodFilter(); + return maybePrevent(event); + } + + function doFoodFilter (event) { + if (event) { + filter.category = $('#rp_category').val(); + filter.subcategory = $('#rp_subcategory').val(); + filter.name = $('#rp_name').val(); + } + $('#rp_food').empty(); + for (var i = 0; i < food_list.length; i++) { + if (filter.category !== '' && food_list[i].category !== filter.category) { continue; } + if (filter.subcategory !== '' && food_list[i].subcategory !== filter.subcategory) { continue; } + if (filter.name !== '' && food_list[i].name.toLowerCase().indexOf(filter.name.toLowerCase()) < 0) { continue; } + var o = ''; + o += food_list[i].name + ' | '; + o += translate('Portion') + ': ' + food_list[i].portion + ' '; + o += food_list[i].unit + ' | '; + o += translate('Carbs') + ': ' + food_list[i].carbs + ' g'; + $('#rp_food').append(''); + } + + return maybePrevent(event); + } + + $('#info').html('' + translate('Loading food database') + ' ...'); + $.ajax('/api/v1/food/regular.json', { + headers: client.headers() + , success: function foodLoadSuccess (records) { + records.forEach(function(r) { + food_list.push(r); + if (r.category && !food_categories[r.category]) { food_categories[r.category] = {}; } + if (r.category && r.subcategory) { food_categories[r.category][r.subcategory] = true; } + }); + fillFoodForm(); + } + }).done(function() { + if (food_list.length) { + enableFoodGUI(); + } else { + disableFoodGUI(); + } + }).fail(function() { + disableFoodGUI(); + }); + + function enableFoodGUI () { + $('#info').html(''); + + $('.rp_foodgui').css('display', ''); + $('#rp_food').change(function(event) { + $('#rp_enablefood').prop('checked', true); + return maybePrevent(event); + }); + } + + function disableFoodGUI () { + $('#info').html(''); + $('.rp_foodgui').css('display', 'none'); + } + + // ****** FOOD CODE END ****** + + function prepareGUI () { + $('.presetdates').click(function(event) { + var days = $(this).attr('days'); + $('#rp_enabledate').prop('checked', true); + return setDataRange(event, days); + }); + $('#rp_show').click(show); + $('#rp_notes').bind('input', function(event) { + $('#rp_enablenotes').prop('checked', true); + return maybePrevent(event); + }); + $('#rp_eventtype').bind('input', function(event) { + $('#rp_enableeventtype').prop('checked', true); + return maybePrevent(event); + }); + + // fill careportal events + $('#rp_eventtype').empty(); + _.each(client.careportal.events, function eachEvent (event) { + $('#rp_eventtype').append(''); + }); + $('#rp_eventtype').append(''); + + $('#rp_targetlow').val(targetBGdefault[client.settings.units.toLowerCase()].low); + $('#rp_targethigh').val(targetBGdefault[client.settings.units.toLowerCase()].high); + + if (client.settings.scaleY === 'linear') { + $('#rp_linear').prop('checked', true); + $('#wrp_linear').prop('checked', true); + } else { + $('#rp_log').prop('checked', true); + $('#wrp_log').prop('checked', true); + } + + $('.menutab').click(switchreport_handler); + + setDataRange(null, 7); + } + + function sgvToColor (sgv, options) { + var color = 'darkgreen'; + + if (sgv > options.targetHigh) { + color = 'red'; + } else if (sgv < options.targetLow) { + color = 'red'; + } + + return color; + } + + function show (event) { + var options = { + width: 1000 + , height: 300 + , weekwidth: 1000 + , weekheight: 300 + , targetLow: 3.5 + , targetHigh: 10 + , raw: true + , notes: true + , food: true + , insulin: true + , carbs: true + , iob: true + , cob: true + , basal: true + , scale: report_plugins.consts.scaleYFromSettings(client) + , weekscale: report_plugins.consts.scaleYFromSettings(client) + , units: client.settings.units + }; + + // default time range if no time range specified in GUI + var zone = client.sbx.data.profile.getTimezone(); + var timerange = '&find[created_at][$gte]=' + moment.tz('2000-01-01', zone).toISOString(); + //console.log(timerange,zone); + options.targetLow = parseFloat($('#rp_targetlow').val().replace(',', '.')); + options.targetHigh = parseFloat($('#rp_targethigh').val().replace(',', '.')); + options.raw = $('#rp_optionsraw').is(':checked'); + options.iob = $('#rp_optionsiob').is(':checked'); + options.cob = $('#rp_optionscob').is(':checked'); + options.openAps = $('#rp_optionsopenaps').is(':checked'); + options.predicted = $('#rp_optionspredicted').is(':checked'); + options.predictedTruncate = $('#rp_optionsPredictedTruncate').is(':checked'); + options.basal = $('#rp_optionsbasal').is(':checked'); + options.notes = $('#rp_optionsnotes').is(':checked'); + options.food = $('#rp_optionsfood').is(':checked'); + options.insulin = $('#rp_optionsinsulin').is(':checked'); + options.insulindistribution = $('#rp_optionsdistribution').is(':checked'); + options.carbs = $('#rp_optionscarbs').is(':checked'); + options.scale = ($('#rp_linear').is(':checked') ? report_plugins.consts.SCALE_LINEAR : report_plugins.consts.SCALE_LOG); + options.weekscale = ($('#wrp_linear').is(':checked') ? report_plugins.consts.SCALE_LINEAR : report_plugins.consts.SCALE_LOG); + options.order = ($('#rp_oldestontop').is(':checked') ? report_plugins.consts.ORDER_OLDESTONTOP : report_plugins.consts.ORDER_NEWESTONTOP); + options.width = parseInt($('#rp_size :selected').attr('x')); + options.weekwidth = parseInt($('#wrp_size :selected').attr('x')); + options.height = parseInt($('#rp_size :selected').attr('y')); + options.weekheight = parseInt($('#wrp_size :selected').attr('y')); + options.loopalyzer = $("#loopalyzer").hasClass("selected"); // We only want to run through Loopalyzer if that tab is selected + if (options.loopalyzer) { + options.iob = true; + options.cob = true; + options.openAps = true; + } + options.bgcheck = $('#rp_optionsbgcheck').is(':checked'); + options.othertreatments = $('#rp_optionsothertreatments').is(':checked'); + + const reportStorage = require('./reportstorage'); + reportStorage.saveProps(options); + var matchesneeded = 0; + + // date range + function datefilter () { + if ($('#rp_enabledate').is(':checked')) { + matchesneeded++; + var from = moment.tz($('#rp_from').val().replace(/\//g, '-') + 'T00:00:00', zone); + var to = moment.tz($('#rp_to').val().replace(/\//g, '-') + 'T23:59:59', zone); + timerange = '&find[created_at][$gte]=' + from.toISOString() + '&find[created_at][$lt]=' + to.toISOString(); + //console.log($('#rp_from').val(),$('#rp_to').val(),zone,timerange); + while (from <= to) { + if (daystoshow[from.format('YYYY-MM-DD')]) { + daystoshow[from.format('YYYY-MM-DD')]++; + } else { + daystoshow[from.format('YYYY-MM-DD')] = 1; + } + from.add(1, 'days'); + } + } + //console.log('Dayfilter: ',daystoshow); + foodfilter(); + } + + //food filter + function foodfilter () { + if ($('#rp_enablefood').is(':checked')) { + matchesneeded++; + var _id = $('#rp_food').val(); + if (_id) { + var treatmentData; + var tquery = '?find[boluscalc.foods._id]=' + _id + timerange; + $.ajax('/api/v1/treatments.json' + tquery, { + headers: client.headers() + , success: function(xhr) { + treatmentData = xhr.map(function(treatment) { + return moment.tz(treatment.created_at, zone).format('YYYY-MM-DD'); + }); + // unique it + treatmentData = $.grep(treatmentData, function(v, k) { + return $.inArray(v, treatmentData) === k; + }); + treatmentData.sort(function(a, b) { return a > b; }); + } + }).done(function() { + //console.log('Foodfilter: ',treatmentData); + for (var d = 0; d < treatmentData.length; d++) { + if (daystoshow[treatmentData[d]]) { + daystoshow[treatmentData[d]]++; + } else { + daystoshow[treatmentData[d]] = 1; + } + } + notesfilter(); + }); + } + } else { + notesfilter(); + } + } + + //notes filter + function notesfilter () { + if ($('#rp_enablenotes').is(':checked')) { + matchesneeded++; + var notes = $('#rp_notes').val(); + if (notes) { + var treatmentData; + var tquery = '?find[notes]=/' + notes + '/i'; + $.ajax('/api/v1/treatments.json' + tquery + timerange, { + headers: client.headers() + , success: function(xhr) { + treatmentData = xhr.map(function(treatment) { + return moment.tz(treatment.created_at, zone).format('YYYY-MM-DD'); + }); + // unique it + treatmentData = $.grep(treatmentData, function(v, k) { + return $.inArray(v, treatmentData) === k; + }); + treatmentData.sort(function(a, b) { return a > b; }); + } + }).done(function() { + //console.log('Notesfilter: ',treatmentData); + for (var d = 0; d < treatmentData.length; d++) { + if (daystoshow[treatmentData[d]]) { + daystoshow[treatmentData[d]]++; + } else { + daystoshow[treatmentData[d]] = 1; + } + } + eventtypefilter(); + }); + } + } else { + eventtypefilter(); + } + } + + //event type filter + function eventtypefilter () { + if ($('#rp_enableeventtype').is(':checked')) { + matchesneeded++; + var eventtype = $('#rp_eventtype').val(); + if (eventtype) { + var treatmentData; + var tquery = '?find[eventType]=/' + eventtype + '/i'; + $.ajax('/api/v1/treatments.json' + tquery + timerange, { + headers: client.headers() + , success: function(xhr) { + treatmentData = xhr.map(function(treatment) { + return moment.tz(treatment.created_at, zone).format('YYYY-MM-DD'); + }); + // unique it + treatmentData = $.grep(treatmentData, function(v, k) { + return $.inArray(v, treatmentData) === k; + }); + treatmentData.sort(function(a, b) { return a > b; }); + } + }).done(function() { + //console.log('Eventtypefilter: ',treatmentData); + for (var d = 0; d < treatmentData.length; d++) { + if (daystoshow[treatmentData[d]]) { + daystoshow[treatmentData[d]]++; + } else { + daystoshow[treatmentData[d]] = 1; + } + } + daysfilter(); + }); + } + } else { + daysfilter(); + } + } + + function daysfilter () { + matchesneeded++; + Object.keys(daystoshow).forEach(function eachDay (d) { + var day = moment.tz(d, zone).day(); + if (day === 0 && $('#rp_su').is(':checked')) { daystoshow[d]++; } + if (day === 1 && $('#rp_mo').is(':checked')) { daystoshow[d]++; } + if (day === 2 && $('#rp_tu').is(':checked')) { daystoshow[d]++; } + if (day === 3 && $('#rp_we').is(':checked')) { daystoshow[d]++; } + if (day === 4 && $('#rp_th').is(':checked')) { daystoshow[d]++; } + if (day === 5 && $('#rp_fr').is(':checked')) { daystoshow[d]++; } + if (day === 6 && $('#rp_sa').is(':checked')) { daystoshow[d]++; } + }); + countDays(); + addPreviousDayTreatments(); + display(); + } + + function display () { + var count = 0; + sorteddaystoshow = []; + $('#info').html('' + translate('Loading') + ' ...'); + for (var d in daystoshow) { + if (count < maxdays) { + $('#info').append($('
')); + count++; + loadData(d, options, dataLoadedCallback); + } else { + $('#info').append($('
' + d + ' ' + translate('not displayed') + '.
')); + delete daystoshow[d]; + } + } + if (count === 0) { + $('#info').html('' + translate('Result is empty') + ''); + $('#rp_show').css('display', ''); + } + } + + var dayscount = 0; + var loadeddays = 0; + + function countDays () { + for (var d in daystoshow) { + if (Object.prototype.hasOwnProperty.call(daystoshow, d)) { + if (daystoshow[d] === matchesneeded) { + if (dayscount < maxdays) { + dayscount++; + } + } else { + delete daystoshow[d]; + } + } + } + //console.log('Total: ', daystoshow, 'Matches needed: ', matchesneeded, 'Will be loaded: ', dayscount); + } + + function addPreviousDayTreatments () { + for (var d in daystoshow) { + if (Object.prototype.hasOwnProperty.call(daystoshow, d)) { + var day = moment.tz(d, zone); + var previous = day.subtract(1, 'days'); + var formated = previous.format('YYYY-MM-DD'); + if (!daystoshow[formated]) { + daystoshow[formated] = { treatmentsonly: true }; + console.log('Adding ' + formated + ' for loading treatments'); + dayscount++; + } + } + } + //console.log('Total: ', daystoshow, 'Matches needed: ', matchesneeded, 'Will be loaded: ', dayscount); + } + + function dataLoadedCallback (day) { + loadeddays++; + if (!daystoshow[day].treatmentsonly) { + sorteddaystoshow.push(day); + } + if (loadeddays === dayscount) { + sorteddaystoshow.sort(); + var dFrom = sorteddaystoshow[0]; + var dTo = sorteddaystoshow[(sorteddaystoshow.length - 1)]; + + if (options.order === report_plugins.consts.ORDER_NEWESTONTOP) { + sorteddaystoshow.reverse(); + } + loadProfileSwitch(dFrom, function loadProfileSwitchCallback () { + loadProfilesRange(dFrom, dTo, sorteddaystoshow.length, function loadProfilesCallback () { + $('#info > b').html('' + translate('Rendering') + ' ...'); + window.setTimeout(function() { + showreports(options); + }, 0); + }); + }); + } + } + + $('#rp_show').css('display', 'none'); + daystoshow = {}; + + datefilter(); + return maybePrevent(event); + } + + function showreports (options) { + // prepare some data used in more reports + datastorage.allstatsrecords = []; + datastorage.alldays = 0; + sorteddaystoshow.forEach(function eachDay (day) { + if (!daystoshow[day].treatmentsonly) { + datastorage.allstatsrecords = datastorage.allstatsrecords.concat(datastorage[day].statsrecords); + datastorage.alldays++; + } + }); + options.maxInsulinValue = maxInsulinValue; + options.maxCarbsValue = maxCarbsValue; + options.maxDailyCarbsValue = maxDailyCarbsValue; + + datastorage.treatments = []; + datastorage.devicestatus = []; + datastorage.combobolusTreatments = []; + datastorage.tempbasalTreatments = []; + Object.keys(daystoshow).forEach(function eachDay (day) { + datastorage.treatments = datastorage.treatments.concat(datastorage[day].treatments); + datastorage.devicestatus = datastorage.devicestatus.concat(datastorage[day].devicestatus); + datastorage.combobolusTreatments = datastorage.combobolusTreatments.concat(datastorage[day].combobolusTreatments); + datastorage.tempbasalTreatments = datastorage.tempbasalTreatments.concat(datastorage[day].tempbasalTreatments); + }); + datastorage.tempbasalTreatments = Nightscout.client.ddata.processDurations(datastorage.tempbasalTreatments); + datastorage.treatments.sort(function sort (a, b) { return a.mills - b.mills; }); + + for (var d in daystoshow) { + if (Object.prototype.hasOwnProperty.call(daystoshow, d)) { + if (daystoshow[d].treatmentsonly) { + delete daystoshow[d]; + delete datastorage[d]; + } + } + } + + report_plugins.eachPlugin(function(plugin) { + // jquery plot doesn't draw to hidden div + $('#' + plugin.name + '-placeholder').css('display', ''); + + console.log('Drawing ', plugin.name); + + var skipRender = false; + + if (plugin.name == 'daytoday' && !$('#daytoday').hasClass('selected')) skipRender = true; + if (plugin.name == 'treatments' && !$('#treatments').hasClass('selected')) skipRender = true; + if (plugin.name == 'weektoweek' && !$('#weektoweek').hasClass('selected')) skipRender = true; + if (plugin.name == 'loopalyzer' && !$('#loopalyzer').hasClass('selected')) skipRender = true; + + if (skipRender) { + console.log('Skipping ', plugin.name); + } else { + plugin.report(datastorage, sorteddaystoshow, options); + } + + if (!$('#' + plugin.name).hasClass('selected')) { + $('#' + plugin.name + '-placeholder').css('display', 'none'); + } + }); + + $('#info').html(''); + $('#rp_show').css('display', ''); + } + + function setDataRange (event, days) { + $('#rp_to').val(moment().format('YYYY-MM-DD')); + $('#rp_from').val(moment().add(-days + 1, 'days').format('YYYY-MM-DD')); + return maybePrevent(event); + } + + function switchreport_handler (event) { + var id = $(this).attr('id'); + + $('.menutab').removeClass('selected'); + $('#' + id).addClass('selected'); + + $('.tabplaceholder').css('display', 'none'); + $('#' + id + '-placeholder').css('display', ''); + return maybePrevent(event); + } + + function loadData (day, options, callback) { + // check for loaded data + if ((options.openAps || options.predicted || options.iob || options.cob) && datastorage[day] && !datastorage[day].devicestatus.length) { + // OpenAPS requested but data not loaded. Load anyway ... + } else if (datastorage[day] && day !== moment().format('YYYY-MM-DD')) { + callback(day); + return; + } + // patientData = [actual, predicted, mbg, treatment, cal, devicestatusData]; + var data = {}; + var cgmData = [] + , mbgData = [] + , treatmentData = [] + , calData = []; + var from; + if (client.sbx.data.profile.getTimezone()) { + from = moment(day).tz(client.sbx.data.profile.getTimezone()).startOf('day').format('x'); + } else { + from = moment(day).startOf('day').format('x'); + } + from = parseInt(from); + var to = from + 1000 * 60 * 60 * 24; + + function loadCGMData () { + if (daystoshow[day].treatmentsonly) { + data.sgv = []; + data.mbg = []; + data.cal = []; + return $.Deferred().resolve(); + } + $('#info-' + day).html('' + translate('Loading CGM data of') + ' ' + day + ' ...'); + var query = '?find[date][$gte]=' + from + '&find[date][$lt]=' + to + '&count=10000'; + return $.ajax('/api/v1/entries.json' + query, { + headers: client.headers() + , success: function(xhr) { + xhr.forEach(function(element) { + if (element) { + if (element.mbg) { + mbgData.push({ + y: element.mbg + , mills: element.date + , d: element.dateString + , device: element.device + }); + } else if (element.sgv) { + cgmData.push({ + y: element.sgv + , mills: element.date + , d: element.dateString + , device: element.device + , filtered: element.filtered + , unfiltered: element.unfiltered + , noise: element.noise + , rssi: element.rssi + , sgv: element.sgv + }); + } else if (element.type === 'cal') { + calData.push({ + mills: element.date + 1 + , d: element.dateString + , scale: element.scale + , intercept: element.intercept + , slope: element.slope + }); + } + } + }); + // sometimes cgm contains duplicates. uniq it. + data.sgv = cgmData.slice(); + data.sgv.sort(function(a, b) { return a.mills - b.mills; }); + var lastDate = 0; + data.sgv = data.sgv.filter(function(d) { + var ok = (lastDate + ONE_MIN_IN_MS) <= d.mills; + lastDate = d.mills; + if (!ok) { console.log("itm", JSON.stringify(d)); } + return ok; + }); + data.mbg = mbgData.slice(); + data.mbg.sort(function(a, b) { return a.mills - b.mills; }); + data.cal = calData.slice(); + data.cal.sort(function(a, b) { return a.mills - b.mills; }); + } + }); + } + + function loadTreatmentData () { + if (!datastorage.profileSwitchTreatments) + datastorage.profileSwitchTreatments = []; + $('#info-' + day).html('' + translate('Loading treatments data of') + ' ' + day + ' ...'); + var tquery = '?find[created_at][$gte]=' + new Date(from).toISOString() + '&find[created_at][$lt]=' + new Date(to).toISOString() + '&count=1000'; + return $.ajax('/api/v1/treatments.json' + tquery, { + headers: client.headers() + , cache: false + , success: function(xhr) { + treatmentData = xhr.map(function(treatment) { + var timestamp = new Date(treatment.timestamp || treatment.created_at); + treatment.mills = timestamp.getTime(); + return treatment; + }); + data.treatments = treatmentData.slice(); + data.treatments.sort(function(a, b) { return a.mills - b.mills; }); + // filter 'Combo Bolus' events + data.combobolusTreatments = data.treatments.filter(function filterComboBoluses (t) { + return t.eventType === 'Combo Bolus'; + }); + // filter temp basal treatments + data.tempbasalTreatments = data.treatments.filter(function filterTempBasals (t) { + return t.eventType === 'Temp Basal'; + }); + // filter profile switch treatments + var profileSwitch = data.treatments.filter(function filterProfileSwitch (t) { + return t.eventType === 'Profile Switch'; + }); + datastorage.profileSwitchTreatments = datastorage.profileSwitchTreatments.concat(profileSwitch); + } + }); + } + + function loadDevicestatusData () { + if (daystoshow[day].treatmentsonly) { + data.devicestatus = []; + return $.Deferred().resolve(); + } + if (options.iob || options.cob || options.openAps || options.predicted) { + $('#info-' + day).html('' + translate('Loading device status data of') + ' ' + day + ' ...'); + var tquery = '?find[created_at][$gte]=' + new Date(from).toISOString() + '&find[created_at][$lt]=' + new Date(to).toISOString() + '&count=10000'; + return $.ajax('/api/v1/devicestatus.json' + tquery, { + headers: client.headers() + , success: function(xhr) { + data.devicestatus = xhr.map(function(devicestatus) { + devicestatus.mills = new Date(devicestatus.timestamp || devicestatus.created_at).getTime(); + return devicestatus; + }); + } + }); + } else { + data.devicestatus = []; + return $.Deferred().resolve(); + } + } + + $.when(loadCGMData(), loadTreatmentData(), loadDevicestatusData()).done(function() { + $('#info-' + day).html('' + translate('Processing data of') + ' ' + day + ' ...'); + processData(data, day, options, callback); + }); + } + + function loadProfileSwitch (from, callback) { + $('#info > b').html('' + translate('Loading profile switch data') + ' ...'); + var tquery = '?find[eventType]=Profile Switch' + '&find[created_at][$lte]=' + new Date(from).toISOString() + '&count=1'; + $.ajax('/api/v1/treatments.json' + tquery, { + headers: client.headers() + , success: function(xhr) { + var treatmentData = xhr.map(function(treatment) { + var timestamp = new Date(treatment.timestamp || treatment.created_at); + treatment.mills = timestamp.getTime(); + return treatment; + }); + if (!datastorage.profileSwitchTreatments) + datastorage.profileSwitchTreatments = []; + datastorage.profileSwitchTreatments = datastorage.profileSwitchTreatments.concat(treatmentData); + datastorage.profileSwitchTreatments.sort(function(a, b) { return a.mills - b.mills; }); + } + }).done(function() { + callback(); + }); + } + + function loadProfilesRange (dateFrom, dateTo, dayCount, callback) { + $('#info > b').html('' + translate('Loading profile range') + ' ...'); + + $.when( + loadProfilesRangeCore(dateFrom, dateTo, dayCount) + , loadProfilesRangePrevious(dateFrom) + , loadProfilesRangeNext(dateTo) + ) + .done(callback) + .fail(function() { + datastorage.profiles = []; + }); + } + + function loadProfilesRangeCore (dateFrom, dateTo) { + $('#info > b').html('' + translate('Loading core profiles') + ' ...'); + + //The results must be returned in descending order to work with key logic in routines such as getCurrentProfile + var tquery = '?find[startDate][$gte]=' + new Date(dateFrom).toISOString() + '&find[startDate][$lte]=' + new Date(dateTo).toISOString() + '&sort[startDate]=-1&count=1000'; + + return $.ajax('/api/v1/profiles' + tquery, { + headers: client.headers() + , async: false + , success: function(records) { + datastorage.profiles = records; + } + }); + } + + function loadProfilesRangePrevious (dateFrom) { + $('#info > b').html('' + translate('Loading previous profile') + ' ...'); + + //Find first one before the start date and add to datastorage.profiles + var tquery = '?find[startDate][$lt]=' + new Date(dateFrom).toISOString() + '&sort[startDate]=-1&count=1'; + + return $.ajax('/api/v1/profiles' + tquery, { + headers: client.headers() + , async: false + , success: function(records) { + records.forEach(function(r) { + datastorage.profiles.push(r); + }); + } + }); + } + + function loadProfilesRangeNext (dateTo) { + $('#info > b').html('' + translate('Loading next profile') + ' ...'); + + //Find first one after the end date and add to datastorage.profiles + var tquery = '?find[startDate][$gt]=' + new Date(dateTo).toISOString() + '&sort[startDate]=1&count=1'; + + return $.ajax('/api/v1/profiles' + tquery, { + headers: client.headers() + , async: false + , success: function(records) { + records.forEach(function(r) { + //must be inserted as top to maintain profiles being sorted by date in descending order + datastorage.profiles.unshift(r); + }); + } + }); + } + + function processData (data, day, options, callback) { + if (daystoshow[day].treatmentsonly) { + datastorage[day] = data; + $('#info-' + day).html(''); + callback(day); + return; + } + // treatments + data.dailyCarbs = 0; + data.dailyProtein = 0; + data.dailyFat = 0; + + data.treatments.forEach(function(d) { + if (parseFloat(d.insulin) > maxInsulinValue) { + maxInsulinValue = parseFloat(d.insulin); + } + if (parseFloat(d.carbs) > maxCarbsValue) { + maxCarbsValue = parseFloat(d.carbs); + } + if (d.carbs) { + data.dailyCarbs += Number(d.carbs); + } + if (d.protein) { + data.dailyProtein += Number(d.protein); + } + if (d.fat) { + data.dailyFat += Number(d.fat); + } + }); + if (data.dailyCarbs > maxDailyCarbsValue) { + maxDailyCarbsValue = data.dailyCarbs; + } + + var cal = data.cal[data.cal.length - 1]; + var temp1 = []; + var rawbg = client.rawbg; + if (cal) { + temp1 = data.sgv.map(function(entry) { + entry.mgdl = entry.y; // value names changed from enchilada + var rawBg = rawbg.calc(entry, cal); + return { mills: entry.mills, date: new Date(entry.mills - 2 * 1000), y: rawBg, sgv: client.utils.scaleMgdl(rawBg), color: 'gray', type: 'rawbg', filtered: entry.filtered, unfiltered: entry.unfiltered }; + }).filter(function(entry) { return entry.y > 0 }); + } + var temp2 = data.sgv.map(function(obj) { + return { mills: obj.mills, date: new Date(obj.mills), y: obj.y, sgv: client.utils.scaleMgdl(obj.y), color: sgvToColor(client.utils.scaleMgdl(obj.y), options), type: 'sgv', noise: obj.noise, filtered: obj.filtered, unfiltered: obj.unfiltered }; + }); + data.sgv = [].concat(temp1, temp2); + + //Add MBG's also, pretend they are SGV's + data.sgv = data.sgv.concat(data.mbg.map(function(obj) { return { date: new Date(obj.mills), y: obj.y, sgv: client.utils.scaleMgdl(obj.y), color: 'red', type: 'mbg', device: obj.device } })); + + // make sure data range will be exactly 24h + var from; + if (client.sbx.data.profile.getTimezone()) { + from = moment(day).tz(client.sbx.data.profile.getTimezone()).startOf('day').toDate(); + } else { + from = moment(day).startOf('day').toDate(); + } + var to = new Date(from.getTime() + 1000 * 60 * 60 * 24); + data.sgv.push({ date: from, y: 40, sgv: 40, color: 'transparent', type: 'rawbg' }); + data.sgv.push({ date: to, y: 40, sgv: 40, color: 'transparent', type: 'rawbg' }); + + // clear error data. we don't need it to display them + data.sgv = data.sgv.filter(function(d) { + if (d.y < 39) { + return false; + } + return true; + }); + + data.sgv = data.sgv.map(function eachSgv (sgv) { + var status = _.find(data.devicestatus, function(d) { + return d.mills >= sgv.mills && d.mills < sgv.mills + 5 * 60 * 1000; + }); + + if (status && status.openaps) { + sgv.openaps = status.openaps; + } + return sgv; + }); + + // for other reports + data.statsrecords = data.sgv.filter(function(r) { + if (r.type) { + return r.type === 'sgv'; + } else { + return true; + } + }).map(function(r) { + var ret = {}; + ret.sgv = parseFloat(r.sgv); + ret.bgValue = parseInt(r.y); + ret.displayTime = r.date; + return ret; + }); + + datastorage[day] = data; + $('#info-' + day).html(''); + callback(day); + } + + function maybePrevent (event) { + if (event) { + event.preventDefault(); + } + return false; + } + }); +}; + +module.exports = init; diff --git a/lib/report/reportstorage.js b/lib/report/reportstorage.js new file mode 100644 index 00000000000..5997261d7eb --- /dev/null +++ b/lib/report/reportstorage.js @@ -0,0 +1,37 @@ +const storage = require('js-storage').localStorage; +const COOKIE_KEY = 'reportProperties'; +const defaultValues = { + insulin: true, + carbs: true, + basal: true, + notes: false, + food: true, + raw: false, + iob: false, + cob: false, + predicted: false, + openAps: false, + insulindistribution: true, + predictedTruncate: true, + bgcheck: true, + othertreatments: false +}; +let cachedProps; + +const saveProps = function (props) { + let propsToSave = {}; + for (const prop in props) { + if (!Object.prototype.hasOwnProperty.call(defaultValues, prop)) + continue; + propsToSave[prop] = props[prop]; + } + storage.set(COOKIE_KEY, propsToSave); +}; + +const getValue = function (p) { + if (!cachedProps) + cachedProps = storage.get(COOKIE_KEY) || defaultValues; + return cachedProps[p]; +}; + +module.exports = {saveProps: saveProps, getValue: getValue}; diff --git a/lib/report_plugins/dailystats.js b/lib/report_plugins/dailystats.js index 2f9fa77a24a..e1e2a4a3f26 100644 --- a/lib/report_plugins/dailystats.js +++ b/lib/report_plugins/dailystats.js @@ -29,7 +29,7 @@ dailystats.css = ' text-align:center;' + '}' + '#dailystats-placeholder .inlinepiechart {' + - ' width: 2.0in;' + + ' width: 2.2in;' + ' height: 0.9in;' + '}'; diff --git a/lib/report_plugins/daytoday.js b/lib/report_plugins/daytoday.js index 47c16cf71a8..49aad99ed16 100644 --- a/lib/report_plugins/daytoday.js +++ b/lib/report_plugins/daytoday.js @@ -18,22 +18,25 @@ function init () { module.exports = init; daytoday.html = function html (client) { + const reportStorage = require('../report/reportstorage'); var translate = client.translate; var ret = '

' + translate('Day to day') + '

' + '' + translate('To see this report, press SHOW while in this view') + '
' + translate('Display') + ': ' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + + `` + + `` + + `` + + `` + + `` + + `` + + `` + + `` + + `` + + `` + + `` + + `` + + `` + ' ' + translate('Size') + ' ' + translate('Logarithmic') + '' + - '
' + translate('Food') + '
' + f.name + '
'; - var legend = '
'; + legend += ''; + legend += ''; + legend += ''; + legend += ''; + legend += ''; + legend += ''; + legend += ''; + legend += '
' + translate('Sunday') + '' + translate('Monday') + '' + translate('Tuesday') + '' + translate('Wednesday') + '
' + translate('Thursday') + '' + translate('Friday') + '' + translate('Saturday') + '
'; - legend += 'Sunday'; - legend += 'Monday'; - legend += 'Tuesday'; - legend += 'Wednesday'; - legend += 'Thursday'; - legend += 'Friday'; - legend += 'Saturday'; - legend += ''; + $('#weektoweekcharts').append($(legend)); - $('#weektoweekcharts').append($(legend)); + weekstoshow.forEach(function eachWeek (d) { + $('#weektoweekcharts').append($('
')); + }); + }; - weekstoshow.forEach(function eachWeek(d) { - $('#weektoweekcharts').append($('
')); - }); -}; + weektoweek.report = function report_weektoweek (datastorage, sorteddaystoshow, options) { + var Nightscout = window.Nightscout; + var client = Nightscout.client; + var report_plugins = Nightscout.report_plugins; -weektoweek.report = function report_weektoweek(datastorage, sorteddaystoshow, options) { - var Nightscout = window.Nightscout; - var client = Nightscout.client; - var report_plugins = Nightscout.report_plugins; - - var padding = { top: 15, right: 22, bottom: 30, left: 35 }; + var padding = { top: 15, right: 22, bottom: 30, left: 35 }; - var weekstoshow = [ ]; + var weekstoshow = []; - var startDay = moment(sorteddaystoshow[0] + ' 00:00:00'); + var startDay = moment(sorteddaystoshow[0] + ' 00:00:00'); - sorteddaystoshow.forEach( function eachDay(day) { - var weekNum = Math.abs(moment(day + ' 00:00:00').diff(startDay, 'weeks')); + sorteddaystoshow.forEach(function eachDay (day) { + var weekNum = Math.abs(moment(day + ' 00:00:00').diff(startDay, 'weeks')); - if (typeof weekstoshow[weekNum] === 'undefined') { - weekstoshow[weekNum] = [ ]; - } + if (typeof weekstoshow[weekNum] === 'undefined') { + weekstoshow[weekNum] = []; + } - weekstoshow[weekNum].push(day); - }); + weekstoshow[weekNum].push(day); + }); - weekstoshow = weekstoshow.map(function orderWeek(week) { - return _.sortBy(week); - }); + weekstoshow = weekstoshow.map(function orderWeek (week) { + return _.sortBy(week); + }); - weektoweek.prepareHtml(weekstoshow); + weektoweek.prepareHtml(weekstoshow); - weekstoshow.forEach( function eachWeek(week) { - var sgvData = [ ]; - var weekStart = moment(week[0] + ' 00:00:00'); + weekstoshow.forEach(function eachWeek (week) { + var sgvData = []; + var weekStart = moment(week[0] + ' 00:00:00'); - week.forEach( function eachDay(day) { - var dayNum = Math.abs(moment(day + ' 00:00:00').diff(weekStart, 'days')); + week.forEach(function eachDay (day) { + var dayNum = Math.abs(moment(day + ' 00:00:00').diff(weekStart, 'days')); - datastorage[day].sgv.forEach ( function eachSgv(sgv) { - var sgvWeekday = moment(sgv.date).day(); - var sgvColor = dayColors[sgvWeekday]; + datastorage[day].sgv.forEach(function eachSgv (sgv) { + var sgvWeekday = moment(sgv.date).day(); + var sgvColor = dayColors[sgvWeekday]; - if (sgv.color === 'gray') { - sgvColor = sgv.color; - } + if (sgv.color === 'gray') { + sgvColor = sgv.color; + } - sgvData.push( { - 'color': sgvColor - , 'date': moment(sgv.date).subtract(dayNum, 'days').toDate() - , 'filtered': sgv.filtered - , 'mills': sgv.mills - dayNum * 24*60*60000 - , 'noise': sgv.noise - , 'sgv': sgv.sgv - , 'type': sgv.type - , 'unfiltered': sgv.unfiltered - , 'y': sgv.y + sgvData.push({ + 'color': sgvColor + , 'date': moment(sgv.date).subtract(dayNum, 'days').toDate() + , 'filtered': sgv.filtered + , 'mills': sgv.mills - dayNum * 24 * 60 * 60000 + , 'noise': sgv.noise + , 'sgv': sgv.sgv + , 'type': sgv.type + , 'unfiltered': sgv.unfiltered + , 'y': sgv.y + }); }); }); - }); - drawChart(week, sgvData, options); - }); + drawChart(week, sgvData, options); + }); - function timeTicks(n, i) { - var t12 = [ - '12am', '', '2am', '', '4am', '', '6am', '', '8am', '', '10am', '', - '12pm', '', '2pm', '', '4pm', '', '6pm', '', '8pm', '', '10pm', '', '12am' + function timeTicks (n, i) { + var t12 = [ + '12am', '', '2am', '', '4am', '', '6am', '', '8am', '', '10am', '' + , '12pm', '', '2pm', '', '4pm', '', '6pm', '', '8pm', '', '10pm', '', '12am' ]; - if (Nightscout.client.settings.timeFormat === 24) { - return ('00' + i).slice(-2); - } else { - return t12[i]; + if (Nightscout.client.settings.timeFormat === 24) { + return ('00' + i).slice(-2); + } else { + return t12[i]; + } } - } - - function drawChart(week, sgvData, options) { - var tickValues - , charts - , context - , xScale2, yScale2 - , xAxis2, yAxis2 - , dateFn = function (d) { return new Date(d.date); }; - - tickValues = client.ticks(client, { - scaleY: options.weekscale === report_plugins.consts.SCALE_LOG ? 'log' : 'linear' - , targetTop: options.targetHigh - , targetBottom: options.targetLow - }); - - // add defs for combo boluses - var dashWidth = 5; - d3.select('body').append('svg') - .append('defs') - .append('pattern') - .attr('id', 'hash') - .attr('patternUnits', 'userSpaceOnUse') - .attr('width', 6) - .attr('height', 6) - .attr('x', 0) - .attr('y', 0) - .append('g') + + function drawChart (week, sgvData, options) { + var tickValues + , charts + , context + , xScale2, yScale2 + , xAxis2, yAxis2 + , dateFn = function(d) { return new Date(d.date); }; + + tickValues = client.ticks(client, { + scaleY: options.weekscale === report_plugins.consts.SCALE_LOG ? 'log' : 'linear' + , targetTop: options.targetHigh + , targetBottom: options.targetLow + }); + + // add defs for combo boluses + var dashWidth = 5; + d3.select('body').append('svg') + .append('defs') + .append('pattern') + .attr('id', 'hash') + .attr('patternUnits', 'userSpaceOnUse') + .attr('width', 6) + .attr('height', 6) + .attr('x', 0) + .attr('y', 0) + .append('g') .style('fill', 'none') .style('stroke', '#0099ff') .style('stroke-width', 2) - .append('path').attr('d', 'M0,0 l' + dashWidth + ',' + dashWidth) - .append('path').attr('d', 'M' + dashWidth + ',0 l-' + dashWidth + ',' + dashWidth); - - // create svg and g to contain the chart contents - charts = d3.select('#weektoweekchart-' + week[0] + '-' + week[week.length-1]).html( - ''+ - report_plugins.utils.localeDate(week[0])+ - '-' + - report_plugins.utils.localeDate(week[week.length-1])+ - '
' + .append('path').attr('d', 'M0,0 l' + dashWidth + ',' + dashWidth) + .append('path').attr('d', 'M' + dashWidth + ',0 l-' + dashWidth + ',' + dashWidth); + + // create svg and g to contain the chart contents + charts = d3.select('#weektoweekchart-' + week[0] + '-' + week[week.length - 1]).html( + '' + + report_plugins.utils.localeDate(week[0]) + + '-' + + report_plugins.utils.localeDate(week[week.length - 1]) + + '
' ).append('svg'); - charts.append('rect') - .attr('width', '100%') - .attr('height', '100%') - .attr('fill', 'WhiteSmoke'); - - context = charts.append('g'); - - // define the parts of the axis that aren't dependent on width or height - xScale2 = d3.scaleTime() - .domain(d3.extent(sgvData, dateFn)); - - if (options.weekscale === report_plugins.consts.SCALE_LOG) { - yScale2 = d3.scaleLog() - .domain([client.utils.scaleMgdl(36), client.utils.scaleMgdl(420)]); - } else { - yScale2 = d3.scaleLinear() - .domain([client.utils.scaleMgdl(36), client.utils.scaleMgdl(420)]); - } + charts.append('rect') + .attr('width', '100%') + .attr('height', '100%') + .attr('fill', 'WhiteSmoke'); + + context = charts.append('g'); + + // define the parts of the axis that aren't dependent on width or height + xScale2 = d3.scaleTime() + .domain(d3.extent(sgvData, dateFn)); + + if (options.weekscale === report_plugins.consts.SCALE_LOG) { + yScale2 = d3.scaleLog() + .domain([client.utils.scaleMgdl(36), client.utils.scaleMgdl(420)]); + } else { + yScale2 = d3.scaleLinear() + .domain([client.utils.scaleMgdl(36), client.utils.scaleMgdl(420)]); + } - xAxis2 = d3.axisBottom(xScale2) - .tickFormat(timeTicks) - .ticks(24); - - yAxis2 = d3.axisLeft(yScale2) - .tickFormat(d3.format('d')) - .tickValues(tickValues); - - // get current data range - var dataRange = d3.extent(sgvData, dateFn); - - // get the entire container height and width subtracting the padding - var chartWidth = options.weekwidth - padding.left - padding.right; - var chartHeight = options.weekheight - padding.top - padding.bottom; - - //set the width and height of the SVG element - charts.attr('width', options.weekwidth) - .attr('height', options.weekheight); - - // ranges are based on the width and height available so reset - xScale2.range([0, chartWidth]); - yScale2.range([chartHeight,0]); - - // add target BG rect - context.append('rect') - .attr('x', xScale2(dataRange[0])+padding.left) - .attr('y', yScale2(options.targetHigh)+padding.top) - .attr('width', xScale2(dataRange[1]- xScale2(dataRange[0]))) - .attr('height', yScale2(options.targetLow)-yScale2(options.targetHigh)) - .style('fill', '#D6FFD6') - .attr('stroke', 'grey'); - - // create the x axis container - context.append('g') - .attr('class', 'x axis'); - - // create the y axis container - context.append('g') - .attr('class', 'y axis'); - - context.select('.y') - .attr('transform', 'translate(' + (padding.left) + ',' + padding.top + ')') - .style('stroke', 'black') - .style('shape-rendering', 'crispEdges') - .style('fill', 'none') - .call(yAxis2); - - // if first run then just display axis with no transition - context.select('.x') - .attr('transform', 'translate(' + padding.left + ',' + (chartHeight + padding.top) + ')') - .style('stroke', 'black') - .style('shape-rendering', 'crispEdges') - .style('fill', 'none') - .call(xAxis2); - - _.each(tickValues, function (n, li) { - context.append('line') - .attr('class', 'high-line') - .attr('x1', xScale2(dataRange[0])+padding.left) - .attr('y1', yScale2(tickValues[li])+padding.top) - .attr('x2', xScale2(dataRange[1])+padding.left) - .attr('y2', yScale2(tickValues[li])+padding.top) - .style('stroke-dasharray', ('1, 5')) + xAxis2 = d3.axisBottom(xScale2) + .tickFormat(timeTicks) + .ticks(24); + + yAxis2 = d3.axisLeft(yScale2) + .tickFormat(d3.format('d')) + .tickValues(tickValues); + + // get current data range + var dataRange = d3.extent(sgvData, dateFn); + + // get the entire container height and width subtracting the padding + var chartWidth = options.weekwidth - padding.left - padding.right; + var chartHeight = options.weekheight - padding.top - padding.bottom; + + //set the width and height of the SVG element + charts.attr('width', options.weekwidth) + .attr('height', options.weekheight); + + // ranges are based on the width and height available so reset + xScale2.range([0, chartWidth]); + yScale2.range([chartHeight, 0]); + + // add target BG rect + context.append('rect') + .attr('x', xScale2(dataRange[0]) + padding.left) + .attr('y', yScale2(options.targetHigh) + padding.top) + .attr('width', xScale2(dataRange[1] - xScale2(dataRange[0]))) + .attr('height', yScale2(options.targetLow) - yScale2(options.targetHigh)) + .style('fill', '#D6FFD6') .attr('stroke', 'grey'); - }); - // bind up the context chart data to an array of circles - var contextCircles = context.selectAll('circle') + // create the x axis container + context.append('g') + .attr('class', 'x axis'); + + // create the y axis container + context.append('g') + .attr('class', 'y axis'); + + context.select('.y') + .attr('transform', 'translate(' + (padding.left) + ',' + padding.top + ')') + .style('stroke', 'black') + .style('shape-rendering', 'crispEdges') + .style('fill', 'none') + .call(yAxis2); + + // if first run then just display axis with no transition + context.select('.x') + .attr('transform', 'translate(' + padding.left + ',' + (chartHeight + padding.top) + ')') + .style('stroke', 'black') + .style('shape-rendering', 'crispEdges') + .style('fill', 'none') + .call(xAxis2); + + _.each(tickValues, function(n, li) { + context.append('line') + .attr('class', 'high-line') + .attr('x1', xScale2(dataRange[0]) + padding.left) + .attr('y1', yScale2(tickValues[li]) + padding.top) + .attr('x2', xScale2(dataRange[1]) + padding.left) + .attr('y2', yScale2(tickValues[li]) + padding.top) + .style('stroke-dasharray', ('1, 5')) + .attr('stroke', 'grey'); + }); + + // bind up the context chart data to an array of circles + var contextCircles = context.selectAll('circle') .data(sgvData); - function prepareContextCircles(sel) { - var badData = []; - sel.attr('cx', function (d) { - return xScale2(d.date) + padding.left; - }) - .attr('cy', function (d) { + function prepareContextCircles (sel) { + var badData = []; + sel.attr('cx', function(d) { + return xScale2(d.date) + padding.left; + }) + .attr('cy', function(d) { if (isNaN(d.sgv)) { - badData.push(d); - return yScale2(client.utils.scaleMgdl(450) + padding.top); + badData.push(d); + return yScale2(client.utils.scaleMgdl(450) + padding.top); } else { - return yScale2(d.sgv) + padding.top; + return yScale2(d.sgv) + padding.top; } }) - .attr('fill', function (d) { + .attr('fill', function(d) { if (d.color === 'gray') { - return 'transparent'; + return 'transparent'; } - return d.color; + return d.color; }) - .style('opacity', function () { return 0.5 }) - .attr('stroke-width', function (d) {if (d.type === 'mbg') { return 2; } else { return 0; }}) - .attr('stroke', function () { return 'black'; }) - .attr('r', function(d) { - if (d.type === 'mbg') { - return 4; - } else { - return 2 + (options.weekwidth - 800) / 400; + .style('opacity', function() { return 0.5 }) + .attr('stroke-width', function(d) { if (d.type === 'mbg') { return 2; } else { return 0; } }) + .attr('stroke', function() { return 'black'; }) + .attr('r', function(d) { + if (d.type === 'mbg') { + return 4; + } else { + return 2 + (options.weekwidth - 800) / 400; } }) .on('mouseout', hideTooltip); - if (badData.length > 0) { - console.warn('Bad Data: isNaN(sgv)', badData); - } - return sel; + if (badData.length > 0) { + console.warn('Bad Data: isNaN(sgv)', badData); + } + return sel; } - // if new circle then just display - prepareContextCircles(contextCircles.enter().append('circle')); + // if new circle then just display + prepareContextCircles(contextCircles.enter().append('circle')); + + contextCircles.exit() + .remove(); + } - contextCircles.exit() - .remove(); - } + function hideTooltip () { + client.tooltip.style('opacity', 0); + } + }; + return weektoweek; +} - function hideTooltip ( ) { - client.tooltip.style('opacity', 0); - } -}; +module.exports = init; diff --git a/app.js b/lib/server/app.js similarity index 81% rename from app.js rename to lib/server/app.js index 2a94b1dd3e9..74153138ba1 100644 --- a/app.js +++ b/lib/server/app.js @@ -4,16 +4,30 @@ const _get = require('lodash/get'); const express = require('express'); const compression = require('compression'); const bodyParser = require('body-parser'); +const randomToken = require('random-token'); const path = require('path'); const fs = require('fs'); const ejs = require('ejs'); +function resolvePath(filePath) { + + if (fs.existsSync(filePath)) return filePath; + let p = path.join(__dirname, filePath); + if (fs.existsSync(p)) return p; + p = path.join(process.cwd(), filePath); + if (fs.existsSync(p)) return p; + + return require.resolve(filePath); +} + function create (env, ctx) { var app = express(); var appInfo = env.name + ' ' + env.version; app.set('title', appInfo); app.enable('trust proxy'); // Allows req.secure test on heroku https connections. + app.use(bodyParser.json()); + app.use(bodyParser.urlencoded({ extended: true })); var insecureUseHttp = env.insecureUseHttp; var secureHstsHeader = env.secureHstsHeader; if (!insecureUseHttp) { @@ -66,7 +80,7 @@ function create (env, ctx) { , reportOnly: secureCspReportOnly }; } - + console.info('Enabled SECURE_HSTS_HEADER (HTTP Strict Transport Security)'); const helmet = require('helmet'); @@ -101,42 +115,27 @@ function create (env, ctx) { } app.set('view engine', 'ejs'); - // this allows you to render .html files as templates in addition to .ejs app.engine('html', require('ejs').renderFile); - app.set("views", path.join(__dirname, "views/")); - - let cacheBuster = 'developmentMode'; - let lastModified = new Date(); - let busterPath = '/tmp/cacheBusterToken'; + app.set("views", resolvePath('/views')); - if (process.env.NODE_ENV !== 'development') { - busterPath = process.cwd() + busterPath; - } else { - busterPath = __dirname + busterPath; - } - - if (fs.existsSync(busterPath)) { - cacheBuster = fs.readFileSync(busterPath).toString().trim(); - var stats = fs.statSync(busterPath); - lastModified = stats.mtime; - } + let cacheBuster = process.env.NODE_ENV == 'development' ? 'developmentMode': randomToken(16); app.locals.cachebuster = cacheBuster; + let lastModified = new Date(); + app.get("/robots.txt", (req, res) => { res.setHeader('Content-Type', 'text/plain'); res.send(['User-agent: *','Disallow: /'].join('\n')); }); + const swcontent = fs.readFileSync(resolvePath('/views/service-worker.js'), { encoding: 'utf-8' }); + app.get("/sw.js", (req, res) => { res.setHeader('Content-Type', 'application/javascript'); if (process.env.NODE_ENV !== 'development') { res.setHeader('Last-Modified', lastModified.toUTCString()); } - res.send(ejs.render(fs.readFileSync( - require.resolve(`${__dirname}/views/service-worker.js`), - { encoding: 'utf-8' }), - { locals: app.locals} - )); + res.send(ejs.render(swcontent, { locals: app.locals} )); }); // Allow static resources to be cached for week @@ -147,15 +146,19 @@ function create (env, ctx) { console.log('Development environment detected, setting static file cache age to 1 second'); } - var staticFiles = express.static(env.static_files, { + var staticFiles = express.static(resolvePath(env.static_files), { maxAge }); // serve the static content app.use(staticFiles); + app.use('/translations', express.static(resolvePath('/translations'), { + maxAge + })); + if (ctx.bootErrors && ctx.bootErrors.length > 0) { - const bootErrorView = require('./lib/server/booterror')(env, ctx); + const bootErrorView = require('./booterror')(env, ctx); bootErrorView.setLocals(app.locals); app.get('*', bootErrorView); return app; @@ -181,11 +184,11 @@ function create (env, ctx) { /////////////////////////////////////////////////// // api and json object variables /////////////////////////////////////////////////// - const apiRoot = require('./lib/api/root')(env, ctx); - var api = require('./lib/api/')(env, ctx); - var api3 = require('./lib/api3/')(env, ctx); - var ddata = require('./lib/data/endpoints')(env, ctx); - var notificationsV2 = require('./lib/api/notifications-v2')(app, ctx); + const apiRoot = require('../api/root')(env, ctx); + var api = require('../api/')(env, ctx); + var api3 = require('../api3/')(env, ctx); + var ddata = require('../data/endpoints')(env, ctx); + var notificationsV2 = require('../api/notifications-v2')(app, ctx); app.use(compression({ filter: function shouldCompress (req, res) { @@ -220,11 +223,6 @@ function create (env, ctx) { , title: 'Nightscout reporting' , type: 'report' } - , "/translations": { - file: "translationsindex.html" - , title: 'Nightscout translations' - , type: 'translations' - } , "/split": { file: "frame.html" , title: '8-user view' @@ -243,22 +241,16 @@ function create (env, ctx) { }); }); - const clockviews = require('./lib/server/clocks.js')(env, ctx); + const clockviews = require('./clocks.js')(env, ctx); clockviews.setLocals(app.locals); app.use("/clock", clockviews); - app.use('/api', bodyParser({ - limit: 1048576 * 50 - }), apiRoot); + app.use('/api', apiRoot); - app.use('/api/v1', bodyParser({ - limit: 1048576 * 50 - }), api); + app.use('/api/v1', api); - app.use('/api/v2', bodyParser({ - limit: 1048576 * 50 - }), api); + app.use('/api/v2', api); app.use('/api/v2/properties', ctx.properties); app.use('/api/v2/authorization', ctx.authorization.endpoints); @@ -270,14 +262,19 @@ function create (env, ctx) { // pebble data app.get('/pebble', ctx.pebble); + const swaggerjson = fs.readFileSync(resolvePath(__dirname + '/swagger.json'), { encoding: 'utf-8' }); + const swaggeryaml = fs.readFileSync(resolvePath(__dirname + '/swagger.yaml'), { encoding: 'utf-8' }); + // expose swagger.json app.get('/swagger.json', function(req, res) { - res.sendFile(__dirname + '/swagger.json'); + res.setHeader("Content-Type", 'application/json'); + res.send(swaggerjson); }); // expose swagger.yaml app.get('/swagger.yaml', function(req, res) { - res.sendFile(__dirname + '/swagger.yaml'); + res.setHeader("Content-Type", 'text/vnd.yaml'); + res.send(swaggeryaml); }); // API docs @@ -285,7 +282,7 @@ function create (env, ctx) { const swaggerUi = require('swagger-ui-express'); const swaggerUseSchema = schema => (...args) => swaggerUi.setup(schema)(...args); const swaggerDocument = require('./swagger.json'); - const swaggerDocumentApiV3 = require('./lib/api3/swagger.json'); + const swaggerDocumentApiV3 = require('../api3/swagger.json'); app.use('/api-docs', swaggerUi.serve, swaggerUseSchema(swaggerDocument)); app.use('/api3-docs', swaggerUi.serve, swaggerUseSchema(swaggerDocumentApiV3)); @@ -298,7 +295,6 @@ function create (env, ctx) { // if production, rely on postinstall script to run packaging for us app.locals.bundle = '/bundle'; - app.locals.mode = 'production'; if (process.env.NODE_ENV === 'development') { @@ -309,7 +305,7 @@ function create (env, ctx) { app.locals.bundle = '/devbundle'; const webpack = require('webpack'); - var webpack_conf = require('./webpack.config'); + const webpack_conf = require('../../webpack/webpack.config'); const middleware = require('webpack-dev-middleware'); const compiler = webpack(webpack_conf); @@ -317,7 +313,6 @@ function create (env, ctx) { middleware(compiler, { // webpack-dev-middleware options publicPath: webpack_conf.output.publicPath - , lazy: false }) ); @@ -327,16 +322,9 @@ function create (env, ctx) { } // Production bundling - var tmpFiles; - if (fs.existsSync(process.cwd() + '/tmp/cacheBusterToken')) { - tmpFiles = express.static('tmp', { - maxAge: maxAge - }); - } else { - tmpFiles = express.static(__dirname + '/tmp', { - maxAge: maxAge - }); - } + const tmpFiles = express.static(resolvePath('/tmp/public'), { + maxAge: maxAge + }); // serve the static content app.use('/bundle', tmpFiles); @@ -357,7 +345,7 @@ function create (env, ctx) { , coffee_match: /coffeescript/ , json_match: /json/ , cssmin: myCssmin - , cache: __dirname + '/tmp' + , cache: resolvePath('/tmp/public') , onerror: undefined , })); diff --git a/lib/server/bootevent.js b/lib/server/bootevent.js index ff4e9110f00..bb2d29afd7d 100644 --- a/lib/server/bootevent.js +++ b/lib/server/bootevent.js @@ -1,53 +1,59 @@ 'use strict'; -var _ = require('lodash'); - -var UPDATE_THROTTLE = 5000; +const _ = require('lodash'); +const UPDATE_THROTTLE = 5000; function boot (env, language) { function startBoot(ctx, next) { + + console.log('Executing startBoot'); + ctx.runtimeState = 'booting'; + ctx.settings = env.settings; + ctx.bus = require('../bus')(env.settings, ctx); + ctx.adminnotifies = require('../adminnotifies')(ctx); + if (env.notifies) { + for (var i = 0; i < env.notifies.length; i++) { + ctx.adminnotifies.addNotify(env.notifies[i]); + } + } next(); } ////////////////////////////////////////////////// // Check Node version. - // Latest Node 8 LTS and Latest Node 10 LTS are recommended and supported. - // Latest Node version on Azure is tolerated, but not recommended - // Latest Node (non LTS) version works, but is not recommended + // Latest Node 10 to 14 LTS are recommended and supported. // Older Node versions or Node versions with known security issues will not work. - // More explicit: - // < 8 does not work, not supported - // >= 8.15.1 works, supported and recommended - // == 9.x does not work, not supported - // == 10.15.2 works, not fully supported and not recommended (Azure version) - // >= 10.16.0 works, supported and recommended - // == 11.x does not work, not supported - // >= 12.6.0 does work, not recommended, will not be supported. We only support Node LTS releases /////////////////////////////////////////////////// function checkNodeVersion (ctx, next) { + + console.log('Executing checkNodeVersion'); + var semver = require('semver'); var nodeVersion = process.version; const isLTS = process.release.lts ? true : false; - - if (!isLTS) { - console.log( 'ERROR: Node version ' + nodeVersion + ' is not supported. Please use a secure LTS version or upgrade your Node'); - process.exit(1); - } - - if (semver.satisfies(nodeVersion, '^12.0.0') || semver.satisfies(nodeVersion, '^10.0.0')) { + + if (isLTS && (semver.satisfies(nodeVersion, '^14.0.0') || semver.satisfies(nodeVersion, '^12.0.0') || semver.satisfies(nodeVersion, '^10.0.0'))) { //Latest Node 10 LTS and Node 12 LTS are recommended and supported. //Require at least Node 8 LTS and Node 10 LTS without known security issues console.debug('Node LTS version ' + nodeVersion + ' is supported'); next(); + return; } + + console.log( 'ERROR: Node version ' + nodeVersion + ' is not supported. Please use a secure LTS version or upgrade your Node'); + process.exit(1); + } function checkEnv (ctx, next) { + + console.log('Executing checkEnv'); + ctx.language = language; - if (env.err) { + if (env.err.length > 0) { ctx.bootErrors = ctx.bootErrors || [ ]; ctx.bootErrors.push({'desc': 'ENV Error', err: env.err}); } @@ -59,6 +65,9 @@ function boot (env, language) { } function augmentSettings (ctx, next) { + + console.log('Executing augmentSettings'); + var configURL = env.IMPORT_CONFIG || null; var url = require('url'); var href = null; @@ -93,6 +102,8 @@ function boot (env, language) { function checkSettings (ctx, next) { + console.log('Executing checkSettings'); + ctx.bootErrors = ctx.bootErrors || []; console.log('Checking settings'); @@ -102,16 +113,27 @@ function boot (env, language) { err: 'MONGODB_URI setting is missing, cannot connect to database'}); } - if (!env.api_secret) { + if (!env.enclave.isApiKeySet()) { ctx.bootErrors.push({'desc': 'Mandatory setting missing', err: 'API_SECRET setting is missing, cannot enable REST API'}); } + if (env.settings.authDefaultRoles == 'readable') { + const message = { + title: "Nightscout readable by world" + ,message: "Your Nightscout installation is readable by anyone who knows the web page URL. Please consider closing access to the site by following the instructions in the Nightscout documentation." + ,persistent: true + }; + ctx.adminnotifies.addNotify(message); + } + next(); } function setupStorage (ctx, next) { + console.log('Executing setupStorage'); + if (hasBootErrors(ctx)) { return next(); } @@ -149,6 +171,9 @@ function boot (env, language) { } function setupAuthorization (ctx, next) { + + console.log('Executing setupAuthorization'); + if (hasBootErrors(ctx)) { return next(); } @@ -164,6 +189,9 @@ function boot (env, language) { } function setupInternals (ctx, next) { + + console.log('Executing setupInternals'); + if (hasBootErrors(ctx)) { return next(); } @@ -177,9 +205,10 @@ function boot (env, language) { ctx.plugins = require('../plugins')({ settings: env.settings , language: ctx.language + , levels: ctx.levels }).registerServerDefaults(); - ctx.pushover = require('../plugins/pushover')(env); + ctx.pushover = require('../plugins/pushover')(env, ctx); ctx.maker = require('../plugins/maker')(env); ctx.pushnotify = require('./pushnotify')(env, ctx); ctx.loop = require('./loop')(env, ctx); @@ -192,11 +221,11 @@ function boot (env, language) { ctx.food = require('./food')(env, ctx); ctx.pebble = require('./pebble')(env, ctx); ctx.properties = require('../api/properties')(env, ctx); - ctx.bus = require('../bus')(env.settings, ctx); ctx.ddata = require('../data/ddata')(); ctx.cache = require('./cache')(env,ctx); ctx.dataloader = require('../data/dataloader')(env, ctx); ctx.notifications = require('../notifications')(env, ctx); + ctx.purifier = require('./purifier')(env,ctx); if (env.settings.isEnabled('alexa') || env.settings.isEnabled('googlehome')) { ctx.virtAsstBase = require('../plugins/virtAsstBase')(env, ctx); @@ -214,6 +243,9 @@ function boot (env, language) { } function ensureIndexes (ctx, next) { + + console.log('Executing ensureIndexes'); + if (hasBootErrors(ctx)) { return next(); } @@ -230,6 +262,9 @@ function boot (env, language) { } function setupListeners (ctx, next) { + + console.log('Executing setupListeners'); + if (hasBootErrors(ctx)) { return next(); } @@ -270,6 +305,9 @@ function boot (env, language) { } function setupBridge (ctx, next) { + + console.log('Executing setupBridge'); + if (hasBootErrors(ctx)) { return next(); } @@ -282,6 +320,9 @@ function boot (env, language) { } function setupMMConnect (ctx, next) { + + console.log('Executing setupMMConnect'); + if (hasBootErrors(ctx)) { return next(); } @@ -294,6 +335,9 @@ function boot (env, language) { } function finishBoot (ctx, next) { + + console.log('Executing finishBoot'); + if (hasBootErrors(ctx)) { return next(); } diff --git a/lib/server/cache.js b/lib/server/cache.js index 88e5f77ca02..5b92e42f58d 100644 --- a/lib/server/cache.js +++ b/lib/server/cache.js @@ -7,7 +7,7 @@ * to be accessed by the persistence layer as data is inserted, updated * or deleted, as well as the periodic dataloader, which polls Mongo * for new inserts. - * + * * Longer term, the cache is planned to allow skipping the Mongo polls * altogether. */ diff --git a/lib/server/enclave.js b/lib/server/enclave.js new file mode 100644 index 00000000000..2ae0ef2ebcb --- /dev/null +++ b/lib/server/enclave.js @@ -0,0 +1,81 @@ +'use strict;' + +const path = require('path'); +const crypto = require('crypto'); +const jwt = require('jsonwebtoken'); +const fs = require('fs'); + +// this is a class for holding potentially sensitive data in the app +// the class also implement functions to use the data, so the data is not shared outside the class + +const init = function init () { + + const enclave = {}; + const secrets = {}; + const apiKey = Symbol('api-secret'); + const apiKeySHA1 = Symbol('api-secretSHA1'); + const apiKeySHA512 = Symbol('api-secretSHA512'); + const jwtKey = Symbol('jwtkey'); + let apiKeySet = false; + + function readKey (filename) { + let filePath = path.resolve(__dirname + '/../../tmp/' + filename); + if (fs.existsSync(filePath)) { + return fs.readFileSync(filePath).toString().trim(); + } + console.error('Key file ', filePath, 'not found'); + return null; + } + + secrets[jwtKey] = readKey('randomString'); + + function genHash(data, algorihtm) { + const hash = crypto.createHash(algorihtm); + data = hash.update(data, 'utf-8'); + return data.digest('hex'); + } + + enclave.setApiKey = function setApiKey (keyValue) { + if (keyValue.length < 12) return; + apiKeySet = true; + secrets[apiKey] = keyValue; + secrets[apiKeySHA1] = genHash(keyValue,'sha1'); + secrets[apiKeySHA512] = genHash(keyValue,'sha512'); + } + + enclave.isApiKeySet = function isApiKeySet () { + return isApiKeySet; + } + + enclave.isApiKey = function isApiKey (keyValue) { + return keyValue == secrets[apiKeySHA1] || keyValue == secrets[apiKeySHA512]; + } + + enclave.setJWTKey = function setJWTKey (keyValue) { + secrets[jwtKey] = keyValue; + } + + enclave.signJWT = function signJWT(token, lifetime) { + const lt = lifetime ? lifetime : '8h'; + return jwt.sign(token, secrets[jwtKey], { expiresIn: lt }); + } + + enclave.verifyJWT = function verifyJWT(tokenString) { + try { + return jwt.verify(tokenString, secrets[jwtKey]); + } catch(err) { + return null; + } + } + + enclave.getSubjectHash = function getSubjectHash(id) { + var shasum = crypto.createHash('sha1'); + shasum.update(secrets[apiKeySHA1]); + shasum.update(id); + return shasum.digest('hex'); + } + + return enclave; +} + +module.exports = init; diff --git a/env.js b/lib/server/env.js similarity index 62% rename from env.js rename to lib/server/env.js index 275271bdf26..afb53d51332 100644 --- a/env.js +++ b/lib/server/env.js @@ -1,62 +1,68 @@ 'use strict'; -var _each = require('lodash/each'); -var _trim = require('lodash/trim'); -var _forIn = require('lodash/forIn'); -var _startsWith = require('lodash/startsWith'); -var _camelCase = require('lodash/camelCase'); - -var fs = require('fs'); -var crypto = require('crypto'); -var consts = require('./lib/constants'); - -var env = { - settings: require('./lib/settings')() +const _each = require('lodash/each'); +const _trim = require('lodash/trim'); +const _forIn = require('lodash/forIn'); +const _startsWith = require('lodash/startsWith'); +const _camelCase = require('lodash/camelCase'); +const enclave = require('./enclave'); + +const mongoParser = require('mongo-url-parser'); + +const stringEntropy = require('fast-password-entropy') + +const fs = require('fs'); +const crypto = require('crypto'); +const consts = require('../constants'); + +const env = { + settings: require('../settings')() }; var shadowEnv; // Module to constrain all config and environment parsing to one spot. // See README.md for info about all the supported ENV VARs -function config ( ) { +function config () { // Assume users will typo whitespaces into keys and values shadowEnv = {}; Object.keys(process.env).forEach((key, index) => { - shadowEnv[_trim(key)] = _trim(process.env[key]); + shadowEnv[_trim(key)] = _trim(process.env[key]); }); env.PORT = readENV('PORT', 1337); env.HOSTNAME = readENV('HOSTNAME', null); env.IMPORT_CONFIG = readENV('IMPORT_CONFIG', null); - env.static_files = readENV('NIGHTSCOUT_STATIC_FILES', __dirname + '/static/'); + env.static_files = readENV('NIGHTSCOUT_STATIC_FILES', '/static'); env.debug = { minify: readENVTruthy('DEBUG_MINIFY', true) }; - if (env.err) { - delete env.err; - } + env.err = []; + env.notifies = []; + env.enclave = enclave(); setSSL(); + setStorage(); setAPISecret(); setVersion(); - setStorage(); updateSettings(); return env; } -function setSSL() { +function setSSL () { env.SSL_KEY = readENV('SSL_KEY'); env.SSL_CERT = readENV('SSL_CERT'); env.SSL_CA = readENV('SSL_CA'); env.ssl = false; if (env.SSL_KEY && env.SSL_CERT) { env.ssl = { - key: fs.readFileSync(env.SSL_KEY), cert: fs.readFileSync(env.SSL_CERT) + key: fs.readFileSync(env.SSL_KEY) + , cert: fs.readFileSync(env.SSL_CERT) }; if (env.SSL_CA) { env.ca = fs.readFileSync(env.SSL_CA); @@ -66,13 +72,13 @@ function setSSL() { env.insecureUseHttp = readENVTruthy("INSECURE_USE_HTTP", false); env.secureHstsHeader = readENVTruthy("SECURE_HSTS_HEADER", true); env.secureHstsHeaderIncludeSubdomains = readENVTruthy("SECURE_HSTS_HEADER_INCLUDESUBDOMAINS", false); - env.secureHstsHeaderPreload= readENVTruthy("SECURE_HSTS_HEADER_PRELOAD", false); + env.secureHstsHeaderPreload = readENVTruthy("SECURE_HSTS_HEADER_PRELOAD", false); env.secureCsp = readENVTruthy("SECURE_CSP", false); env.secureCspReportOnly = readENVTruthy("SECURE_CSP_REPORT_ONLY", false); } // A little ugly, but we don't want to read the secret into a var -function setAPISecret() { +function setAPISecret () { var useSecret = (readENV('API_SECRET') && readENV('API_SECRET').length > 0); //TODO: should we clear API_SECRET from process env? env.api_secret = null; @@ -81,22 +87,39 @@ function setAPISecret() { if (readENV('API_SECRET').length < consts.MIN_PASSPHRASE_LENGTH) { var msg = ['API_SECRET should be at least', consts.MIN_PASSPHRASE_LENGTH, 'characters'].join(' '); console.error(msg); - env.err = {desc: msg}; + env.err.push({ desc: msg }); } else { - var shasum = crypto.createHash('sha1'); - shasum.update(readENV('API_SECRET')); - env.api_secret = shasum.digest('hex'); + + const apiSecret = readENV('API_SECRET'); + delete process.env.API_SECRET; + + env.enclave.setApiKey(apiSecret); + var testresult = stringEntropy(apiSecret); + + console.log('API_SECRET has', testresult, 'bits of entropy'); + + if (testresult < 60) { + env.notifies.push({ persistent: true, title: 'Security issue', message: 'Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.' }); + } + + if (env.storageURI) { + const parsedURL = mongoParser(env.storageURI); + if (parsedURL.auth && parsedURL.auth.password == apiSecret) { + env.notifies.push({ persistent: true, title: 'Security issue', message: 'MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.' }); + } + } + } } } -function setVersion() { - var software = require('./package.json'); +function setVersion () { + var software = require('../../package.json'); env.version = software.version; env.name = software.name; } -function setStorage() { +function setStorage () { env.storageURI = readENV('STORAGE_URI') || readENV('MONGO_CONNECTION') || readENV('MONGO') || readENV('MONGOLAB_URI') || readENV('MONGODB_URI'); env.entries_collection = readENV('ENTRIES_COLLECTION') || readENV('MONGO_COLLECTION', 'entries'); env.authentication_collections_prefix = readENV('MONGO_AUTHENTICATION_COLLECTIONS_PREFIX', 'auth_'); @@ -107,17 +130,14 @@ function setStorage() { env.food_collection = readENV('MONGO_FOOD_COLLECTION', 'food'); env.activity_collection = readENV('MONGO_ACTIVITY_COLLECTION', 'activity'); - // TODO: clean up a bit - // Some people prefer to use a json configuration file instead. - // This allows a provided json config to override environment variables - var DB = require('./database_configuration.json'), - DB_URL = DB.url ? DB.url : env.storageURI, - DB_COLLECTION = DB.collection ? DB.collection : env.entries_collection; + var DB = { url: null, collection: null } + , DB_URL = DB.url ? DB.url : env.storageURI + , DB_COLLECTION = DB.collection ? DB.collection : env.entries_collection; env.storageURI = DB_URL; env.entries_collection = DB_COLLECTION; } -function updateSettings() { +function updateSettings () { var envNameOverrides = { UNITS: 'DISPLAY_UNITS' @@ -141,12 +161,12 @@ function updateSettings() { } } -function readENV(varName, defaultValue) { +function readENV (varName, defaultValue) { //for some reason Azure uses this prefix, maybe there is a good reason - var value = shadowEnv['CUSTOMCONNSTR_' + varName] - || shadowEnv['CUSTOMCONNSTR_' + varName.toLowerCase()] - || shadowEnv[varName] - || shadowEnv[varName.toLowerCase()]; + var value = shadowEnv['CUSTOMCONNSTR_' + varName] || + shadowEnv['CUSTOMCONNSTR_' + varName.toLowerCase()] || + shadowEnv[varName] || + shadowEnv[varName.toLowerCase()]; if (varName == 'DISPLAY_UNITS') { if (value && value.toLowerCase().includes('mmol')) { @@ -159,11 +179,9 @@ function readENV(varName, defaultValue) { return value != null ? value : defaultValue; } -function readENVTruthy(varName, defaultValue) { +function readENVTruthy (varName, defaultValue) { var value = readENV(varName, defaultValue); - if (typeof value === 'string' && (value.toLowerCase() === 'on' || value.toLowerCase() === 'true')) { value = true; } - else if (typeof value === 'string' && (value.toLowerCase() === 'off' || value.toLowerCase() === 'false')) { value = false; } - else { value=defaultValue } + if (typeof value === 'string' && (value.toLowerCase() === 'on' || value.toLowerCase() === 'true')) { value = true; } else if (typeof value === 'string' && (value.toLowerCase() === 'off' || value.toLowerCase() === 'false')) { value = false; } else { value = defaultValue } return value; } @@ -173,13 +191,13 @@ function findExtendedSettings (envs) { extended.devicestatus = {}; extended.devicestatus.advanced = true; extended.devicestatus.days = 1; - if(shadowEnv['DEVICESTATUS_DAYS'] && shadowEnv['DEVICESTATUS_DAYS'] == '2') extended.devicestatus.days = 1; + if (shadowEnv['DEVICESTATUS_DAYS'] && shadowEnv['DEVICESTATUS_DAYS'] == '2') extended.devicestatus.days = 1; function normalizeEnv (key) { return key.toUpperCase().replace('CUSTOMCONNSTR_', ''); } - _each(env.settings.enable, function eachEnable(enable) { + _each(env.settings.enable, function eachEnable (enable) { if (_trim(enable)) { _forIn(envs, function eachEnvPair (value, key) { var env = normalizeEnv(key); @@ -199,6 +217,6 @@ function findExtendedSettings (envs) { } }); return extended; - } +} module.exports = config; diff --git a/lib/server/purifier.js b/lib/server/purifier.js new file mode 100644 index 00000000000..c9fe3c0230e --- /dev/null +++ b/lib/server/purifier.js @@ -0,0 +1,36 @@ +'use strict'; + +const createDOMPurify = require('dompurify'); +const { JSDOM } = require('jsdom'); +const window = new JSDOM('').window; +const DOMPurify = createDOMPurify(window); + +function init (env, ctx) { + + const purifier = {}; + + function iterate (obj) { + for (var property in obj) { + if (obj.hasOwnProperty(property)) { + if (typeof obj[property] == 'object') + iterate(obj[property]); + else + if (isNaN(obj[property])) { + const clean = DOMPurify.sanitize(obj[property]); + if (obj[property] !== clean) { + obj[property] = clean; + } + } + } + } + } + + purifier.purifyObject = function purifyObject (obj) { + return iterate(obj); + } + + return purifier; + +} + +module.exports = init; diff --git a/lib/server/pushnotify.js b/lib/server/pushnotify.js index 48d5be11078..4fd35ac03c4 100644 --- a/lib/server/pushnotify.js +++ b/lib/server/pushnotify.js @@ -4,7 +4,6 @@ const _ = require('lodash'); const crypto = require('crypto'); const NodeCache = require('node-cache'); -const levels = require('../levels'); const times = require('../times'); function init (env, ctx) { @@ -12,7 +11,7 @@ function init (env, ctx) { function pushnotify () { return pushnotify; } - + var levels = ctx.levels; var receipts = new NodeCache({ stdTTL: times.hour().secs, checkperiod: times.mins(5).secs }); var recentlySent = new NodeCache({ stdTTL: times.mins(15).secs, checkperiod: 20 }); diff --git a/lib/server/server.js b/lib/server/server.js new file mode 100644 index 00000000000..ea75d5ac636 --- /dev/null +++ b/lib/server/server.js @@ -0,0 +1,92 @@ +/* +* cgm-remote-monitor - web app to broadcast cgm readings +* Copyright (C) 2014 Nightscout contributors. See the COPYRIGHT file +* at the root directory of this distribution and at +* https://github.com/nightscout/cgm-remote-monitor/blob/master/COPYRIGHT +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Affero General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Affero General Public License for more details. +* +* You should have received a copy of the GNU Affero General Public License +* along with this program. If not, see . +*/ + +// Description: Basic web server to display data from Dexcom G4. Requires a database that contains +// the Dexcom SGV data. +'use strict'; + +/////////////////////////////////////////////////// +// DB Connection setup and utils +/////////////////////////////////////////////////// + +const fs = require('fs'); +const env = require('./env')( ); +const language = require('../language')(); +const translate = language.set(env.settings.language).translate; +language.loadLocalization(fs); + +/////////////////////////////////////////////////// +// setup http server +/////////////////////////////////////////////////// +var PORT = env.PORT; +var HOSTNAME = env.HOSTNAME; + +function create (app) { + var transport = (env.ssl + ? require('https') : require('http')); + if (env.ssl) { + return transport.createServer(env.ssl, app); + } + return transport.createServer(app); +} + +require('./bootevent')(env, language).boot(function booted (ctx) { + + console.log('Boot event processing completed'); + + var app = require('./app')(env, ctx); + var server = create(app).listen(PORT, HOSTNAME); + console.log(translate('Listening on port'), PORT, HOSTNAME); + + if (ctx.bootErrors && ctx.bootErrors.length > 0) { + return; + } + + ctx.bus.on('teardown', function serverTeardown () { + server.close(); + clearTimeout(sendStartupAllClearTimer); + ctx.store.client.close(); + }); + + /////////////////////////////////////////////////// + // setup socket io for data and message transmission + /////////////////////////////////////////////////// + var websocket = require('./websocket')(env, ctx, server); + + ctx.bus.on('data-processed', function() { + websocket.update(); + }); + + ctx.bus.on('notification', function(notify) { + websocket.emitNotification(notify); + }); + + //after startup if there are no alarms send all clear + let sendStartupAllClearTimer = setTimeout(function sendStartupAllClear () { + var alarm = ctx.notifications.findHighestAlarm(); + if (!alarm) { + ctx.bus.emit('notification', { + clear: true + , title: 'All Clear' + , message: 'Server started without alarms' + }); + } + }, 20000); +}); diff --git a/swagger.json b/lib/server/swagger.json similarity index 99% rename from swagger.json rename to lib/server/swagger.json index d4f9cbde296..bc5589b786e 100755 --- a/swagger.json +++ b/lib/server/swagger.json @@ -8,7 +8,7 @@ "info": { "title": "Nightscout API", "description": "Own your DData with the Nightscout API", - "version": "14.0.7", + "version": "14.2.2", "license": { "name": "AGPL 3", "url": "https://www.gnu.org/licenses/agpl.txt" @@ -1192,6 +1192,14 @@ "type": "string", "description": "The units for the glucose value, mg/dl or mmol." }, + "transmitterId": { + "type": "string", + "description": "The transmitter ID of the transmitter being started." + }, + "sensorCode": { + "type": "string", + "description": "The code used to start a Dexcom G6 sensor." + }, "notes": { "type": "string", "description": "Description/notes of treatment." diff --git a/swagger.yaml b/lib/server/swagger.yaml similarity index 99% rename from swagger.yaml rename to lib/server/swagger.yaml index 98d89401be6..dc4594c3133 100755 --- a/swagger.yaml +++ b/lib/server/swagger.yaml @@ -4,7 +4,7 @@ servers: info: title: Nightscout API description: Own your DData with the Nightscout API - version: 14.0.7 + version: 14.2.2 license: name: AGPL 3 url: 'https://www.gnu.org/licenses/agpl.txt' @@ -891,6 +891,12 @@ components: units: type: string description: 'The units for the glucose value, mg/dl or mmol.' + transmitterId: + type: string + description: 'The transmitter ID of the transmitter being started.' + sensorCode: + type: string + description: 'The code used to start a Dexcom G6 sensor.' notes: type: string description: Description/notes of treatment. diff --git a/lib/server/websocket.js b/lib/server/websocket.js index 7a685ccde05..b02275e2279 100644 --- a/lib/server/websocket.js +++ b/lib/server/websocket.js @@ -1,6 +1,5 @@ 'use strict'; -var levels = require('../levels'); var times = require('../times'); var calcData = require('../data/calcdelta'); var ObjectID = require('mongodb').ObjectID; @@ -11,6 +10,8 @@ function init (env, ctx, server) { return websocket; } + var levels = ctx.levels; + //var log_yellow = '\x1B[33m'; var log_green = '\x1B[32m'; var log_magenta = '\x1B[35m'; @@ -36,11 +37,13 @@ function init (env, ctx, server) { // This is little ugly copy but I was unable to pass testa after making module from status and share with /api/v1/status function status () { var versionNum = 0; - var verParse = /(\d+)\.(\d+)\.(\d+)*/.exec(env.version); + const vString = '' + env.version; + const verParse = vString.split('.'); if (verParse) { - versionNum = 10000 * parseInt(verParse[1]) + 100 * parseInt(verParse[2]) + 1 * parseInt(verParse[3]); + versionNum = 10000 * Number(verParse[0]) + 100 * Number(verParse[1]) + 1 * Number(verParse[2]); } - var apiEnabled = env.api_secret ? true : false; + + var apiEnabled = env.enclave.isApiKeySet(); var activeProfile = ctx.ddata.lastProfileFromSwitch; @@ -82,8 +85,11 @@ function init (env, ctx, server) { }); } - function verifyAuthorization (message, callback) { - ctx.authorization.resolve({ api_secret: message.secret, token: message.token }, function resolved (err, result) { + function verifyAuthorization (message, ip, callback) { + + if (!message) message = {}; + + ctx.authorization.resolve({ api_secret: message.secret, token: message.token, ip: ip }, function resolved (err, result) { if (err) { return callback(err, { @@ -251,9 +257,7 @@ function init (env, ctx, server) { } var objId = new ObjectID(data._id); - ctx.store.collection(collection).update( - { '_id': objId }, - { $unset: data.data } + ctx.store.collection(collection).update({ '_id': objId }, { $unset: data.data } , function(err, results) { if (!err) { @@ -269,7 +273,7 @@ function init (env, ctx, server) { } }); } - }); + }); if (callback) { callback({ result: 'success' }); @@ -319,7 +323,13 @@ function init (env, ctx, server) { // try to find exact match ctx.store.collection(collection).find(query).toArray(function findResult (err, array) { - if (err || array.length > 0) { + if (err) { + console.error(err); + callback([]); + return; + } + + if (array.length > 0) { console.log(LOG_DEDUP + 'Exact match'); if (callback) { callback([array[0]]); @@ -362,7 +372,14 @@ function init (env, ctx, server) { // try to find similiar ctx.store.collection(collection).find(query_similiar).toArray(function findSimiliarResult (err, array) { // if found similiar just update date. next time it will match exactly - if (err || array.length > 0) { + + if (err) { + console.error(err); + callback([]); + return; + } + + if (array.length > 0) { console.log(LOG_DEDUP + 'Found similiar', array[0]); array[0].created_at = data.data.created_at; var objId = new ObjectID(array[0]._id); @@ -407,14 +424,22 @@ function init (env, ctx, server) { // try to find exact match ctx.store.collection(collection).find(queryDev).toArray(function findResult (err, array) { - if (err || array.length > 0) { + if (err) { + console.error(err); + callback([]); + return; + } + + if (array.length > 0) { console.log(LOG_DEDUP + 'Devicestatus exact match'); if (callback) { callback([array[0]]); } return; } + }); + ctx.store.collection(collection).insert(data.data, function insertResult (err, doc) { if (err != null && err.message) { console.log('devicestatus insertion error: ', err.message); @@ -438,7 +463,7 @@ function init (env, ctx, server) { console.log(data.collection + ' insertion error: ', err.message); return; } - + ctx.bus.emit('data-update', { type: data.collection , op: 'update' @@ -498,7 +523,17 @@ function init (env, ctx, server) { // [, status : true ] // } socket.on('authorize', function authorize (message, callback) { - verifyAuthorization(message, function verified (err, authorization) { + const remoteIP = socket.request.connection.remoteAddress; + verifyAuthorization(message, remoteIP, function verified (err, authorization) { + + if (err) { + console.log('Websocket authorization failed:', err); + socket.disconnect(); + return; + } + + socket.emit('connected'); + socketAuthorization = authorization; clientType = message.client; history = message.history || 48; //default history is 48 hours diff --git a/lib/settings.js b/lib/settings.js index 98a53b93a83..32cf888e8c0 100644 --- a/lib/settings.js +++ b/lib/settings.js @@ -1,7 +1,6 @@ 'use strict'; var _ = require('lodash'); -var levels = require('./levels'); var constants = require('./constants.json'); function init () { @@ -9,6 +8,8 @@ function init () { var settings = { units: 'mg/dl' , timeFormat: 12 + , dayStart: 7.0 + , dayEnd: 21.0 , nightMode: false , editMode: true , showRawbg: 'never' @@ -51,7 +52,6 @@ function init () { , deNormalizeDates: false , showClockDelta: false , showClockLastTime: false - , bolusRenderOver: 1 , frameUrl1: '' , frameUrl2: '' , frameUrl3: '' @@ -68,6 +68,8 @@ function init () { , frameName6: '' , frameName7: '' , frameName8: '' + , authFailDelay: 5000 + , adminNotifiesEnabled: true }; var secureSettings = [ @@ -103,6 +105,8 @@ function init () { , bgLow: mapNumber , bgTargetTop: mapNumber , bgTargetBottom: mapNumber + , authFailDelay: mapNumber + , adminNotifiesEnabled: mapTruthy }; function filterObj(obj, secureKeys) { @@ -167,7 +171,7 @@ function init () { } //TODO: getting sent in status.json, shouldn't be - settings.DEFAULT_FEATURES = ['bgnow', 'delta', 'direction', 'timeago', 'devicestatus', 'upbat', 'errorcodes', 'profile', 'dbsize', 'runtimestate', 'basal', 'careportal']; + settings.DEFAULT_FEATURES = ['bgnow', 'delta', 'direction', 'timeago', 'devicestatus', 'upbat', 'errorcodes', 'profile', 'bolus', 'dbsize', 'runtimestate', 'basal', 'careportal']; var wasSet = []; @@ -341,7 +345,7 @@ function init () { } function isUrgentHighAlarmEnabled(notify) { - return notify.eventName === 'high' && notify.level === levels.URGENT && settings.alarmUrgentHigh; + return notify.eventName === 'high' && notify.level === constants.LEVEL_URGENT && settings.alarmUrgentHigh; } function isHighAlarmEnabled(notify) { @@ -349,7 +353,7 @@ function init () { } function isUrgentLowAlarmEnabled(notify) { - return notify.eventName === 'low' && notify.level === levels.URGENT && settings.alarmUrgentLow; + return notify.eventName === 'low' && notify.level === constants.LEVEL_URGENT && settings.alarmUrgentLow; } function isLowAlarmEnabled(notify) { @@ -375,7 +379,7 @@ function init () { snoozeTime = settings.alarmUrgentLowMins; } else if (isLowAlarmEnabled(notify)) { snoozeTime = settings.alarmLowMins; - } else if (notify.level === levels.URGENT) { + } else if (notify.level === constants.LEVEL_URGENT) { snoozeTime = settings.alarmUrgentMins; } else { snoozeTime = settings.alarmWarnMins; diff --git a/lib/storage/mongo-storage.js b/lib/storage/mongo-storage.js index 8c2533873c7..987e41ef67d 100644 --- a/lib/storage/mongo-storage.js +++ b/lib/storage/mongo-storage.js @@ -1,18 +1,19 @@ 'use strict'; -var mongodb = require('mongodb'); -var connection = null; -var MongoClient = mongodb.MongoClient; -var mongo = {}; +const MongoClient = require('mongodb').MongoClient; -function init (env, cb, forceNewConnection) { +const mongo = { + client: null, + db: null, +}; - function maybe_connect (cb) { +function init(env, cb, forceNewConnection) { - if (connection != null && !forceNewConnection) { + function maybe_connect(cb) { + + if (mongo.db != null && !forceNewConnection) { console.log('Reusing MongoDB connection handler'); // If there is a valid callback, then return the Mongo-object - mongo.db = connection; if (cb && cb.call) { cb(null, mongo); @@ -23,61 +24,51 @@ function init (env, cb, forceNewConnection) { } console.log('Setting up new connection to MongoDB'); - var timeout = 30 * 1000; - var options = { - reconnectInterval: 10000 - , reconnectTries: 500 - , connectTimeoutMS: timeout - , socketTimeoutMS: timeout - , useNewUrlParser: true + const options = { + useNewUrlParser: true, + useUnifiedTopology: true, }; - var connect_with_retry = function(i) { - - MongoClient.connect(env.storageURI, options) - .then(client => { - console.log('Successfully established a connected to MongoDB'); - - var dbName = env.storageURI.split('/').pop().split('?'); - dbName = dbName[0]; // drop Connection Options - mongo.db = client.db(dbName); - connection = mongo.db; - mongo.client = client; - - mongo.db.command({ connectionStatus: 1 }).then( - result => { - const roles = result.authInfo.authenticatedUserRoles; - if (roles.length > 0 && roles[0].role == 'readAnyDatabase') { - console.error('Mongo user is read only'); - cb(new Error('MongoDB connection is in read only mode! Go back to MongoDB configuration and check your database user has read and write access.'), null); - } - - console.log('Mongo user role seems ok:', roles); - - // If there is a valid callback, then invoke the function to perform the callback - if (cb && cb.call) { - cb(null, mongo); - } - } - ); - }) - .catch(err => { - if (err.message && err.message.includes('AuthenticationFailed')) { - console.log('Authentication to Mongo failed'); - cb(new Error('MongoDB authentication failed! Double check the URL has the right username and password in MONGODB_URI.'), null); - return; - } - - if (err.name && err.name === "MongoNetworkError") { - var timeout = (i > 15) ? 60000 : i * 3000; - console.log('Error connecting to MongoDB: %j - retrying in ' + timeout / 1000 + ' sec', err); - setTimeout(connect_with_retry, timeout, i + 1); - if (i == 1) cb(new Error('MongoDB connection failed! Double check the MONGODB_URI setting in Heroku.'), null); - } else { - cb(new Error('MONGODB_URI ' + env.storageURI + ' seems invalid: ' + err.message)); - } - }); - + const connect_with_retry = async function (i) { + + mongo.client = new MongoClient(env.storageURI, options); + try { + await mongo.client.connect(); + + console.log('Successfully established connection to MongoDB'); + + const dbName = mongo.client.s.options.dbName; + mongo.db = mongo.client.db(dbName); + + const result = await mongo.db.command({ connectionStatus: 1 }); + const roles = result.authInfo.authenticatedUserRoles; + if (roles.length > 0 && roles[0].role == 'readAnyDatabase') { + console.error('Mongo user is read only'); + cb(new Error('MongoDB connection is in read only mode! Go back to MongoDB configuration and check your database user has read and write access.'), null); + } + + console.log('Mongo user role seems ok:', roles); + + // If there is a valid callback, then invoke the function to perform the callback + if (cb && cb.call) { + cb(null, mongo); + } + } catch (err) { + if (err.message && err.message.includes('AuthenticationFailed')) { + console.log('Authentication to Mongo failed'); + cb(new Error('MongoDB authentication failed! Double check the URL has the right username and password in MONGODB_URI.'), null); + return; + } + + if (err.name && err.name === "MongoServerSelectionError") { + const timeout = (i > 15) ? 60000 : i * 3000; + console.log('Error connecting to MongoDB: %j - retrying in ' + timeout / 1000 + ' sec', err); + setTimeout(connect_with_retry, timeout, i + 1); + if (i == 1) cb(new Error('MongoDB connection failed! Double check the MONGODB_URI setting in Heroku.'), null); + } else { + cb(new Error('MONGODB_URI seems invalid: ' + err.message)); + } + } }; return connect_with_retry(1); @@ -85,14 +76,14 @@ function init (env, cb, forceNewConnection) { } } - mongo.collection = function get_collection (name) { - return connection.collection(name); + mongo.collection = function get_collection(name) { + return mongo.db.collection(name); }; - mongo.ensureIndexes = function ensureIndexes (collection, fields) { - fields.forEach(function(field) { + mongo.ensureIndexes = function ensureIndexes(collection, fields) { + fields.forEach(function (field) { console.info('ensuring index for: ' + field); - collection.createIndex(field, { 'background': true }, function(err) { + collection.createIndex(field, { 'background': true }, function (err) { if (err) { console.error('unable to ensureIndex for: ' + field + ' - ' + err); } diff --git a/lib/utils.js b/lib/utils.js index 083c4284846..7d6d434472e 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -34,12 +34,16 @@ function init(ctx) { } }; - utils.toFixedMin = function toFixedMin(value,digits) { + /** + * Round the number to maxDigits places, return a string + * that truncates trailing zeros + */ + utils.toRoundedStr = function toRoundedStr (value, maxDigits) { if (!value) { return '0'; } - var mult = Math.pow(10,digits); - var fixed = Math.sign(value) * Math.round(Math.abs(value)*mult) / mult; + const mult = Math.pow(10, maxDigits); + const fixed = Math.sign(value) * Math.round(Math.abs(value)*mult) / mult; if (isNaN(fixed)) return '0'; return String(fixed); }; diff --git a/npm-shrinkwrap.json b/package-lock.json similarity index 72% rename from npm-shrinkwrap.json rename to package-lock.json index a137dcd1533..a05aeb3f7c7 100644 --- a/npm-shrinkwrap.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "nightscout", - "version": "14.0.7", + "version": "14.2.2", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -13,21 +13,9 @@ } }, "@babel/compat-data": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.11.0.tgz", - "integrity": "sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ==", - "requires": { - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "semver": "^5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.7.tgz", + "integrity": "sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw==" }, "@babel/core": { "version": "7.11.4", @@ -111,11 +99,28 @@ } }, "@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz", + "integrity": "sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ==", "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.10" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" + }, + "@babel/types": { + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", + "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-builder-binary-assignment-operator-visitor": { @@ -128,14 +133,13 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz", - "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz", + "integrity": "sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==", "requires": { - "@babel/compat-data": "^7.10.4", - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "levenary": "^1.1.1", + "@babel/compat-data": "^7.12.5", + "@babel/helper-validator-option": "^7.12.1", + "browserslist": "^4.14.5", "semver": "^5.5.0" }, "dependencies": { @@ -147,26 +151,165 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz", - "integrity": "sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", + "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", "requires": { "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.10.5", + "@babel/helper-member-expression-to-functions": "^7.12.1", "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1", "@babel/helper-split-export-declaration": "^7.10.4" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/generator": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", + "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==", + "requires": { + "@babel/types": "^7.12.11", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", + "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==", + "requires": { + "@babel/types": "^7.12.10" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", + "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", + "requires": { + "@babel/types": "^7.12.7" + } + }, + "@babel/helper-replace-supers": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz", + "integrity": "sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.12.7", + "@babel/helper-optimise-call-expression": "^7.12.10", + "@babel/traverse": "^7.12.10", + "@babel/types": "^7.12.11" + }, + "dependencies": { + "@babel/helper-optimise-call-expression": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", + "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==", + "requires": { + "@babel/types": "^7.12.10" + } + } + } + }, + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" + }, + "@babel/parser": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", + "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==" + }, + "@babel/template": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", + "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.12.7", + "@babel/types": "^7.12.7" + } + }, + "@babel/traverse": { + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.12.tgz", + "integrity": "sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==", + "requires": { + "@babel/code-frame": "^7.12.11", + "@babel/generator": "^7.12.11", + "@babel/helper-function-name": "^7.12.11", + "@babel/helper-split-export-declaration": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/types": "^7.12.12", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + }, + "dependencies": { + "@babel/helper-function-name": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz", + "integrity": "sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==", + "requires": { + "@babel/helper-get-function-arity": "^7.12.10", + "@babel/template": "^7.12.7", + "@babel/types": "^7.12.11" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz", + "integrity": "sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==", + "requires": { + "@babel/types": "^7.12.11" + } + } + } + }, + "@babel/types": { + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", + "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz", - "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==", + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz", + "integrity": "sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ==", "requires": { "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-regex": "^7.10.4", - "regexpu-core": "^4.7.0" + "regexpu-core": "^4.7.1" } }, "@babel/helper-define-map": { @@ -180,11 +323,28 @@ } }, "@babel/helper-explode-assignable-expression": { - "version": "7.11.4", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.11.4.tgz", - "integrity": "sha512-ux9hm3zR4WV1Y3xXxXkdG/0gxF9nvI0YVmKVhvK9AfMoaQkemL3sJpXw+Xbz65azo8qJiEz2XVDUpK3KYhH3ZQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", + "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.1" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" + }, + "@babel/types": { + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", + "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-function-name": { @@ -256,23 +416,31 @@ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" }, - "@babel/helper-regex": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", - "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", - "requires": { - "lodash": "^4.17.19" - } - }, "@babel/helper-remap-async-to-generator": { - "version": "7.11.4", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.11.4.tgz", - "integrity": "sha512-tR5vJ/vBa9wFy3m5LLv2faapJLnDFxNWff2SAYkSE4rLUdbp7CdObYFgI7wK4T/Mj4UzpjPwzR8Pzmr5m7MHGA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", + "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", "requires": { "@babel/helper-annotate-as-pure": "^7.10.4", "@babel/helper-wrap-function": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.1" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" + }, + "@babel/types": { + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", + "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-replace-supers": { @@ -296,11 +464,28 @@ } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz", - "integrity": "sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", "requires": { - "@babel/types": "^7.11.0" + "@babel/types": "^7.12.1" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" + }, + "@babel/types": { + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", + "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-split-export-declaration": { @@ -316,10 +501,15 @@ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" }, + "@babel/helper-validator-option": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz", + "integrity": "sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw==" + }, "@babel/helper-wrap-function": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz", - "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==", + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", + "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", "requires": { "@babel/helper-function-name": "^7.10.4", "@babel/template": "^7.10.4", @@ -353,122 +543,122 @@ "integrity": "sha512-MggwidiH+E9j5Sh8pbrX5sJvMcsqS5o+7iB42M9/k0CD63MjYbdP4nhSh7uB5wnv2/RVzTZFTxzF/kIa5mrCqA==" }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz", - "integrity": "sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg==", + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.12.tgz", + "integrity": "sha512-nrz9y0a4xmUrRq51bYkWJIO5SBZyG2ys2qinHsN0zHDHVsUaModrkpyWWWXfGqYQmOL3x9sQIcTNN/pBGpo09A==", "requires": { "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.12.1", "@babel/plugin-syntax-async-generators": "^7.8.0" } }, "@babel/plugin-proposal-class-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz", - "integrity": "sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", + "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-create-class-features-plugin": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz", - "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", + "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", "requires": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-dynamic-import": "^7.8.0" } }, "@babel/plugin-proposal-export-namespace-from": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz", - "integrity": "sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", + "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", "requires": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, "@babel/plugin-proposal-json-strings": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz", - "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", + "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", "requires": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.0" } }, "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz", - "integrity": "sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", + "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", "requires": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz", - "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", + "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", "requires": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" } }, "@babel/plugin-proposal-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz", - "integrity": "sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==", + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz", + "integrity": "sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ==", "requires": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz", - "integrity": "sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", "requires": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.10.4" + "@babel/plugin-transform-parameters": "^7.12.1" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz", - "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", + "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", "requires": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz", - "integrity": "sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA==", + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz", + "integrity": "sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA==", "requires": { "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", "@babel/plugin-syntax-optional-chaining": "^7.8.0" } }, "@babel/plugin-proposal-private-methods": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz", - "integrity": "sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", + "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-create-class-features-plugin": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz", - "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", + "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-create-regexp-features-plugin": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4" } }, @@ -481,9 +671,9 @@ } }, "@babel/plugin-syntax-class-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz", - "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", + "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } @@ -561,320 +751,1322 @@ } }, "@babel/plugin-syntax-top-level-await": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz", - "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", + "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz", - "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", + "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz", - "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", + "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", "requires": { - "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-module-imports": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.10.4" + "@babel/helper-remap-async-to-generator": "^7.12.1" + }, + "dependencies": { + "@babel/helper-module-imports": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", + "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "requires": { + "@babel/types": "^7.12.5" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" + }, + "@babel/types": { + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", + "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz", - "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", + "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz", - "integrity": "sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew==", + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.12.tgz", + "integrity": "sha512-VOEPQ/ExOVqbukuP7BYJtI5ZxxsmegTwzZ04j1aF0dkSypGo9XpDHuOrABsJu+ie+penpSJheDJ11x1BEZNiyQ==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-classes": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz", - "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", + "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", "requires": { "@babel/helper-annotate-as-pure": "^7.10.4", "@babel/helper-define-map": "^7.10.4", "@babel/helper-function-name": "^7.10.4", "@babel/helper-optimise-call-expression": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1", "@babel/helper-split-export-declaration": "^7.10.4", "globals": "^11.1.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/generator": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", + "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==", + "requires": { + "@babel/types": "^7.12.11", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", + "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==", + "requires": { + "@babel/types": "^7.12.10" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", + "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", + "requires": { + "@babel/types": "^7.12.7" + } + }, + "@babel/helper-replace-supers": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz", + "integrity": "sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.12.7", + "@babel/helper-optimise-call-expression": "^7.12.10", + "@babel/traverse": "^7.12.10", + "@babel/types": "^7.12.11" + }, + "dependencies": { + "@babel/helper-optimise-call-expression": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", + "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==", + "requires": { + "@babel/types": "^7.12.10" + } + } + } + }, + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" + }, + "@babel/parser": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", + "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==" + }, + "@babel/template": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", + "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.12.7", + "@babel/types": "^7.12.7" + } + }, + "@babel/traverse": { + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.12.tgz", + "integrity": "sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==", + "requires": { + "@babel/code-frame": "^7.12.11", + "@babel/generator": "^7.12.11", + "@babel/helper-function-name": "^7.12.11", + "@babel/helper-split-export-declaration": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/types": "^7.12.12", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + }, + "dependencies": { + "@babel/helper-function-name": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz", + "integrity": "sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==", + "requires": { + "@babel/helper-get-function-arity": "^7.12.10", + "@babel/template": "^7.12.7", + "@babel/types": "^7.12.11" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz", + "integrity": "sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==", + "requires": { + "@babel/types": "^7.12.11" + } + } + } + }, + "@babel/types": { + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", + "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } } }, "@babel/plugin-transform-computed-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz", - "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", + "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-destructuring": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz", - "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", + "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz", - "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", + "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-create-regexp-features-plugin": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz", - "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", + "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz", - "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", + "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", "requires": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-for-of": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz", - "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", + "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz", - "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", + "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", "requires": { "@babel/helper-function-name": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz", - "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", + "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz", - "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", + "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz", - "integrity": "sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw==", - "requires": { - "@babel/helper-module-transforms": "^7.10.5", - "@babel/helper-plugin-utils": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz", - "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==", - "requires": { - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz", - "integrity": "sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", + "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", "requires": { - "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.10.5", + "@babel/helper-module-transforms": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4", "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz", - "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==", - "requires": { - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz", - "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz", - "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz", - "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz", - "integrity": "sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz", - "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz", - "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==", - "requires": { - "regenerator-transform": "^0.14.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz", - "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==", + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/generator": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", + "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==", + "requires": { + "@babel/types": "^7.12.11", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz", + "integrity": "sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==", + "requires": { + "@babel/helper-get-function-arity": "^7.12.10", + "@babel/template": "^7.12.7", + "@babel/types": "^7.12.11" + }, + "dependencies": { + "@babel/template": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", + "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.12.7", + "@babel/types": "^7.12.7" + } + } + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", + "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==", + "requires": { + "@babel/types": "^7.12.10" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", + "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", + "requires": { + "@babel/types": "^7.12.7" + } + }, + "@babel/helper-module-imports": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", + "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "requires": { + "@babel/types": "^7.12.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", + "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "requires": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-simple-access": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/helper-validator-identifier": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", + "lodash": "^4.17.19" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", + "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==", + "requires": { + "@babel/types": "^7.12.10" + } + }, + "@babel/helper-replace-supers": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz", + "integrity": "sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.12.7", + "@babel/helper-optimise-call-expression": "^7.12.10", + "@babel/traverse": "^7.12.10", + "@babel/types": "^7.12.11" + } + }, + "@babel/helper-simple-access": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", + "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/parser": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", + "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==" + }, + "@babel/traverse": { + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.12.tgz", + "integrity": "sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==", + "requires": { + "@babel/code-frame": "^7.12.11", + "@babel/generator": "^7.12.11", + "@babel/helper-function-name": "^7.12.11", + "@babel/helper-split-export-declaration": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/types": "^7.12.12", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + }, + "dependencies": { + "@babel/helper-split-export-declaration": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz", + "integrity": "sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==", + "requires": { + "@babel/types": "^7.12.11" + } + } + } + }, + "@babel/types": { + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", + "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" + } + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", + "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", + "requires": { + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-simple-access": "^7.12.1", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/generator": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", + "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==", + "requires": { + "@babel/types": "^7.12.11", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz", + "integrity": "sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==", + "requires": { + "@babel/helper-get-function-arity": "^7.12.10", + "@babel/template": "^7.12.7", + "@babel/types": "^7.12.11" + }, + "dependencies": { + "@babel/template": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", + "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.12.7", + "@babel/types": "^7.12.7" + } + } + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", + "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==", + "requires": { + "@babel/types": "^7.12.10" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", + "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", + "requires": { + "@babel/types": "^7.12.7" + } + }, + "@babel/helper-module-imports": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", + "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "requires": { + "@babel/types": "^7.12.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", + "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "requires": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-simple-access": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/helper-validator-identifier": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", + "lodash": "^4.17.19" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", + "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==", + "requires": { + "@babel/types": "^7.12.10" + } + }, + "@babel/helper-replace-supers": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz", + "integrity": "sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.12.7", + "@babel/helper-optimise-call-expression": "^7.12.10", + "@babel/traverse": "^7.12.10", + "@babel/types": "^7.12.11" + } + }, + "@babel/helper-simple-access": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", + "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/parser": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", + "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==" + }, + "@babel/traverse": { + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.12.tgz", + "integrity": "sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==", + "requires": { + "@babel/code-frame": "^7.12.11", + "@babel/generator": "^7.12.11", + "@babel/helper-function-name": "^7.12.11", + "@babel/helper-split-export-declaration": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/types": "^7.12.12", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + }, + "dependencies": { + "@babel/helper-split-export-declaration": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz", + "integrity": "sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==", + "requires": { + "@babel/types": "^7.12.11" + } + } + } + }, + "@babel/types": { + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", + "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" + } + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", + "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", + "requires": { + "@babel/helper-hoist-variables": "^7.10.4", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-validator-identifier": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/generator": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", + "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==", + "requires": { + "@babel/types": "^7.12.11", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz", + "integrity": "sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==", + "requires": { + "@babel/helper-get-function-arity": "^7.12.10", + "@babel/template": "^7.12.7", + "@babel/types": "^7.12.11" + }, + "dependencies": { + "@babel/template": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", + "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.12.7", + "@babel/types": "^7.12.7" + } + } + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", + "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==", + "requires": { + "@babel/types": "^7.12.10" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", + "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", + "requires": { + "@babel/types": "^7.12.7" + } + }, + "@babel/helper-module-imports": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", + "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "requires": { + "@babel/types": "^7.12.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", + "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "requires": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-simple-access": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/helper-validator-identifier": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", + "lodash": "^4.17.19" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", + "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==", + "requires": { + "@babel/types": "^7.12.10" + } + }, + "@babel/helper-replace-supers": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz", + "integrity": "sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.12.7", + "@babel/helper-optimise-call-expression": "^7.12.10", + "@babel/traverse": "^7.12.10", + "@babel/types": "^7.12.11" + } + }, + "@babel/helper-simple-access": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", + "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/parser": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", + "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==" + }, + "@babel/traverse": { + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.12.tgz", + "integrity": "sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==", + "requires": { + "@babel/code-frame": "^7.12.11", + "@babel/generator": "^7.12.11", + "@babel/helper-function-name": "^7.12.11", + "@babel/helper-split-export-declaration": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/types": "^7.12.12", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + }, + "dependencies": { + "@babel/helper-split-export-declaration": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz", + "integrity": "sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==", + "requires": { + "@babel/types": "^7.12.11" + } + } + } + }, + "@babel/types": { + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", + "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" + } + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", + "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", + "requires": { + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/generator": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", + "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==", + "requires": { + "@babel/types": "^7.12.11", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz", + "integrity": "sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==", + "requires": { + "@babel/helper-get-function-arity": "^7.12.10", + "@babel/template": "^7.12.7", + "@babel/types": "^7.12.11" + }, + "dependencies": { + "@babel/template": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", + "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.12.7", + "@babel/types": "^7.12.7" + } + } + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", + "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==", + "requires": { + "@babel/types": "^7.12.10" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", + "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", + "requires": { + "@babel/types": "^7.12.7" + } + }, + "@babel/helper-module-imports": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", + "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "requires": { + "@babel/types": "^7.12.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", + "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "requires": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-simple-access": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/helper-validator-identifier": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", + "lodash": "^4.17.19" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", + "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==", + "requires": { + "@babel/types": "^7.12.10" + } + }, + "@babel/helper-replace-supers": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz", + "integrity": "sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.12.7", + "@babel/helper-optimise-call-expression": "^7.12.10", + "@babel/traverse": "^7.12.10", + "@babel/types": "^7.12.11" + } + }, + "@babel/helper-simple-access": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", + "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/parser": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", + "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==" + }, + "@babel/traverse": { + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.12.tgz", + "integrity": "sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==", + "requires": { + "@babel/code-frame": "^7.12.11", + "@babel/generator": "^7.12.11", + "@babel/helper-function-name": "^7.12.11", + "@babel/helper-split-export-declaration": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/types": "^7.12.12", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + }, + "dependencies": { + "@babel/helper-split-export-declaration": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz", + "integrity": "sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==", + "requires": { + "@babel/types": "^7.12.11" + } + } + } + }, + "@babel/types": { + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", + "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" + } + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", + "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.1" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", + "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", + "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/generator": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", + "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==", + "requires": { + "@babel/types": "^7.12.11", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz", + "integrity": "sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==", + "requires": { + "@babel/helper-get-function-arity": "^7.12.10", + "@babel/template": "^7.12.7", + "@babel/types": "^7.12.11" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", + "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==", + "requires": { + "@babel/types": "^7.12.10" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", + "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", + "requires": { + "@babel/types": "^7.12.7" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", + "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==", + "requires": { + "@babel/types": "^7.12.10" + } + }, + "@babel/helper-replace-supers": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz", + "integrity": "sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.12.7", + "@babel/helper-optimise-call-expression": "^7.12.10", + "@babel/traverse": "^7.12.10", + "@babel/types": "^7.12.11" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz", + "integrity": "sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==", + "requires": { + "@babel/types": "^7.12.11" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" + }, + "@babel/parser": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", + "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==" + }, + "@babel/template": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", + "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.12.7", + "@babel/types": "^7.12.7" + } + }, + "@babel/traverse": { + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.12.tgz", + "integrity": "sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==", + "requires": { + "@babel/code-frame": "^7.12.11", + "@babel/generator": "^7.12.11", + "@babel/helper-function-name": "^7.12.11", + "@babel/helper-split-export-declaration": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/types": "^7.12.12", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "@babel/types": { + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", + "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", + "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", + "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", + "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", + "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz", - "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", + "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-spread": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz", - "integrity": "sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", + "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", "requires": { "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0" + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz", - "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==", + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz", + "integrity": "sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-regex": "^7.10.4" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-template-literals": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz", - "integrity": "sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", + "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz", - "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==", + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz", + "integrity": "sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-unicode-escapes": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz", - "integrity": "sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", + "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz", - "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", + "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-create-regexp-features-plugin": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/preset-env": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.11.0.tgz", - "integrity": "sha512-2u1/k7rG/gTh02dylX2kL3S0IJNF+J6bfDSp4DI2Ma8QN6Y9x9pmAax59fsCk6QUQG0yqH47yJWA+u1I1LccAg==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.11.tgz", + "integrity": "sha512-j8Tb+KKIXKYlDBQyIOy4BLxzv1NUOwlHfZ74rvW+Z0Gp4/cI2IMDPBWAgWceGcE7aep9oL/0K9mlzlMGxA8yNw==", "requires": { - "@babel/compat-data": "^7.11.0", - "@babel/helper-compilation-targets": "^7.10.4", - "@babel/helper-module-imports": "^7.10.4", + "@babel/compat-data": "^7.12.7", + "@babel/helper-compilation-targets": "^7.12.5", + "@babel/helper-module-imports": "^7.12.5", "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-proposal-async-generator-functions": "^7.10.4", - "@babel/plugin-proposal-class-properties": "^7.10.4", - "@babel/plugin-proposal-dynamic-import": "^7.10.4", - "@babel/plugin-proposal-export-namespace-from": "^7.10.4", - "@babel/plugin-proposal-json-strings": "^7.10.4", - "@babel/plugin-proposal-logical-assignment-operators": "^7.11.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", - "@babel/plugin-proposal-numeric-separator": "^7.10.4", - "@babel/plugin-proposal-object-rest-spread": "^7.11.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", - "@babel/plugin-proposal-optional-chaining": "^7.11.0", - "@babel/plugin-proposal-private-methods": "^7.10.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", + "@babel/helper-validator-option": "^7.12.11", + "@babel/plugin-proposal-async-generator-functions": "^7.12.1", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-dynamic-import": "^7.12.1", + "@babel/plugin-proposal-export-namespace-from": "^7.12.1", + "@babel/plugin-proposal-json-strings": "^7.12.1", + "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-numeric-separator": "^7.12.7", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.10.4", + "@babel/plugin-syntax-class-properties": "^7.12.1", "@babel/plugin-syntax-dynamic-import": "^7.8.0", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.0", @@ -884,48 +2076,68 @@ "@babel/plugin-syntax-object-rest-spread": "^7.8.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.10.4", - "@babel/plugin-transform-arrow-functions": "^7.10.4", - "@babel/plugin-transform-async-to-generator": "^7.10.4", - "@babel/plugin-transform-block-scoped-functions": "^7.10.4", - "@babel/plugin-transform-block-scoping": "^7.10.4", - "@babel/plugin-transform-classes": "^7.10.4", - "@babel/plugin-transform-computed-properties": "^7.10.4", - "@babel/plugin-transform-destructuring": "^7.10.4", - "@babel/plugin-transform-dotall-regex": "^7.10.4", - "@babel/plugin-transform-duplicate-keys": "^7.10.4", - "@babel/plugin-transform-exponentiation-operator": "^7.10.4", - "@babel/plugin-transform-for-of": "^7.10.4", - "@babel/plugin-transform-function-name": "^7.10.4", - "@babel/plugin-transform-literals": "^7.10.4", - "@babel/plugin-transform-member-expression-literals": "^7.10.4", - "@babel/plugin-transform-modules-amd": "^7.10.4", - "@babel/plugin-transform-modules-commonjs": "^7.10.4", - "@babel/plugin-transform-modules-systemjs": "^7.10.4", - "@babel/plugin-transform-modules-umd": "^7.10.4", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", - "@babel/plugin-transform-new-target": "^7.10.4", - "@babel/plugin-transform-object-super": "^7.10.4", - "@babel/plugin-transform-parameters": "^7.10.4", - "@babel/plugin-transform-property-literals": "^7.10.4", - "@babel/plugin-transform-regenerator": "^7.10.4", - "@babel/plugin-transform-reserved-words": "^7.10.4", - "@babel/plugin-transform-shorthand-properties": "^7.10.4", - "@babel/plugin-transform-spread": "^7.11.0", - "@babel/plugin-transform-sticky-regex": "^7.10.4", - "@babel/plugin-transform-template-literals": "^7.10.4", - "@babel/plugin-transform-typeof-symbol": "^7.10.4", - "@babel/plugin-transform-unicode-escapes": "^7.10.4", - "@babel/plugin-transform-unicode-regex": "^7.10.4", + "@babel/plugin-syntax-top-level-await": "^7.12.1", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-async-to-generator": "^7.12.1", + "@babel/plugin-transform-block-scoped-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.11", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-computed-properties": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-dotall-regex": "^7.12.1", + "@babel/plugin-transform-duplicate-keys": "^7.12.1", + "@babel/plugin-transform-exponentiation-operator": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-function-name": "^7.12.1", + "@babel/plugin-transform-literals": "^7.12.1", + "@babel/plugin-transform-member-expression-literals": "^7.12.1", + "@babel/plugin-transform-modules-amd": "^7.12.1", + "@babel/plugin-transform-modules-commonjs": "^7.12.1", + "@babel/plugin-transform-modules-systemjs": "^7.12.1", + "@babel/plugin-transform-modules-umd": "^7.12.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1", + "@babel/plugin-transform-new-target": "^7.12.1", + "@babel/plugin-transform-object-super": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-property-literals": "^7.12.1", + "@babel/plugin-transform-regenerator": "^7.12.1", + "@babel/plugin-transform-reserved-words": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/plugin-transform-sticky-regex": "^7.12.7", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/plugin-transform-typeof-symbol": "^7.12.10", + "@babel/plugin-transform-unicode-escapes": "^7.12.1", + "@babel/plugin-transform-unicode-regex": "^7.12.1", "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.11.0", - "browserslist": "^4.12.0", - "core-js-compat": "^3.6.2", - "invariant": "^2.2.2", - "levenary": "^1.1.1", + "@babel/types": "^7.12.11", + "core-js-compat": "^3.8.0", "semver": "^5.5.0" }, "dependencies": { + "@babel/helper-module-imports": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", + "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "requires": { + "@babel/types": "^7.12.5" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" + }, + "@babel/types": { + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", + "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -946,9 +2158,9 @@ } }, "@babel/runtime": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", - "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", + "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -1004,174 +2216,255 @@ "to-fast-properties": "^2.0.0" } }, + "@discoveryjs/json-ext": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz", + "integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==" + }, + "@eslint/eslintrc": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", + "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.20", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@polka/url": { + "version": "1.0.0-next.11", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.11.tgz", + "integrity": "sha512-3NsZsJIA/22P3QUyrEDNA2D133H4j224twJrdipXN38dpnIOzAbUDtOwkcJ5pXmn75w7LSQDjA4tO9dm1XlqlA==", + "dev": true + }, "@types/color-name": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", "dev": true }, + "@types/eslint": { + "version": "7.2.6", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.6.tgz", + "integrity": "sha512-I+1sYH+NPQ3/tVqCeUSBwTE/0heyvtXqpIopUUArlBm0Kpocb8FbMa3AZ/ASKIFpN3rnEx932TTXDbt9OXsNDw==", + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", + "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.46", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.46.tgz", + "integrity": "sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg==" + }, "@types/json-schema": { "version": "7.0.5", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==" }, + "@types/node": { + "version": "14.14.25", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.25.tgz", + "integrity": "sha512-EPpXLOVqDvisVxtlbvzfyqSsFeQxltFbluZNRndIb8tr9KiBnYNLzrc1N3pyKUCww2RNrfHDViqDWWE1LCJQtQ==" + }, + "@types/tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-I99sngh224D0M7XgW1s120zxCt3VYQ3IQsuw3P3jbq5GG4yc79+ZjyKznyOGIQrflfylLgcfekeZW/vk0yng6A==", + "dev": true + }, "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", + "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" + "@webassemblyjs/helper-numbers": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", + "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==" }, "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", + "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==" }, "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "requires": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", + "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==" }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "@webassemblyjs/helper-numbers": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", + "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", "requires": { - "@webassemblyjs/ast": "1.9.0" + "@webassemblyjs/floating-point-hex-parser": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@xtuc/long": "4.2.2" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", + "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==" }, "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", + "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0" } }, "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", + "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", + "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", + "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==" }, "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", + "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/helper-wasm-section": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-opt": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "@webassemblyjs/wast-printer": "1.11.0" } }, "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", + "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" } }, "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", + "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0" } }, "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", + "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" } }, "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", + "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", + "@webassemblyjs/ast": "1.11.0", "@xtuc/long": "4.2.2" } }, + "@webpack-cli/configtest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.1.tgz", + "integrity": "sha512-B+4uBUYhpzDXmwuo3V9yBH6cISwxEI4J+NO5ggDaGEEHb0osY/R7MzeKc0bHURXQuZjMM4qD+bSJCKIuI3eNBQ==" + }, + "@webpack-cli/info": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.2.tgz", + "integrity": "sha512-5U9kUJHnwU+FhKH4PWGZuBC1hTEPYyxGSL5jjoBI96Gx8qcYJGOikpiIpFoTq8mmgX3im2zAo2wanv/alD74KQ==", + "requires": { + "envinfo": "^7.7.3" + } + }, + "@webpack-cli/serve": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.3.0.tgz", + "integrity": "sha512-k2p2VrONcYVX1wRRrf0f3X2VGltLWcv+JzXRBDmvCxGlCeESx4OXw91TsWeKOkp784uNoVQo313vxJFHXPPwfw==" + }, "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -1203,9 +2496,9 @@ } }, "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==" + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.5.tgz", + "integrity": "sha512-v+DieK/HJkJOpFBETDJioequtc3PfxsWMaxIdIwujtF7FEV/MAyDQLlm6/zPvr7Mix07mLh6ccVwIsloceodlg==" }, "acorn-globals": { "version": "4.3.4", @@ -1217,17 +2510,16 @@ }, "dependencies": { "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==" + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==" } } }, "acorn-jsx": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", - "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", - "dev": true + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==" }, "acorn-walk": { "version": "6.2.0", @@ -1299,25 +2591,7 @@ "ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", - "dev": true, - "requires": { - "type-fest": "^0.11.0" - }, - "dependencies": { - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", - "dev": true - } - } + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" }, "ansi-html": { "version": "0.0.7", @@ -1328,7 +2602,8 @@ "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true }, "ansi-styles": { "version": "3.2.1", @@ -1342,6 +2617,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -1383,11 +2659,6 @@ "default-require-extensions": "^2.0.0" } }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, "archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", @@ -1406,17 +2677,20 @@ "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true }, "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true }, "arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true }, "array-equal": { "version": "1.0.0", @@ -1431,7 +2705,8 @@ "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true }, "array.prototype.map": { "version": "1.0.2", @@ -1450,6 +2725,12 @@ "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" }, + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true + }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -1476,30 +2757,6 @@ } } }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "requires": { - "inherits": "2.0.1" - } - } - } - }, "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", @@ -1508,12 +2765,13 @@ "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true }, "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, "async": { @@ -1524,7 +2782,8 @@ "async-each": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true }, "async-limiter": { "version": "1.0.1", @@ -1539,7 +2798,8 @@ "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true }, "aws-sign2": { "version": "0.7.0", @@ -1547,47 +2807,17 @@ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz", - "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==" - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz", + "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==" + }, + "axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "dev": true, + "requires": { + "follow-redirects": "^1.10.0" } }, "babel-eslint": { @@ -1643,12 +2873,14 @@ "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true }, "base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, "requires": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", @@ -1662,12 +2894,14 @@ "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true }, "define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -1676,6 +2910,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -1684,6 +2919,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -1692,6 +2928,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -1701,14 +2938,19 @@ } }, "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "base64id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", - "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" }, "base64url": { "version": "3.0.1", @@ -1733,26 +2975,6 @@ "rewire": "^2.3.1" } }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "requires": { - "callsite": "1.0.0" - } - }, - "bfj": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz", - "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "check-types": "^8.0.3", - "hoopy": "^0.1.4", - "tryer": "^1.0.1" - } - }, "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -1761,12 +2983,14 @@ "binary-extensions": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==" + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "dev": true }, "bindings": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, "optional": true, "requires": { "file-uri-to-path": "1.0.0" @@ -1789,7 +3013,8 @@ "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true }, "bn.js": { "version": "5.1.3", @@ -1873,6 +3098,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1937,19 +3163,12 @@ } }, "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "requires": { - "bn.js": "^4.1.0", + "bn.js": "^5.0.0", "randombytes": "^2.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } } }, "browserify-sign": { @@ -1990,23 +3209,16 @@ } } }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "requires": { - "pako": "~1.0.5" - } - }, "browserslist": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.0.tgz", - "integrity": "sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.1.tgz", + "integrity": "sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA==", "requires": { - "caniuse-lite": "^1.0.30001111", - "electron-to-chromium": "^1.3.523", - "escalade": "^3.0.2", - "node-releases": "^1.1.60" + "caniuse-lite": "^1.0.30001173", + "colorette": "^1.2.1", + "electron-to-chromium": "^1.3.634", + "escalade": "^3.1.1", + "node-releases": "^1.1.69" } }, "bson": { @@ -2015,25 +3227,12 @@ "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg==" }, "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - }, - "dependencies": { - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - } + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, "buffer-equal-constant-time": { @@ -2051,52 +3250,16 @@ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" - }, "bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - } - } - }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, "requires": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", @@ -2112,7 +3275,8 @@ "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true } } }, @@ -2128,11 +3292,6 @@ "write-file-atomic": "^2.4.2" } }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" - }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -2142,12 +3301,13 @@ "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true }, "caniuse-lite": { - "version": "1.0.30001119", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001119.tgz", - "integrity": "sha512-Hpwa4obv7EGP+TjkCh/wVvbtNJewxmtg4yVJBLFnxo35vbPapBr138bUWENkb5j5L9JZJ9RXLn4OrXRG/cecPQ==" + "version": "1.0.30001179", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001179.tgz", + "integrity": "sha512-blMmO0QQujuUWZKyVrD1msR4WNDAqb/UPO1Sw2WWsQ7deoM5bJiicKnWJ1Y0NS/aGINSnKPIWBMw5luX+NDUCA==" }, "capture-stack-trace": { "version": "1.0.1", @@ -2200,27 +3360,16 @@ } } }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, "charenc": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" }, - "check-types": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz", - "integrity": "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==", - "dev": true - }, "chokidar": { "version": "3.4.2", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", + "dev": true, "requires": { "anymatch": "~3.1.1", "braces": "~3.0.2", @@ -2232,11 +3381,6 @@ "readdirp": "~3.4.0" } }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, "chrome-trace-event": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", @@ -2264,6 +3408,7 @@ "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, "requires": { "arr-union": "^3.1.0", "define-property": "^0.2.5", @@ -2275,6 +3420,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -2302,25 +3448,11 @@ "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", "dev": true }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true - }, "cliui": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, "requires": { "string-width": "^3.1.0", "strip-ansi": "^5.2.0", @@ -2330,12 +3462,14 @@ "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, "requires": { "ansi-regex": "^4.1.0" } @@ -2347,6 +3481,16 @@ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, "codacy-coverage": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/codacy-coverage/-/codacy-coverage-3.4.0.tgz", @@ -2368,6 +3512,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, "requires": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" @@ -2386,6 +3531,11 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, + "colorette": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==" + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -2408,8 +3558,7 @@ "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, "component-inherit": { "version": "0.0.3", @@ -2448,7 +3597,8 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "configstore": { "version": "3.1.5", @@ -2510,30 +3660,18 @@ "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==", "dev": true }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true }, "core-js-compat": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", - "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.8.3.tgz", + "integrity": "sha512-1sCb0wBXnBIL16pfFG1Gkvei6UzvKyTNYpiC41yrdjEv0UoJoq9E/abTMzyYJ6JpTkAj15dLjbqifIzEBDVvog==", "requires": { - "browserslist": "^4.8.5", + "browserslist": "^4.16.1", "semver": "7.0.0" }, "dependencies": { @@ -2613,21 +3751,45 @@ } }, "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } } } }, @@ -2636,6 +3798,24 @@ "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, "crypto-random-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", @@ -2643,31 +3823,86 @@ "dev": true }, "css-loader": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-1.0.1.tgz", - "integrity": "sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw==", - "requires": { - "babel-code-frame": "^6.26.0", - "css-selector-tokenizer": "^0.7.0", - "icss-utils": "^2.1.0", - "loader-utils": "^1.0.2", - "lodash": "^4.17.11", - "postcss": "^6.0.23", - "postcss-modules-extract-imports": "^1.2.0", - "postcss-modules-local-by-default": "^1.2.0", - "postcss-modules-scope": "^1.1.0", - "postcss-modules-values": "^1.3.0", - "postcss-value-parser": "^3.3.0", - "source-list-map": "^2.0.0" - } - }, - "css-selector-tokenizer": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", - "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.0.1.tgz", + "integrity": "sha512-cXc2ti9V234cq7rJzFKhirb2L2iPy8ZjALeVJAozXYz9te3r4eqLSixNAbMDJSgJEQywqXzs8gonxaboeKqwiw==", "requires": { + "camelcase": "^6.2.0", "cssesc": "^3.0.0", - "fastparse": "^1.1.2" + "icss-utils": "^5.0.0", + "loader-utils": "^2.0.0", + "postcss": "^8.1.4", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.2" + }, + "dependencies": { + "@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==" + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } } }, "cssesc": { @@ -2704,11 +3939,6 @@ "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.5.1.tgz", "integrity": "sha512-HM0/86Ks8OwFbaYLd495tqTs1NhscZL52dC4ieKYumy8+nawQYC0xZ63w1NqLf0M148T2YLYqowoImc1giPn0g==" }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=" - }, "d3": { "version": "5.16.0", "resolved": "https://registry.npmjs.org/d3/-/d3-5.16.0.tgz", @@ -2992,9 +4222,9 @@ }, "dependencies": { "abab": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.4.tgz", - "integrity": "sha512-Eu9ELJWCz/c1e9gTiCY+FceWxcqzjYEbqMgtndnuSqZSUCOL73TWNK2mHfIj4Cw2E/ongOp+JISVNCmovt2KYQ==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" }, "whatwg-url": { "version": "7.1.0", @@ -3019,12 +4249,14 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true }, "deep-extend": { "version": "0.6.0", @@ -3058,6 +4290,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, "requires": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" @@ -3067,6 +4300,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -3075,6 +4309,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -3083,6 +4318,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -3121,11 +4357,6 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=" - }, "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", @@ -3158,11 +4389,6 @@ "esutils": "^2.0.2" } }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" - }, "domexception": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", @@ -3171,6 +4397,11 @@ "webidl-conversions": "^4.0.2" } }, + "dompurify": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.2.6.tgz", + "integrity": "sha512-7b7ZArhhH0SP6W2R9cqK6RjaU82FZ2UPM7RO8qN1b1wyvC/NY1FNWcX1Pu00fFOAnzEORtwXe4bPaClg6pUybQ==" + }, "dot-prop": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", @@ -3180,23 +4411,18 @@ "is-obj": "^1.0.0" } }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "dev": true }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, "easyxml": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/easyxml/-/easyxml-2.0.1.tgz", @@ -3234,9 +4460,9 @@ "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==" }, "electron-to-chromium": { - "version": "1.3.554", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.554.tgz", - "integrity": "sha512-Vtz2dVH5nMtKK4brahmgScwFS8PBnpA4VObYXtlsqN8ZpT9IFelv0Rpflc1+NIILjGVaj6vEiXQbhrs3Pl8O7g==" + "version": "1.3.645", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.645.tgz", + "integrity": "sha512-T7mYop3aDpRHIQaUYcmzmh6j9MAe560n6ukqjJMbVC6bVTau7dSpvB18bcsBPPtOSe10cKxhJFtlbEzLa0LL1g==" }, "elementtree": { "version": "0.1.7", @@ -3247,30 +4473,36 @@ } }, "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", + "bn.js": "^4.11.9", + "brorand": "^1.1.0", "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" }, "dependencies": { "bn.js": { "version": "4.11.9", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" } } }, "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true }, "emojis-list": { "version": "3.0.0", @@ -3282,75 +4514,62 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, "engine.io": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", - "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz", + "integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==", "requires": { "accepts": "~1.3.4", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.0", - "ws": "~3.3.1" + "base64id": "2.0.0", + "cookie": "~0.4.1", + "debug": "~4.1.0", + "engine.io-parser": "~2.2.0", + "ws": "~7.4.2" }, "dependencies": { "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" }, "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.3.tgz", + "integrity": "sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA==" } } }, "engine.io-client": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", - "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.0.tgz", + "integrity": "sha512-12wPRfMrugVw/DNyJk34GQ5vIVArEcVMXWugQGGuw2XxUSztFNmJggZmv8IZlLyEdnpO1QB9LkcjeWewO2vxtA==", "requires": { - "component-emitter": "1.2.1", + "component-emitter": "~1.3.0", "component-inherit": "0.0.3", "debug": "~3.1.0", - "engine.io-parser": "~2.1.1", + "engine.io-parser": "~2.2.0", "has-cors": "1.1.0", "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "~3.3.1", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~7.4.2", "xmlhttprequest-ssl": "~1.5.4", "yeast": "0.1.2" }, "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" - }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -3360,50 +4579,48 @@ } }, "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.3.tgz", + "integrity": "sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA==" } } }, "engine.io-parser": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", - "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", + "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", "requires": { "after": "0.8.2", "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.5", + "base64-arraybuffer": "0.1.4", "blob": "0.0.5", "has-binary2": "~1.0.2" } }, "enhanced-resolve": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", - "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz", + "integrity": "sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw==", "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, - "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } + "dependencies": { + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" } } }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "requires": { + "ansi-colors": "^4.1.1" + } + }, "env-cmd": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/env-cmd/-/env-cmd-10.1.0.tgz", @@ -3463,13 +4680,10 @@ } } }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "requires": { - "prr": "~1.0.1" - } + "envinfo": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.4.tgz", + "integrity": "sha512-TQXTYFVVwwluWSFis6K2XKxgrD22jEv0FTuLCQI+OjH7rn93+iY0fSSFM5lrSxFY+H1+B0/cvvlamr3UsBivdQ==" }, "error-ex": { "version": "1.3.2", @@ -3529,6 +4743,11 @@ "isarray": "^2.0.5" } }, + "es-module-lexer": { + "version": "0.3.26", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.3.26.tgz", + "integrity": "sha512-Va0Q/xqtrss45hWzP8CZJwzGSZJjDM5/MJRE3IXXnUCcVLElR9BRaE9F62BopysASyc4nM3uwhSW7FFB9nlWAA==" + }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -3552,9 +4771,9 @@ "integrity": "sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==" }, "escalade": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.2.tgz", - "integrity": "sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "escape-html": { "version": "1.0.3", @@ -3566,86 +4785,116 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, "eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.19.0.tgz", + "integrity": "sha512-CGlMgJY56JZ9ZSYhJuhow61lMPPjUzWmChFya71Z/jilVos7mR/jPgaEfVGgMBY5DshbKdG8Ezb8FDCHcoMEMg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.3.0", "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", "debug": "^4.0.1", "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.2.0", "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", + "file-entry-cache": "^6.0.0", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", "globals": "^12.1.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", "is-glob": "^4.0.0", "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", + "levn": "^0.4.1", + "lodash": "^4.17.20", "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "optionator": "^0.8.3", + "optionator": "^0.9.1", "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.4", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, "dependencies": { "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "ms": "^2.1.1" + "color-convert": "^2.0.1" } }, - "eslint-scope": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", - "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", "dev": true }, "globals": { @@ -3658,13 +4907,22 @@ } }, "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "yallist": "^4.0.0" } }, "ms": { @@ -3674,63 +4932,99 @@ "dev": true }, "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", "dev": true, "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "lru-cache": "^6.0.0" } }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.0" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true } } }, - "eslint-loader": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.2.1.tgz", - "integrity": "sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==", + "eslint-plugin-security": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.4.0.tgz", + "integrity": "sha512-xlS7P2PLMXeqfhyf3NpqbvbnW04kN8M9NtmhpR3XGyOvt/vNKS7XPXT5EDbwKW9vCjWH4PpfQvgD/+JgN0VJKA==", "dev": true, "requires": { - "loader-fs-cache": "^1.0.0", - "loader-utils": "^1.0.2", - "object-assign": "^4.0.1", - "object-hash": "^1.1.4", - "rimraf": "^2.6.1" + "safe-regex": "^1.1.0" } }, "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "requires": { - "esrecurse": "^4.1.0", + "esrecurse": "^4.3.0", "estraverse": "^4.1.1" }, "dependencies": { - "estraverse": { + "esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + } + } } } }, "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "requires": { "eslint-visitor-keys": "^1.1.0" @@ -3742,25 +5036,84 @@ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true }, + "eslint-webpack-plugin": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-2.4.3.tgz", + "integrity": "sha512-+15ifHFkGn0gB7lQBe+xgyKcjelxv9xlTutGHEPYBUUj+1Rjrjq3+1REJLJpyAHgpQTatpqkRY1z8gQuyn3Aww==", + "dev": true, + "requires": { + "@types/eslint": "^7.2.4", + "arrify": "^2.0.1", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, "espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, "requires": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" }, "dependencies": { "acorn": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", - "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true } } }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, "esquery": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", @@ -3778,20 +5131,10 @@ } } }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "requires": { - "estraverse": "^4.1.0" - }, - "dependencies": { - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - } - } + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" }, "esutils": { "version": "2.0.3", @@ -3870,6 +5213,7 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, "requires": { "debug": "^2.3.3", "define-property": "^0.2.5", @@ -3884,6 +5228,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -3892,24 +5237,17 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } } } }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, "expose-loader": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/expose-loader/-/expose-loader-0.7.5.tgz", - "integrity": "sha512-iPowgKUZkTPX5PznYsmifVj9Bob0w2wTHVkt/eYNPSzyebkUgIedmskf/kcfEIWpiWjg3JRjnW+a17XypySMuw==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/expose-loader/-/expose-loader-2.0.0.tgz", + "integrity": "sha512-WBpSGlNkn7YwbU2us7O+h0XsoFrB43Y/VCNSpRV4OZFXXKgw8W800BgNxLV0S97N3+KGnFYSCAJi1AV86NO22w==" }, "express": { "version": "4.17.1", @@ -3975,6 +5313,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -3984,27 +5323,18 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, "requires": { "is-plain-object": "^2.0.4" } } } }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, "requires": { "array-unique": "^0.3.2", "define-property": "^1.0.0", @@ -4020,6 +5350,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -4028,6 +5359,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -4036,6 +5368,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -4044,6 +5377,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -4052,6 +5386,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -4075,51 +5410,73 @@ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, - "fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==" + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" + "fast-password-entropy": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fast-password-entropy/-/fast-password-entropy-1.1.1.tgz", + "integrity": "sha512-dxm29/BPFrNgyEDygg/lf9c2xQR0vnQhG7+hZjAI39M/3um9fD4xiqG6F0ZjW6bya5m9CI0u6YryHGRtxCGCiw==" }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } + "fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==" }, "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz", + "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==", "dev": true, "requires": { - "flat-cache": "^2.0.1" + "flat-cache": "^3.0.4" } }, "file-loader": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz", - "integrity": "sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", "requires": { - "loader-utils": "^1.0.2", - "schema-utils": "^1.0.0" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" }, "dependencies": { + "@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==" + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" } } } @@ -4128,14 +5485,9 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, "optional": true }, - "filesize": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", - "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", - "dev": true - }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -4183,17 +5535,6 @@ "locate-path": "^3.0.0" } }, - "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - }, "flat": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", @@ -4212,20 +5553,19 @@ } }, "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" }, "dependencies": { "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" @@ -4234,9 +5574,9 @@ } }, "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", "dev": true }, "flot": { @@ -4244,19 +5584,17 @@ "resolved": "https://registry.npmjs.org/flot/-/flot-0.8.3.tgz", "integrity": "sha512-xg2otcTJDvS+ERK+my4wxG/ASq90QURXtoM4LhacCq0jQW2jbyjdttbRNqU2cPykrpMvJ6b2uSp6SAgYAzj9tQ==" }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } + "follow-redirects": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.1.tgz", + "integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==", + "dev": true }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true }, "foreground-child": { "version": "1.5.6", @@ -4311,6 +5649,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, "requires": { "map-cache": "^0.2.2" } @@ -4325,35 +5664,23 @@ "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=" }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } + "fs-monkey": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.1.tgz", + "integrity": "sha512-fcSa+wyTqZa46iWweI7/ZiUfegOZl0SG8+dltIwFXo7+zYU9J9kpS3NB6pZcSlJdhvIwp81Adx2XhZorncxiaA==", + "dev": true }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "fsevents": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, "optional": true }, "function-bind": { @@ -4375,7 +5702,8 @@ "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true }, "get-stream": { "version": "3.0.0", @@ -4386,7 +5714,8 @@ "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true }, "getpass": { "version": "0.1.7", @@ -4400,6 +5729,7 @@ "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -4413,49 +5743,23 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", "dev": true, "requires": { - "ini": "^1.3.4" + "is-glob": "^4.0.1" } }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "requires": { - "global-prefix": "^3.0.0" - }, - "dependencies": { - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - } - } - } + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" + "ini": "^1.3.4" } }, "globals": { @@ -4494,21 +5798,12 @@ "dev": true }, "gzip-size": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", - "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", "dev": true, "requires": { - "duplexer": "^0.1.1", - "pify": "^4.0.1" - }, - "dependencies": { - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - } + "duplexer": "^0.1.2" } }, "har-schema": { @@ -4529,19 +5824,10 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "requires": { "function-bind": "^1.1.1" } }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, "has-binary2": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", @@ -4562,6 +5848,11 @@ "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, "has-symbols": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", @@ -4571,6 +5862,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, "requires": { "get-value": "^2.0.6", "has-values": "^1.0.0", @@ -4581,6 +5873,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, "requires": { "is-number": "^3.0.0", "kind-of": "^4.0.0" @@ -4590,6 +5883,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -4598,6 +5892,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -4608,6 +5903,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -4691,20 +5987,6 @@ "integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w==", "dev": true }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hoopy": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", - "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", - "dev": true - }, "hosted-git-info": { "version": "2.8.8", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", @@ -4757,10 +6039,10 @@ "version": "https://github.com/node-apn/node-http2/archive/apn-2.1.4.tar.gz", "integrity": "sha512-ad4u4I88X9AcUgxCRW3RLnbh7xHWQ1f5HbrXa7gEy2x4Xgq+rq+auGx5I+nUDE2YYuqteGIlbxrwQXkIaYTfnQ==" }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" }, "iconv-lite": { "version": "0.4.24", @@ -4770,28 +6052,15 @@ "safer-buffer": ">= 2.1.2 < 3" } }, - "icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=" - }, "icss-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", - "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", - "requires": { - "postcss": "^6.0.1" - } + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==" }, "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { "version": "4.0.6", @@ -4806,9 +6075,9 @@ "dev": true }, "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { "parent-module": "^1.0.0", @@ -4830,29 +6099,70 @@ "dev": true }, "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "requires": { + "find-up": "^4.0.0" + } + } } }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" }, "indexof": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" - }, "inflect": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/inflect/-/inflect-0.3.0.tgz", @@ -4862,6 +6172,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -4873,133 +6184,15 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - }, - "inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true }, "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "^1.0.0" - } + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==" }, "ipaddr.js": { "version": "1.9.1", @@ -5010,6 +6203,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -5018,6 +6212,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -5040,6 +6235,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, "requires": { "binary-extensions": "^2.0.0" } @@ -5064,10 +6260,19 @@ "ci-info": "^1.5.0" } }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "requires": { + "has": "^1.0.3" + } + }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -5076,6 +6281,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -5092,6 +6298,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -5101,29 +6308,34 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true } } }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true }, "is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -5240,12 +6452,8 @@ "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true }, "isarray": { "version": "2.0.5", @@ -5449,12 +6657,6 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", @@ -5494,6 +6696,16 @@ } } }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, "joi": { "version": "13.7.0", "resolved": "https://registry.npmjs.org/joi/-/joi-13.7.0.tgz", @@ -5575,76 +6787,26 @@ "request": "^2.83.0", "request-promise-native": "^1.0.5", "sax": "^1.2.4", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.3.3", - "w3c-hr-time": "^1.0.1", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.3", - "whatwg-mimetype": "^2.1.0", - "whatwg-url": "^6.4.1", - "ws": "^4.0.0", - "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.3", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.1", + "ws": "^4.0.0", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==" }, "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true } } }, @@ -5785,17 +6947,13 @@ "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==" }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" - }, - "levenary": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", - "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "requires": { - "leven": "^3.1.0" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, "load-json-file": { @@ -5818,67 +6976,10 @@ } } }, - "loader-fs-cache": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz", - "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==", - "dev": true, - "requires": { - "find-cache-dir": "^0.1.1", - "mkdirp": "^0.5.1" - }, - "dependencies": { - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "find-cache-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", - "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "mkdirp": "^0.5.1", - "pkg-dir": "^1.0.0" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true, - "requires": { - "find-up": "^1.0.0" - } - } - } - }, "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==" }, "loader-utils": { "version": "1.4.0", @@ -6037,14 +7138,6 @@ } } }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", @@ -6085,10 +7178,20 @@ } } }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true }, "map-stream": { "version": "0.1.0", @@ -6099,6 +7202,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, "requires": { "object-visit": "^1.0.0" } @@ -6128,20 +7232,38 @@ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, + "mem": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-8.0.0.tgz", + "integrity": "sha512-qrcJOe6uD+EW8Wrci1Vdiua/15Xw3n/QnaNXE7varnB6InxSk7nu3/i5jfy3S6kWxr8WYJ6R1o0afMUtvorTsA==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.3", + "mimic-fn": "^3.1.0" + }, + "dependencies": { + "mimic-fn": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", + "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", + "dev": true + } + } + }, + "memfs": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.2.0.tgz", + "integrity": "sha512-f/xxz2TpdKv6uDn6GtHee8ivFyxwxmPuXatBb1FBwxYNuVpbM3k/Y1Z+vC0mH/dIXXrukYfe3qe5J32Dfjg93A==", + "dev": true, + "requires": { + "fs-monkey": "1.0.1" + } + }, "memory-cache": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz", "integrity": "sha1-eJCwHVLADI68nVM+H46xfjA0hxo=" }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, "memory-pager": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", @@ -6170,6 +7292,11 @@ } } }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -6179,6 +7306,7 @@ "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -6199,6 +7327,7 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, "requires": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -6216,6 +7345,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -6226,6 +7356,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -6237,6 +7368,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -6247,6 +7379,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -6255,6 +7388,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -6265,6 +7399,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -6309,8 +7444,7 @@ "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, "minimalistic-assert": { "version": "1.0.1", @@ -6326,14 +7460,15 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimed-connect-to-nightscout": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/minimed-connect-to-nightscout/-/minimed-connect-to-nightscout-1.4.0.tgz", - "integrity": "sha512-hxbcncJPiQOoTtjp1VquoxA4ab/Lbn1LiwAymeaEUfyqUxaj9E7w8CHJ/kGbgEu2oYHsqUMvJ1orOlCuUA/g6g==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/minimed-connect-to-nightscout/-/minimed-connect-to-nightscout-1.5.0.tgz", + "integrity": "sha512-GwJHXK8STPAdGh6B8YMyht1XKSwi2hRIMk0+madrIHz9dynSlMHLw2TzfFW2SMW9n0lRWRF8WqPKMNgweEv7/A==", "requires": { "axios": "^0.19.2", "axios-cookiejar-support": "^1.0.0", @@ -7609,40 +8744,17 @@ } } }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - }, - "dependencies": { - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - } - } + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true }, "mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" @@ -7652,6 +8764,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, "requires": { "is-plain-object": "^2.0.4" } @@ -7923,6 +9036,11 @@ } } }, + "mongo-url-parser": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mongo-url-parser/-/mongo-url-parser-1.0.1.tgz", + "integrity": "sha512-jKygfGx7xf97yqp7Kwx0/fEOmMAbuhNGAhedD490BtN+UKSutkv7RBKk5p8o8W+hkA1AeOYdtLr+OjkXSLkh7g==" + }, "mongodb": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.0.tgz", @@ -7944,40 +9062,28 @@ "bson": "*" } }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, "nan": { "version": "2.14.1", "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", + "dev": true, "optional": true }, + "nanoid": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==" + }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -8004,9 +9110,9 @@ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "nested-error-stacks": { "version": "2.1.0", @@ -8014,11 +9120,6 @@ "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", "dev": true }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, "node-cache": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-4.2.1.tgz", @@ -8033,80 +9134,10 @@ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.6.tgz", "integrity": "sha512-sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw==" }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" - }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" - } - } - }, "node-releases": { - "version": "1.1.60", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz", - "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==" + "version": "1.1.70", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.70.tgz", + "integrity": "sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw==" }, "nodemon": { "version": "1.19.4", @@ -8362,7 +9393,8 @@ "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, "npm-run-path": { "version": "2.0.2", @@ -8433,20 +9465,11 @@ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" - }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, "requires": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", @@ -8457,6 +9480,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -8465,18 +9489,13 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } } } }, - "object-hash": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", - "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==", - "dev": true - }, "object-inspect": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", @@ -8492,6 +9511,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, "requires": { "isobject": "^3.0.0" } @@ -8511,6 +9531,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, "requires": { "isobject": "^3.0.1" } @@ -8532,6 +9553,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } @@ -8540,21 +9562,28 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, "requires": { "mimic-fn": "^2.1.0" } }, "opener": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", - "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "dev": true }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } }, "os-homedir": { "version": "1.0.2", @@ -8567,6 +9596,12 @@ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", @@ -8626,21 +9661,6 @@ } } }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "requires": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -8677,31 +9697,20 @@ "json-parse-better-errors": "^1.0.1" } }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" - }, "parse5": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==" }, "parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "requires": { - "better-assert": "~1.0.0" - } + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" }, "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "requires": { - "better-assert": "~1.0.0" - } + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" }, "parseurl": { "version": "1.3.3", @@ -8711,17 +9720,14 @@ "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true }, "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true }, "path-exists": { "version": "3.0.0", @@ -8731,7 +9737,8 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "path-is-inside": { "version": "1.0.2", @@ -8742,7 +9749,8 @@ "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true }, "path-parse": { "version": "1.0.6", @@ -8820,28 +9828,14 @@ "picomatch": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, "pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", @@ -8858,77 +9852,65 @@ "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true }, "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.4.tgz", + "integrity": "sha512-kRFftRoExRVXZlwUuay9iC824qmXPcQQVzAjbCCgjpXnkdMCJYBu2gTwAaFBzv8ewND6O8xFb3aELmEkh9zTzg==", "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } + "colorette": "^1.2.1", + "nanoid": "^3.1.20", + "source-map": "^0.6.1" } }, "postcss-modules-extract-imports": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz", - "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==", - "requires": { - "postcss": "^6.0.1" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==" }, "postcss-modules-local-by-default": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", - "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" } }, "postcss-modules-scope": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", - "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" + "postcss-selector-parser": "^6.0.4" } }, "postcss-modules-values": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", - "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "requires": { - "icss-replace-symbols": "^1.1.0", - "postcss": "^6.0.1" + "icss-utils": "^5.0.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", + "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", + "requires": { + "cssesc": "^3.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1", + "util-deprecate": "^1.0.2" } }, "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" }, "prelude-ls": { "version": "1.1.2", @@ -8941,6 +9923,11 @@ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", "dev": true }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -8952,11 +9939,6 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" - }, "promise.allsettled": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.2.tgz", @@ -8979,11 +9961,6 @@ "ipaddr.js": "1.9.1" } }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" - }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -9006,56 +9983,21 @@ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" }, "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" } } }, - "punycode": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.2.4.tgz", - "integrity": "sha1-VACKyXKux0F13vnLpt9/qdORh0A=" - }, "pushover-notifications": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/pushover-notifications/-/pushover-notifications-1.2.2.tgz", @@ -9069,12 +10011,8 @@ "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true }, "random-token": { "version": "0.0.8", @@ -9186,14 +10124,23 @@ "version": "3.4.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "dev": true, "requires": { "picomatch": "^2.2.1" } }, + "rechoir": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", + "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", + "requires": { + "resolve": "^1.9.0" + } + }, "regenerate": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", - "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==" + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "regenerate-unicode-properties": { "version": "8.2.0", @@ -9220,21 +10167,22 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" } }, "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", "dev": true }, "regexpu-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", - "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", "requires": { "regenerate": "^1.4.0", "regenerate-unicode-properties": "^8.2.0", @@ -9269,9 +10217,9 @@ "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" }, "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.6.tgz", + "integrity": "sha512-jjyuCp+IEMIm3N1H1LLTJW1EISEJV9+5oHdEyrt43Pg9cDSb6rrLZei2cVWpl0xTjmmlpec/lEQGYgM7xfpGCQ==", "requires": { "jsesc": "~0.5.0" }, @@ -9295,17 +10243,20 @@ "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true }, "repeat-element": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true }, "request": { "version": "2.88.2", @@ -9402,12 +10353,20 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true }, "require_optional": { "version": "1.0.1", @@ -9425,39 +10384,27 @@ } } }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", "requires": { - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" - } + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" } }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" + "resolve-from": "^5.0.0" }, "dependencies": { - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" } } }, @@ -9469,22 +10416,14 @@ "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true }, "rewire": { "version": "2.5.2", @@ -9496,6 +10435,7 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, "requires": { "glob": "^7.1.3" } @@ -9509,34 +10449,11 @@ "inherits": "^2.0.1" } }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "requires": { - "aproba": "^1.1.1" - } - }, "rw": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=" }, - "rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -9546,6 +10463,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, "requires": { "ret": "~0.1.10" } @@ -9637,6 +10555,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, "requires": { "randombytes": "^2.1.0" } @@ -9655,12 +10574,14 @@ "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true }, "set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -9672,17 +10593,13 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } } } }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, "setprototypeof": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", @@ -9697,6 +10614,14 @@ "safe-buffer": "^5.0.1" } }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "requires": { + "kind-of": "^6.0.2" + } + }, "share2nightscout-bridge": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/share2nightscout-bridge/-/share2nightscout-bridge-0.2.4.tgz", @@ -10049,6 +10974,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, "requires": { "shebang-regex": "^1.0.0" } @@ -10056,7 +10982,8 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true }, "shiro-trie": { "version": "0.4.9", @@ -10120,29 +11047,72 @@ "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" }, "simple-statistics": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/simple-statistics/-/simple-statistics-0.7.0.tgz", "integrity": "sha1-xQ8Tu9yX6aT9ICVjgtoX5o7asco=" }, + "sirv": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.11.tgz", + "integrity": "sha512-SR36i3/LSWja7AJNRBz4fF/Xjpn7lQFI30tZ434dIy+bitLYSP+ZEenHg36i23V2SGEz+kqjksg0uOGZ5LPiqg==", + "dev": true, + "requires": { + "@polka/url": "^1.0.0-next.9", + "mime": "^2.3.1", + "totalist": "^1.0.0" + } + }, "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + } } }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, "requires": { "base": "^0.11.1", "debug": "^2.2.0", @@ -10158,6 +11128,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -10166,6 +11137,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -10173,7 +11145,8 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true } } }, @@ -10181,6 +11154,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, "requires": { "define-property": "^1.0.0", "isobject": "^3.0.0", @@ -10191,6 +11165,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -10199,6 +11174,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -10207,6 +11183,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -10215,6 +11192,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -10227,6 +11205,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, "requires": { "kind-of": "^3.2.0" }, @@ -10235,6 +11214,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -10242,25 +11222,30 @@ } }, "socket.io": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", - "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.1.tgz", + "integrity": "sha512-Si18v0mMXGAqLqCVpTxBa8MGqriHGQh8ccEOhmsmNS3thNCGBwO8WGrwMibANsWtQQ5NStdZwHqZR3naJVFc3w==", "requires": { - "debug": "~3.1.0", - "engine.io": "~3.2.0", + "debug": "~4.1.0", + "engine.io": "~3.5.0", "has-binary2": "~1.0.2", "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.1.1", - "socket.io-parser": "~3.2.0" + "socket.io-client": "2.4.0", + "socket.io-parser": "~3.4.0" }, "dependencies": { "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" } } }, @@ -10270,31 +11255,23 @@ "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==" }, "socket.io-client": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", - "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz", + "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==", "requires": { "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", "component-bind": "1.0.0", - "component-emitter": "1.2.1", + "component-emitter": "~1.3.0", "debug": "~3.1.0", - "engine.io-client": "~3.2.0", + "engine.io-client": "~3.5.0", "has-binary2": "~1.0.2", - "has-cors": "1.1.0", "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "socket.io-parser": "~3.2.0", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "socket.io-parser": "~3.3.0", "to-array": "0.1.4" }, "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" - }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -10302,16 +11279,31 @@ "requires": { "ms": "2.0.0" } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + }, + "socket.io-parser": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz", + "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==", + "requires": { + "component-emitter": "~1.3.0", + "debug": "~3.1.0", + "isarray": "2.0.1" + } } } }, "socket.io-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", - "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz", + "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==", "requires": { "component-emitter": "1.2.1", - "debug": "~3.1.0", + "debug": "~4.1.0", "isarray": "2.0.1" }, "dependencies": { @@ -10321,17 +11313,22 @@ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" }, "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "isarray": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" } } }, @@ -10340,10 +11337,16 @@ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, "source-map-resolve": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, "requires": { "atob": "^2.1.2", "decode-uri-component": "^0.2.0", @@ -10371,7 +11374,8 @@ "source-map-url": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true }, "sparse-bitfield": { "version": "3.0.3", @@ -10440,6 +11444,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, "requires": { "extend-shallow": "^3.0.0" } @@ -10466,18 +11471,11 @@ "tweetnacl": "~0.14.0" } }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", - "requires": { - "figgy-pudding": "^3.5.1" - } - }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, "requires": { "define-property": "^0.2.5", "object-copy": "^0.1.0" @@ -10487,6 +11485,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -10504,12 +11503,29 @@ "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" }, "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, "stream-combiner": { @@ -10527,36 +11543,11 @@ } } }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" - }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -10566,12 +11557,14 @@ "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, "requires": { "ansi-regex": "^4.1.0" } @@ -10610,6 +11603,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, "requires": { "ansi-regex": "^2.0.0" } @@ -10626,6 +11620,11 @@ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -10704,6 +11703,14 @@ "superagent": "^3.8.3" } }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, "swagger-ui-dist": { "version": "3.32.5", "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-3.32.5.tgz", @@ -10714,100 +11721,98 @@ "resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-4.1.4.tgz", "integrity": "sha512-Ea96ecpC+Iq9GUqkeD/LFR32xSs8gYqmTW1gXCuKg81c26WV6ZC2FsBSPVExQP6WkyUuz5HEiR0sEv/HCC343g==", "requires": { - "swagger-ui-dist": "^3.18.1" - } - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" - }, - "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" - }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "dev": true, - "requires": { - "execa": "^0.7.0" + "swagger-ui-dist": "^3.18.1" } }, - "terser": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", - "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", - "requires": { - "commander": "^2.19.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.10" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" }, - "terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "table": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", + "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", + "dev": true, "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" + "ajv": "^7.0.2", + "lodash": "^4.17.20", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" }, "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "ajv": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.0.4.tgz", + "integrity": "sha512-xzzzaqgEQfmuhbhAoqjJ8T/1okb6gAzXn/eQRNpAN1AEUoHJTNF9xCDRTtf/s3SKldtZfa+RJeTs+BQq+eZ/sw==", + "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true }, - "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" } } } }, + "tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==" + }, + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "dev": true, + "requires": { + "execa": "^0.7.0" + } + }, "test-exclude": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", @@ -10831,48 +11836,17 @@ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, "timed-out": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", "dev": true }, - "timers-browserify": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", - "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", - "requires": { - "setimmediate": "^1.0.4" - } - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, "to-array": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" - }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -10882,6 +11856,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -10890,6 +11865,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -10900,6 +11876,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, "requires": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", @@ -10937,6 +11914,12 @@ } } }, + "totalist": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", + "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "dev": true + }, "touch": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", @@ -10993,22 +11976,11 @@ "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=" }, - "tryer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", - "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", - "dev": true - }, "tslib": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" - }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -11045,16 +12017,6 @@ "mime-types": "~2.1.24" } }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" - }, "undefsafe": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", @@ -11092,6 +12054,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -11099,21 +12062,10 @@ "set-value": "^2.0.1" } }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "requires": { - "imurmurhash": "^0.1.4" - } + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" }, "unique-string": { "version": "1.0.0", @@ -11133,6 +12085,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, "requires": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -11142,6 +12095,7 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, "requires": { "get-value": "^2.0.3", "has-values": "^0.1.4", @@ -11152,6 +12106,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, "requires": { "isarray": "1.0.0" } @@ -11161,12 +12116,14 @@ "has-values": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true } } }, @@ -11179,7 +12136,8 @@ "upath": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true }, "update-notifier": { "version": "2.5.0", @@ -11217,23 +12175,8 @@ "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - } - } + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true }, "url-parse-lax": { "version": "1.0.0", @@ -11247,15 +12190,8 @@ "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "requires": { - "inherits": "2.0.3" - } + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true }, "util-deprecate": { "version": "1.0.2", @@ -11273,9 +12209,10 @@ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" }, "v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "dev": true }, "validate-npm-package-license": { "version": "3.0.4", @@ -11311,332 +12248,393 @@ } }, "watchpack": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", - "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.0.tgz", + "integrity": "sha512-UjgD1mqjkG99+3lgG36at4wPnUXNvis2v1utwTgQ43C22c4LD71LsYMExdWXh4HZ+RmW+B0t1Vrg2GpXAkTOQw==", "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.0" + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" } }, - "watchpack-chokidar2": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", - "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", - "optional": true, - "requires": { - "chokidar": "^2.1.8" + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, + "webpack": { + "version": "5.20.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.20.2.tgz", + "integrity": "sha512-gGPip54KK7DznaaPHVuNGqym3LAXXL+bPkZ9SlLTCdHmmk+m5x+D4UZdhWvw32CMahYlZwZYPsioFIw36/txYQ==", + "requires": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.46", + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/wasm-edit": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "acorn": "^8.0.4", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.7.0", + "es-module-lexer": "^0.3.26", + "eslint-scope": "^5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.1", + "watchpack": "^2.0.0", + "webpack-sources": "^2.1.1" }, "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "optional": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "optional": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "optional": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "optional": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } + "@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==" }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } + "acorn": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.5.tgz", + "integrity": "sha512-v+DieK/HJkJOpFBETDJioequtc3PfxsWMaxIdIwujtF7FEV/MAyDQLlm6/zPvr7Mix07mLh6ccVwIsloceodlg==" }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "optional": true, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "optional": true, + "mime-db": { + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", + "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==" + }, + "mime-types": { + "version": "2.1.28", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", + "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "optional": true, - "requires": { - "is-extglob": "^2.1.0" - } - } + "mime-db": "1.45.0" } }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "optional": true, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "requires": { - "binary-extensions": "^1.0.0" + "yocto-queue": "^0.1.0" } }, - "is-number": { + "schema-utils": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "optional": true, + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "requires": { - "kind-of": "^3.0.2" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" } }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", "requires": { - "is-buffer": "^1.1.5" + "randombytes": "^2.1.0" } }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "optional": true, + "terser": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.5.1.tgz", + "integrity": "sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ==", "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + } } }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "optional": true, + "terser-webpack-plugin": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz", + "integrity": "sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q==", "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "jest-worker": "^26.6.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.5.1" } - } - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - }, - "webpack": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.1.tgz", - "integrity": "sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.3.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==" }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "webpack-sources": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", + "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" } } } }, "webpack-bundle-analyzer": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.8.0.tgz", - "integrity": "sha512-PODQhAYVEourCcOuU+NiYI7WdR8QyELZGgPvB1y2tjbUpbmcQOt5Q7jEK+ttd5se0KSBKD9SXHCEozS++Wllmw==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1", - "bfj": "^6.1.1", - "chalk": "^2.4.1", - "commander": "^2.18.0", - "ejs": "^2.6.1", - "express": "^4.16.3", - "filesize": "^3.6.1", - "gzip-size": "^5.0.0", - "lodash": "^4.17.15", - "mkdirp": "^0.5.1", - "opener": "^1.5.1", - "ws": "^6.0.0" + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.0.tgz", + "integrity": "sha512-9DhNa+aXpqdHk8LkLPTBU/dMfl84Y+WE2+KnfI6rSpNRNVKa0VGLjPd2pjFubDeqnWmulFggxmWBxhfJXZnR0g==", + "dev": true, + "requires": { + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "chalk": "^4.1.0", + "commander": "^6.2.0", + "gzip-size": "^6.0.0", + "lodash": "^4.17.20", + "opener": "^1.5.2", + "sirv": "^1.0.7", + "ws": "^7.3.1" }, "dependencies": { "acorn": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", - "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.5.tgz", + "integrity": "sha512-v+DieK/HJkJOpFBETDJioequtc3PfxsWMaxIdIwujtF7FEV/MAyDQLlm6/zPvr7Mix07mLh6ccVwIsloceodlg==", "dev": true }, "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.0.2.tgz", + "integrity": "sha512-+bpA9MJsHdZ4bgfDcpk0ozQyhhVct7rzOmO0s1IIr0AGGgKBljss8n2zp11rRP2wid5VGeh04CgeKzgat5/25A==", "dev": true }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "async-limiter": "~1.0.0" + "color-name": "~1.1.4" } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true + }, + "ws": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.3.tgz", + "integrity": "sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA==", + "dev": true } } }, "webpack-cli": { - "version": "3.3.12", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz", - "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==", - "requires": { - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.1.1", - "findup-sync": "^3.0.0", - "global-modules": "^2.0.0", - "import-local": "^2.0.0", - "interpret": "^1.4.0", - "loader-utils": "^1.4.0", - "supports-color": "^6.1.0", - "v8-compile-cache": "^2.1.1", - "yargs": "^13.3.2" + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.5.0.tgz", + "integrity": "sha512-wXg/ef6Ibstl2f50mnkcHblRPN/P9J4Nlod5Hg9HGFgSeF8rsqDGHJeVe4aR26q9l62TUJi6vmvC2Qz96YJw1Q==", + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.0.1", + "@webpack-cli/info": "^1.2.2", + "@webpack-cli/serve": "^1.3.0", + "colorette": "^1.2.1", + "commander": "^7.0.0", + "enquirer": "^2.3.6", + "execa": "^5.0.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "v8-compile-cache": "^2.2.0", + "webpack-merge": "^5.7.3" }, "dependencies": { - "has-flag": { + "commander": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.0.0.tgz", + "integrity": "sha512-ovx/7NkTrnPuIV8sqk/GjUIIM1+iUQeqA3ye2VNpq9sVoiZsooObWlQy+OPWGI17GDaEoybuAGJm6U8yC077BA==" + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "execa": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", + "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==" + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "requires": { + "path-key": "^3.0.0" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "v8-compile-cache": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "requires": { - "has-flag": "^3.0.0" + "isexe": "^2.0.0" } } } }, "webpack-dev-middleware": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", - "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.1.0.tgz", + "integrity": "sha512-mpa/FY+DiBu5+r5JUIyTCYWRfkWgyA3/OOE9lwfzV9S70A4vJYLsVRKj5rMFEsezBroy2FmPyQ8oBRVW8QmK1A==", "dev": true, "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", + "colorette": "^1.2.1", + "mem": "^8.0.0", + "memfs": "^3.2.0", + "mime-types": "^2.1.28", "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" + "schema-utils": "^3.0.0" + }, + "dependencies": { + "@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "mime-db": { + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", + "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==", + "dev": true + }, + "mime-types": { + "version": "2.1.28", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", + "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", + "dev": true, + "requires": { + "mime-db": "1.45.0" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } } }, "webpack-hot-middleware": { @@ -11651,38 +12649,13 @@ "strip-ansi": "^3.0.0" } }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dev": true, - "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "dev": true - } - } - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "webpack-merge": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz", + "integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==", "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" } }, "whatwg-encoding": { @@ -11712,6 +12685,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, "requires": { "isexe": "^2.0.0" } @@ -11719,7 +12693,8 @@ "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true }, "wide-align": { "version": "1.1.3", @@ -11793,19 +12768,16 @@ } } }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "requires": { - "errno": "~0.1.7" - } - }, "workerpool": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.0.tgz", @@ -11816,6 +12788,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, "requires": { "ansi-styles": "^3.2.0", "string-width": "^3.0.0", @@ -11825,12 +12798,14 @@ "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, "requires": { "ansi-regex": "^4.1.0" } @@ -11840,16 +12815,8 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "write-file-atomic": { "version": "2.4.3", @@ -11903,25 +12870,17 @@ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, "y18n": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true }, "yargs": { "version": "13.3.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, "requires": { "cliui": "^5.0.0", "find-up": "^3.0.0", @@ -11939,6 +12898,7 @@ "version": "13.1.2", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -11992,6 +12952,11 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" } } } diff --git a/package.json b/package.json index bbc6f063262..44eeb3a985d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "nightscout", - "version": "14.0.7", + "version": "14.2.2", "description": "Nightscout acts as a web-based CGM (Continuous Glucose Montinor) to allow multiple caregivers to remotely view a patients glucose data in realtime.", "license": "AGPL-3.0", "author": "Nightscout Team", @@ -26,22 +26,30 @@ "url": "https://github.com/nightscout/cgm-remote-monitor/issues" }, "scripts": { - "start": "node server.js", - "test": "env-cmd -f ./my.test.env mocha --exit tests/*.test.js", - "test-single": "env-cmd -f ./my.test.env mocha --exit tests/$TEST.test.js", - "test-ci": "env-cmd -f ./ci.test.env nyc --reporter=lcov --reporter=text-summary mocha --exit tests/*.test.js", + "start": "node lib/server/server.js", + "test": "env-cmd -f ./my.test.env mocha --require ./tests/hooks.js -exit ./tests/*.test.js", + "test-single": "env-cmd -f ./my.test.env mocha --require ./tests/hooks.js --exit ./tests/$TEST.test.js", + "test-ci": "env-cmd -f ./tests/ci.test.env nyc --reporter=lcov --reporter=text-summary mocha --require ./tests/hooks.js --exit ./tests/*.test.js", "env": "env", - "postinstall": "webpack --mode production --config webpack.config.js && npm run-script update-buster", - "bundle": "webpack --mode production --config webpack.config.js && npm run-script update-buster", - "bundle-dev": "webpack --mode development --config webpack.config.js && npm run-script update-buster", - "bundle-analyzer": "webpack --mode development --config webpack.config.js --profile --json > stats.json && webpack-bundle-analyzer stats.json", - "update-buster": "node bin/generateCacheBuster.js >tmp/cacheBusterToken", - "coverage": "cat ./coverage/lcov.info | env-cmd -f ./ci.test.env codacy-coverage", - "dev": "env-cmd -f ./my.env nodemon server.js 0.0.0.0", - "prod": "env-cmd -f ./my.prod.env node server.js 0.0.0.0", + "postinstall": "webpack --mode production --config webpack/webpack.config.js && npm run-script generate-keys", + "bundle": "webpack --mode production --config webpack/webpack.config.js && npm run-script generate-keys", + "bundle-dev": "webpack --mode development --config webpack/webpack.config.js && npm run-script generate-keys", + "bundle-analyzer": "webpack --mode development --config webpack/webpack.config.js --profile --json > stats.json && webpack-bundle-analyzer stats.json", + "generate-keys": "node bin/generateRandomString.js >tmp/randomString", + "coverage": "cat ./coverage/lcov.info | env-cmd -f ./tests/ci.test.env codacy-coverage", + "dev": "env-cmd -f ./my.env nodemon --inspect lib/server/server.js 0.0.0.0", + "dev-test": "env-cmd -f ./my.devtest.env nodemon --inspect lib/server/server.js 0.0.0.0", + "prod": "env-cmd -f ./my.prod.env node lib/server/server.js 0.0.0.0", "lint": "eslint lib" }, - "main": "server.js", + "main": "lib/server/server.js", + "nodemonConfig": { + "ignore": [ + "tests/*", + "node_modules/*", + "bin/*" + ] + }, "config": { "blanket": { "pattern": [ @@ -62,7 +70,9 @@ }, "dependencies": { "@babel/core": "^7.11.1", - "@babel/preset-env": "^7.11.0", + "@babel/preset-env": "^7.12.11", + "acorn": "^8.0.5", + "acorn-jsx": "^5.3.1", "apn": "^2.2.0", "async": "^0.9.2", "babel-loader": "^8.1.0", @@ -70,40 +80,46 @@ "body-parser": "^1.19.0", "bootevent": "0.0.1", "braces": "^3.0.2", + "buffer": "^6.0.3", "compression": "^1.7.4", - "css-loader": "^1.0.1", + "crypto-browserify": "^3.12.0", + "css-loader": "^5.0.1", "cssmin": "^0.4.3", "csv-stringify": "^5.5.1", "d3": "^5.16.0", + "dompurify": "^2.2.6", "easyxml": "^2.0.1", "ejs": "^2.7.4", "errorhandler": "^1.5.1", "event-stream": "3.3.4", - "expose-loader": "^0.7.5", + "expose-loader": "^2.0.0", "express": "^4.17.1", "express-minify": "^1.0.0", - "file-loader": "^3.0.1", + "fast-password-entropy": "^1.1.1", + "file-loader": "^6.2.0", "flot": "^0.8.3", "helmet": "^4.0.0", "jquery": "^3.5.1", "jquery-ui-bundle": "^1.12.1-migrate", "jquery.tooltips": "^1.0.0", "js-storage": "^1.1.0", - "jsdom": "~11.11.0", + "jsdom": "^11.11.0", "jsonwebtoken": "^8.5.1", "lodash": "^4.17.20", "memory-cache": "^0.2.0", "mime": "^2.4.6", - "minimed-connect-to-nightscout": "^1.4.0", + "minimed-connect-to-nightscout": "^1.5.0", "moment": "^2.27.0", "moment-locales-webpack-plugin": "^1.2.0", "moment-timezone": "^0.5.31", "moment-timezone-data-webpack-plugin": "^1.3.0", + "mongo-url-parser": "^1.0.1", "mongodb": "^3.6.0", "mongomock": "^0.1.2", "node-cache": "^4.2.1", "parse-duration": "^0.1.3", "pem": "^1.14.4", + "process": "^0.11.10", "pushover-notifications": "^1.2.2", "random-token": "0.0.8", "request": "^2.88.2", @@ -111,34 +127,36 @@ "share2nightscout-bridge": "^0.2.4", "shiro-trie": "^0.4.9", "simple-statistics": "^0.7.0", - "socket.io": "~2.1.1", + "socket.io": "~2.4.0", + "stream-browserify": "^3.0.0", "style-loader": "^0.23.1", "swagger-ui-dist": "^3.32.1", "swagger-ui-express": "^4.1.4", - "terser": "^3.17.0", "traverse": "^0.6.6", "uuid": "^3.4.0", - "webpack": "^4.44.1", - "webpack-cli": "^3.3.12" + "webpack": "^5.20.2", + "webpack-cli": "^4.5.0" }, "devDependencies": { + "@types/tough-cookie": "^4.0.0", + "axios": "^0.21.1", "babel-eslint": "^10.1.0", "benv": "^3.3.0", "codacy-coverage": "^3.4.0", "csv-parse": "^4.12.0", "env-cmd": "^10.1.0", - "eslint": "^6.8.0", - "eslint-loader": "^2.2.1", + "eslint": "^7.19.0", + "eslint-plugin-security": "^1.4.0", + "eslint-webpack-plugin": "^2.4.3", "mocha": "^8.1.1", "nodemon": "^1.19.4", "nyc": "^14.1.1", "should": "^13.2.3", "supertest": "^3.4.2", - "terser-webpack-plugin": "^1.4.5", - "webpack-bundle-analyzer": "^3.8.0", - "webpack-dev-middleware": "^3.7.2", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-dev-middleware": "^4.1.0", "webpack-hot-middleware": "^2.25.0", "xml2js": "^0.4.23" }, - "browserslist": "> 0.25%, not dead" + "browserslist": "> 0.25%, not dead, ios_saf 10" } diff --git a/server.js b/server.js index f4350bbbe00..d1c3f30897b 100644 --- a/server.js +++ b/server.js @@ -22,66 +22,5 @@ // the Dexcom SGV data. 'use strict'; -/////////////////////////////////////////////////// -// DB Connection setup and utils -/////////////////////////////////////////////////// +require('./lib/server/server'); -var env = require('./env')( ); -var language = require('./lib/language')(); -var translate = language.set(env.settings.language).translate; - -/////////////////////////////////////////////////// -// setup http server -/////////////////////////////////////////////////// -var PORT = env.PORT; -var HOSTNAME = env.HOSTNAME; - -function create (app) { - var transport = (env.ssl - ? require('https') : require('http')); - if (env.ssl) { - return transport.createServer(env.ssl, app); - } - return transport.createServer(app); -} - -require('./lib/server/bootevent')(env, language).boot(function booted (ctx) { - var app = require('./app')(env, ctx); - var server = create(app).listen(PORT, HOSTNAME); - console.log(translate('Listening on port'), PORT, HOSTNAME); - - if (ctx.bootErrors && ctx.bootErrors.length > 0) { - return; - } - - ctx.bus.on('teardown', function serverTeardown () { - server.close(); - clearTimeout(sendStartupAllClearTimer); - ctx.store.client.close(); - }); - - /////////////////////////////////////////////////// - // setup socket io for data and message transmission - /////////////////////////////////////////////////// - var websocket = require('./lib/server/websocket')(env, ctx, server); - - ctx.bus.on('data-processed', function() { - websocket.update(); - }); - - ctx.bus.on('notification', function(notify) { - websocket.emitNotification(notify); - }); - - //after startup if there are no alarms send all clear - let sendStartupAllClearTimer = setTimeout(function sendStartupAllClear () { - var alarm = ctx.notifications.findHighestAlarm(); - if (!alarm) { - ctx.bus.emit('notification', { - clear: true - , title: 'All Clear' - , message: 'Server started without alarms' - }); - } - }, 20000); -}); diff --git a/static/css/drawer.css b/static/css/drawer.css index 3e5e72542a4..37867b8fa87 100644 --- a/static/css/drawer.css +++ b/static/css/drawer.css @@ -49,7 +49,7 @@ input[type=number]:invalid { text-decoration: underline; } -#treatmentDrawer { +#treatmentDrawer, #adminNotifiesDrawer { background-color: #666; border-left: 1px solid #999; box-shadow: inset 4px 4px 5px 0 rgba(50, 50, 50, 0.75); @@ -66,6 +66,19 @@ input[type=number]:invalid { z-index: 1; } +#adminNotifyContent { + margin: 10px; +} + +.adminNotifyMessage { + margin-left: 10px; +} + +.adminNotifyMessageAdditionalInfo { + margin-left: 10px; + font-size: 11px; +} + #treatmentDrawer input { box-sizing: border-box; } @@ -214,7 +227,7 @@ h1, legend, padding: 0 15px 0 40px; position: relative; align-items: center; - background: url(/images/logo2.png) no-repeat 3px center #333; + background: url("../images/logo2.png") no-repeat 3px center #333; border-bottom: 1px solid #999; justify-content: space-between; } diff --git a/static/css/main.css b/static/css/main.css index d6bee072d16..dd5abb9c9b4 100644 --- a/static/css/main.css +++ b/static/css/main.css @@ -9,15 +9,15 @@ font-style: normal; } -/* +/* Icon font for additional plugin icons. Please read assets/fonts/README.md about update process */ @font-face { font-family: 'pluginicons'; /* Plugin Icons font files content (from WOFF and SVG icon files, base64 encoded) */ - src: url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAWAAAsAAAAABTQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgDxIE8mNtYXAAAAFoAAAAVAAAAFQXVdKJZ2FzcAAAAbwAAAAIAAAACAAAABBnbHlmAAABxAAAAUgAAAFIFA4eR2hlYWQAAAMMAAAANgAAADYXVLrVaGhlYQAAA0QAAAAkAAAAJAdQA8ZobXR4AAADaAAAABQAAAAUCY4AAGxvY2EAAAN8AAAADAAAAAwAKAC4bWF4cAAAA4gAAAAgAAAAIAAJAFxuYW1lAAADqAAAAbYAAAG2DBt7mXBvc3QAAAVgAAAAIAAAACAAAwAAAAMCxwGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA6QEDwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADgAAAAKAAgAAgACAAEAIOkB//3//wAAAAAAIOkB//3//wAB/+MXAwADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAwAA/8ADjgPAABsAOgBZAAABIgcOAQcGFRQXHgEXFjMyNz4BNzY1NCcuAScmARUUFx4BFxYzMjc+ATc2PQEUBw4BBwYjIicuAScmNREVFBceARcWMzI3PgE3Nj0BFAcOAQcGIyInLgEnJjUBx15TU3skJCQke1NTXl5TU3wjJCQjfFNT/dskJHtTU15eU1N8IyQkI3xTU15eU1N7JCQkJHtTU15eU1N8IyQkI3xTU15eU1N7JCQDwBISPikpMC8pKj0SEhISPSopLzApKT4SEv6rqy8qKT4SEhISPikqL6svKik+EhISEj4pKi/+46owKSk+EhISEj4pKTCqLykqPhESEhE+KikvAAAAAAEAAAABAABgRbaTXw889QALBAAAAAAA2lO7LAAAAADaU7ssAAD/wAOOA8AAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAAAAA44AAQAAAAAAAAAAAAAAAAAAAAUEAAAAAAAAAAAAAAACAAAAA44AAAAAAAAACgAUAB4ApAABAAAABQBaAAMAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEACwAAAAEAAAAAAAIABwCEAAEAAAAAAAMACwBCAAEAAAAAAAQACwCZAAEAAAAAAAUACwAhAAEAAAAAAAYACwBjAAEAAAAAAAoAGgC6AAMAAQQJAAEAFgALAAMAAQQJAAIADgCLAAMAAQQJAAMAFgBNAAMAAQQJAAQAFgCkAAMAAQQJAAUAFgAsAAMAAQQJAAYAFgBuAAMAAQQJAAoANADUcGx1Z2luaWNvbnMAcABsAHUAZwBpAG4AaQBjAG8AbgBzVmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwcGx1Z2luaWNvbnMAcABsAHUAZwBpAG4AaQBjAG8AbgBzcGx1Z2luaWNvbnMAcABsAHUAZwBpAG4AaQBjAG8AbgBzUmVndWxhcgBSAGUAZwB1AGwAYQBycGx1Z2luaWNvbnMAcABsAHUAZwBpAG4AaQBjAG8AbgBzRm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format('woff'), - url(data:application/font-svg;charset=utf-8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+DQo8bWV0YWRhdGE+R2VuZXJhdGVkIGJ5IEljb01vb248L21ldGFkYXRhPg0KPGRlZnM+DQo8Zm9udCBpZD0icGx1Z2luaWNvbnMiIGhvcml6LWFkdi14PSIxMDI0Ij4NCjxmb250LWZhY2UgdW5pdHMtcGVyLWVtPSIxMDI0IiBhc2NlbnQ9Ijk2MCIgZGVzY2VudD0iLTY0IiAvPg0KPG1pc3NpbmctZ2x5cGggaG9yaXotYWR2LXg9IjEwMjQiIC8+DQo8Z2x5cGggdW5pY29kZT0iJiN4MjA7IiBob3Jpei1hZHYteD0iNTEyIiBkPSIiIC8+DQo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwMTsiIGdseXBoLW5hbWU9ImRhdGFiYXNlIiBob3Jpei1hZHYteD0iOTEwIiBkPSJNNDU1LjExMSA5NjBjLTI1MS40NDkgMC00NTUuMTExLTEwMS44MzEtNDU1LjExMS0yMjcuNTU2czIwMy42NjItMjI3LjU1NiA0NTUuMTExLTIyNy41NTYgNDU1LjExMSAxMDEuODMxIDQ1NS4xMTEgMjI3LjU1Ni0yMDMuNjYyIDIyNy41NTYtNDU1LjExMSAyMjcuNTU2ek0wIDYxOC42Njd2LTE3MC42NjdjMC0xMjUuNzI0IDIwMy42NjItMjI3LjU1NiA0NTUuMTExLTIyNy41NTZzNDU1LjExMSAxMDEuODMxIDQ1NS4xMTEgMjI3LjU1NnYxNzAuNjY3YzAtMTI1LjcyNC0yMDMuNjYyLTIyNy41NTYtNDU1LjExMS0yMjcuNTU2cy00NTUuMTExIDEwMS44MzEtNDU1LjExMSAyMjcuNTU2ek0wIDMzNC4yMjJ2LTE3MC42NjdjMC0xMjUuNzI0IDIwMy42NjItMjI3LjU1NiA0NTUuMTExLTIyNy41NTZzNDU1LjExMSAxMDEuODMxIDQ1NS4xMTEgMjI3LjU1NnYxNzAuNjY3YzAtMTI1LjcyNC0yMDMuNjYyLTIyNy41NTYtNDU1LjExMS0yMjcuNTU2cy00NTUuMTExIDEwMS44MzEtNDU1LjExMSAyMjcuNTU2eiIgLz4NCjwvZm9udD48L2RlZnM+PC9zdmc+) format('svg'); + src: url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAcEAAsAAAAABrgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgDxIFc2NtYXAAAAFoAAAAXAAAAFzpVumzZ2FzcAAAAcQAAAAIAAAACAAAABBnbHlmAAABzAAAAuwAAALs3l4nFmhlYWQAAAS4AAAANgAAADYbA9uPaGhlYQAABPAAAAAkAAAAJAfCA8dobXR4AAAFFAAAABgAAAAYDY4AAGxvY2EAAAUsAAAADgAAAA4BngC4bWF4cAAABTwAAAAgAAAAIAAMAJRuYW1lAAAFXAAAAYYAAAGGmUoJ+3Bvc3QAAAbkAAAAIAAAACAAAwAAAAMDLwGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA6RoDwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEAEAAAAAMAAgAAgAEAAEAIOkB6Rr//f//AAAAAAAg6QHpGv/9//8AAf/jFwMW6wADAAEAAAAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAADAAD/wAOOA8AAGwA6AFkAAAEiBw4BBwYVFBceARcWMzI3PgE3NjU0Jy4BJyYBFRQXHgEXFjMyNz4BNzY9ARQHDgEHBiMiJy4BJyY1ERUUFx4BFxYzMjc+ATc2PQEUBw4BBwYjIicuAScmNQHHXlNTeyQkJCR7U1NeXlNTfCMkJCN8U1P92yQke1NTXl5TU3wjJCQjfFNTXl5TU3skJCQke1NTXl5TU3wjJCQjfFNTXl5TU3skJAPAEhI+KSkwLykqPRISEhI9KikvMCkpPhIS/qurLyopPhISEhI+KSovqy8qKT4SEhISPikqL/7jqjApKT4SEhISPikpMKovKSo+ERISET4qKS8AAAAABQAAAAIEAAOAACoATgBjAG0AkQAAATQnLgEnJic4ATEjMAcOAQcGBw4BFRQWFxYXHgEXFjEzMDQxMjc+ATc2NQMiJicuAScuATU0Njc+ATc+ATMyFhceARceARUUBgcOAQcOAQE0NjcOASMqATEHFRcwMjMyFhcuARcnEx4BPwE+AScBIiYnLgEnLgE1NDY3PgE3PgEzMhYXHgEXHgEVFAYHDgEHDgEEAAoLIxgYG1MiI35XWGkGCAgGaVhXfiMiUxsYGCMLCp8HDgQJEggSEhISCBIJBA4HBw4ECRIIERMTEQgSCQQO/ZQFBiRCJjMRNzcRMyZCJAYFdIBSAxYMdgwJBwF2AwUCAwcDBwcHBwMHAwIFAwMFAQQHAwcHBwcDBwQBBQITS0JDYx0cARgYQSMiFiJRLi9RIhUjIkIYGAEdHWNCQkz+ygsECyAVLndCQncuFCEKBQsLBQohFC53QkJ3LhUgCwQLATYnSyMFBV9YXwUFI0uuGP6/DQsFMAQXDAFCBQEEDQgRLhoZLhIIDAQCBAQCBAwIEi4ZGi4RCA0EAQUAAQAAAAAAAPoSCcNfDzz1AAsEAAAAAADb8suJAAAAANvyy4kAAP/ABAADwAAAAAgAAgAAAAAAAAABAAADwP/AAAAEAAAAAAAEAAABAAAAAAAAAAAAAAAAAAAABgQAAAAAAAAAAAAAAAIAAAADjgAABAAAAAAAAAAACgAUAB4ApAF2AAAAAQAAAAYAkgAFAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAcAAAABAAAAAAACAAcAYAABAAAAAAADAAcANgABAAAAAAAEAAcAdQABAAAAAAAFAAsAFQABAAAAAAAGAAcASwABAAAAAAAKABoAigADAAEECQABAA4ABwADAAEECQACAA4AZwADAAEECQADAA4APQADAAEECQAEAA4AfAADAAEECQAFABYAIAADAAEECQAGAA4AUgADAAEECQAKADQApGljb21vb24AaQBjAG8AbQBvAG8AblZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMGljb21vb24AaQBjAG8AbQBvAG8Abmljb21vb24AaQBjAG8AbQBvAG8AblJlZ3VsYXIAUgBlAGcAdQBsAGEAcmljb21vb24AaQBjAG8AbQBvAG8AbkZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=) format('woff'), + url(data:application/font-svg;charset=utf-8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiID4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8bWV0YWRhdGE+R2VuZXJhdGVkIGJ5IEljb01vb248L21ldGFkYXRhPgo8ZGVmcz4KPGZvbnQgaWQ9Imljb21vb24iIGhvcml6LWFkdi14PSIxMDI0Ij4KPGZvbnQtZmFjZSB1bml0cy1wZXItZW09IjEwMjQiIGFzY2VudD0iOTYwIiBkZXNjZW50PSItNjQiIC8+CjxtaXNzaW5nLWdseXBoIGhvcml6LWFkdi14PSIxMDI0IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjA7IiBob3Jpei1hZHYteD0iNTEyIiBkPSIiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTAxOyIgZ2x5cGgtbmFtZT0iZGF0YWJhc2UiIGhvcml6LWFkdi14PSI5MTAiIGQ9Ik00NTUuMTExIDk2MGMtMjUxLjQ0OSAwLTQ1NS4xMTEtMTAxLjgzMS00NTUuMTExLTIyNy41NTZzMjAzLjY2Mi0yMjcuNTU2IDQ1NS4xMTEtMjI3LjU1NiA0NTUuMTExIDEwMS44MzEgNDU1LjExMSAyMjcuNTU2LTIwMy42NjIgMjI3LjU1Ni00NTUuMTExIDIyNy41NTZ6TTAgNjE4LjY2N3YtMTcwLjY2N2MwLTEyNS43MjQgMjAzLjY2Mi0yMjcuNTU2IDQ1NS4xMTEtMjI3LjU1NnM0NTUuMTExIDEwMS44MzEgNDU1LjExMSAyMjcuNTU2djE3MC42NjdjMC0xMjUuNzI0LTIwMy42NjItMjI3LjU1Ni00NTUuMTExLTIyNy41NTZzLTQ1NS4xMTEgMTAxLjgzMS00NTUuMTExIDIyNy41NTZ6TTAgMzM0LjIyMnYtMTcwLjY2N2MwLTEyNS43MjQgMjAzLjY2Mi0yMjcuNTU2IDQ1NS4xMTEtMjI3LjU1NnM0NTUuMTExIDEwMS44MzEgNDU1LjExMSAyMjcuNTU2djE3MC42NjdjMC0xMjUuNzI0LTIwMy42NjItMjI3LjU1Ni00NTUuMTExLTIyNy41NTZzLTQ1NS4xMTEgMTAxLjgzMS00NTUuMTExIDIyNy41NTZ6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkxYTsiIGdseXBoLW5hbWU9Im5vdGlmaWVzIiBkPSJNMTAyNCA1MzAuNzQ0YzAgMjAwLjkyNi01OC43OTIgMzYzLjkzOC0xMzEuNDgyIDM2NS4yMjYgMC4yOTIgMC4wMDYgMC41NzggMC4wMzAgMC44NzIgMC4wMzBoLTgyLjk0MmMwIDAtMTk0LjgtMTQ2LjMzNi00NzUuMjMtMjAzLjc1NC04LjU2LTQ1LjI5Mi0xNC4wMzAtOTkuMjc0LTE0LjAzMC0xNjEuNTAyczUuNDY2LTExNi4yMDggMTQuMDMwLTE2MS41YzI4MC40MjgtNTcuNDE4IDQ3NS4yMy0yMDMuNzU2IDQ3NS4yMy0yMDMuNzU2aDgyLjk0MmMtMC4yOTIgMC0wLjU3OCAwLjAyNC0wLjg3MiAwLjAzMiA3Mi42OTYgMS4yODggMTMxLjQ4MiAxNjQuMjk4IDEzMS40ODIgMzY1LjIyNHpNODY0LjgyNCAyMjAuNzQ4Yy05LjM4MiAwLTE5LjUzMiA5Ljc0Mi0yNC43NDYgMTUuNTQ4LTEyLjYzIDE0LjA2NC0yNC43OTIgMzUuOTYtMzUuMTg4IDYzLjMyOC0yMy4yNTYgNjEuMjMyLTM2LjA2NiAxNDMuMzEtMzYuMDY2IDIzMS4xMjQgMCA4Ny44MSAxMi44MSAxNjkuODkgMzYuMDY2IDIzMS4xMjIgMTAuMzk0IDI3LjM2OCAyMi41NjIgNDkuMjY2IDM1LjE4OCA2My4zMjggNS4yMTQgNS44MTIgMTUuMzY0IDE1LjU1MiAyNC43NDYgMTUuNTUyIDkuMzggMCAxOS41MzYtOS43NDQgMjQuNzQ0LTE1LjU1MiAxMi42MzQtMTQuMDY0IDI0Ljc5Ni0zNS45NTggMzUuMTg4LTYzLjMyOCAyMy4yNTgtNjEuMjMgMzYuMDY4LTE0My4zMTIgMzYuMDY4LTIzMS4xMjIgMC04Ny44MDQtMTIuODEtMTY5Ljg4OC0zNi4wNjgtMjMxLjEyNC0xMC4zOS0yNy4zNjgtMjIuNTYyLTQ5LjI2NC0zNS4xODgtNjMuMzI4LTUuMjA4LTUuODA2LTE1LjM2LTE1LjU0OC0yNC43NDQtMTUuNTQ4ek0yNTEuODEyIDUzMC43NDRjMCA1MS45NSAzLjgxIDEwMi40MyAxMS4wNTIgMTQ5LjA5NC00Ny4zNzItNi41NTQtODguOTQyLTEwLjMyNC0xNDAuMzQtMTAuMzI0LTY3LjA1OCAwLTY3LjA1OCAwLTY3LjA1OCAwbC01NS40NjYtOTQuNjg2di04OC4xN2w1NS40Ni05NC42ODZjMCAwIDAgMCA2Ny4wNjAgMCA1MS4zOTggMCA5Mi45NjgtMy43NzQgMTQwLjM0LTEwLjMyNC03LjIzNiA0Ni42NjQtMTEuMDQ4IDk3LjE0Ni0xMS4wNDggMTQ5LjA5NnpNMzY4LjE1IDMxNy44MjhsLTEyNy45OTggMjQuNTEgODEuODQyLTMyMS41NDRjNC4yMzYtMTYuNjM0IDIwLjc0NC0yNS4wMzggMzYuNjg2LTE4LjY1NGwxMTguNTU2IDQ3LjQ1MmMxNS45NDQgNi4zNzYgMjIuMzI4IDIzLjk2NCAxNC4xOTYgMzkuMDg0bC0xMjMuMjgyIDIyOS4xNTJ6TTg2NC44MjQgNDExLjI3Yy0zLjYxOCAwLTcuNTI4IDMuNzU0LTkuNTM4IDUuOTkyLTQuODcgNS40Mi05LjU1NiAxMy44Ni0xMy41NjIgMjQuNDA4LTguOTYyIDIzLjYtMTMuOSA1NS4yMzQtMTMuOSA4OS4wNzhzNC45MzggNjUuNDc4IDEzLjkgODkuMDc4YzQuMDA2IDEwLjU0OCA4LjY5NiAxOC45ODggMTMuNTYyIDI0LjQwOCAyLjAxMCAyLjI0IDUuOTIgNS45OTQgOS41MzggNS45OTQgMy42MTYgMCA3LjUzLTMuNzU2IDkuNTM4LTUuOTk0IDQuODctNS40MiA5LjU1Ni0xMy44NTggMTMuNTYtMjQuNDA4IDguOTY0LTIzLjU5OCAxMy45MDItNTUuMjM0IDEzLjkwMi04OS4wNzggMC0zMy44NDItNC45MzgtNjUuNDc4LTEzLjkwMi04OS4wNzgtNC4wMDQtMTAuNTQ4LTguNjk2LTE4Ljk4OC0xMy41Ni0yNC40MDgtMi4wMDgtMi4yMzgtNS45Mi01Ljk5Mi05LjUzOC01Ljk5MnoiIC8+CjwvZm9udD48L2RlZnM+PC9zdmc+) format('svg'); font-weight: normal; font-style: normal; } @@ -61,7 +61,7 @@ [class^="plugicon-"]:before, [class*=" plugicon-"]:before { font-family: "pluginicons"; } - + .icon-volume:before { content: '\e800'; } .icon-plus:before { content: '\e801'; } .icon-edit:before { content: '\e802'; } @@ -85,6 +85,7 @@ /* Plugin Icons id-s (copy from generated icon style.css) */ .plugicon-database:before { content: "\e901"; } +.plugicon-notifies:before { content: "\e91a"; } html, body { margin: 0; diff --git a/static/js/foodinit.js b/static/js/foodinit.js new file mode 100644 index 00000000000..d2e90ddcc23 --- /dev/null +++ b/static/js/foodinit.js @@ -0,0 +1,6 @@ +'use strict'; + +$(document).ready(function() { + console.log('Application got ready event'); + window.Nightscout.foodclient(); +}); diff --git a/static/js/profileinit.js b/static/js/profileinit.js new file mode 100644 index 00000000000..470f8bf623a --- /dev/null +++ b/static/js/profileinit.js @@ -0,0 +1,6 @@ +'use strict'; + +$(document).ready(function() { + console.log('Application got ready event'); + window.Nightscout.profileclient(); +}); diff --git a/static/js/reportinit.js b/static/js/reportinit.js new file mode 100644 index 00000000000..f88c05647d5 --- /dev/null +++ b/static/js/reportinit.js @@ -0,0 +1,6 @@ +'use strict'; + +$(document).ready(function() { + console.log('Application got ready event'); + window.Nightscout.reportclient(); +}); diff --git a/static/mfb/lib/modernizr.touch.js b/static/mfb/lib/modernizr.touch.js deleted file mode 100644 index 0280cf2b976..00000000000 --- a/static/mfb/lib/modernizr.touch.js +++ /dev/null @@ -1,4 +0,0 @@ -/* Modernizr 2.8.3 (Custom Build) | MIT & BSD - * Build: http://modernizr.com/download/#-touch-teststyles-prefixes - */ -;window.Modernizr=function(a,b,c){function v(a){i.cssText=a}function w(a,b){return v(l.join(a+";")+(b||""))}function x(a,b){return typeof a===b}function y(a,b){return!!~(""+a).indexOf(b)}function z(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:x(f,"function")?f.bind(d||b):f}return!1}var d="2.8.3",e={},f=b.documentElement,g="modernizr",h=b.createElement(g),i=h.style,j,k={}.toString,l=" -webkit- -moz- -o- -ms- ".split(" "),m={},n={},o={},p=[],q=p.slice,r,s=function(a,c,d,e){var h,i,j,k,l=b.createElement("div"),m=b.body,n=m||b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:g+(d+1),l.appendChild(j);return h=["­",'"].join(""),l.id=g,(m?l:n).innerHTML+=h,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=f.style.overflow,f.style.overflow="hidden",f.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),f.style.overflow=k),!!i},t={}.hasOwnProperty,u;!x(t,"undefined")&&!x(t.call,"undefined")?u=function(a,b){return t.call(a,b)}:u=function(a,b){return b in a&&x(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=q.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(q.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(q.call(arguments)))};return e}),m.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:s(["@media (",l.join("touch-enabled),("),g,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c};for(var A in m)u(m,A)&&(r=A.toLowerCase(),e[r]=m[A](),p.push((e[r]?"":"no-")+r));return e.addTest=function(a,b){if(typeof a=="object")for(var d in a)u(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof enableClasses!="undefined"&&enableClasses&&(f.className+=" "+(b?"":"no-")+a),e[a]=b}return e},v(""),h=j=null,e._version=d,e._prefixes=l,e.testStyles=s,e}(this,this.document); \ No newline at end of file diff --git a/static/mfb/mfb.css b/static/mfb/mfb.css deleted file mode 100644 index 39063306c34..00000000000 --- a/static/mfb/mfb.css +++ /dev/null @@ -1,671 +0,0 @@ -/** - * CONTENTS - * - * #Introduction........Naming conventions used throughout the code. - * - * #SETTINGS - * Variables............Globally-available variables and config. - * - * #TOOLS - * Mixins...............Useful mixins. - * - * #GENERIC - * Demo styles..........Styles for demo only (consider removing these). - * - * #BASE - * Raw styles...........The very basic component wrapper. - * Modifiers............The basic styles dependant on component placement. - * Debuggers............The basic styles dependant on component placement. - * - * #BUTTONS - * Base..................Wrapping and constraining every button. - * Modifiers.............Styles that depends on state and settings. - * Animations............Main animations of the component. - * Debuggers.............Styles for development. - * - * #LABELS - * Base..................Wrapping and constraining every label. - * Modifiers.............Styles that depends on state and settings. - * Debuggers.............Styles for development. - * - * #DEVELOPMENT - * In development........These styles are in development and not yet finalised - * Debuggers.............Helper styles and flags for development. - */ -/*------------------------------------*\ - #Introduction -\*------------------------------------*/ -/** - * The code AND the comments use naming conventions to refer to each part of - * the UI put in place by this component. If you see that somewhere they are - * not followed please consider a Pull Request. The naming conventions are: - * - * "Component" : the widget itself as a whole. This is the last time it will be - * called anything different than "component". So, stay away from - * "widget", "button" or anything else when referring to the - * Component in general. - * - * "Main Button" : the button that is always in view. Hovering or clicking on it - * will reveal the child buttons. - * - * "Child buttons" : if you've read the previous point you know what they are. - * Did you read the previous point? :) - * - * "Label(s)" : the tooltip that fades in when hovering over a button. - -/*------------------------------------*\ - #SETTINGS | Variables -\*------------------------------------*/ -/** - * These variables are the default styles that serve as fallback and can be - * easily customised at compile time. - * Consider overriding them in your own style sheets rather than editing them - * here. Refer to the docs for more info. - */ -/* COLORS ----------------------------*/ -/* EFFECTS ---------------------------*/ -/* SPEEDS ----------------------------*/ -/* SIZES -----------------------------*/ -/* SPACING ---------------------------*/ -/* OTHER VARIABLES -------------------*/ -/*------------------------------------*\ - #BASE | Raw styles -\*------------------------------------*/ -/** - * The very core styling of the button. - * These styles are shared by every instance of the button. - * Styles placed here should NOT care about placement in the screen, - * options chosen by the user or state of the button. - */ -.mfb-component--tl, .mfb-component--tr, .mfb-component--bl, .mfb-component--br { - box-sizing: border-box; - margin: 25px; - position: fixed; - white-space: nowrap; - z-index: 30; - padding-left: 0; - list-style: none; } - .mfb-component--tl *, .mfb-component--tr *, .mfb-component--bl *, .mfb-component--br *, .mfb-component--tl *:before, .mfb-component--tr *:before, .mfb-component--bl *:before, .mfb-component--br *:before, .mfb-component--tl *:after, .mfb-component--tr *:after, .mfb-component--bl *:after, .mfb-component--br *:after { - box-sizing: inherit; } - -/*------------------------------------*\ - #BASE | Modifiers -\*------------------------------------*/ -/** - * These styles depends on the placement of the button. - * Styles can be: - * 1. Top-left: modified by the " --tl " suffix. - * 2. Top-right: modified by the " --tr " suffix. - * 3. Bottom-left: modified by the " --bl " suffix. - * 4. Bottom-right: modified by the " --br " suffix. - */ -.mfb-component--tl { - left: 0; - top: 0; } - -.mfb-component--tr { - right: 0; - top: 0; } - -.mfb-component--bl { - left: 0; - bottom: 0; } - -.mfb-component--br { - right: 0; - bottom: 0; } - -/*------------------------------------*\ - #BUTTONS | Base -\*------------------------------------*/ -.mfb-component__button--main, .mfb-component__button--child { - background-color: #E40A5D; - display: inline-block; - position: relative; - border: none; - border-radius: 50%; - box-shadow: 0 0 4px rgba(0, 0, 0, 0.14), 0 4px 8px rgba(0, 0, 0, 0.28); - cursor: pointer; - outline: none; - padding: 0; - position: relative; - -webkit-user-drag: none; - color: #f1f1f1; } - -/** - * This is the unordered list for the list items that contain - * the child buttons. - * - */ -.mfb-component__list { - list-style: none; - margin: 0; - padding: 0; } - .mfb-component__list > li { - display: block; - position: absolute; - top: 0; - right: 1px; - padding: 10px 0; - margin: -10px 0; } - -/** - * These are the basic styles for all the icons inside the main button - */ -.mfb-component__icon, .mfb-component__main-icon--active, -.mfb-component__main-icon--resting, .mfb-component__child-icon { - position: absolute; - font-size: 18px; - text-align: center; - line-height: 56px; - width: 100%; } - -.mfb-component__wrap { - padding: 25px; - margin: -25px; } - -[data-mfb-toggle="hover"]:hover .mfb-component__icon, [data-mfb-toggle="hover"]:hover .mfb-component__main-icon--active, -[data-mfb-toggle="hover"]:hover .mfb-component__main-icon--resting, [data-mfb-toggle="hover"]:hover .mfb-component__child-icon, -[data-mfb-state="open"] .mfb-component__icon, -[data-mfb-state="open"] .mfb-component__main-icon--active, -[data-mfb-state="open"] .mfb-component__main-icon--resting, -[data-mfb-state="open"] .mfb-component__child-icon { - -webkit-transform: scale(1) rotate(0deg); - transform: scale(1) rotate(0deg); } - -/*------------------------------------*\ - #BUTTONS | Modifiers -\*------------------------------------*/ -.mfb-component__button--main { - height: 56px; - width: 56px; - z-index: 20; } - -.mfb-component__button--child { - height: 56px; - width: 56px; } - -.mfb-component__main-icon--active, -.mfb-component__main-icon--resting { - -webkit-transform: scale(1) rotate(360deg); - transform: scale(1) rotate(360deg); - -webkit-transition: -webkit-transform 150ms cubic-bezier(0.4, 0, 1, 1); - transition: transform 150ms cubic-bezier(0.4, 0, 1, 1); } - -.mfb-component__child-icon, -.mfb-component__child-icon { - line-height: 56px; - font-size: 18px; } - -.mfb-component__main-icon--active { - opacity: 0; } - -[data-mfb-toggle="hover"]:hover .mfb-component__main-icon, -[data-mfb-state="open"] .mfb-component__main-icon { - -webkit-transform: scale(1) rotate(0deg); - transform: scale(1) rotate(0deg); } -[data-mfb-toggle="hover"]:hover .mfb-component__main-icon--resting, -[data-mfb-state="open"] .mfb-component__main-icon--resting { - opacity: 0; - position: absolute !important; } -[data-mfb-toggle="hover"]:hover .mfb-component__main-icon--active, -[data-mfb-state="open"] .mfb-component__main-icon--active { - opacity: 1; } - -/*------------------------------------*\ - #BUTTONS | Animations -\*------------------------------------*/ -/** - * SLIDE IN + FADE - * When hovering the main button, the child buttons slide out from beneath - * the main button while transitioning from transparent to opaque. - * - */ -.mfb-component--tl.mfb-slidein .mfb-component__list li, -.mfb-component--tr.mfb-slidein .mfb-component__list li { - opacity: 0; - transition: all 0.5s; } -.mfb-component--tl.mfb-slidein[data-mfb-toggle="hover"]:hover .mfb-component__list li, .mfb-component--tl.mfb-slidein[data-mfb-state="open"] .mfb-component__list li, -.mfb-component--tr.mfb-slidein[data-mfb-toggle="hover"]:hover .mfb-component__list li, -.mfb-component--tr.mfb-slidein[data-mfb-state="open"] .mfb-component__list li { - opacity: 1; } -.mfb-component--tl.mfb-slidein[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(1), .mfb-component--tl.mfb-slidein[data-mfb-state="open"] .mfb-component__list li:nth-child(1), -.mfb-component--tr.mfb-slidein[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(1), -.mfb-component--tr.mfb-slidein[data-mfb-state="open"] .mfb-component__list li:nth-child(1) { - -webkit-transform: translateY(70px); - transform: translateY(70px); } -.mfb-component--tl.mfb-slidein[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(2), .mfb-component--tl.mfb-slidein[data-mfb-state="open"] .mfb-component__list li:nth-child(2), -.mfb-component--tr.mfb-slidein[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(2), -.mfb-component--tr.mfb-slidein[data-mfb-state="open"] .mfb-component__list li:nth-child(2) { - -webkit-transform: translateY(140px); - transform: translateY(140px); } -.mfb-component--tl.mfb-slidein[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(3), .mfb-component--tl.mfb-slidein[data-mfb-state="open"] .mfb-component__list li:nth-child(3), -.mfb-component--tr.mfb-slidein[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(3), -.mfb-component--tr.mfb-slidein[data-mfb-state="open"] .mfb-component__list li:nth-child(3) { - -webkit-transform: translateY(210px); - transform: translateY(210px); } -.mfb-component--tl.mfb-slidein[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(4), .mfb-component--tl.mfb-slidein[data-mfb-state="open"] .mfb-component__list li:nth-child(4), -.mfb-component--tr.mfb-slidein[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(4), -.mfb-component--tr.mfb-slidein[data-mfb-state="open"] .mfb-component__list li:nth-child(4) { - -webkit-transform: translateY(280px); - transform: translateY(280px); } - -.mfb-component--bl.mfb-slidein .mfb-component__list li, -.mfb-component--br.mfb-slidein .mfb-component__list li { - opacity: 0; - transition: all 0.5s; } -.mfb-component--bl.mfb-slidein[data-mfb-toggle="hover"]:hover .mfb-component__list li, .mfb-component--bl.mfb-slidein[data-mfb-state="open"] .mfb-component__list li, -.mfb-component--br.mfb-slidein[data-mfb-toggle="hover"]:hover .mfb-component__list li, -.mfb-component--br.mfb-slidein[data-mfb-state="open"] .mfb-component__list li { - opacity: 1; } -.mfb-component--bl.mfb-slidein[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(1), .mfb-component--bl.mfb-slidein[data-mfb-state="open"] .mfb-component__list li:nth-child(1), -.mfb-component--br.mfb-slidein[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(1), -.mfb-component--br.mfb-slidein[data-mfb-state="open"] .mfb-component__list li:nth-child(1) { - -webkit-transform: translateY(-70px); - transform: translateY(-70px); } -.mfb-component--bl.mfb-slidein[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(2), .mfb-component--bl.mfb-slidein[data-mfb-state="open"] .mfb-component__list li:nth-child(2), -.mfb-component--br.mfb-slidein[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(2), -.mfb-component--br.mfb-slidein[data-mfb-state="open"] .mfb-component__list li:nth-child(2) { - -webkit-transform: translateY(-140px); - transform: translateY(-140px); } -.mfb-component--bl.mfb-slidein[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(3), .mfb-component--bl.mfb-slidein[data-mfb-state="open"] .mfb-component__list li:nth-child(3), -.mfb-component--br.mfb-slidein[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(3), -.mfb-component--br.mfb-slidein[data-mfb-state="open"] .mfb-component__list li:nth-child(3) { - -webkit-transform: translateY(-210px); - transform: translateY(-210px); } -.mfb-component--bl.mfb-slidein[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(4), .mfb-component--bl.mfb-slidein[data-mfb-state="open"] .mfb-component__list li:nth-child(4), -.mfb-component--br.mfb-slidein[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(4), -.mfb-component--br.mfb-slidein[data-mfb-state="open"] .mfb-component__list li:nth-child(4) { - -webkit-transform: translateY(-280px); - transform: translateY(-280px); } - -/** - * SLIDE IN SPRING - * Same as slide-in but with a springy animation. - * - */ -.mfb-component--tl.mfb-slidein-spring .mfb-component__list li, -.mfb-component--tr.mfb-slidein-spring .mfb-component__list li { - opacity: 0; - transition: all 0.5s; - transition-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55); } -.mfb-component--tl.mfb-slidein-spring .mfb-component__list li:nth-child(1), -.mfb-component--tr.mfb-slidein-spring .mfb-component__list li:nth-child(1) { - transition-delay: 0.05s; } -.mfb-component--tl.mfb-slidein-spring .mfb-component__list li:nth-child(2), -.mfb-component--tr.mfb-slidein-spring .mfb-component__list li:nth-child(2) { - transition-delay: 0.1s; } -.mfb-component--tl.mfb-slidein-spring .mfb-component__list li:nth-child(3), -.mfb-component--tr.mfb-slidein-spring .mfb-component__list li:nth-child(3) { - transition-delay: 0.15s; } -.mfb-component--tl.mfb-slidein-spring .mfb-component__list li:nth-child(4), -.mfb-component--tr.mfb-slidein-spring .mfb-component__list li:nth-child(4) { - transition-delay: 0.2s; } -.mfb-component--tl.mfb-slidein-spring[data-mfb-toggle="hover"]:hover .mfb-component__list li, .mfb-component--tl.mfb-slidein-spring[data-mfb-state="open"] .mfb-component__list li, -.mfb-component--tr.mfb-slidein-spring[data-mfb-toggle="hover"]:hover .mfb-component__list li, -.mfb-component--tr.mfb-slidein-spring[data-mfb-state="open"] .mfb-component__list li { - opacity: 1; } -.mfb-component--tl.mfb-slidein-spring[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(1), .mfb-component--tl.mfb-slidein-spring[data-mfb-state="open"] .mfb-component__list li:nth-child(1), -.mfb-component--tr.mfb-slidein-spring[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(1), -.mfb-component--tr.mfb-slidein-spring[data-mfb-state="open"] .mfb-component__list li:nth-child(1) { - transition-delay: 0.05s; - -webkit-transform: translateY(70px); - transform: translateY(70px); } -.mfb-component--tl.mfb-slidein-spring[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(2), .mfb-component--tl.mfb-slidein-spring[data-mfb-state="open"] .mfb-component__list li:nth-child(2), -.mfb-component--tr.mfb-slidein-spring[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(2), -.mfb-component--tr.mfb-slidein-spring[data-mfb-state="open"] .mfb-component__list li:nth-child(2) { - transition-delay: 0.1s; - -webkit-transform: translateY(140px); - transform: translateY(140px); } -.mfb-component--tl.mfb-slidein-spring[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(3), .mfb-component--tl.mfb-slidein-spring[data-mfb-state="open"] .mfb-component__list li:nth-child(3), -.mfb-component--tr.mfb-slidein-spring[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(3), -.mfb-component--tr.mfb-slidein-spring[data-mfb-state="open"] .mfb-component__list li:nth-child(3) { - transition-delay: 0.15s; - -webkit-transform: translateY(210px); - transform: translateY(210px); } -.mfb-component--tl.mfb-slidein-spring[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(4), .mfb-component--tl.mfb-slidein-spring[data-mfb-state="open"] .mfb-component__list li:nth-child(4), -.mfb-component--tr.mfb-slidein-spring[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(4), -.mfb-component--tr.mfb-slidein-spring[data-mfb-state="open"] .mfb-component__list li:nth-child(4) { - transition-delay: 0.2s; - -webkit-transform: translateY(280px); - transform: translateY(280px); } - -.mfb-component--bl.mfb-slidein-spring .mfb-component__list li, -.mfb-component--br.mfb-slidein-spring .mfb-component__list li { - opacity: 0; - transition: all 0.5s; - transition-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55); } -.mfb-component--bl.mfb-slidein-spring .mfb-component__list li:nth-child(1), -.mfb-component--br.mfb-slidein-spring .mfb-component__list li:nth-child(1) { - transition-delay: 0.05s; } -.mfb-component--bl.mfb-slidein-spring .mfb-component__list li:nth-child(2), -.mfb-component--br.mfb-slidein-spring .mfb-component__list li:nth-child(2) { - transition-delay: 0.1s; } -.mfb-component--bl.mfb-slidein-spring .mfb-component__list li:nth-child(3), -.mfb-component--br.mfb-slidein-spring .mfb-component__list li:nth-child(3) { - transition-delay: 0.15s; } -.mfb-component--bl.mfb-slidein-spring .mfb-component__list li:nth-child(4), -.mfb-component--br.mfb-slidein-spring .mfb-component__list li:nth-child(4) { - transition-delay: 0.2s; } -.mfb-component--bl.mfb-slidein-spring[data-mfb-toggle="hover"]:hover .mfb-component__list li, .mfb-component--bl.mfb-slidein-spring[data-mfb-state="open"] .mfb-component__list li, -.mfb-component--br.mfb-slidein-spring[data-mfb-toggle="hover"]:hover .mfb-component__list li, -.mfb-component--br.mfb-slidein-spring[data-mfb-state="open"] .mfb-component__list li { - opacity: 1; } -.mfb-component--bl.mfb-slidein-spring[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(1), .mfb-component--bl.mfb-slidein-spring[data-mfb-state="open"] .mfb-component__list li:nth-child(1), -.mfb-component--br.mfb-slidein-spring[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(1), -.mfb-component--br.mfb-slidein-spring[data-mfb-state="open"] .mfb-component__list li:nth-child(1) { - transition-delay: 0.05s; - -webkit-transform: translateY(-70px); - transform: translateY(-70px); } -.mfb-component--bl.mfb-slidein-spring[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(2), .mfb-component--bl.mfb-slidein-spring[data-mfb-state="open"] .mfb-component__list li:nth-child(2), -.mfb-component--br.mfb-slidein-spring[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(2), -.mfb-component--br.mfb-slidein-spring[data-mfb-state="open"] .mfb-component__list li:nth-child(2) { - transition-delay: 0.1s; - -webkit-transform: translateY(-140px); - transform: translateY(-140px); } -.mfb-component--bl.mfb-slidein-spring[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(3), .mfb-component--bl.mfb-slidein-spring[data-mfb-state="open"] .mfb-component__list li:nth-child(3), -.mfb-component--br.mfb-slidein-spring[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(3), -.mfb-component--br.mfb-slidein-spring[data-mfb-state="open"] .mfb-component__list li:nth-child(3) { - transition-delay: 0.15s; - -webkit-transform: translateY(-210px); - transform: translateY(-210px); } -.mfb-component--bl.mfb-slidein-spring[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(4), .mfb-component--bl.mfb-slidein-spring[data-mfb-state="open"] .mfb-component__list li:nth-child(4), -.mfb-component--br.mfb-slidein-spring[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(4), -.mfb-component--br.mfb-slidein-spring[data-mfb-state="open"] .mfb-component__list li:nth-child(4) { - transition-delay: 0.2s; - -webkit-transform: translateY(-280px); - transform: translateY(-280px); } - -/** - * ZOOM-IN - * When hovering the main button, the child buttons grow - * from zero to normal size. - * - */ -.mfb-component--tl.mfb-zoomin .mfb-component__list li, -.mfb-component--tr.mfb-zoomin .mfb-component__list li { - -webkit-transform: scale(0); - transform: scale(0); } -.mfb-component--tl.mfb-zoomin .mfb-component__list li:nth-child(1), -.mfb-component--tr.mfb-zoomin .mfb-component__list li:nth-child(1) { - -webkit-transform: translateY(70px) scale(0); - transform: translateY(70px) scale(0); - transition: all 0.5s; - transition-delay: 0.15s; } -.mfb-component--tl.mfb-zoomin .mfb-component__list li:nth-child(2), -.mfb-component--tr.mfb-zoomin .mfb-component__list li:nth-child(2) { - -webkit-transform: translateY(140px) scale(0); - transform: translateY(140px) scale(0); - transition: all 0.5s; - transition-delay: 0.1s; } -.mfb-component--tl.mfb-zoomin .mfb-component__list li:nth-child(3), -.mfb-component--tr.mfb-zoomin .mfb-component__list li:nth-child(3) { - -webkit-transform: translateY(210px) scale(0); - transform: translateY(210px) scale(0); - transition: all 0.5s; - transition-delay: 0.05s; } -.mfb-component--tl.mfb-zoomin .mfb-component__list li:nth-child(4), -.mfb-component--tr.mfb-zoomin .mfb-component__list li:nth-child(4) { - -webkit-transform: translateY(280px) scale(0); - transform: translateY(280px) scale(0); - transition: all 0.5s; - transition-delay: 0s; } -.mfb-component--tl.mfb-zoomin[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(1), .mfb-component--tl.mfb-zoomin[data-mfb-state="open"] .mfb-component__list li:nth-child(1), -.mfb-component--tr.mfb-zoomin[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(1), -.mfb-component--tr.mfb-zoomin[data-mfb-state="open"] .mfb-component__list li:nth-child(1) { - -webkit-transform: translateY(70px) scale(1); - transform: translateY(70px) scale(1); - transition-delay: 0.05s; } -.mfb-component--tl.mfb-zoomin[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(2), .mfb-component--tl.mfb-zoomin[data-mfb-state="open"] .mfb-component__list li:nth-child(2), -.mfb-component--tr.mfb-zoomin[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(2), -.mfb-component--tr.mfb-zoomin[data-mfb-state="open"] .mfb-component__list li:nth-child(2) { - -webkit-transform: translateY(140px) scale(1); - transform: translateY(140px) scale(1); - transition-delay: 0.1s; } -.mfb-component--tl.mfb-zoomin[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(3), .mfb-component--tl.mfb-zoomin[data-mfb-state="open"] .mfb-component__list li:nth-child(3), -.mfb-component--tr.mfb-zoomin[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(3), -.mfb-component--tr.mfb-zoomin[data-mfb-state="open"] .mfb-component__list li:nth-child(3) { - -webkit-transform: translateY(210px) scale(1); - transform: translateY(210px) scale(1); - transition-delay: 0.15s; } -.mfb-component--tl.mfb-zoomin[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(4), .mfb-component--tl.mfb-zoomin[data-mfb-state="open"] .mfb-component__list li:nth-child(4), -.mfb-component--tr.mfb-zoomin[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(4), -.mfb-component--tr.mfb-zoomin[data-mfb-state="open"] .mfb-component__list li:nth-child(4) { - -webkit-transform: translateY(280px) scale(1); - transform: translateY(280px) scale(1); - transition-delay: 0.2s; } - -.mfb-component--bl.mfb-zoomin .mfb-component__list li, -.mfb-component--br.mfb-zoomin .mfb-component__list li { - -webkit-transform: scale(0); - transform: scale(0); } -.mfb-component--bl.mfb-zoomin .mfb-component__list li:nth-child(1), -.mfb-component--br.mfb-zoomin .mfb-component__list li:nth-child(1) { - -webkit-transform: translateY(-70px) scale(0); - transform: translateY(-70px) scale(0); - transition: all 0.5s; - transition-delay: 0.15s; } -.mfb-component--bl.mfb-zoomin .mfb-component__list li:nth-child(2), -.mfb-component--br.mfb-zoomin .mfb-component__list li:nth-child(2) { - -webkit-transform: translateY(-140px) scale(0); - transform: translateY(-140px) scale(0); - transition: all 0.5s; - transition-delay: 0.1s; } -.mfb-component--bl.mfb-zoomin .mfb-component__list li:nth-child(3), -.mfb-component--br.mfb-zoomin .mfb-component__list li:nth-child(3) { - -webkit-transform: translateY(-210px) scale(0); - transform: translateY(-210px) scale(0); - transition: all 0.5s; - transition-delay: 0.05s; } -.mfb-component--bl.mfb-zoomin .mfb-component__list li:nth-child(4), -.mfb-component--br.mfb-zoomin .mfb-component__list li:nth-child(4) { - -webkit-transform: translateY(-280px) scale(0); - transform: translateY(-280px) scale(0); - transition: all 0.5s; - transition-delay: 0s; } -.mfb-component--bl.mfb-zoomin[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(1), .mfb-component--bl.mfb-zoomin[data-mfb-state="open"] .mfb-component__list li:nth-child(1), -.mfb-component--br.mfb-zoomin[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(1), -.mfb-component--br.mfb-zoomin[data-mfb-state="open"] .mfb-component__list li:nth-child(1) { - -webkit-transform: translateY(-70px) scale(1); - transform: translateY(-70px) scale(1); - transition-delay: 0.05s; } -.mfb-component--bl.mfb-zoomin[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(2), .mfb-component--bl.mfb-zoomin[data-mfb-state="open"] .mfb-component__list li:nth-child(2), -.mfb-component--br.mfb-zoomin[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(2), -.mfb-component--br.mfb-zoomin[data-mfb-state="open"] .mfb-component__list li:nth-child(2) { - -webkit-transform: translateY(-140px) scale(1); - transform: translateY(-140px) scale(1); - transition-delay: 0.1s; } -.mfb-component--bl.mfb-zoomin[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(3), .mfb-component--bl.mfb-zoomin[data-mfb-state="open"] .mfb-component__list li:nth-child(3), -.mfb-component--br.mfb-zoomin[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(3), -.mfb-component--br.mfb-zoomin[data-mfb-state="open"] .mfb-component__list li:nth-child(3) { - -webkit-transform: translateY(-210px) scale(1); - transform: translateY(-210px) scale(1); - transition-delay: 0.15s; } -.mfb-component--bl.mfb-zoomin[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(4), .mfb-component--bl.mfb-zoomin[data-mfb-state="open"] .mfb-component__list li:nth-child(4), -.mfb-component--br.mfb-zoomin[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(4), -.mfb-component--br.mfb-zoomin[data-mfb-state="open"] .mfb-component__list li:nth-child(4) { - -webkit-transform: translateY(-280px) scale(1); - transform: translateY(-280px) scale(1); - transition-delay: 0.2s; } - -/** - * FOUNTAIN - * When hovering the main button the child buttons - * jump into view from outside the viewport - */ -.mfb-component--tl.mfb-fountain .mfb-component__list li, -.mfb-component--tr.mfb-fountain .mfb-component__list li { - -webkit-transform: scale(0); - transform: scale(0); } -.mfb-component--tl.mfb-fountain .mfb-component__list li:nth-child(1), -.mfb-component--tr.mfb-fountain .mfb-component__list li:nth-child(1) { - -webkit-transform: translateY(-70px) scale(0); - transform: translateY(-70px) scale(0); - transition: all 0.5s; - transition-delay: 0.15s; } -.mfb-component--tl.mfb-fountain .mfb-component__list li:nth-child(2), -.mfb-component--tr.mfb-fountain .mfb-component__list li:nth-child(2) { - -webkit-transform: translateY(-140px) scale(0); - transform: translateY(-140px) scale(0); - transition: all 0.5s; - transition-delay: 0.1s; } -.mfb-component--tl.mfb-fountain .mfb-component__list li:nth-child(3), -.mfb-component--tr.mfb-fountain .mfb-component__list li:nth-child(3) { - -webkit-transform: translateY(-210px) scale(0); - transform: translateY(-210px) scale(0); - transition: all 0.5s; - transition-delay: 0.05s; } -.mfb-component--tl.mfb-fountain .mfb-component__list li:nth-child(4), -.mfb-component--tr.mfb-fountain .mfb-component__list li:nth-child(4) { - -webkit-transform: translateY(-280px) scale(0); - transform: translateY(-280px) scale(0); - transition: all 0.5s; - transition-delay: 0s; } -.mfb-component--tl.mfb-fountain[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(1), .mfb-component--tl.mfb-fountain[data-mfb-state="open"] .mfb-component__list li:nth-child(1), -.mfb-component--tr.mfb-fountain[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(1), -.mfb-component--tr.mfb-fountain[data-mfb-state="open"] .mfb-component__list li:nth-child(1) { - -webkit-transform: translateY(70px) scale(1); - transform: translateY(70px) scale(1); - transition-delay: 0.05s; } -.mfb-component--tl.mfb-fountain[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(2), .mfb-component--tl.mfb-fountain[data-mfb-state="open"] .mfb-component__list li:nth-child(2), -.mfb-component--tr.mfb-fountain[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(2), -.mfb-component--tr.mfb-fountain[data-mfb-state="open"] .mfb-component__list li:nth-child(2) { - -webkit-transform: translateY(140px) scale(1); - transform: translateY(140px) scale(1); - transition-delay: 0.1s; } -.mfb-component--tl.mfb-fountain[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(3), .mfb-component--tl.mfb-fountain[data-mfb-state="open"] .mfb-component__list li:nth-child(3), -.mfb-component--tr.mfb-fountain[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(3), -.mfb-component--tr.mfb-fountain[data-mfb-state="open"] .mfb-component__list li:nth-child(3) { - -webkit-transform: translateY(210px) scale(1); - transform: translateY(210px) scale(1); - transition-delay: 0.15s; } -.mfb-component--tl.mfb-fountain[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(4), .mfb-component--tl.mfb-fountain[data-mfb-state="open"] .mfb-component__list li:nth-child(4), -.mfb-component--tr.mfb-fountain[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(4), -.mfb-component--tr.mfb-fountain[data-mfb-state="open"] .mfb-component__list li:nth-child(4) { - -webkit-transform: translateY(280px) scale(1); - transform: translateY(280px) scale(1); - transition-delay: 0.2s; } - -.mfb-component--bl.mfb-fountain .mfb-component__list li, -.mfb-component--br.mfb-fountain .mfb-component__list li { - -webkit-transform: scale(0); - transform: scale(0); } -.mfb-component--bl.mfb-fountain .mfb-component__list li:nth-child(1), -.mfb-component--br.mfb-fountain .mfb-component__list li:nth-child(1) { - -webkit-transform: translateY(70px) scale(0); - transform: translateY(70px) scale(0); - transition: all 0.5s; - transition-delay: 0.15s; } -.mfb-component--bl.mfb-fountain .mfb-component__list li:nth-child(2), -.mfb-component--br.mfb-fountain .mfb-component__list li:nth-child(2) { - -webkit-transform: translateY(140px) scale(0); - transform: translateY(140px) scale(0); - transition: all 0.5s; - transition-delay: 0.1s; } -.mfb-component--bl.mfb-fountain .mfb-component__list li:nth-child(3), -.mfb-component--br.mfb-fountain .mfb-component__list li:nth-child(3) { - -webkit-transform: translateY(210px) scale(0); - transform: translateY(210px) scale(0); - transition: all 0.5s; - transition-delay: 0.05s; } -.mfb-component--bl.mfb-fountain .mfb-component__list li:nth-child(4), -.mfb-component--br.mfb-fountain .mfb-component__list li:nth-child(4) { - -webkit-transform: translateY(280px) scale(0); - transform: translateY(280px) scale(0); - transition: all 0.5s; - transition-delay: 0s; } -.mfb-component--bl.mfb-fountain[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(1), .mfb-component--bl.mfb-fountain[data-mfb-state="open"] .mfb-component__list li:nth-child(1), -.mfb-component--br.mfb-fountain[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(1), -.mfb-component--br.mfb-fountain[data-mfb-state="open"] .mfb-component__list li:nth-child(1) { - -webkit-transform: translateY(-70px) scale(1); - transform: translateY(-70px) scale(1); - transition-delay: 0.05s; } -.mfb-component--bl.mfb-fountain[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(2), .mfb-component--bl.mfb-fountain[data-mfb-state="open"] .mfb-component__list li:nth-child(2), -.mfb-component--br.mfb-fountain[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(2), -.mfb-component--br.mfb-fountain[data-mfb-state="open"] .mfb-component__list li:nth-child(2) { - -webkit-transform: translateY(-140px) scale(1); - transform: translateY(-140px) scale(1); - transition-delay: 0.1s; } -.mfb-component--bl.mfb-fountain[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(3), .mfb-component--bl.mfb-fountain[data-mfb-state="open"] .mfb-component__list li:nth-child(3), -.mfb-component--br.mfb-fountain[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(3), -.mfb-component--br.mfb-fountain[data-mfb-state="open"] .mfb-component__list li:nth-child(3) { - -webkit-transform: translateY(-210px) scale(1); - transform: translateY(-210px) scale(1); - transition-delay: 0.15s; } -.mfb-component--bl.mfb-fountain[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(4), .mfb-component--bl.mfb-fountain[data-mfb-state="open"] .mfb-component__list li:nth-child(4), -.mfb-component--br.mfb-fountain[data-mfb-toggle="hover"]:hover .mfb-component__list li:nth-child(4), -.mfb-component--br.mfb-fountain[data-mfb-state="open"] .mfb-component__list li:nth-child(4) { - -webkit-transform: translateY(-280px) scale(1); - transform: translateY(-280px) scale(1); - transition-delay: 0.2s; } - -/*------------------------------------*\ - #LABELS | base -\*------------------------------------*/ -/** - * These are the labels associated to each button, - * exposed only when hovering the related button. - * They are called labels but are in fact data-attributes of - * each button (an anchor tag). - */ -[data-mfb-label]:after { - content: attr(data-mfb-label); - opacity: 0; - transition: all 0.5s; - background: rgba(0, 0, 0, 0.4); - padding: 4px 10px; - border-radius: 3px; - color: rgba(255, 255, 255, 0.8); - font-size: 14px; - font-weight: normal; - pointer-events: none; - line-height: normal; - position: absolute; - top: 50%; - margin-top: -11px; - transition: all 0.5s; } - -[data-mfb-toggle="hover"] [data-mfb-label]:hover:after, -[data-mfb-state="open"] [data-mfb-label]:after { - content: attr(data-mfb-label); - opacity: 1; - transition: all 0.3s; } - -/*------------------------------------*\ - #LABELS | Modifiers -\*------------------------------------*/ -.mfb-component--br [data-mfb-label]:after, .mfb-component--tr [data-mfb-label]:after { - content: attr(data-mfb-label); - right: 70px; } - -.mfb-component--br .mfb-component__list [data-mfb-label]:after, .mfb-component--tr .mfb-component__list [data-mfb-label]:after { - content: attr(data-mfb-label); - right: 70px; } - -.mfb-component--tl [data-mfb-label]:after, .mfb-component--bl [data-mfb-label]:after { - content: attr(data-mfb-label); - left: 70px; } - -.mfb-component--tl .mfb-component__list [data-mfb-label]:after, .mfb-component--bl .mfb-component__list [data-mfb-label]:after { - content: attr(data-mfb-label); - left: 70px; } - -/*------------------------------------*\ - #DEVELOPMENT | In development -\*------------------------------------*/ -/** - * This part is where unfinished code should stay. - * When a feature is ready(sh) move these styles to their proper place. - */ -/*------------------------------------*\ - #DEVELOPMENT | Debuggers -\*------------------------------------*/ -/** - * These are mainly helpers for development. They do not have to end up - * in production but it's handy to keep them when developing. - */ -/** - * Apply this class to the html tag when developing the slide-in button - */ - -/*# sourceMappingURL=mfb.css.map */ diff --git a/static/mfb/mfb.css.map b/static/mfb/mfb.css.map deleted file mode 100644 index 9541680413b..00000000000 --- a/static/mfb/mfb.css.map +++ /dev/null @@ -1,7 +0,0 @@ -{ -"version": 3, -"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0IA,8EAAc;EACZ,UAAU,EAAE,UAAU;EACtB,MAAM,EArCU,IAAI;EAsCpB,QAAQ,EAAE,KAAK;EACf,WAAW,EAAE,MAAM;EACnB,OAAO,EAAE,EAAE;EAGX,YAAY,EAAE,CAAC;EACf,UAAU,EAAE,IAAI;EAIhB,0TAAqB;IACnB,UAAU,EAAE,OAAO;;;;;;;;;;;;;AAiBvB,kBAAkB;EAEhB,IAAI,EAAE,CAAC;EAAE,GAAG,EAAE,CAAC;;AAEjB,kBAAkB;EAEhB,KAAK,EAAE,CAAC;EAAE,GAAG,EAAE,CAAC;;AAElB,kBAAkB;EAEhB,IAAI,EAAE,CAAC;EAAE,MAAM,EAAE,CAAC;;AAEpB,kBAAkB;EAEhB,KAAK,EAAE,CAAC;EAAE,MAAM,EAAE,CAAC;;;;;AAQrB,2DAAsB;EACpB,gBAAgB,EA1HL,OAAO;EA2HlB,OAAO,EAAE,YAAY;EACrB,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,IAAI;EACZ,aAAa,EAAE,GAAG;EAClB,UAAU,EA5HQ,0DAAuB;EA6HzC,MAAM,EAAE,OAAO;EACf,OAAO,EAAE,IAAI;EACb,OAAO,EAAE,CAAC;EACV,QAAQ,EAAE,QAAQ;EAClB,iBAAiB,EAAE,IAAI;EACvB,KAAK,EAnIa,OAAO;;;;;;;AA2I3B,oBAAoB;EAClB,UAAU,EAAE,IAAI;EAChB,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,CAAC;EACV,yBAAI;IACF,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,CAAC;IACN,KAAK,EAAE,GAAgD;IACvD,OAAO,EAAE,MAAqD;IAC9D,MAAM,EAAE,OAAwD;;;;;AAOpE;8DAAoB;EAClB,QAAQ,EAAE,QAAQ;EAClB,SAAS,EA7HO,IAAI;EA8HpB,UAAU,EAAE,MAAM;EAClB,WAAW,EArIM,IAAI;EAsIrB,KAAK,EAAE,IAAI;;AAGb,oBAAoB;EAKlB,OAAO,EA1IS,IAAI;EA2IpB,MAAM,EAAE,KAAiB;;AAKzB;;;;;kDAAqB;EACnB,iBAAiB,EAAE,qBAAqB;EACxC,SAAS,EAAE,qBAAqB;;;;;AASpC,4BAA4B;EAE1B,MAAM,EAjKW,IAAI;EAkKrB,KAAK,EAlKY,IAAI;EAmKrB,OAAO,EAAE,EAAE;;AAEb,6BAA6B;EAE3B,MAAM,EArKY,IAAI;EAsKtB,KAAK,EAtKa,IAAI;;AAyKxB;kCACkC;EAEhC,iBAAiB,EAAE,uBAAuB;EAClC,SAAS,EAAE,uBAAuB;EAC1C,kBAAkB,EAAE,kDAA8C;EAC1D,UAAU,EAAE,0CAAsC;;AAG5D;0BAC0B;EAExB,WAAW,EArLO,IAAI;EAsLtB,SAAS,EAAE,IAA4B;;AAEzC,iCAAiC;EAC/B,OAAO,EAAE,CAAC;;AAIV;iDAAyB;EACvB,iBAAiB,EAAE,qBAAqB;EACxC,SAAS,EAAE,qBAAqB;AAElC;0DAAkC;EAChC,OAAO,EAAE,CAAC;EAEV,QAAQ,EAAE,mBAAmB;AAE/B;yDAAiC;EAC/B,OAAO,EAAE,CAAC;;;;;;;;;;;ACjSV;sDAAuB;EACrB,OAAO,EAAE,CAAC;EACV,UAAU,EAAE,QAAgB;AAK1B;;6EAAE;EACA,OAAO,EAAE,CAAC;AAIV;;0FAAsB;EACpB,iBAAiB,EAAE,gBAAuB;EAClC,SAAS,EAAE,gBAAuB;AAF5C;;0FAAsB;EACpB,iBAAiB,EAAE,iBAAuB;EAClC,SAAS,EAAE,iBAAuB;AAF5C;;0FAAsB;EACpB,iBAAiB,EAAE,iBAAuB;EAClC,SAAS,EAAE,iBAAuB;AAF5C;;0FAAsB;EACpB,iBAAiB,EAAE,iBAAuB;EAClC,SAAS,EAAE,iBAAuB;;AAQlD;sDAAuB;EACrB,OAAO,EAAE,CAAC;EACV,UAAU,EAAE,QAAgB;AAK1B;;6EAAE;EACA,OAAO,EAAE,CAAC;AAIV;;0FAAsB;EAAE,iBAAiB,EAAE,iBAAuB;EACnC,SAAS,EAAE,iBAAuB;AADjE;;0FAAsB;EAAE,iBAAiB,EAAE,kBAAuB;EACnC,SAAS,EAAE,kBAAuB;AADjE;;0FAAsB;EAAE,iBAAiB,EAAE,kBAAuB;EACnC,SAAS,EAAE,kBAAuB;AADjE;;0FAAsB;EAAE,iBAAiB,EAAE,kBAAuB;EACnC,SAAS,EAAE,kBAAuB;;;;;;;ACpCvE;6DAAuB;EACrB,OAAO,EAAE,CAAC;EACV,UAAU,EAAE,QAAgB;EAC5B,0BAA0B,EAAE,sCAAsC;AAGlE;0EAA2C;EACzC,gBAAgB,EAAE,KAAa;AADjC;0EAA2C;EACzC,gBAAgB,EAAE,IAAa;AADjC;0EAA2C;EACzC,gBAAgB,EAAE,KAAa;AADjC;0EAA2C;EACzC,gBAAgB,EAAE,IAAa;AAM/B;;oFAAE;EACA,OAAO,EAAE,CAAC;AAIV;;iGAAsB;EACpB,gBAAgB,EAAE,KAAa;EAC/B,iBAAiB,EAAE,gBAAuB;EAClC,SAAS,EAAE,gBAAuB;AAH5C;;iGAAsB;EACpB,gBAAgB,EAAE,IAAa;EAC/B,iBAAiB,EAAE,iBAAuB;EAClC,SAAS,EAAE,iBAAuB;AAH5C;;iGAAsB;EACpB,gBAAgB,EAAE,KAAa;EAC/B,iBAAiB,EAAE,iBAAuB;EAClC,SAAS,EAAE,iBAAuB;AAH5C;;iGAAsB;EACpB,gBAAgB,EAAE,IAAa;EAC/B,iBAAiB,EAAE,iBAAuB;EAClC,SAAS,EAAE,iBAAuB;;AAQlD;6DAAuB;EACrB,OAAO,EAAE,CAAC;EACV,UAAU,EAAE,QAAgB;EAC5B,0BAA0B,EAAE,sCAAsC;AAGlE;0EAA2C;EACzC,gBAAgB,EAAE,KAAa;AADjC;0EAA2C;EACzC,gBAAgB,EAAE,IAAa;AADjC;0EAA2C;EACzC,gBAAgB,EAAE,KAAa;AADjC;0EAA2C;EACzC,gBAAgB,EAAE,IAAa;AAM/B;;oFAAE;EACA,OAAO,EAAE,CAAC;AAIV;;iGAAsB;EACpB,gBAAgB,EAAE,KAAa;EAC/B,iBAAiB,EAAE,iBAAuB;EAClC,SAAS,EAAE,iBAAuB;AAH5C;;iGAAsB;EACpB,gBAAgB,EAAE,IAAa;EAC/B,iBAAiB,EAAE,kBAAuB;EAClC,SAAS,EAAE,kBAAuB;AAH5C;;iGAAsB;EACpB,gBAAgB,EAAE,KAAa;EAC/B,iBAAiB,EAAE,kBAAuB;EAClC,SAAS,EAAE,kBAAuB;AAH5C;;iGAAsB;EACpB,gBAAgB,EAAE,IAAa;EAC/B,iBAAiB,EAAE,kBAAuB;EAClC,SAAS,EAAE,kBAAuB;;;;;;;;AChDhD;qDAAE;EACA,iBAAiB,EAAE,QAAQ;EACnB,SAAS,EAAE,QAAQ;AAI3B;kEAAsB;EACpB,iBAAiB,EAAE,yBAA8B;EACzC,SAAS,EAAE,yBAA8B;EACjD,UAAU,EAAE,QAAgB;EAE5B,gBAAgB,EAAE,KAAyC;AAL7D;kEAAsB;EACpB,iBAAiB,EAAE,0BAA8B;EACzC,SAAS,EAAE,0BAA8B;EACjD,UAAU,EAAE,QAAgB;EAE5B,gBAAgB,EAAE,IAAyC;AAL7D;kEAAsB;EACpB,iBAAiB,EAAE,0BAA8B;EACzC,SAAS,EAAE,0BAA8B;EACjD,UAAU,EAAE,QAAgB;EAE5B,gBAAgB,EAAE,KAAyC;AAL7D;kEAAsB;EACpB,iBAAiB,EAAE,0BAA8B;EACzC,SAAS,EAAE,0BAA8B;EACjD,UAAU,EAAE,QAAgB;EAE5B,gBAAgB,EAAE,EAAyC;AAS3D;;yFAAsB;EACpB,iBAAiB,EAAE,yBAA8B;EACzC,SAAS,EAAE,yBAA8B;EAEjD,gBAAgB,EAAE,KAAU;AAJ9B;;yFAAsB;EACpB,iBAAiB,EAAE,0BAA8B;EACzC,SAAS,EAAE,0BAA8B;EAEjD,gBAAgB,EAAE,IAAU;AAJ9B;;yFAAsB;EACpB,iBAAiB,EAAE,0BAA8B;EACzC,SAAS,EAAE,0BAA8B;EAEjD,gBAAgB,EAAE,KAAU;AAJ9B;;yFAAsB;EACpB,iBAAiB,EAAE,0BAA8B;EACzC,SAAS,EAAE,0BAA8B;EAEjD,gBAAgB,EAAE,IAAU;;AAUlC;qDAAE;EACA,iBAAiB,EAAE,QAAQ;EACnB,SAAS,EAAE,QAAQ;AAI3B;kEAAsB;EACpB,iBAAiB,EAAE,0BAA8B;EACzC,SAAS,EAAE,0BAA8B;EACjD,UAAU,EAAE,QAAgB;EAE5B,gBAAgB,EAAE,KAAyC;AAL7D;kEAAsB;EACpB,iBAAiB,EAAE,2BAA8B;EACzC,SAAS,EAAE,2BAA8B;EACjD,UAAU,EAAE,QAAgB;EAE5B,gBAAgB,EAAE,IAAyC;AAL7D;kEAAsB;EACpB,iBAAiB,EAAE,2BAA8B;EACzC,SAAS,EAAE,2BAA8B;EACjD,UAAU,EAAE,QAAgB;EAE5B,gBAAgB,EAAE,KAAyC;AAL7D;kEAAsB;EACpB,iBAAiB,EAAE,2BAA8B;EACzC,SAAS,EAAE,2BAA8B;EACjD,UAAU,EAAE,QAAgB;EAE5B,gBAAgB,EAAE,EAAyC;AAS3D;;yFAAsB;EACpB,iBAAiB,EAAE,0BAA8B;EACzC,SAAS,EAAE,0BAA8B;EAEjD,gBAAgB,EAAE,KAAU;AAJ9B;;yFAAsB;EACpB,iBAAiB,EAAE,2BAA8B;EACzC,SAAS,EAAE,2BAA8B;EAEjD,gBAAgB,EAAE,IAAU;AAJ9B;;yFAAsB;EACpB,iBAAiB,EAAE,2BAA8B;EACzC,SAAS,EAAE,2BAA8B;EAEjD,gBAAgB,EAAE,KAAU;AAJ9B;;yFAAsB;EACpB,iBAAiB,EAAE,2BAA8B;EACzC,SAAS,EAAE,2BAA8B;EAEjD,gBAAgB,EAAE,IAAU;;;;;;;AC3DlC;uDAAE;EACA,iBAAiB,EAAE,QAAQ;EAC3B,SAAS,EAAE,QAAQ;AAInB;oEAAsB;EACpB,iBAAiB,EAAE,0BAA8B;EACzC,SAAS,EAAE,0BAA8B;EACjD,UAAU,EAAE,QAAgB;EAE5B,gBAAgB,EAAE,KAAyC;AAL7D;oEAAsB;EACpB,iBAAiB,EAAE,2BAA8B;EACzC,SAAS,EAAE,2BAA8B;EACjD,UAAU,EAAE,QAAgB;EAE5B,gBAAgB,EAAE,IAAyC;AAL7D;oEAAsB;EACpB,iBAAiB,EAAE,2BAA8B;EACzC,SAAS,EAAE,2BAA8B;EACjD,UAAU,EAAE,QAAgB;EAE5B,gBAAgB,EAAE,KAAyC;AAL7D;oEAAsB;EACpB,iBAAiB,EAAE,2BAA8B;EACzC,SAAS,EAAE,2BAA8B;EACjD,UAAU,EAAE,QAAgB;EAE5B,gBAAgB,EAAE,EAAyC;AAS3D;;2FAAsB;EACpB,iBAAiB,EAAE,yBAA8B;EACzC,SAAS,EAAE,yBAA8B;EAEjD,gBAAgB,EAAE,KAAU;AAJ9B;;2FAAsB;EACpB,iBAAiB,EAAE,0BAA8B;EACzC,SAAS,EAAE,0BAA8B;EAEjD,gBAAgB,EAAE,IAAU;AAJ9B;;2FAAsB;EACpB,iBAAiB,EAAE,0BAA8B;EACzC,SAAS,EAAE,0BAA8B;EAEjD,gBAAgB,EAAE,KAAU;AAJ9B;;2FAAsB;EACpB,iBAAiB,EAAE,0BAA8B;EACzC,SAAS,EAAE,0BAA8B;EAEjD,gBAAgB,EAAE,IAAU;;AAUlC;uDAAE;EACA,iBAAiB,EAAE,QAAQ;EACnB,SAAS,EAAE,QAAQ;AAI3B;oEAAsB;EACpB,iBAAiB,EAAE,yBAA8B;EACzC,SAAS,EAAE,yBAA8B;EACjD,UAAU,EAAE,QAAgB;EAE5B,gBAAgB,EAAE,KAAyC;AAL7D;oEAAsB;EACpB,iBAAiB,EAAE,0BAA8B;EACzC,SAAS,EAAE,0BAA8B;EACjD,UAAU,EAAE,QAAgB;EAE5B,gBAAgB,EAAE,IAAyC;AAL7D;oEAAsB;EACpB,iBAAiB,EAAE,0BAA8B;EACzC,SAAS,EAAE,0BAA8B;EACjD,UAAU,EAAE,QAAgB;EAE5B,gBAAgB,EAAE,KAAyC;AAL7D;oEAAsB;EACpB,iBAAiB,EAAE,0BAA8B;EACzC,SAAS,EAAE,0BAA8B;EACjD,UAAU,EAAE,QAAgB;EAE5B,gBAAgB,EAAE,EAAyC;AAS3D;;2FAAsB;EACpB,iBAAiB,EAAE,0BAA8B;EACzC,SAAS,EAAE,0BAA8B;EAEjD,gBAAgB,EAAE,KAAU;AAJ9B;;2FAAsB;EACpB,iBAAiB,EAAE,2BAA8B;EACzC,SAAS,EAAE,2BAA8B;EAEjD,gBAAgB,EAAE,IAAU;AAJ9B;;2FAAsB;EACpB,iBAAiB,EAAE,2BAA8B;EACzC,SAAS,EAAE,2BAA8B;EAEjD,gBAAgB,EAAE,KAAU;AAJ9B;;2FAAsB;EACpB,iBAAiB,EAAE,2BAA8B;EACzC,SAAS,EAAE,2BAA8B;EAEjD,gBAAgB,EAAE,IAAU;;;;;;;;;;;AJ6QxC,sBAAuB;EACrB,OAAO,EAAE,oBAAoB;EAC7B,OAAO,EAAE,CAAC;EACV,UAAU,EAAE,QAAoB;EAChC,UAAU,EAzQa,kBAAe;EA0QtC,OAAO,EAAE,QAAmD;EAC5D,aAAa,EAAE,GAAG;EAClB,KAAK,EA9QY,wBAAwB;EA+QzC,SAAS,EA/OQ,IAAI;EAgPrB,WAAW,EA9OQ,MAAM;EA+OzB,cAAc,EAAE,IAAI;EACpB,WAAW,EAAE,MAAM;EACnB,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,GAAG;EACR,UAAU,EAAE,KAAoD;EAChE,UAAU,EAAE,QAAoB;;AAElC;8CAC8C;EAC5C,OAAO,EAAE,oBAAoB;EAC7B,OAAO,EAAE,CAAC;EACV,UAAU,EAAE,QAAmB;;;;;AAM/B,oFAAuB;EACrB,OAAO,EAAE,oBAAoB;EAC7B,KAAK,EAvPY,IAAI;;AA2PvB,8HAAuB;EACrB,OAAO,EAAE,oBAAoB;EAC7B,KAAK,EAAE,IAAkE;;AAI3E,oFAAuB;EACrB,OAAO,EAAE,oBAAoB;EAC7B,IAAI,EAnQa,IAAI;;AAuQvB,8HAAuB;EACrB,OAAO,EAAE,oBAAoB;EAC7B,IAAI,EAAE,IAAkE", -"sources": ["../src/mfb.scss","../src/_/_slidein.scss","../src/_/_slidein-spring.scss","../src/_/_zoomin.scss","../src/_/_fountain.scss"], -"names": [], -"file": "mfb.css" -} diff --git a/static/mfb/mfb.js b/static/mfb/mfb.js deleted file mode 100644 index ea6ce731fed..00000000000 --- a/static/mfb/mfb.js +++ /dev/null @@ -1,98 +0,0 @@ -/** - * Material floating button - * By: Nobita - * Repo and docs: https://github.com/nobitagit/material-floating-button - * - * License: MIT - */ - - // build script hook - don't remove - ;(function ( window, document, undefined ) { - - - 'use strict'; - - /** - * Some defaults - */ - var clickOpt = 'click', - hoverOpt = 'hover', - toggleMethod = 'data-mfb-toggle', - menuState = 'data-mfb-state', - isOpen = 'open', - isClosed = 'closed', - mainButtonClass = 'mfb-component__button--main'; - - /** - * Internal references - */ - var elemsToClick, - elemsToHover, - mainButton, - target, - currentState; - - /** - * For every menu we need to get the main button and attach the appropriate evt. - */ - function attachEvt( elems, evt ){ - for( var i = 0, len = elems.length; i < len; i++ ){ - mainButton = elems[i].querySelector('.' + mainButtonClass); - mainButton.addEventListener( evt , toggleButton, false); - } - } - - /** - * Remove the hover option, set a click toggle and a default, - * initial state of 'closed' to menu that's been targeted. - */ - function replaceAttrs( elems ){ - for( var i = 0, len = elems.length; i < len; i++ ){ - elems[i].setAttribute( toggleMethod, clickOpt ); - elems[i].setAttribute( menuState, isClosed ); - } - } - - function getElemsByToggleMethod( selector ){ - return document.querySelectorAll('[' + toggleMethod + '="' + selector + '"]'); - } - - /** - * The open/close action is performed by toggling an attribute - * on the menu main element. - * - * First, check if the target is the menu itself. If it's a child - * keep walking up the tree until we found the main element - * where we can toggle the state. - */ - function toggleButton( evt ){ - - target = evt.target; - while ( target && !target.getAttribute( toggleMethod ) ){ - target = target.parentNode; - if(!target) { return; } - } - - currentState = target.getAttribute( menuState ) === isOpen ? isClosed : isOpen; - - target.setAttribute(menuState, currentState); - - } - - /** - * On touch enabled devices we assume that no hover state is possible. - * So, we get the menu with hover action configured and we set it up - * in order to make it usable with tap/click. - **/ - if ( window.Modernizr && Modernizr.touch ){ - elemsToHover = getElemsByToggleMethod( hoverOpt ); - replaceAttrs( elemsToHover ); - } - - elemsToClick = getElemsByToggleMethod( clickOpt ); - - attachEvt( elemsToClick, 'click' ); - -// build script hook - don't remove -})( window, document ); - diff --git a/static/mfb/mfb.min.css b/static/mfb/mfb.min.css deleted file mode 100644 index 60c34aaa1ff..00000000000 --- a/static/mfb/mfb.min.css +++ /dev/null @@ -1 +0,0 @@ -.mfb-component--bl,.mfb-component--br,.mfb-component--tl,.mfb-component--tr{box-sizing:border-box;margin:25px;position:fixed;white-space:nowrap;z-index:30;padding-left:0;list-style:none}.mfb-component--bl *,.mfb-component--bl :after,.mfb-component--bl :before,.mfb-component--br *,.mfb-component--br :after,.mfb-component--br :before,.mfb-component--tl *,.mfb-component--tl :after,.mfb-component--tl :before,.mfb-component--tr *,.mfb-component--tr :after,.mfb-component--tr :before{box-sizing:inherit}.mfb-component--tl{left:0;top:0}.mfb-component--tr{right:0;top:0}.mfb-component--bl{left:0;bottom:0}.mfb-component--br{right:0;bottom:0}.mfb-component__button--child,.mfb-component__button--main{background-color:#E40A5D;display:inline-block;border:none;border-radius:50%;box-shadow:0 0 4px rgba(0,0,0,.14),0 4px 8px rgba(0,0,0,.28);cursor:pointer;outline:0;padding:0;position:relative;-webkit-user-drag:none;font-weight:700;color:#f1f1f1}.mfb-component__list{list-style:none;margin:0;padding:0}.mfb-component__list>li{display:block;position:absolute;top:0;right:1px;padding:10px 0;margin:-10px 0}.mfb-component__child-icon,.mfb-component__icon,.mfb-component__main-icon--active,.mfb-component__main-icon--resting{position:absolute;font-size:18px;text-align:center;line-height:56px;width:100%}.mfb-component__wrap{padding:25px;margin:-25px}[data-mfb-state=open] .mfb-component__child-icon,[data-mfb-state=open] .mfb-component__icon,[data-mfb-state=open] .mfb-component__main-icon--active,[data-mfb-state=open] .mfb-component__main-icon--resting,[data-mfb-toggle=hover]:hover .mfb-component__child-icon,[data-mfb-toggle=hover]:hover .mfb-component__icon,[data-mfb-toggle=hover]:hover .mfb-component__main-icon--active,[data-mfb-toggle=hover]:hover .mfb-component__main-icon--resting{-webkit-transform:scale(1) rotate(0deg);transform:scale(1) rotate(0deg)}.mfb-component__button--main{height:56px;width:56px;z-index:20}.mfb-component__button--child{height:56px;width:56px}.mfb-component__main-icon--active,.mfb-component__main-icon--resting{-webkit-transform:scale(1) rotate(360deg);transform:scale(1) rotate(360deg);-webkit-transition:-webkit-transform 150ms cubic-bezier(.4,0,1,1);transition:transform 150ms cubic-bezier(.4,0,1,1)}.mfb-component__child-icon{line-height:56px;font-size:18px}.mfb-component__main-icon--active{opacity:0}[data-mfb-state=open] .mfb-component__main-icon,[data-mfb-toggle=hover]:hover .mfb-component__main-icon{-webkit-transform:scale(1) rotate(0deg);transform:scale(1) rotate(0deg)}[data-mfb-state=open] .mfb-component__main-icon--resting,[data-mfb-toggle=hover]:hover .mfb-component__main-icon--resting{opacity:0}[data-mfb-state=open] .mfb-component__main-icon--active,[data-mfb-toggle=hover]:hover .mfb-component__main-icon--active{opacity:1}.mfb-component--tl.mfb-slidein .mfb-component__list li,.mfb-component--tr.mfb-slidein .mfb-component__list li{opacity:0;transition:all .5s}.mfb-component--tl.mfb-slidein[data-mfb-state=open] .mfb-component__list li,.mfb-component--tl.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li,.mfb-component--tr.mfb-slidein[data-mfb-state=open] .mfb-component__list li,.mfb-component--tr.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li{opacity:1}.mfb-component--tl.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--tl.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1),.mfb-component--tr.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--tr.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1){-webkit-transform:translateY(70px);transform:translateY(70px)}.mfb-component--tl.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--tl.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2),.mfb-component--tr.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--tr.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2){-webkit-transform:translateY(140px);transform:translateY(140px)}.mfb-component--tl.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--tl.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3),.mfb-component--tr.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--tr.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3){-webkit-transform:translateY(210px);transform:translateY(210px)}.mfb-component--tl.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--tl.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4),.mfb-component--tr.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--tr.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4){-webkit-transform:translateY(280px);transform:translateY(280px)}.mfb-component--bl.mfb-slidein .mfb-component__list li,.mfb-component--br.mfb-slidein .mfb-component__list li{opacity:0;transition:all .5s}.mfb-component--bl.mfb-slidein[data-mfb-state=open] .mfb-component__list li,.mfb-component--bl.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li,.mfb-component--br.mfb-slidein[data-mfb-state=open] .mfb-component__list li,.mfb-component--br.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li{opacity:1}.mfb-component--bl.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--bl.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1),.mfb-component--br.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--br.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1){-webkit-transform:translateY(-70px);transform:translateY(-70px)}.mfb-component--bl.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--bl.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2),.mfb-component--br.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--br.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2){-webkit-transform:translateY(-140px);transform:translateY(-140px)}.mfb-component--bl.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--bl.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3),.mfb-component--br.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--br.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3){-webkit-transform:translateY(-210px);transform:translateY(-210px)}.mfb-component--bl.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--bl.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4),.mfb-component--br.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--br.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4){-webkit-transform:translateY(-280px);transform:translateY(-280px)}.mfb-component--tl.mfb-slidein-spring .mfb-component__list li,.mfb-component--tr.mfb-slidein-spring .mfb-component__list li{opacity:0;transition:all .5s;transition-timing-function:cubic-bezier(.68,-.55,.265,1.55)}.mfb-component--tl.mfb-slidein-spring .mfb-component__list li:nth-child(1),.mfb-component--tr.mfb-slidein-spring .mfb-component__list li:nth-child(1){transition-delay:.05s}.mfb-component--tl.mfb-slidein-spring .mfb-component__list li:nth-child(2),.mfb-component--tr.mfb-slidein-spring .mfb-component__list li:nth-child(2){transition-delay:.1s}.mfb-component--tl.mfb-slidein-spring .mfb-component__list li:nth-child(3),.mfb-component--tr.mfb-slidein-spring .mfb-component__list li:nth-child(3){transition-delay:.15s}.mfb-component--tl.mfb-slidein-spring .mfb-component__list li:nth-child(4),.mfb-component--tr.mfb-slidein-spring .mfb-component__list li:nth-child(4){transition-delay:.2s}.mfb-component--tl.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li,.mfb-component--tl.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li,.mfb-component--tr.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li,.mfb-component--tr.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li{opacity:1}.mfb-component--tl.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--tl.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1),.mfb-component--tr.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--tr.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1){transition-delay:.05s;-webkit-transform:translateY(70px);transform:translateY(70px)}.mfb-component--tl.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--tl.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2),.mfb-component--tr.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--tr.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2){transition-delay:.1s;-webkit-transform:translateY(140px);transform:translateY(140px)}.mfb-component--tl.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--tl.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3),.mfb-component--tr.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--tr.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3){transition-delay:.15s;-webkit-transform:translateY(210px);transform:translateY(210px)}.mfb-component--tl.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--tl.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4),.mfb-component--tr.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--tr.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4){transition-delay:.2s;-webkit-transform:translateY(280px);transform:translateY(280px)}.mfb-component--bl.mfb-slidein-spring .mfb-component__list li,.mfb-component--br.mfb-slidein-spring .mfb-component__list li{opacity:0;transition:all .5s;transition-timing-function:cubic-bezier(.68,-.55,.265,1.55)}.mfb-component--bl.mfb-slidein-spring .mfb-component__list li:nth-child(1),.mfb-component--br.mfb-slidein-spring .mfb-component__list li:nth-child(1){transition-delay:.05s}.mfb-component--bl.mfb-slidein-spring .mfb-component__list li:nth-child(2),.mfb-component--br.mfb-slidein-spring .mfb-component__list li:nth-child(2){transition-delay:.1s}.mfb-component--bl.mfb-slidein-spring .mfb-component__list li:nth-child(3),.mfb-component--br.mfb-slidein-spring .mfb-component__list li:nth-child(3){transition-delay:.15s}.mfb-component--bl.mfb-slidein-spring .mfb-component__list li:nth-child(4),.mfb-component--br.mfb-slidein-spring .mfb-component__list li:nth-child(4){transition-delay:.2s}.mfb-component--bl.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li,.mfb-component--bl.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li,.mfb-component--br.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li,.mfb-component--br.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li{opacity:1}.mfb-component--bl.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--bl.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1),.mfb-component--br.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--br.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1){transition-delay:.05s;-webkit-transform:translateY(-70px);transform:translateY(-70px)}.mfb-component--bl.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--bl.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2),.mfb-component--br.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--br.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2){transition-delay:.1s;-webkit-transform:translateY(-140px);transform:translateY(-140px)}.mfb-component--bl.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--bl.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3),.mfb-component--br.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--br.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3){transition-delay:.15s;-webkit-transform:translateY(-210px);transform:translateY(-210px)}.mfb-component--bl.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--bl.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4),.mfb-component--br.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--br.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4){transition-delay:.2s;-webkit-transform:translateY(-280px);transform:translateY(-280px)}.mfb-component--tl.mfb-zoomin .mfb-component__list li,.mfb-component--tr.mfb-zoomin .mfb-component__list li{-webkit-transform:scale(0);transform:scale(0)}.mfb-component--tl.mfb-zoomin .mfb-component__list li:nth-child(1),.mfb-component--tr.mfb-zoomin .mfb-component__list li:nth-child(1){-webkit-transform:translateY(70px) scale(0);transform:translateY(70px) scale(0);transition:all .5s;transition-delay:.15s}.mfb-component--tl.mfb-zoomin .mfb-component__list li:nth-child(2),.mfb-component--tr.mfb-zoomin .mfb-component__list li:nth-child(2){-webkit-transform:translateY(140px) scale(0);transform:translateY(140px) scale(0);transition:all .5s;transition-delay:.1s}.mfb-component--tl.mfb-zoomin .mfb-component__list li:nth-child(3),.mfb-component--tr.mfb-zoomin .mfb-component__list li:nth-child(3){-webkit-transform:translateY(210px) scale(0);transform:translateY(210px) scale(0);transition:all .5s;transition-delay:.05s}.mfb-component--tl.mfb-zoomin .mfb-component__list li:nth-child(4),.mfb-component--tr.mfb-zoomin .mfb-component__list li:nth-child(4){-webkit-transform:translateY(280px) scale(0);transform:translateY(280px) scale(0);transition:all .5s;transition-delay:0s}.mfb-component--tl.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--tl.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1),.mfb-component--tr.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--tr.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1){-webkit-transform:translateY(70px) scale(1);transform:translateY(70px) scale(1);transition-delay:.05s}.mfb-component--tl.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--tl.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2),.mfb-component--tr.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--tr.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2){-webkit-transform:translateY(140px) scale(1);transform:translateY(140px) scale(1);transition-delay:.1s}.mfb-component--tl.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--tl.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3),.mfb-component--tr.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--tr.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3){-webkit-transform:translateY(210px) scale(1);transform:translateY(210px) scale(1);transition-delay:.15s}.mfb-component--tl.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--tl.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4),.mfb-component--tr.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--tr.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4){-webkit-transform:translateY(280px) scale(1);transform:translateY(280px) scale(1);transition-delay:.2s}.mfb-component--bl.mfb-zoomin .mfb-component__list li,.mfb-component--br.mfb-zoomin .mfb-component__list li{-webkit-transform:scale(0);transform:scale(0)}.mfb-component--bl.mfb-zoomin .mfb-component__list li:nth-child(1),.mfb-component--br.mfb-zoomin .mfb-component__list li:nth-child(1){-webkit-transform:translateY(-70px) scale(0);transform:translateY(-70px) scale(0);transition:all .5s;transition-delay:.15s}.mfb-component--bl.mfb-zoomin .mfb-component__list li:nth-child(2),.mfb-component--br.mfb-zoomin .mfb-component__list li:nth-child(2){-webkit-transform:translateY(-140px) scale(0);transform:translateY(-140px) scale(0);transition:all .5s;transition-delay:.1s}.mfb-component--bl.mfb-zoomin .mfb-component__list li:nth-child(3),.mfb-component--br.mfb-zoomin .mfb-component__list li:nth-child(3){-webkit-transform:translateY(-210px) scale(0);transform:translateY(-210px) scale(0);transition:all .5s;transition-delay:.05s}.mfb-component--bl.mfb-zoomin .mfb-component__list li:nth-child(4),.mfb-component--br.mfb-zoomin .mfb-component__list li:nth-child(4){-webkit-transform:translateY(-280px) scale(0);transform:translateY(-280px) scale(0);transition:all .5s;transition-delay:0s}.mfb-component--bl.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--bl.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1),.mfb-component--br.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--br.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1){-webkit-transform:translateY(-70px) scale(1);transform:translateY(-70px) scale(1);transition-delay:.05s}.mfb-component--bl.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--bl.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2),.mfb-component--br.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--br.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2){-webkit-transform:translateY(-140px) scale(1);transform:translateY(-140px) scale(1);transition-delay:.1s}.mfb-component--bl.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--bl.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3),.mfb-component--br.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--br.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3){-webkit-transform:translateY(-210px) scale(1);transform:translateY(-210px) scale(1);transition-delay:.15s}.mfb-component--bl.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--bl.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4),.mfb-component--br.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--br.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4){-webkit-transform:translateY(-280px) scale(1);transform:translateY(-280px) scale(1);transition-delay:.2s}.mfb-component--tl.mfb-fountain .mfb-component__list li,.mfb-component--tr.mfb-fountain .mfb-component__list li{-webkit-transform:scale(0);transform:scale(0)}.mfb-component--tl.mfb-fountain .mfb-component__list li:nth-child(1),.mfb-component--tr.mfb-fountain .mfb-component__list li:nth-child(1){-webkit-transform:translateY(-70px) scale(0);transform:translateY(-70px) scale(0);transition:all .5s;transition-delay:.15s}.mfb-component--tl.mfb-fountain .mfb-component__list li:nth-child(2),.mfb-component--tr.mfb-fountain .mfb-component__list li:nth-child(2){-webkit-transform:translateY(-140px) scale(0);transform:translateY(-140px) scale(0);transition:all .5s;transition-delay:.1s}.mfb-component--tl.mfb-fountain .mfb-component__list li:nth-child(3),.mfb-component--tr.mfb-fountain .mfb-component__list li:nth-child(3){-webkit-transform:translateY(-210px) scale(0);transform:translateY(-210px) scale(0);transition:all .5s;transition-delay:.05s}.mfb-component--tl.mfb-fountain .mfb-component__list li:nth-child(4),.mfb-component--tr.mfb-fountain .mfb-component__list li:nth-child(4){-webkit-transform:translateY(-280px) scale(0);transform:translateY(-280px) scale(0);transition:all .5s;transition-delay:0s}.mfb-component--tl.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--tl.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1),.mfb-component--tr.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--tr.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1){-webkit-transform:translateY(70px) scale(1);transform:translateY(70px) scale(1);transition-delay:.05s}.mfb-component--tl.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--tl.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2),.mfb-component--tr.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--tr.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2){-webkit-transform:translateY(140px) scale(1);transform:translateY(140px) scale(1);transition-delay:.1s}.mfb-component--tl.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--tl.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3),.mfb-component--tr.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--tr.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3){-webkit-transform:translateY(210px) scale(1);transform:translateY(210px) scale(1);transition-delay:.15s}.mfb-component--tl.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--tl.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4),.mfb-component--tr.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--tr.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4){-webkit-transform:translateY(280px) scale(1);transform:translateY(280px) scale(1);transition-delay:.2s}.mfb-component--bl.mfb-fountain .mfb-component__list li,.mfb-component--br.mfb-fountain .mfb-component__list li{-webkit-transform:scale(0);transform:scale(0)}.mfb-component--bl.mfb-fountain .mfb-component__list li:nth-child(1),.mfb-component--br.mfb-fountain .mfb-component__list li:nth-child(1){-webkit-transform:translateY(70px) scale(0);transform:translateY(70px) scale(0);transition:all .5s;transition-delay:.15s}.mfb-component--bl.mfb-fountain .mfb-component__list li:nth-child(2),.mfb-component--br.mfb-fountain .mfb-component__list li:nth-child(2){-webkit-transform:translateY(140px) scale(0);transform:translateY(140px) scale(0);transition:all .5s;transition-delay:.1s}.mfb-component--bl.mfb-fountain .mfb-component__list li:nth-child(3),.mfb-component--br.mfb-fountain .mfb-component__list li:nth-child(3){-webkit-transform:translateY(210px) scale(0);transform:translateY(210px) scale(0);transition:all .5s;transition-delay:.05s}.mfb-component--bl.mfb-fountain .mfb-component__list li:nth-child(4),.mfb-component--br.mfb-fountain .mfb-component__list li:nth-child(4){-webkit-transform:translateY(280px) scale(0);transform:translateY(280px) scale(0);transition:all .5s;transition-delay:0s}.mfb-component--bl.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--bl.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1),.mfb-component--br.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--br.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1){-webkit-transform:translateY(-70px) scale(1);transform:translateY(-70px) scale(1);transition-delay:.05s}.mfb-component--bl.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--bl.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2),.mfb-component--br.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--br.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2){-webkit-transform:translateY(-140px) scale(1);transform:translateY(-140px) scale(1);transition-delay:.1s}.mfb-component--bl.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--bl.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3),.mfb-component--br.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--br.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3){-webkit-transform:translateY(-210px) scale(1);transform:translateY(-210px) scale(1);transition-delay:.15s}.mfb-component--bl.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--bl.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4),.mfb-component--br.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--br.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4){-webkit-transform:translateY(-280px) scale(1);transform:translateY(-280px) scale(1);transition-delay:.2s}[data-mfb-label]:after{content:attr(data-mfb-label);opacity:0;background:rgba(0,0,0,.4);padding:4px 10px;border-radius:3px;color:rgba(255,255,255,.8);font-size:13px;pointer-events:none;position:absolute;top:50%;margin-top:-10.5px;transition:all .5s}[data-mfb-state=open] [data-mfb-label]:after,[data-mfb-toggle=hover] [data-mfb-label]:hover:after{content:attr(data-mfb-label);opacity:1;transition:all .3s}.mfb-component--br .mfb-component__list [data-mfb-label]:after,.mfb-component--br [data-mfb-label]:after,.mfb-component--tr .mfb-component__list [data-mfb-label]:after,.mfb-component--tr [data-mfb-label]:after{content:attr(data-mfb-label);right:70px}.mfb-component--bl .mfb-component__list [data-mfb-label]:after,.mfb-component--bl [data-mfb-label]:after,.mfb-component--tl .mfb-component__list [data-mfb-label]:after,.mfb-component--tl [data-mfb-label]:after{content:attr(data-mfb-label);left:70px} \ No newline at end of file diff --git a/static/mfb/mfb.min.js b/static/mfb/mfb.min.js deleted file mode 100644 index e895497a051..00000000000 --- a/static/mfb/mfb.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(a,b){"use strict";function c(a,b){for(var c=0,d=a.length;d>c;c++)i=a[c].querySelector("."+r),i.addEventListener(b,f,!1)}function d(a){for(var b=0,c=a.length;c>b;b++)a[b].setAttribute(n,l),a[b].setAttribute(o,q)}function e(a){return b.querySelectorAll("["+n+'="'+a+'"]')}function f(a){for(j=a.target;j&&!j.getAttribute(n);)if(j=j.parentNode,!j)return;k=j.getAttribute(o)===p?q:p,j.setAttribute(o,k)}var g,h,i,j,k,l="click",m="hover",n="data-mfb-toggle",o="data-mfb-state",p="open",q="closed",r="mfb-component__button--main";a.Modernizr&&Modernizr.touch&&(h=e(m),d(h)),g=e(l),c(g,"click")}(window,document); \ No newline at end of file diff --git a/static/radio/js/radio.js b/static/radio/js/radio.js deleted file mode 100644 index b5bdf48abc4..00000000000 --- a/static/radio/js/radio.js +++ /dev/null @@ -1,110 +0,0 @@ -window.Nightscout.client.init(function loaded() { - /* - Many thanks to @ps2, Pete Schwamb - * https://gist.github.com/ps2/314145bb91fa720bba59cf58f7e9cad2 - 2**((numOctaves/(maxBG-minBG))*(bg-minBG) + Math.log2(minFreq)) - */ - function convert (opts) { - opts = opts || { }; - var octaves = opts.octaves || 9; - var maxBG = opts.maxBG || 400; - var minBG = opts.minBG || 40; - var minFreq = opts.minFreq || 55; - var x = minBG - , y = minFreq - , z = octaves/(maxBG - minBG) - ; - - function freq (bg) { - return Math.pow(2, (z* (bg - x ) ) + Math.log2(y)) ; - // return Math.pow(2, (z* (bg + x ) ) + Math.log2(y)) ; - } - - function invert (freq) { - - return ((Math.log2(freq) - Math.log2(y)) / z ) + x; - } - - function api (glucose) { - return freq(glucose); - } - - api.invert = invert; - api.freq = freq; - return api; - } - - - - function createLoop (synth, sgvs) { - function callback (time, note) { - console.log(time, note); - synth.triggerAttackRelease(note, '16n', time); - } - var seq = new Tone.Sequence(callback, sgvs, '16n'); - seq.loop = false; - return seq; - } - - function glucose (sgv) { - if (sgv) { - return parseInt(sgv.mgdl || sgv.sgv || sgv.glucose || 35); - } - - return 20; - } - - $(document).ready(function ( ) { - console.log('OK'); - var converter = convert( ); - var synth = new Tone.PolySynth(16, Tone.MonoSynth); - // default volume always makes my ears bleed - synth.chain(new Tone.Volume(-26), Tone.Master); - // synth.toMaster(); - Tone.Transport.timeSignature = [ 3, 2 ]; - Tone.Transport.bpm.value = 320; - - // function play_next (time) { - // var sgv = sgvs.shift( ); - // console.log(sgv); - // if (!sgv) { - // loop.stop( ); - // } - // if (sgv) { - // var freq = converter.freq(sgv.mgdl || 30); - // synth.triggerAttackRelease(parseInt(sgv.mgdl || sgv.sgv || sgv.glucose || 39) * 4, '8n', time); - // } - // } - - // var loop = new Tone.Loop(play_next, '4n'); - var loop; - function play_data ( ) { - var sgvs = Nightscout.client.sbx.data.sgvs.slice( ).map(glucose).map(converter.freq); - console.log('last two hours', sgvs.length); - var new_loop = createLoop(synth, sgvs); - if (loop) { - loop.stop( ); - loop.dispose( ); - loop = null; - } - loop = new_loop; - Nightscout.client.radio.loop = loop; - loop.start( ); - } - - Nightscout.client.radio = { - converter: converter - , synth: synth - , loop: loop - }; - - Nightscout.client.socket.on('dataUpdate', function ( ) { - play_data( ); - }); - $('#again').on('click', function ( ) { - play_data( ); - }); - Tone.Transport.start( ); - - }); -}); \ No newline at end of file diff --git a/static/report/css/mfb.min.css b/static/report/css/mfb.min.css deleted file mode 100644 index 0c4d5e49dfc..00000000000 --- a/static/report/css/mfb.min.css +++ /dev/null @@ -1 +0,0 @@ -.mfb-component,.mfb-component--bl,.mfb-component--br,.mfb-component--tl,.mfb-component--tr{box-sizing:border-box;margin:25px;position:fixed;white-space:nowrap;z-index:30;padding-left:0;list-style:none}.mfb-component *,.mfb-component :after,.mfb-component :before,.mfb-component--bl *,.mfb-component--bl :after,.mfb-component--bl :before,.mfb-component--br *,.mfb-component--br :after,.mfb-component--br :before,.mfb-component--tl *,.mfb-component--tl :after,.mfb-component--tl :before,.mfb-component--tr *,.mfb-component--tr :after,.mfb-component--tr :before{box-sizing:inherit}.mfb-component--tl{left:0;top:0}.mfb-component--tr{right:0;top:0}.mfb-component--bl{left:0;bottom:0}.mfb-component--br{right:0;bottom:0}.mfb-component__button,.mfb-component__button--child,.mfb-component__button--main{background-color:#E40A5D;display:inline-block;border:none;border-radius:50%;box-shadow:0 0 4px rgba(0,0,0,.14),0 4px 8px rgba(0,0,0,.28);cursor:pointer;outline:0;padding:0;position:relative;-webkit-user-drag:none;font-weight:700;color:#f1f1f1}.mfb-component__list{list-style:none;margin:0;padding:0}.mfb-component__list>li{display:block;position:absolute;top:0;right:1px;padding:10px 0;margin:-10px 0}.mfb-component__child-icon,.mfb-component__icon,.mfb-component__main-icon--active,.mfb-component__main-icon--resting{position:absolute;font-size:18px;text-align:center;line-height:56px;width:100%}.mfb-component__wrap{padding:25px;margin:-25px}[data-mfb-state=open] .mfb-component__child-icon,[data-mfb-state=open] .mfb-component__icon,[data-mfb-state=open] .mfb-component__main-icon--active,[data-mfb-state=open] .mfb-component__main-icon--resting,[data-mfb-toggle=hover]:hover .mfb-component__child-icon,[data-mfb-toggle=hover]:hover .mfb-component__icon,[data-mfb-toggle=hover]:hover .mfb-component__main-icon--active,[data-mfb-toggle=hover]:hover .mfb-component__main-icon--resting{-webkit-transform:scale(1) rotate(0deg);transform:scale(1) rotate(0deg)}.mfb-component__button--main{height:56px;width:56px;z-index:20}.mfb-component__button--child{height:56px;width:56px}.mfb-component__main-icon--active,.mfb-component__main-icon--resting{-webkit-transform:scale(1) rotate(360deg);transform:scale(1) rotate(360deg);-webkit-transition:-webkit-transform 150ms cubic-bezier(.4,0,1,1);transition:transform 150ms cubic-bezier(.4,0,1,1)}.mfb-component__child-icon{line-height:56px;font-size:18px}.mfb-component__main-icon--active{opacity:0}[data-mfb-state=open] .mfb-component__main-icon,[data-mfb-toggle=hover]:hover .mfb-component__main-icon{-webkit-transform:scale(1) rotate(0deg);transform:scale(1) rotate(0deg)}[data-mfb-state=open] .mfb-component__main-icon--resting,[data-mfb-toggle=hover]:hover .mfb-component__main-icon--resting{opacity:0}[data-mfb-state=open] .mfb-component__main-icon--active,[data-mfb-toggle=hover]:hover .mfb-component__main-icon--active{opacity:1}.mfb-component--tl.mfb-slidein .mfb-component__list li,.mfb-component--tr.mfb-slidein .mfb-component__list li{opacity:0;transition:all .5s}.mfb-component--tl.mfb-slidein[data-mfb-state=open] .mfb-component__list li,.mfb-component--tl.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li,.mfb-component--tr.mfb-slidein[data-mfb-state=open] .mfb-component__list li,.mfb-component--tr.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li{opacity:1}.mfb-component--tl.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--tl.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1),.mfb-component--tr.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--tr.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1){-webkit-transform:translateY(70px);transform:translateY(70px)}.mfb-component--tl.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--tl.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2),.mfb-component--tr.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--tr.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2){-webkit-transform:translateY(140px);transform:translateY(140px)}.mfb-component--tl.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--tl.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3),.mfb-component--tr.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--tr.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3){-webkit-transform:translateY(210px);transform:translateY(210px)}.mfb-component--tl.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--tl.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4),.mfb-component--tr.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--tr.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4){-webkit-transform:translateY(280px);transform:translateY(280px)}.mfb-component--bl.mfb-slidein .mfb-component__list li,.mfb-component--br.mfb-slidein .mfb-component__list li{opacity:0;transition:all .5s}.mfb-component--bl.mfb-slidein[data-mfb-state=open] .mfb-component__list li,.mfb-component--bl.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li,.mfb-component--br.mfb-slidein[data-mfb-state=open] .mfb-component__list li,.mfb-component--br.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li{opacity:1}.mfb-component--bl.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--bl.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1),.mfb-component--br.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--br.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1){-webkit-transform:translateY(-70px);transform:translateY(-70px)}.mfb-component--bl.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--bl.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2),.mfb-component--br.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--br.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2){-webkit-transform:translateY(-140px);transform:translateY(-140px)}.mfb-component--bl.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--bl.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3),.mfb-component--br.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--br.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3){-webkit-transform:translateY(-210px);transform:translateY(-210px)}.mfb-component--bl.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--bl.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4),.mfb-component--br.mfb-slidein[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--br.mfb-slidein[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4){-webkit-transform:translateY(-280px);transform:translateY(-280px)}.mfb-component--tl.mfb-slidein-spring .mfb-component__list li,.mfb-component--tr.mfb-slidein-spring .mfb-component__list li{opacity:0;transition:all .5s cubic-bezier(.68,-.55,.265,1.55)}.mfb-component--tl.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li,.mfb-component--tl.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li,.mfb-component--tr.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li,.mfb-component--tr.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li{opacity:1}.mfb-component--tl.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--tl.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1),.mfb-component--tr.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--tr.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1){-webkit-transform:translateY(70px);transform:translateY(70px)}.mfb-component--tl.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--tl.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2),.mfb-component--tr.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--tr.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2){-webkit-transform:translateY(140px);transform:translateY(140px)}.mfb-component--tl.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--tl.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3),.mfb-component--tr.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--tr.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3){-webkit-transform:translateY(210px);transform:translateY(210px)}.mfb-component--tl.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--tl.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4),.mfb-component--tr.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--tr.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4){-webkit-transform:translateY(280px);transform:translateY(280px)}.mfb-component--bl.mfb-slidein-spring .mfb-component__list li,.mfb-component--br.mfb-slidein-spring .mfb-component__list li{opacity:0;transition:all .5s cubic-bezier(.68,-.55,.265,1.55)}.mfb-component--bl.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li,.mfb-component--bl.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li,.mfb-component--br.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li,.mfb-component--br.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li{opacity:1}.mfb-component--bl.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--bl.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1),.mfb-component--br.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--br.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1){-webkit-transform:translateY(-70px);transform:translateY(-70px)}.mfb-component--bl.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--bl.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2),.mfb-component--br.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--br.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2){-webkit-transform:translateY(-140px);transform:translateY(-140px)}.mfb-component--bl.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--bl.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3),.mfb-component--br.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--br.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3){-webkit-transform:translateY(-210px);transform:translateY(-210px)}.mfb-component--bl.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--bl.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4),.mfb-component--br.mfb-slidein-spring[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--br.mfb-slidein-spring[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4){-webkit-transform:translateY(-280px);transform:translateY(-280px)}.mfb-component--tl.mfb-zoomin .mfb-component__list li,.mfb-component--tr.mfb-zoomin .mfb-component__list li{-webkit-transform:scale(0);transform:scale(0)}.mfb-component--tl.mfb-zoomin .mfb-component__list li:nth-child(1),.mfb-component--tr.mfb-zoomin .mfb-component__list li:nth-child(1){-webkit-transform:translateY(70px) scale(0);transform:translateY(70px) scale(0);transition:all .5s;transition-delay:.15s}.mfb-component--tl.mfb-zoomin .mfb-component__list li:nth-child(2),.mfb-component--tr.mfb-zoomin .mfb-component__list li:nth-child(2){-webkit-transform:translateY(140px) scale(0);transform:translateY(140px) scale(0);transition:all .5s;transition-delay:.1s}.mfb-component--tl.mfb-zoomin .mfb-component__list li:nth-child(3),.mfb-component--tr.mfb-zoomin .mfb-component__list li:nth-child(3){-webkit-transform:translateY(210px) scale(0);transform:translateY(210px) scale(0);transition:all .5s;transition-delay:.05s}.mfb-component--tl.mfb-zoomin .mfb-component__list li:nth-child(4),.mfb-component--tr.mfb-zoomin .mfb-component__list li:nth-child(4){-webkit-transform:translateY(280px) scale(0);transform:translateY(280px) scale(0);transition:all .5s;transition-delay:0s}.mfb-component--tl.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--tl.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1),.mfb-component--tr.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--tr.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1){-webkit-transform:translateY(70px) scale(1);transform:translateY(70px) scale(1);transition-delay:.05s}.mfb-component--tl.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--tl.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2),.mfb-component--tr.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--tr.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2){-webkit-transform:translateY(140px) scale(1);transform:translateY(140px) scale(1);transition-delay:.1s}.mfb-component--tl.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--tl.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3),.mfb-component--tr.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--tr.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3){-webkit-transform:translateY(210px) scale(1);transform:translateY(210px) scale(1);transition-delay:.15s}.mfb-component--tl.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--tl.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4),.mfb-component--tr.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--tr.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4){-webkit-transform:translateY(280px) scale(1);transform:translateY(280px) scale(1);transition-delay:.2s}.mfb-component--bl.mfb-zoomin .mfb-component__list li,.mfb-component--br.mfb-zoomin .mfb-component__list li{-webkit-transform:scale(0);transform:scale(0)}.mfb-component--bl.mfb-zoomin .mfb-component__list li:nth-child(1),.mfb-component--br.mfb-zoomin .mfb-component__list li:nth-child(1){-webkit-transform:translateY(-70px) scale(0);transform:translateY(-70px) scale(0);transition:all .5s;transition-delay:.15s}.mfb-component--bl.mfb-zoomin .mfb-component__list li:nth-child(2),.mfb-component--br.mfb-zoomin .mfb-component__list li:nth-child(2){-webkit-transform:translateY(-140px) scale(0);transform:translateY(-140px) scale(0);transition:all .5s;transition-delay:.1s}.mfb-component--bl.mfb-zoomin .mfb-component__list li:nth-child(3),.mfb-component--br.mfb-zoomin .mfb-component__list li:nth-child(3){-webkit-transform:translateY(-210px) scale(0);transform:translateY(-210px) scale(0);transition:all .5s;transition-delay:.05s}.mfb-component--bl.mfb-zoomin .mfb-component__list li:nth-child(4),.mfb-component--br.mfb-zoomin .mfb-component__list li:nth-child(4){-webkit-transform:translateY(-280px) scale(0);transform:translateY(-280px) scale(0);transition:all .5s;transition-delay:0s}.mfb-component--bl.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--bl.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1),.mfb-component--br.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--br.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1){-webkit-transform:translateY(-70px) scale(1);transform:translateY(-70px) scale(1);transition-delay:.05s}.mfb-component--bl.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--bl.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2),.mfb-component--br.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--br.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2){-webkit-transform:translateY(-140px) scale(1);transform:translateY(-140px) scale(1);transition-delay:.1s}.mfb-component--bl.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--bl.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3),.mfb-component--br.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--br.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3){-webkit-transform:translateY(-210px) scale(1);transform:translateY(-210px) scale(1);transition-delay:.15s}.mfb-component--bl.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--bl.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4),.mfb-component--br.mfb-zoomin[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--br.mfb-zoomin[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4){-webkit-transform:translateY(-280px) scale(1);transform:translateY(-280px) scale(1);transition-delay:.2s}.mfb-component--tl.mfb-fountain .mfb-component__list li,.mfb-component--tr.mfb-fountain .mfb-component__list li{-webkit-transform:scale(0);transform:scale(0)}.mfb-component--tl.mfb-fountain .mfb-component__list li:nth-child(1),.mfb-component--tr.mfb-fountain .mfb-component__list li:nth-child(1){-webkit-transform:translateY(-70px) scale(0);transform:translateY(-70px) scale(0);transition:all .5s;transition-delay:.15s}.mfb-component--tl.mfb-fountain .mfb-component__list li:nth-child(2),.mfb-component--tr.mfb-fountain .mfb-component__list li:nth-child(2){-webkit-transform:translateY(-140px) scale(0);transform:translateY(-140px) scale(0);transition:all .5s;transition-delay:.1s}.mfb-component--tl.mfb-fountain .mfb-component__list li:nth-child(3),.mfb-component--tr.mfb-fountain .mfb-component__list li:nth-child(3){-webkit-transform:translateY(-210px) scale(0);transform:translateY(-210px) scale(0);transition:all .5s;transition-delay:.05s}.mfb-component--tl.mfb-fountain .mfb-component__list li:nth-child(4),.mfb-component--tr.mfb-fountain .mfb-component__list li:nth-child(4){-webkit-transform:translateY(-280px) scale(0);transform:translateY(-280px) scale(0);transition:all .5s;transition-delay:0s}.mfb-component--tl.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--tl.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1),.mfb-component--tr.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--tr.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1){-webkit-transform:translateY(70px) scale(1);transform:translateY(70px) scale(1);transition-delay:.05s}.mfb-component--tl.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--tl.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2),.mfb-component--tr.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--tr.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2){-webkit-transform:translateY(140px) scale(1);transform:translateY(140px) scale(1);transition-delay:.1s}.mfb-component--tl.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--tl.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3),.mfb-component--tr.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--tr.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3){-webkit-transform:translateY(210px) scale(1);transform:translateY(210px) scale(1);transition-delay:.15s}.mfb-component--tl.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--tl.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4),.mfb-component--tr.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--tr.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4){-webkit-transform:translateY(280px) scale(1);transform:translateY(280px) scale(1);transition-delay:.2s}.mfb-component--bl.mfb-fountain .mfb-component__list li,.mfb-component--br.mfb-fountain .mfb-component__list li{-webkit-transform:scale(0);transform:scale(0)}.mfb-component--bl.mfb-fountain .mfb-component__list li:nth-child(1),.mfb-component--br.mfb-fountain .mfb-component__list li:nth-child(1){-webkit-transform:translateY(70px) scale(0);transform:translateY(70px) scale(0);transition:all .5s;transition-delay:.15s}.mfb-component--bl.mfb-fountain .mfb-component__list li:nth-child(2),.mfb-component--br.mfb-fountain .mfb-component__list li:nth-child(2){-webkit-transform:translateY(140px) scale(0);transform:translateY(140px) scale(0);transition:all .5s;transition-delay:.1s}.mfb-component--bl.mfb-fountain .mfb-component__list li:nth-child(3),.mfb-component--br.mfb-fountain .mfb-component__list li:nth-child(3){-webkit-transform:translateY(210px) scale(0);transform:translateY(210px) scale(0);transition:all .5s;transition-delay:.05s}.mfb-component--bl.mfb-fountain .mfb-component__list li:nth-child(4),.mfb-component--br.mfb-fountain .mfb-component__list li:nth-child(4){-webkit-transform:translateY(280px) scale(0);transform:translateY(280px) scale(0);transition:all .5s;transition-delay:0s}.mfb-component--bl.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--bl.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1),.mfb-component--br.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(1),.mfb-component--br.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(1){-webkit-transform:translateY(-70px) scale(1);transform:translateY(-70px) scale(1);transition-delay:.05s}.mfb-component--bl.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--bl.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2),.mfb-component--br.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(2),.mfb-component--br.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(2){-webkit-transform:translateY(-140px) scale(1);transform:translateY(-140px) scale(1);transition-delay:.1s}.mfb-component--bl.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--bl.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3),.mfb-component--br.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(3),.mfb-component--br.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(3){-webkit-transform:translateY(-210px) scale(1);transform:translateY(-210px) scale(1);transition-delay:.15s}.mfb-component--bl.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--bl.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4),.mfb-component--br.mfb-fountain[data-mfb-state=open] .mfb-component__list li:nth-child(4),.mfb-component--br.mfb-fountain[data-mfb-toggle=hover]:hover .mfb-component__list li:nth-child(4){-webkit-transform:translateY(-280px) scale(1);transform:translateY(-280px) scale(1);transition-delay:.2s}[data-mfb-label]:after{content:attr(data-mfb-label);opacity:0;background:rgba(0,0,0,.4);padding:4px 10px;border-radius:3px;color:rgba(255,255,255,.8);font-size:13px;pointer-events:none;position:absolute;top:50%;margin-top:-10.5px;transition:all .5s}[data-mfb-state=open] [data-mfb-label]:after,[data-mfb-toggle=hover] [data-mfb-label]:hover:after{content:attr(data-mfb-label);opacity:1;transition:all .3s}.mfb-component--br .mfb-component__list [data-mfb-label]:after,.mfb-component--br [data-mfb-label]:after,.mfb-component--tr .mfb-component__list [data-mfb-label]:after,.mfb-component--tr [data-mfb-label]:after{content:attr(data-mfb-label);right:70px}.mfb-component--bl .mfb-component__list [data-mfb-label]:after,.mfb-component--bl [data-mfb-label]:after,.mfb-component--tl .mfb-component__list [data-mfb-label]:after,.mfb-component--tl [data-mfb-label]:after{content:attr(data-mfb-label);left:70px} \ No newline at end of file diff --git a/static/report/js/report.js b/static/report/js/report.js deleted file mode 100644 index 9e171bb8730..00000000000 --- a/static/report/js/report.js +++ /dev/null @@ -1,922 +0,0 @@ -// TODO: -// - bypass nightmode in reports -// - on save/delete treatment ctx.bus.emit('data-received'); is not enough. we must add something like 'data-updated' - -(function () { - 'use strict'; - //for the tests window isn't the global object - var $ = window.$; - var _ = window._; - var moment = window.moment; - var Nightscout = window.Nightscout; - var client = Nightscout.client; - var report_plugins = Nightscout.report_plugins; - - client.init(function loaded () { - - // init HTML code - report_plugins.addHtmlFromPlugins( client ); - // make show() accessible outside for treatments.js - report_plugins.show = show; - - var translate = client.translate; - - var maxInsulinValue = 0 - ,maxCarbsValue = 0 - ,maxDailyCarbsValue = 0; - var maxdays = 6 * 31; - var datastorage = {}; - var daystoshow = {}; - var sorteddaystoshow = []; - - var targetBGdefault = { - 'mg/dl': { - low: client.settings.thresholds.bgTargetBottom - , high: client.settings.thresholds.bgTargetTop - } - , 'mmol': { - low: client.utils.scaleMgdl(client.settings.thresholds.bgTargetBottom) - , high: client.utils.scaleMgdl(client.settings.thresholds.bgTargetTop) - } - }; - - var ONE_MIN_IN_MS = 60000; - - prepareGUI(); - - // ****** FOOD CODE START ****** - var food_categories = []; - var food_list = []; - - var filter = { - category: '' - , subcategory: '' - , name: '' - }; - - function fillFoodForm(event) { - $('#rp_category').empty().append(''); - Object.keys(food_categories).forEach(function eachCategory(s) { - $('#rp_category').append(''); - }); - filter.category = ''; - fillFoodSubcategories(); - - $('#rp_category').change(fillFoodSubcategories); - $('#rp_subcategory').change(doFoodFilter); - $('#rp_name').on('input',doFoodFilter); - - return maybePrevent(event); - } - - function fillFoodSubcategories(event) { - filter.category = $('#rp_category').val(); - filter.subcategory = ''; - $('#rp_subcategory').empty().append(''); - if (filter.category !== '') { - Object.keys(food_categories[filter.category] || {}).forEach(function eachSubCategory(s) { - $('#rp_subcategory').append(''); - }); - } - doFoodFilter(); - return maybePrevent(event); - } - - function doFoodFilter(event) { - if (event) { - filter.category = $('#rp_category').val(); - filter.subcategory = $('#rp_subcategory').val(); - filter.name = $('#rp_name').val(); - } - $('#rp_food').empty(); - for (var i=0; i' + o + ''); - } - - return maybePrevent(event); - } - - $('#info').html(''+translate('Loading food database')+' ...'); - $.ajax('/api/v1/food/regular.json', { - headers: client.headers() - , success: function foodLoadSuccess(records) { - records.forEach(function (r) { - food_list.push(r); - if (r.category && !food_categories[r.category]) { food_categories[r.category] = {}; } - if (r.category && r.subcategory) { food_categories[r.category][r.subcategory] = true; } - }); - fillFoodForm(); - } - }).done(function() { - if (food_list.length) { - enableFoodGUI(); - } else { - disableFoodGUI(); - } - }).fail(function() { - disableFoodGUI(); - }); - - function enableFoodGUI( ) { - $('#info').html(''); - - $('.rp_foodgui').css('display',''); - $('#rp_food').change(function (event) { - $('#rp_enablefood').prop('checked',true); - return maybePrevent(event); - }); - } - - function disableFoodGUI(){ - $('#info').html(''); - $('.rp_foodgui').css('display','none'); - } - - // ****** FOOD CODE END ****** - - function prepareGUI() { - $('.presetdates').click(function(event) { - var days = $(this).attr('days'); - $('#rp_enabledate').prop('checked',true); - return setDataRange(event,days); - }); - $('#rp_show').click(show); - $('#rp_notes').bind('input', function (event) { - $('#rp_enablenotes').prop('checked',true); - return maybePrevent(event); - }); - $('#rp_eventtype').bind('input', function (event) { - $('#rp_enableeventtype').prop('checked',true); - return maybePrevent(event); - }); - - // fill careportal events - $('#rp_eventtype').empty(); - _.each(client.careportal.events, function eachEvent(event) { - $('#rp_eventtype').append(''); - }); - $('#rp_eventtype').append(''); - - $('#rp_targetlow').val(targetBGdefault[client.settings.units.toLowerCase()].low); - $('#rp_targethigh').val(targetBGdefault[client.settings.units.toLowerCase()].high); - - if (client.settings.scaleY === 'linear') { - $('#rp_linear').prop('checked', true); - $('#wrp_linear').prop('checked', true); - } else { - $('#rp_log').prop('checked', true); - $('#wrp_log').prop('checked', true); - } - - $('.menutab').click(switchreport_handler); - - setDataRange(null,7); - } - - function sgvToColor(sgv,options) { - var color = 'darkgreen'; - - if (sgv > options.targetHigh) { - color = 'red'; - } else if (sgv < options.targetLow) { - color = 'red'; - } - - return color; - } - - function show(event) { - var options = { - width: 1000 - , height: 300 - , weekwidth: 1000 - , weekheight: 300 - , targetLow: 3.5 - , targetHigh: 10 - , raw: true - , notes: true - , food: true - , insulin: true - , carbs: true - , iob : true - , cob : true - , basal : true - , scale: report_plugins.consts.scaleYFromSettings(client) - , weekscale: report_plugins.consts.scaleYFromSettings(client) - , units: client.settings.units - }; - - // default time range if no time range specified in GUI - var zone = client.sbx.data.profile.getTimezone(); - var timerange = '&find[created_at][$gte]='+moment.tz('2000-01-01',zone).toISOString(); - //console.log(timerange,zone); - options.targetLow = parseFloat($('#rp_targetlow').val().replace(',','.')); - options.targetHigh = parseFloat($('#rp_targethigh').val().replace(',','.')); - options.raw = $('#rp_optionsraw').is(':checked'); - options.iob = $('#rp_optionsiob').is(':checked'); - options.cob = $('#rp_optionscob').is(':checked'); - options.openAps = $('#rp_optionsopenaps').is(':checked'); - options.predicted = $('#rp_optionspredicted').is(':checked'); - options.predictedTruncate = $('#rp_optionsPredictedTruncate').is(':checked'); - options.basal = $('#rp_optionsbasal').is(':checked'); - options.notes = $('#rp_optionsnotes').is(':checked'); - options.food = $('#rp_optionsfood').is(':checked'); - options.insulin = $('#rp_optionsinsulin').is(':checked'); - options.insulindistribution = $('#rp_optionsdistribution').is(':checked'); - options.carbs = $('#rp_optionscarbs').is(':checked'); - options.scale = ( $('#rp_linear').is(':checked') ? report_plugins.consts.SCALE_LINEAR : report_plugins.consts.SCALE_LOG ); - options.weekscale = ( $('#wrp_linear').is(':checked') ? report_plugins.consts.SCALE_LINEAR : report_plugins.consts.SCALE_LOG ); - options.order = ( $('#rp_oldestontop').is(':checked') ? report_plugins.consts.ORDER_OLDESTONTOP : report_plugins.consts.ORDER_NEWESTONTOP ); - options.width = parseInt($('#rp_size :selected').attr('x')); - options.weekwidth = parseInt($('#wrp_size :selected').attr('x')); - options.height = parseInt($('#rp_size :selected').attr('y')); - options.weekheight = parseInt($('#wrp_size :selected').attr('y')); - options.loopalyzer = $("#loopalyzer").hasClass( "selected" ); // We only want to run through Loopalyzer if that tab is selected - if (options.loopalyzer) { - options.iob = true; - options.cob = true; - options.openAps = true; - } - - var matchesneeded = 0; - - // date range - function datefilter() { - if ($('#rp_enabledate').is(':checked')) { - matchesneeded++; - var from = moment.tz($('#rp_from').val().replace(/\//g,'-') + 'T00:00:00',zone); - var to = moment.tz($('#rp_to').val().replace(/\//g,'-') + 'T23:59:59',zone); - timerange = '&find[created_at][$gte]='+from.toISOString()+'&find[created_at][$lt]='+to.toISOString(); - //console.log($('#rp_from').val(),$('#rp_to').val(),zone,timerange); - while (from <= to) { - if (daystoshow[from.format('YYYY-MM-DD')]) { - daystoshow[from.format('YYYY-MM-DD')]++; - } else { - daystoshow[from.format('YYYY-MM-DD')] = 1; - } - from.add(1, 'days'); - } - } - //console.log('Dayfilter: ',daystoshow); - foodfilter(); - } - - //food filter - function foodfilter() { - if ($('#rp_enablefood').is(':checked')) { - matchesneeded++; - var _id = $('#rp_food').val(); - if (_id) { - var treatmentData; - var tquery = '?find[boluscalc.foods._id]=' + _id + timerange; - $.ajax('/api/v1/treatments.json'+tquery, { - headers: client.headers() - , success: function (xhr) { - treatmentData = xhr.map(function (treatment) { - return moment.tz(treatment.created_at,zone).format('YYYY-MM-DD'); - }); - // unique it - treatmentData = $.grep(treatmentData, function(v, k){ - return $.inArray(v ,treatmentData) === k; - }); - treatmentData.sort(function(a, b) { return a > b; }); - } - }).done(function () { - //console.log('Foodfilter: ',treatmentData); - for (var d=0; d b; }); - } - }).done(function () { - //console.log('Notesfilter: ',treatmentData); - for (var d=0; d b; }); - } - }).done(function () { - //console.log('Eventtypefilter: ',treatmentData); - for (var d=0; d'+translate('Loading')+' ...'); - for (var d in daystoshow) { - if (count < maxdays) { - $('#info').append($('
')); - count++; - loadData(d, options, dataLoadedCallback); - } else { - $('#info').append($('
'+d+' '+translate('not displayed')+'.
')); - delete daystoshow[d]; - } - } - if (count===0) { - $('#info').html(''+translate('Result is empty')+''); - $('#rp_show').css('display',''); - } - } - - var dayscount = 0; - var loadeddays = 0; - - function countDays() { - for (var d in daystoshow) { - if (daystoshow.hasOwnProperty(d)) { - if (daystoshow[d]===matchesneeded) { - if (dayscount < maxdays) { - dayscount++; - } - } else { - delete daystoshow[d]; - } - } - } - //console.log('Total: ', daystoshow, 'Matches needed: ', matchesneeded, 'Will be loaded: ', dayscount); - } - - function addPreviousDayTreatments() { - for (var d in daystoshow) { - if (daystoshow.hasOwnProperty(d)) { - var day = moment.tz(d,zone); - var previous = day.subtract(1,'days'); - var formated = previous.format('YYYY-MM-DD'); - if (!daystoshow[formated]) { - daystoshow[formated] = { treatmentsonly: true}; - console.log('Adding ' + formated + ' for loading treatments'); - dayscount++; - } - } - } - //console.log('Total: ', daystoshow, 'Matches needed: ', matchesneeded, 'Will be loaded: ', dayscount); - } - - function dataLoadedCallback (day) { - loadeddays++; - if (!daystoshow[day].treatmentsonly) { - sorteddaystoshow.push(day); - } - if (loadeddays === dayscount) { - sorteddaystoshow.sort(); - var from = sorteddaystoshow[0]; - var dFrom = sorteddaystoshow[0]; - var dTo = sorteddaystoshow[(sorteddaystoshow.length - 1)]; - - if (options.order === report_plugins.consts.ORDER_NEWESTONTOP) { - sorteddaystoshow.reverse(); - } - loadProfileSwitch(dFrom, function loadProfileSwitchCallback() { - loadProfilesRange(dFrom, dTo, sorteddaystoshow.length, function loadProfilesCallback() { - $('#info > b').html('' + translate('Rendering') + ' ...'); - window.setTimeout(function () { - showreports(options); - }, 0); - }); - }); - } - } - - $('#rp_show').css('display','none'); - daystoshow = {}; - - datefilter(); - return maybePrevent(event); - } - - function showreports(options) { - // prepare some data used in more reports - datastorage.allstatsrecords = []; - datastorage.alldays = 0; - sorteddaystoshow.forEach(function eachDay(day) { - if (!daystoshow[day].treatmentsonly) { - datastorage.allstatsrecords = datastorage.allstatsrecords.concat(datastorage[day].statsrecords); - datastorage.alldays++; - } - }); - options.maxInsulinValue = maxInsulinValue; - options.maxCarbsValue = maxCarbsValue; - options.maxDailyCarbsValue = maxDailyCarbsValue; - - datastorage.treatments = []; - datastorage.devicestatus = []; - datastorage.combobolusTreatments = []; - datastorage.tempbasalTreatments = []; - Object.keys(daystoshow).forEach( function eachDay(day) { - datastorage.treatments = datastorage.treatments.concat(datastorage[day].treatments); - datastorage.devicestatus = datastorage.devicestatus.concat(datastorage[day].devicestatus); - datastorage.combobolusTreatments = datastorage.combobolusTreatments.concat(datastorage[day].combobolusTreatments); - datastorage.tempbasalTreatments = datastorage.tempbasalTreatments.concat(datastorage[day].tempbasalTreatments); - }); - datastorage.tempbasalTreatments = Nightscout.client.ddata.processDurations(datastorage.tempbasalTreatments); - datastorage.treatments.sort(function sort(a, b) {return a.mills - b.mills; }); - - for (var d in daystoshow) { - if (daystoshow.hasOwnProperty(d)) { - if (daystoshow[d].treatmentsonly) { - delete daystoshow[d]; - delete datastorage[d]; - } - } - } - - report_plugins.eachPlugin(function (plugin) { - // jquery plot doesn't draw to hidden div - $('#'+plugin.name+'-placeholder').css('display',''); - - console.log('Drawing ',plugin.name); - - var skipRender = false; - - if (plugin.name == 'daytoday' && ! $('#daytoday').hasClass('selected')) skipRender = true; - if (plugin.name == 'treatments' && ! $('#treatments').hasClass('selected')) skipRender = true; - if (plugin.name == 'weektoweek' && ! $('#weektoweek').hasClass('selected')) skipRender = true; - if (plugin.name == 'loopalyzer' && ! $('#loopalyzer').hasClass('selected')) skipRender = true; - - if (skipRender) { - console.log('Skipping ',plugin.name); - } else { - plugin.report(datastorage,sorteddaystoshow,options); - } - - if (!$('#'+plugin.name).hasClass('selected')) { - $('#'+plugin.name+'-placeholder').css('display','none'); - } - }); - - $('#info').html(''); - $('#rp_show').css('display',''); - } - - function setDataRange(event,days) { - $('#rp_to').val(moment().format('YYYY-MM-DD')); - $('#rp_from').val(moment().add(-days+1, 'days').format('YYYY-MM-DD')); - return maybePrevent(event); - } - - function switchreport_handler(event) { - var id = $(this).attr('id'); - - $('.menutab').removeClass('selected'); - $('#'+id).addClass('selected'); - - $('.tabplaceholder').css('display','none'); - $('#'+id+'-placeholder').css('display',''); - return maybePrevent(event); - } - - function loadData(day, options, callback) { - // check for loaded data - if ((options.openAps || options.predicted || options.iob || options.cob) && datastorage[day] && !datastorage[day].devicestatus.length) { - // OpenAPS requested but data not loaded. Load anyway ... - } else if (datastorage[day] && day !== moment().format('YYYY-MM-DD')) { - callback(day); - return; - } - // patientData = [actual, predicted, mbg, treatment, cal, devicestatusData]; - var data = {}; - var cgmData = [] - , mbgData = [] - , treatmentData = [] - , calData = [] - ; - var from; - if (client.sbx.data.profile.getTimezone()) { - from = moment(day).tz(client.sbx.data.profile.getTimezone()).startOf('day').format('x'); - } else { - from = moment(day).startOf('day').format('x'); - } - from = parseInt(from); - var to = from + 1000 * 60 * 60 * 24; - - function loadCGMData() { - if (daystoshow[day].treatmentsonly) { - data.sgv = []; - data.mbg = []; - data.cal = []; - return $.Deferred().resolve(); - } - $('#info-' + day).html(''+translate('Loading CGM data of')+' '+day+' ...'); - var query = '?find[date][$gte]='+from+'&find[date][$lt]='+to+'&count=10000'; - return $.ajax('/api/v1/entries.json'+query, { - headers: client.headers() - , success: function (xhr) { - xhr.forEach(function (element) { - if (element) { - if (element.mbg) { - mbgData.push({ - y: element.mbg - , mills: element.date - , d: element.dateString - , device: element.device - }); - } else if (element.sgv) { - cgmData.push({ - y: element.sgv - , mills: element.date - , d: element.dateString - , device: element.device - , filtered: element.filtered - , unfiltered: element.unfiltered - , noise: element.noise - , rssi: element.rssi - , sgv: element.sgv - }); - } else if (element.type === 'cal') { - calData.push({ - mills: element.date + 1 - , d: element.dateString - , scale: element.scale - , intercept: element.intercept - , slope: element.slope - }); - } - } - }); - // sometimes cgm contains duplicates. uniq it. - data.sgv = cgmData.slice(); - data.sgv.sort(function(a, b) { return a.mills - b.mills; }); - var lastDate = 0; - data.sgv = data.sgv.filter(function(d) { - var ok = (lastDate + ONE_MIN_IN_MS) <= d.mills; - lastDate = d.mills; - if (!ok) { console.log("itm",JSON.stringify(d)); } - return ok; - }); - data.mbg = mbgData.slice(); - data.mbg.sort(function(a, b) { return a.mills - b.mills; }); - data.cal = calData.slice(); - data.cal.sort(function(a, b) { return a.mills - b.mills; }); - } - }); - } - - function loadTreatmentData() { - if (!datastorage.profileSwitchTreatments) - datastorage.profileSwitchTreatments = []; - $('#info-' + day).html(''+translate('Loading treatments data of')+' '+day+' ...'); - var tquery = '?find[created_at][$gte]='+new Date(from).toISOString()+'&find[created_at][$lt]='+new Date(to).toISOString()+'&count=1000'; - return $.ajax('/api/v1/treatments.json'+tquery, { - headers: client.headers() - , cache: false - , success: function (xhr) { - treatmentData = xhr.map(function (treatment) { - var timestamp = new Date(treatment.timestamp || treatment.created_at); - treatment.mills = timestamp.getTime(); - return treatment; - }); - data.treatments = treatmentData.slice(); - data.treatments.sort(function(a, b) { return a.mills - b.mills; }); - // filter 'Combo Bolus' events - data.combobolusTreatments = data.treatments.filter( function filterComboBoluses(t) { - return t.eventType === 'Combo Bolus'; - }); - // filter temp basal treatments - data.tempbasalTreatments = data.treatments.filter(function filterTempBasals(t) { - return t.eventType === 'Temp Basal'; - }); - // filter profile switch treatments - var profileSwitch = data.treatments.filter(function filterProfileSwitch(t) { - return t.eventType === 'Profile Switch'; - }); - datastorage.profileSwitchTreatments = datastorage.profileSwitchTreatments.concat(profileSwitch); - } - }); - } - - function loadDevicestatusData() { - if (daystoshow[day].treatmentsonly) { - data.devicestatus = []; - return $.Deferred().resolve(); - } - if (options.iob || options.cob || options.openAps || options.predicted) { - $('#info-' + day).html(''+translate('Loading device status data of')+' '+day+' ...'); - var tquery = '?find[created_at][$gte]=' + new Date(from).toISOString() + '&find[created_at][$lt]=' + new Date(to).toISOString() + '&count=10000'; - return $.ajax('/api/v1/devicestatus.json'+tquery, { - headers: client.headers() - , success: function (xhr) { - data.devicestatus = xhr.map(function (devicestatus) { - devicestatus.mills = new Date(devicestatus.timestamp || devicestatus.created_at).getTime(); - return devicestatus; - }); - } - }); - } else { - data.devicestatus = []; - return $.Deferred().resolve(); - } - } - - $.when(loadCGMData(), loadTreatmentData(), loadDevicestatusData()).done(function () { - $('#info-' + day).html(''+translate('Processing data of')+' '+day+' ...'); - processData(data, day, options, callback); - }); - } - - function loadProfileSwitch (from, callback) { - $('#info > b').html(''+translate('Loading profile switch data') + ' ...'); - var tquery = '?find[eventType]=Profile Switch' + '&find[created_at][$lte]=' + new Date(from).toISOString() + '&count=1'; - $.ajax('/api/v1/treatments.json'+tquery, { - headers: client.headers() - , success: function (xhr) { - var treatmentData = xhr.map(function (treatment) { - var timestamp = new Date(treatment.timestamp || treatment.created_at); - treatment.mills = timestamp.getTime(); - return treatment; - }); - if (!datastorage.profileSwitchTreatments) - datastorage.profileSwitchTreatments = []; - datastorage.profileSwitchTreatments = datastorage.profileSwitchTreatments.concat(treatmentData); - datastorage.profileSwitchTreatments.sort(function(a, b) { return a.mills - b.mills; }); - } - }).done(function () { - callback(); - }); - } - - function loadProfiles(callback) { - $('#info > b').html(''+translate('Loading profiles') + ' ...'); - $.ajax('/api/v1/profile.json', { - headers: client.headers() - , success: function (records) { - datastorage.profiles = records; - } - , error: function () { - datastorage.profiles = []; - } - }).done(callback); - } - - function loadProfilesRange (dateFrom, dateTo, dayCount, callback) { - $('#info > b').html('' + translate('Loading profile range') + ' ...'); - - $.when( - loadProfilesRangeCore(dateFrom, dateTo, dayCount), - loadProfilesRangePrevious(dateFrom), - loadProfilesRangeNext(dateTo) - ) - .done(callback) - .fail(function () { - datastorage.profiles = []; - }); - } - - function loadProfilesRangeCore (dateFrom, dateTo, dayCount) { - $('#info > b').html('' + translate('Loading core profiles') + ' ...'); - - //The results must be returned in descending order to work with key logic in routines such as getCurrentProfile - var tquery = '?find[startDate][$gte]=' + new Date(dateFrom).toISOString() + '&find[startDate][$lte]=' + new Date(dateTo).toISOString() + '&sort[startDate]=-1&count=1000'; - - return $.ajax('/api/v1/profiles' + tquery, { - headers: client.headers(), - async: false, - success: function (records) { - datastorage.profiles = records; - } - }); - } - - function loadProfilesRangePrevious (dateFrom) { - $('#info > b').html('' + translate('Loading previous profile') + ' ...'); - - //Find first one before the start date and add to datastorage.profiles - var tquery = '?find[startDate][$lt]=' + new Date(dateFrom).toISOString() + '&sort[startDate]=-1&count=1'; - - return $.ajax('/api/v1/profiles' + tquery, { - headers: client.headers(), - async: false, - success: function (records) { - records.forEach(function (r) { - datastorage.profiles.push(r); - }); - } - }); - } - - function loadProfilesRangeNext (dateTo) { - $('#info > b').html('' + translate('Loading next profile') + ' ...'); - - //Find first one after the end date and add to datastorage.profiles - var tquery = '?find[startDate][$gt]=' + new Date(dateTo).toISOString() + '&sort[startDate]=1&count=1'; - - return $.ajax('/api/v1/profiles' + tquery, { - headers: client.headers(), - async: false, - success: function (records) { - records.forEach(function (r) { - //must be inserted as top to maintain profiles being sorted by date in descending order - datastorage.profiles.unshift(r); - }); - } - }); - } - - function processData(data, day, options, callback) { - if (daystoshow[day].treatmentsonly) { - datastorage[day] = data; - $('#info-' + day).html(''); - callback(day); - return; - } - // treatments - data.dailyCarbs = 0; - data.dailyProtein = 0; - data.dailyFat = 0; - - data.treatments.forEach(function (d) { - if (parseFloat(d.insulin) > maxInsulinValue) { - maxInsulinValue = parseFloat(d.insulin); - } - if (parseFloat(d.carbs) > maxCarbsValue) { - maxCarbsValue = parseFloat(d.carbs); - } - if (d.carbs) { - data.dailyCarbs += Number(d.carbs); - } - if (d.protein) { - data.dailyProtein += Number(d.protein); - } - if (d.fat) { - data.dailyFat += Number(d.fat); - } - }); - if (data.dailyCarbs > maxDailyCarbsValue) { - maxDailyCarbsValue = data.dailyCarbs; - } - - var cal = data.cal[data.cal.length-1]; - var temp1 = [ ]; - var rawbg = client.rawbg; - if (cal) { - temp1 = data.sgv.map(function (entry) { - entry.mgdl = entry.y; // value names changed from enchilada - var rawBg = rawbg.calc(entry, cal); - return { mills: entry.mills, date: new Date(entry.mills - 2 * 1000), y: rawBg, sgv: client.utils.scaleMgdl(rawBg), color: 'gray', type: 'rawbg', filtered: entry.filtered, unfiltered: entry.unfiltered }; - }).filter(function(entry) { return entry.y > 0}); - } - var temp2 = data.sgv.map(function (obj) { - return { mills: obj.mills, date: new Date(obj.mills), y: obj.y, sgv: client.utils.scaleMgdl(obj.y), color: sgvToColor(client.utils.scaleMgdl(obj.y),options), type: 'sgv', noise: obj.noise, filtered: obj.filtered, unfiltered: obj.unfiltered}; - }); - data.sgv = [].concat(temp1, temp2); - - //Add MBG's also, pretend they are SGV's - data.sgv = data.sgv.concat(data.mbg.map(function (obj) { return { date: new Date(obj.mills), y: obj.y, sgv: client.utils.scaleMgdl(obj.y), color: 'red', type: 'mbg', device: obj.device } })); - - // make sure data range will be exactly 24h - var from; - if (client.sbx.data.profile.getTimezone()) { - from = moment(day).tz(client.sbx.data.profile.getTimezone()).startOf('day').toDate(); - } else { - from = moment(day).startOf('day').toDate(); - } - var to = new Date(from.getTime() + 1000 * 60 * 60 * 24); - data.sgv.push({ date: from, y: 40, sgv: 40, color: 'transparent', type: 'rawbg'}); - data.sgv.push({ date: to, y: 40, sgv: 40, color: 'transparent', type: 'rawbg'}); - - // clear error data. we don't need it to display them - data.sgv = data.sgv.filter(function (d) { - if (d.y < 39) { - return false; - } - return true; - }); - - data.sgv = data.sgv.map(function eachSgv (sgv) { - var status = _.find(data.devicestatus, function (d) { - return d.mills >= sgv.mills && d.mills < sgv.mills + 5 * 60 * 1000; - }); - - if (status && status.openaps) { - sgv.openaps = status.openaps; - } - return sgv; - }); - - // for other reports - data.statsrecords = data.sgv.filter(function(r) { - if (r.type) { - return r.type === 'sgv'; - } else { - return true; - } - }).map(function (r) { - var ret = {}; - ret.sgv = parseFloat(r.sgv); - ret.bgValue = parseInt(r.y); - ret.displayTime = r.date; - return ret; - }); - - - datastorage[day] = data; - $('#info-' + day).html(''); - callback(day); - } - - function maybePrevent(event) { - if (event) { - event.preventDefault(); - } - return false; - } - }); -})(); diff --git a/static/translations/js/translations.js b/static/translations/js/translations.js deleted file mode 100644 index 286efa24fd7..00000000000 --- a/static/translations/js/translations.js +++ /dev/null @@ -1,54 +0,0 @@ -(function () { - 'use strict'; - //for the tests window isn't the global object - var $ = window.$; - var _ = window._; - var Nightscout = window.Nightscout; - var client = Nightscout.client; - - client.init(function loaded() { - - var language = client.language; - var result = {}; - - language.languages.forEach(function eachLanguage(l) { - result[l.code] = {total: 0, ok: 0, missing: 0, keys: []}; - _.forEach(language.translations, function (n, t) { - result[l.code].total++; - if (language.translations[t][l.code]) { - result[l.code].ok++; - } else { - result[l.code].missing++; - result[l.code].keys.push(t); - } - }); - }); - - var table = $('').append(''); - var table2 = $('
LanguageCodeTranslatedNot translatedPercent
').append(''); - language.languages.forEach(function eachLanguage(l) { - if (l.code === 'en') { - return; - } - var tr = $(''); - tr.append($(''); - tr2.append($('
LanguageCodeMissing
').append(l.language)); - tr.append($('').append(l.code)); - tr.append($('').append(result[l.code].ok)); - tr.append($('').append(result[l.code].missing)); - tr.append($('').append((result[l.code].ok / result[l.code].total * 100).toFixed(1) + '%')); - - var tr2 = $('
').append(l.language)); - tr2.append($('').append(l.code)); - tr2.append($('').attr('width', '300px').append(result[l.code].keys.join('
'))); - - table.append(tr); - table2.append(tr2); - }); - - var placeholder = $('#translations'); - placeholder.html(table); - placeholder.append('
'); - placeholder.append(table2); - }); -})(); \ No newline at end of file diff --git a/test b/test deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/tests/XX_clean.test.js b/tests/XX_clean.test.js new file mode 100644 index 00000000000..9b921a01721 --- /dev/null +++ b/tests/XX_clean.test.js @@ -0,0 +1,39 @@ +'use strict'; + +var _ = require('lodash'); +var language = require('../lib/language')(); + +describe('Clean MONGO after tests', function ( ) { + this.timeout(10000); + var self = this; + + var api = require('../lib/api/'); + beforeEach(function (done) { + process.env.API_SECRET = 'this is my long pass phrase'; + self.env = require('../lib/server/env')(); + self.env.settings.authDefaultRoles = 'readable'; + self.env.settings.enable = ['careportal', 'api']; + this.wares = require('../lib/middleware/')(self.env); + self.app = require('express')(); + self.app.enable('api'); + require('../lib/server/bootevent')(self.env, language).boot(function booted(ctx) { + self.ctx = ctx; + self.ctx.ddata = require('../lib/data/ddata')(); + self.app.use('/api', api(self.env, ctx)); + done(); + }); + }); + + it('wipe treatment data', function (done) { + self.ctx.treatments().remove({ }, function ( ) { + done(); + }); + }); + + it('wipe entries data', function (done) { + self.ctx.entries().remove({ }, function ( ) { + done(); + }); + }); + +}); diff --git a/tests/adminnotifies.test.js b/tests/adminnotifies.test.js new file mode 100644 index 00000000000..86655708d26 --- /dev/null +++ b/tests/adminnotifies.test.js @@ -0,0 +1,109 @@ + +'use strict'; + +require('should'); +var language = require('../lib/language')(); + +const ctx = {}; + +ctx.bus = {}; +ctx.bus.on = function mockOn(channel, f) { }; +ctx.settings = {}; +ctx.settings.adminNotifiesEnabled = true; + +const mockJqueryResults = {}; +const mockButton = {}; + +mockButton.click = function() {}; +mockButton.css = function() {}; +mockButton.show = function() {}; + +const mockDrawer = {}; + +const mockJQuery = function mockJquery(p) { + if (p == '#adminnotifies') return mockButton; + if (p == '#adminNotifiesDrawer') return mockDrawer; + return mockJqueryResults; +}; + +const mockClient = {}; + +mockClient.translate = language.translate; +mockClient.headers = function () {return {};} + +const adminnotifies = require('../lib/adminnotifies')(ctx); + +var window = {}; +//global.window = window; + +window.setTimeout = function () { return; } + +describe('adminnotifies', function ( ) { + + after( function tearDown(done) { + delete global.window; + done(); + }); + + it('should aggregate a message', function () { + + const notify = { + title: 'Foo' + , message: 'Bar' + }; + + adminnotifies.addNotify(notify); + adminnotifies.addNotify(notify); + + const notifies = adminnotifies.getNotifies(); + + notifies.length.should.equal(1); + }); + + /* + it('should display a message', function (done) { + + const notify2 = { + title: 'FooFoo' + , message: 'BarBar' + }; + + adminnotifies.addNotify(notify2); + adminnotifies.addNotify(notify2); + + const notifies = adminnotifies.getNotifies(); + + mockJQuery.ajax = function mockAjax() { + + const rVal = notifies; + + rVal.done = function(callback) { + callback({ + message: { + notifies, + notifyCount: notifies.length + } + }); + return rVal; + } + + rVal.fail = function() {}; + + return rVal; + } + + const adminnotifiesClient = require('../lib/client/adminnotifiesclient')(mockClient,mockJQuery); + + mockDrawer.html = function (html) { + console.log(html); + html.indexOf('You have administration messages').should.be.greaterThan(0); + html.indexOf('Event repeated 2 times').should.be.greaterThan(0); + done(); + } + + adminnotifiesClient.prepare(); + + }); +*/ + +}); \ No newline at end of file diff --git a/tests/admintools.test.js b/tests/admintools.test.js index 2fe6169f59a..59f10c720a7 100644 --- a/tests/admintools.test.js +++ b/tests/admintools.test.js @@ -70,7 +70,7 @@ describe('admintools', function ( ) { before(function (done) { benv.setup(function() { - benv.require(__dirname + '/../tmp/js/bundle.report.js'); + benv.require(__dirname + '/../tmp/public/js/bundle.app.js'); self.$ = $; @@ -202,7 +202,7 @@ describe('admintools', function ( ) { it ('should produce some html', function (done) { var client = require('../lib/client'); - var hashauth = require('../lib/hashauth'); + var hashauth = require('../lib/client/hashauth'); hashauth.init(client,$); hashauth.verifyAuthentication = function mockVerifyAuthentication(next) { hashauth.authenticated = true; diff --git a/tests/api.alexa.test.js b/tests/api.alexa.test.js index 440050eb2cc..7075b8e6d5b 100644 --- a/tests/api.alexa.test.js +++ b/tests/api.alexa.test.js @@ -1,7 +1,9 @@ 'use strict'; -var request = require('supertest'); -var language = require('../lib/language')(); +const fs = require('fs'); +const request = require('supertest'); +const language = require('../lib/language')(fs); + const bodyParser = require('body-parser'); require('should'); @@ -11,7 +13,9 @@ describe('Alexa REST api', function ( ) { const apiRoot = require('../lib/api/root'); const api = require('../lib/api/'); before(function (done) { - var env = require('../env')( ); + delete process.env.API_SECRET; + process.env.API_SECRET = 'this is my long pass phrase'; + var env = require('../lib/server/env')( ); env.settings.enable = ['alexa']; env.settings.authDefaultRoles = 'readable'; env.api_secret = 'this is my long pass phrase'; diff --git a/tests/api.devicestatus.test.js b/tests/api.devicestatus.test.js index 34a0908610e..50b6c202d08 100644 --- a/tests/api.devicestatus.test.js +++ b/tests/api.devicestatus.test.js @@ -8,11 +8,12 @@ var language = require('../lib/language')(); describe('Devicestatus API', function ( ) { this.timeout(10000); var self = this; + var known = 'b723e97aa97846eb92d5264f084b2823f57c4aa1'; var api = require('../lib/api/'); beforeEach(function (done) { process.env.API_SECRET = 'this is my long pass phrase'; - self.env = require('../env')(); + self.env = require('../lib/server/env')(); self.env.settings.authDefaultRoles = 'readable'; self.env.settings.enable = ['careportal', 'api']; this.wares = require('../lib/middleware/')(self.env); @@ -26,16 +27,12 @@ describe('Devicestatus API', function ( ) { }); }); - after(function () { - // delete process.env.API_SECRET; - }); - it('post a devicestatus, query, delete, verify gone', function (done) { // insert a devicestatus - needs to be unique from example data console.log('Inserting devicestatus entry'); request(self.app) .post('/api/devicestatus/') - .set('api-secret', self.env.api_secret || '') + .set('api-secret', known || '') .send({ device: 'xdripjs://rigName' , xdripjs: { @@ -57,9 +54,10 @@ describe('Devicestatus API', function ( ) { .get('/api/devicestatus/') .query('find[created_at][$gte]=2018-12-16') .query('find[created_at][$lte]=2018-12-17') - .set('api-secret', self.env.api_secret || '') + .set('api-secret', known || '') .expect(200) .expect(function (response) { + console.log(JSON.stringify(response.body[0])); response.body[0].xdripjs.state.should.equal(6); response.body[0].utcOffset.should.equal(0); }) @@ -72,7 +70,7 @@ describe('Devicestatus API', function ( ) { request(self.app) .delete('/api/devicestatus/') .query('find[created_at][$gte]=2018-12-16') - .set('api-secret', self.env.api_secret || '') + .set('api-secret', known || '') .expect(200) .end(function (err) { if (err) { @@ -83,7 +81,7 @@ describe('Devicestatus API', function ( ) { request(self.app) .get('/api/devicestatus/') .query('find[created_at][$lte]=2018-12-16') - .set('api-secret', self.env.api_secret || '') + .set('api-secret', known || '') .expect(200) .expect(function (response) { response.body.length.should.equal(0); diff --git a/tests/api.entries.test.js b/tests/api.entries.test.js index 6c0c3f14e45..cbb1c885631 100644 --- a/tests/api.entries.test.js +++ b/tests/api.entries.test.js @@ -9,10 +9,13 @@ require('should'); describe('Entries REST api', function ( ) { var entries = require('../lib/api/entries/'); var self = this; + var known = 'b723e97aa97846eb92d5264f084b2823f57c4aa1'; this.timeout(10000); before(function (done) { - self.env = require('../env')( ); + delete process.env.API_SECRET; + process.env.API_SECRET = 'this is my long pass phrase'; + self.env = require('../lib/server/env')( ); self.env.settings.authDefaultRoles = 'readable'; self.wares = require('../lib/middleware/')(self.env); self.archive = null; @@ -254,7 +257,7 @@ describe('Entries REST api', function ( ) { console.log('Inserting glucose entry') request(self.app) .post('/entries/') - .set('api-secret', self.env.api_secret || '') + .set('api-secret', known || '') .send({ "type": "sgv", "sgv": "199", "dateString": "2014-07-20T00:44:15.000-07:00" , "date": 1405791855000, "device": "dexcom", "direction": "NOT COMPUTABLE" @@ -268,7 +271,7 @@ describe('Entries REST api', function ( ) { console.log('Ensuring glucose entry was inserted successfully'); request(self.app) .get('/entries.json?find[dateString][$gte]=2014-07-20&count=100') - .set('api-secret', self.env.api_secret || '') + .set('api-secret', known || '') .expect(200) .expect(function (response) { var entry = response.body[0]; @@ -283,7 +286,7 @@ describe('Entries REST api', function ( ) { console.log('Deleting test glucose entry'); request(self.app) .delete('/entries.json?find[dateString][$gte]=2014-07-20&count=100') - .set('api-secret', self.env.api_secret || '') + .set('api-secret', known || '') .expect(200) .end(function (err) { if (err) { @@ -293,7 +296,7 @@ describe('Entries REST api', function ( ) { console.log('Testing if glucose entry was deleted'); request(self.app) .get('/entries.json?find[dateString][$gte]=2014-07-20&count=100') - .set('api-secret', self.env.api_secret || '') + .set('api-secret', known || '') .expect(200) .expect(function (response) { response.body.length.should.equal(0); @@ -307,12 +310,12 @@ describe('Entries REST api', function ( ) { }); }); - it('post multipole entries, query, delete, verify gone', function (done) { + it('post multiple entries, query, delete, verify gone', function (done) { // insert a glucose entry - needs to be unique from example data console.log('Inserting glucose entry') request(self.app) .post('/entries/') - .set('api-secret', self.env.api_secret || '') + .set('api-secret', known || '') .send([{ "type": "sgv", "sgv": "199", "dateString": "2014-07-20T00:44:15.000-07:00" , "date": 1405791855000, "device": "dexcom", "direction": "NOT COMPUTABLE" @@ -329,7 +332,7 @@ describe('Entries REST api', function ( ) { console.log('Ensuring glucose entry was inserted successfully'); request(self.app) .get('/entries.json?find[dateString][$gte]=2014-07-20&count=100') - .set('api-secret', self.env.api_secret || '') + .set('api-secret', known || '') .expect(200) .expect(function (response) { var entry = response.body[0]; @@ -345,7 +348,7 @@ describe('Entries REST api', function ( ) { console.log('Deleting test glucose entry'); request(self.app) .delete('/entries.json?find[dateString][$gte]=2014-07-20&count=100') - .set('api-secret', self.env.api_secret || '') + .set('api-secret', known || '') .expect(200) .end(function (err) { if (err) { @@ -355,7 +358,7 @@ describe('Entries REST api', function ( ) { console.log('Testing if glucose entries were deleted'); request(self.app) .get('/entries.json?find[dateString][$gte]=2014-07-20&count=100') - .set('api-secret', self.env.api_secret || '') + .set('api-secret', known || '') .expect(200) .expect(function (response) { response.body.length.should.equal(0); diff --git a/tests/api.security.test.js b/tests/api.security.test.js new file mode 100644 index 00000000000..be203400e89 --- /dev/null +++ b/tests/api.security.test.js @@ -0,0 +1,147 @@ +/* eslint require-atomic-updates: 0 */ +'use strict'; + +const request = require('supertest'); +var language = require('../lib/language')(); +require('should'); +const jwt = require('jsonwebtoken'); + +describe('Security of REST API V1', function() { + const self = this + , instance = require('./fixtures/api3/instance') + , authSubject = require('./fixtures/api3/authSubject'); + + this.timeout(30000); + + var known = 'b723e97aa97846eb92d5264f084b2823f57c4aa1'; + + before(function(done) { + var api = require('../lib/api/'); + delete process.env.API_SECRET; + process.env.API_SECRET = 'this is my long pass phrase'; + self.env = require('../lib/server/env')(); + self.env.settings.authDefaultRoles = 'denied'; + this.wares = require('../lib/middleware/')(self.env); + self.app = require('express')(); + self.app.enable('api'); + require('../lib/server/bootevent')(self.env, language).boot(async function booted (ctx) { + self.app.use('/api/v1', api(self.env, ctx)); + self.app.use('/api/v2/authorization', ctx.authorization.endpoints); + let authResult = await authSubject(ctx.authorization.storage); + self.subject = authResult.subject; + self.token = authResult.token; + + done(); + }); + }); + + it('Should fail on false token', function(done) { + request(self.app) + .get('/api/v2/authorization/request/12345') + .expect(401) + .end(function(err, res) { + console.log(res.error); + res.error.status.should.equal(401); + done(); + }); + }); + + it('Data load should fail unauthenticated', function(done) { + request(self.app) + .get('/api/v1/entries.json') + .expect(401) + .end(function(err, res) { + console.log(res.error); + res.error.status.should.equal(401); + done(); + }); + }); + + it('Should return a JWT on token', function(done) { + const now = Math.round(Date.now() / 1000) - 1; + request(self.app) + .get('/api/v2/authorization/request/' + self.token.read) + .expect(200) + .end(function(err, res) { + const decodedToken = jwt.decode(res.body.token); + decodedToken.accessToken.should.equal(self.token.read); + decodedToken.iat.should.be.aboveOrEqual(now); + decodedToken.exp.should.be.above(decodedToken.iat); + done(); + }); + }); + + it('Data load should succeed with API SECRET', function(done) { + request(self.app) + .get('/api/v1/entries.json') + .set('api-secret', known) + .expect(200) + .end(function(err, res) { + done(); + }); + }); + + it('Data load should succeed with GET token', function(done) { + request(self.app) + .get('/api/v1/entries.json?token=' + self.token.read) + .expect(200) + .end(function(err, res) { + done(); + }); + }); + + it('Data load should succeed with token in place of a secret', function(done) { + request(self.app) + .get('/api/v1/entries.json') + .set('api-secret', self.token.read) + .expect(200) + .end(function(err, res) { + done(); + }); + }); + + it('Data load should succeed with a bearer token', function(done) { + request(self.app) + .get('/api/v2/authorization/request/' + self.token.read) + .expect(200) + .end(function(err, res) { + const token = res.body.token; + request(self.app) + .get('/api/v1/entries.json') + .set('Authorization', 'Bearer ' + token) + .expect(200) + .end(function(err, res) { + done(); + }); + }); + }); + + it('Data load fail succeed with a false bearer token', function(done) { + request(self.app) + .get('/api/v1/entries.json') + .set('Authorization', 'Bearer 1234567890') + .expect(401) + .end(function(err, res) { + done(); + }); + }); + + it('/verifyauth should return OK for Bearer tokens', function (done) { + request(self.app) + .get('/api/v2/authorization/request/' + self.token.adminAll) + .expect(200) + .end(function(err, res) { + const token = res.body.token; + request(self.app) + .get('/api/v1/verifyauth') + .set('Authorization', 'Bearer ' + token) + .expect(200) + .end(function(err, res) { + res.body.message.message.should.equal('OK'); + res.body.message.isAdmin.should.equal(true); + done(); + }); + }); + }); + +}); diff --git a/tests/api.status.test.js b/tests/api.status.test.js index 51730a6f078..5426689aceb 100644 --- a/tests/api.status.test.js +++ b/tests/api.status.test.js @@ -8,7 +8,9 @@ require('should'); describe('Status REST api', function ( ) { var api = require('../lib/api/'); before(function (done) { - var env = require('../env')( ); + delete process.env.API_SECRET; + process.env.API_SECRET = 'this is my long pass phrase'; + var env = require('../lib/server/env')( ); env.settings.enable = ['careportal', 'rawbg']; env.settings.authDefaultRoles = 'readable'; env.api_secret = 'this is my long pass phrase'; diff --git a/tests/api.treatments.test.js b/tests/api.treatments.test.js index 2b1d3ee877d..40e2d052de7 100644 --- a/tests/api.treatments.test.js +++ b/tests/api.treatments.test.js @@ -10,10 +10,12 @@ describe('Treatment API', function ( ) { this.timeout(10000); var self = this; + var api_secret_hash = 'b723e97aa97846eb92d5264f084b2823f57c4aa1'; + var api = require('../lib/api/'); beforeEach(function (done) { process.env.API_SECRET = 'this is my long pass phrase'; - self.env = require('../env')(); + self.env = require('../lib/server/env')(); self.env.settings.authDefaultRoles = 'readable'; self.env.settings.enable = ['careportal', 'api']; this.wares = require('../lib/middleware/')(self.env); @@ -37,8 +39,8 @@ describe('Treatment API', function ( ) { var now = (new Date()).toISOString(); request(self.app) .post('/api/treatments/') - .set('api-secret', self.env.api_secret || '') - .send({eventType: 'Meal Bolus', created_at: now, carbs: '30', insulin: '2.00', preBolus: '15', glucose: 100, glucoseType: 'Finger', units: 'mg/dl'}) + .set('api-secret', api_secret_hash || '') + .send({eventType: 'Meal Bolus', created_at: now, carbs: '30', insulin: '2.00', preBolus: '15', glucose: 100, glucoseType: 'Finger', units: 'mg/dl', notes: ''}) .expect(200) .end(function (err) { if (err) { @@ -50,10 +52,10 @@ describe('Treatment API', function ( ) { }); sorted.length.should.equal(2); sorted[0].glucose.should.equal(100); + sorted[0].notes.should.equal(''); should.not.exist(sorted[0].eventTime); sorted[0].insulin.should.equal(2); sorted[1].carbs.should.equal(30); - done(); }); } @@ -90,7 +92,7 @@ describe('Treatment API', function ( ) { self.ctx.treatments().remove({ }, function ( ) { request(self.app) .post('/api/treatments/') - .set('api-secret', self.env.api_secret || '') + .set('api-secret', api_secret_hash || '') .send({eventType: 'Meal Bolus', created_at: _moment(current_time).format("YYYY-MM-DDTHH:mm:ss.SSSZZ"), carbs: '30', insulin: '2.00', glucose: 100, glucoseType: 'Finger', units: 'mg/dl'}) .expect(200) .end(function (err) { @@ -124,7 +126,7 @@ describe('Treatment API', function ( ) { var now = (new Date()).toISOString(); request(self.app) .post('/api/treatments/') - .set('api-secret', self.env.api_secret || '') + .set('api-secret', api_secret_hash || '') .send([ {eventType: 'BG Check', created_at: now, glucose: 100, preBolus: '0', glucoseType: 'Finger', units: 'mg/dl', notes: ''} , {eventType: 'Meal Bolus', created_at: now, carbs: '30', insulin: '2.00', preBolus: '15', glucose: 100, glucoseType: 'Finger', units: 'mg/dl'} @@ -151,7 +153,7 @@ describe('Treatment API', function ( ) { var now = (new Date()).toISOString(); request(self.app) .post('/api/treatments/') - .set('api-secret', self.env.api_secret || '') + .set('api-secret', api_secret_hash || '') .send([ {eventType: 'BG Check', glucose: 100, units: 'mg/dl', created_at: now} , {eventType: 'BG Check', glucose: 100, units: 'mg/dl', created_at: now} @@ -192,7 +194,7 @@ describe('Treatment API', function ( ) { var now = (new Date()).toISOString(); request(self.app) .post('/api/treatments/') - .set('api-secret', self.env.api_secret || '') + .set('api-secret', api_secret_hash || '') .send({eventType: 'Meal Bolus', created_at: now, carbs: '99', insulin: '2.00', preBolus: '15', glucose: 100, glucoseType: 'Finger', units: 'mg/dl'}) .expect(200) .end(function (err) { @@ -204,7 +206,7 @@ describe('Treatment API', function ( ) { request(self.app) .get('/api/treatments/') .query('find[carbs]=99') - .set('api-secret', self.env.api_secret || '') + .set('api-secret', api_secret_hash || '') .expect(200) .expect(function (response) { response.body[0].carbs.should.equal(99); @@ -218,7 +220,7 @@ describe('Treatment API', function ( ) { request(self.app) .delete('/api/treatments/') .query('find[carbs]=99') - .set('api-secret', self.env.api_secret || '') + .set('api-secret', api_secret_hash || '') .expect(200) .end(function (err) { if (err) { @@ -229,7 +231,7 @@ describe('Treatment API', function ( ) { request(self.app) .get('/api/treatments/') .query('find[carbs]=99') - .set('api-secret', self.env.api_secret || '') + .set('api-secret', api_secret_hash || '') .expect(200) .expect(function (response) { response.body.length.should.equal(0); diff --git a/tests/api.unauthorized.test.js b/tests/api.unauthorized.test.js index 5785069f77e..e1cfae62ac8 100644 --- a/tests/api.unauthorized.test.js +++ b/tests/api.unauthorized.test.js @@ -8,11 +8,13 @@ var language = require('../lib/language')(); describe('authed REST api', function ( ) { var entries = require('../lib/api/entries/'); + this.timeout(20000); + before(function (done) { var known = 'b723e97aa97846eb92d5264f084b2823f57c4aa1'; delete process.env.API_SECRET; process.env.API_SECRET = 'this is my long pass phrase'; - var env = require('../env')( ); + var env = require('../lib/server/env')( ); env.settings.authDefaultRoles = 'readable'; this.wares = require('../lib/middleware/')(env); this.archive = null; diff --git a/tests/api.verifyauth.test.js b/tests/api.verifyauth.test.js index 48a05f2d9c4..fe4f22a7d78 100644 --- a/tests/api.verifyauth.test.js +++ b/tests/api.verifyauth.test.js @@ -8,10 +8,15 @@ require('should'); describe('Verifyauth REST api', function ( ) { var self = this; + this.timeout(10000); + var known = 'b723e97aa97846eb92d5264f084b2823f57c4aa1'; + var api = require('../lib/api/'); before(function (done) { - self.env = require('../env')( ); - self.env.api_secret = 'this is my long pass phrase'; + delete process.env.API_SECRET; + process.env.API_SECRET = 'this is my long pass phrase'; + self.env = require('../lib/server/env')( ); + self.env.settings.authDefaultRoles = 'denied'; this.wares = require('../lib/middleware/')(self.env); self.app = require('express')( ); self.app.enable('api'); @@ -34,7 +39,7 @@ describe('Verifyauth REST api', function ( ) { it('/verifyauth should return OK', function (done) { request(self.app) .get('/api/verifyauth') - .set('api-secret', self.env.api_secret || '') + .set('api-secret', known || '') .expect(200) .end(function(err, res) { res.body.message.message.should.equal('OK'); diff --git a/tests/api3.basic.test.js b/tests/api3.basic.test.js index d13b8628562..28f4c667ee1 100644 --- a/tests/api3.basic.test.js +++ b/tests/api3.basic.test.js @@ -29,11 +29,13 @@ describe('Basic REST API3', function() { .expect(200); const apiConst = require('../lib/api3/const.json') - , software = require('../package.json'); + , software = require('../package.json') + , result = res.body.result; - res.body.version.should.equal(software.version); - res.body.apiVersion.should.equal(apiConst.API3_VERSION); - res.body.srvDate.should.be.within(testConst.YEAR_2019, testConst.YEAR_2050); + res.body.status.should.equal(200); + result.version.should.equal(software.version); + result.apiVersion.should.equal(apiConst.API3_VERSION); + result.srvDate.should.be.within(testConst.YEAR_2019, testConst.YEAR_2050); }); }); diff --git a/tests/api3.create.test.js b/tests/api3.create.test.js index 5ea3ab1a869..5d155f4ecc1 100644 --- a/tests/api3.create.test.js +++ b/tests/api3.create.test.js @@ -29,8 +29,10 @@ describe('API3 CREATE', function() { * Cleanup after successful creation */ self.delete = async function deletePermanent (identifier) { - await self.instance.delete(`${self.url}/${identifier}?permanent=true&token=${self.token.delete}`) - .expect(204); + let res = await self.instance.delete(`${self.url}/${identifier}?permanent=true&token=${self.token.delete}`) + .expect(200); + + res.body.status.should.equal(200); }; @@ -41,7 +43,8 @@ describe('API3 CREATE', function() { let res = await self.instance.get(`${self.url}/${identifier}?token=${self.token.read}`) .expect(200); - return res.body; + res.body.status.should.equal(200); + return res.body.result; }; @@ -52,7 +55,8 @@ describe('API3 CREATE', function() { let res = await self.instance.get(`${self.url}?date$eq=${date}&token=${self.token.read}`) .expect(200); - return res.body; + res.body.status.should.equal(200); + return res.body.result; }; @@ -61,13 +65,15 @@ describe('API3 CREATE', function() { self.app = self.instance.app; self.env = self.instance.env; - self.url = '/api/v3/treatments'; + self.col = 'treatments' + self.url = `/api/v3/${self.col}`; let authResult = await authSubject(self.instance.ctx.authorization.storage); self.subject = authResult.subject; self.token = authResult.token; self.urlToken = `${self.url}?token=${self.token.create}`; + self.cache = self.instance.cacheMonitor; }); @@ -76,6 +82,16 @@ describe('API3 CREATE', function() { }); + beforeEach(() => { + self.cache.clear(); + }); + + + afterEach(() => { + self.cache.shouldBeEmpty(); + }); + + it('should require authentication', async () => { let res = await self.instance.post(`${self.url}`) .send(self.validDoc) @@ -91,7 +107,8 @@ describe('API3 CREATE', function() { .send(self.validDoc) .expect(404); - res.body.should.be.empty(); + res.body.status.should.equal(404); + should.not.exist(res.body.result); }); @@ -106,9 +123,11 @@ describe('API3 CREATE', function() { it('should reject empty body', async () => { - await self.instance.post(self.urlToken) + let res = await self.instance.post(self.urlToken) .send({ }) .expect(400); + + res.body.status.should.equal(400); }); @@ -117,12 +136,16 @@ describe('API3 CREATE', function() { .send(self.validDoc) .expect(201); - res.body.should.be.empty(); + res.body.status.should.equal(201); + res.body.identifier.should.equal(self.validDoc.identifier); res.headers.location.should.equal(`${self.url}/${self.validDoc.identifier}`); + const lastModifiedBody = res.body.lastModified; const lastModified = new Date(res.headers['last-modified']).getTime(); // Last-Modified has trimmed milliseconds let body = await self.get(self.validDoc.identifier); body.should.containEql(self.validDoc); + body.srvModified.should.equal(lastModifiedBody); + self.cache.nextShouldEql(self.col, self.validDoc) const ms = body.srvModified % 1000; (body.srvModified - ms).should.equal(lastModified); @@ -130,6 +153,7 @@ describe('API3 CREATE', function() { body.subject.should.equal(self.subject.apiCreate.name); await self.delete(self.validDoc.identifier); + self.cache.nextShouldDeleteLast(self.col) }); @@ -218,13 +242,18 @@ describe('API3 CREATE', function() { it('should accept valid utcOffset', async () => { + const doc = Object.assign({}, self.validDoc, { utcOffset: 120 }); + await self.instance.post(self.urlToken) - .send(Object.assign({}, self.validDoc, { utcOffset: 120 })) + .send(doc) .expect(201); let body = await self.get(self.validDoc.identifier); body.utcOffset.should.equal(120); + self.cache.nextShouldEql(self.col, doc) + await self.delete(self.validDoc.identifier); + self.cache.nextShouldDeleteLast(self.col) }); @@ -279,7 +308,10 @@ describe('API3 CREATE', function() { let body = await self.get(self.validDoc.identifier); body.date.should.equal(1560146828576); body.utcOffset.should.equal(120); + self.cache.nextShouldEql(self.col, body) + await self.delete(self.validDoc.identifier); + self.cache.nextShouldDeleteLast(self.col) }); @@ -295,6 +327,7 @@ describe('API3 CREATE', function() { let createdBody = await self.get(doc.identifier); createdBody.should.containEql(doc); + self.cache.nextShouldEql(self.col, doc) const doc2 = Object.assign({}, doc); let res = await self.instance.post(self.urlToken) @@ -304,10 +337,11 @@ describe('API3 CREATE', function() { res.body.status.should.equal(403); res.body.message.should.equal('Missing permission api:treatments:update'); await self.delete(doc.identifier); + self.cache.nextShouldDeleteLast(self.col) }); - it('should deduplicate document by identifier', async () => { + it('should upsert document (matched by identifier)', async () => { self.validDoc.date = (new Date()).getTime(); self.validDoc.identifier = utils.randomString('32', 'aA#'); @@ -319,19 +353,24 @@ describe('API3 CREATE', function() { let createdBody = await self.get(doc.identifier); createdBody.should.containEql(doc); + self.cache.nextShouldEql(self.col, doc) const doc2 = Object.assign({}, doc, { insulin: 0.5 }); - await self.instance.post(`${self.url}?token=${self.token.all}`) + let resPost2 = await self.instance.post(`${self.url}?token=${self.token.all}`) .send(doc2) - .expect(204); + .expect(200); + + resPost2.body.status.should.equal(200); let updatedBody = await self.get(doc2.identifier); updatedBody.should.containEql(doc2); + self.cache.nextShouldEql(self.col, doc2) await self.delete(doc2.identifier); + self.cache.nextShouldDeleteLast(self.col) }); @@ -339,29 +378,43 @@ describe('API3 CREATE', function() { self.validDoc.date = (new Date()).getTime(); self.validDoc.identifier = utils.randomString('32', 'aA#'); - const doc = Object.assign({}, self.validDoc, { - created_at: new Date(self.validDoc.date).toISOString() + const doc = Object.assign({}, self.validDoc, { + created_at: new Date(self.validDoc.date).toISOString() }); delete doc.identifier; - self.instance.ctx.treatments.create([doc], async (err) => { // let's insert the document in APIv1's way - should.not.exist(err); + await new Promise((resolve, reject) => { + self.instance.ctx.treatments.create([doc], async (err) => { // let's insert the document in APIv1's way + should.not.exist(err); + doc._id = doc._id.toString(); + self.cache.nextShouldEql(self.col, doc) - const doc2 = Object.assign({}, doc, { - insulin: 0.4, - identifier: utils.randomString('32', 'aA#') + err ? reject(err) : resolve(doc); }); - delete doc2._id; // APIv1 updates input document, we must get rid of _id for the next round + }); + + const doc2 = Object.assign({}, doc, { + insulin: 0.4, + identifier: utils.randomString('32', 'aA#') + }); + delete doc2._id; // APIv1 updates input document, we must get rid of _id for the next round - await self.instance.post(`${self.url}?token=${self.token.all}`) - .send(doc2) - .expect(204); + const resPost2 = await self.instance.post(`${self.url}?token=${self.token.all}`) + .send(doc2) + .expect(200); - let updatedBody = await self.get(doc2.identifier); - updatedBody.should.containEql(doc2); + resPost2.body.status.should.equal(200); + resPost2.body.identifier.should.equal(doc2.identifier); + resPost2.body.isDeduplication.should.equal(true); + // doc (first document) was created "the old way" without identifier, so _id becomes the identifier for doc + resPost2.body.deduplicatedIdentifier.should.equal(doc._id); - await self.delete(doc2.identifier); - }); + let updatedBody = await self.get(doc2.identifier); + updatedBody.should.containEql(doc2); + self.cache.nextShouldEql(self.col, doc2) + + await self.delete(doc2.identifier); + self.cache.nextShouldDeleteLast(self.col) }); @@ -369,67 +422,89 @@ describe('API3 CREATE', function() { self.validDoc.date = (new Date()).getTime(); self.validDoc.identifier = utils.randomString('32', 'aA#'); - const doc = Object.assign({}, self.validDoc, { - created_at: new Date(self.validDoc.date).toISOString() + const doc = Object.assign({}, self.validDoc, { + created_at: new Date(self.validDoc.date).toISOString() }); delete doc.identifier; - self.instance.ctx.treatments.create([doc], async (err) => { // let's insert the document in APIv1's way - should.not.exist(err); + await new Promise((resolve, reject) => { + self.instance.ctx.treatments.create([doc], async (err) => { // let's insert the document in APIv1's way + should.not.exist(err); + doc._id = doc._id.toString(); - let oldBody = await self.get(doc._id); - delete doc._id; // APIv1 updates input document, we must get rid of _id for the next round - oldBody.should.containEql(doc); - - const doc2 = Object.assign({}, doc, { - eventType: 'Meal Bolus', - insulin: 0.4, - identifier: utils.randomString('32', 'aA#') + self.cache.nextShouldEql(self.col, doc) + err ? reject(err) : resolve(doc); }); + }); - await self.instance.post(`${self.url}?token=${self.token.all}`) - .send(doc2) - .expect(201); - - let updatedBody = await self.get(doc2.identifier); - updatedBody.should.containEql(doc2); - updatedBody.identifier.should.not.equal(oldBody.identifier); + const oldBody = await self.get(doc._id); + delete doc._id; // APIv1 updates input document, we must get rid of _id for the next round + oldBody.should.containEql(doc); - await self.delete(doc2.identifier); - await self.delete(oldBody.identifier); + const doc2 = Object.assign({}, doc, { + eventType: 'Meal Bolus', + insulin: 0.4, + identifier: utils.randomString('32', 'aA#') }); + + await self.instance.post(`${self.url}?token=${self.token.all}`) + .send(doc2) + .expect(201); + + let updatedBody = await self.get(doc2.identifier); + updatedBody.should.containEql(doc2); + updatedBody.identifier.should.not.equal(oldBody.identifier); + should.not.exist(updatedBody.isDeduplication); + should.not.exist(updatedBody.deduplicatedIdentifier); + self.cache.nextShouldEql(self.col, doc2) + + await self.delete(doc2.identifier); + self.cache.nextShouldDeleteLast(self.col) + + await self.delete(oldBody.identifier); + self.cache.nextShouldDeleteLast(self.col) }); it('should overwrite deleted document', async () => { const date1 = new Date() - , identifier = utils.randomString('32', 'aA#'); + , identifier = utils.randomString('32', 'aA#') + , doc = Object.assign({}, self.validDoc, { identifier, date: date1.toISOString() }); await self.instance.post(self.urlToken) - .send(Object.assign({}, self.validDoc, { identifier, date: date1.toISOString() })) + .send(doc) .expect(201); + self.cache.nextShouldEql(self.col, Object.assign({}, doc, { date: date1.getTime() })); - await self.instance.delete(`${self.url}/${identifier}?token=${self.token.delete}`) - .expect(204); + let res = await self.instance.delete(`${self.url}/${identifier}?token=${self.token.delete}`) + .expect(200); + res.body.status.should.equal(200); + self.cache.nextShouldDeleteLast(self.col) const date2 = new Date(); - let res = await self.instance.post(self.urlToken) + res = await self.instance.post(self.urlToken) .send(Object.assign({}, self.validDoc, { identifier, date: date2.toISOString() })) .expect(403); - res.body.status.should.be.equal(403); - res.body.message.should.be.equal('Missing permission api:treatments:update'); + res.body.status.should.equal(403); + res.body.message.should.equal('Missing permission api:treatments:update'); + self.cache.shouldBeEmpty() + const doc2 = Object.assign({}, self.validDoc, { identifier, date: date2.toISOString() }); res = await self.instance.post(`${self.url}?token=${self.token.all}`) - .send(Object.assign({}, self.validDoc, { identifier, date: date2.toISOString() })) - .expect(204); + .send(doc2) + .expect(200); - res.body.should.be.empty(); + res.body.status.should.equal(200); + res.body.identifier.should.equal(identifier); + self.cache.nextShouldEql(self.col, Object.assign({}, doc2, { date: date2.getTime() })); let body = await self.get(identifier); body.date.should.equal(date2.getTime()); body.identifier.should.equal(identifier); + await self.delete(identifier); + self.cache.nextShouldDeleteLast(self.col) }); @@ -442,13 +517,17 @@ describe('API3 CREATE', function() { .send(self.validDoc) .expect(201); - res.body.should.be.empty(); + res.body.status.should.equal(201); + res.body.identifier.should.equal(validIdentifier); res.headers.location.should.equal(`${self.url}/${validIdentifier}`); self.validDoc.identifier = validIdentifier; let body = await self.get(validIdentifier); body.should.containEql(self.validDoc); + self.cache.nextShouldEql(self.col, self.validDoc); + await self.delete(validIdentifier); + self.cache.nextShouldDeleteLast(self.col) }); @@ -461,26 +540,33 @@ describe('API3 CREATE', function() { .send(self.validDoc) .expect(201); - res.body.should.be.empty(); + res.body.status.should.equal(201); + res.body.identifier.should.equal(validIdentifier); res.headers.location.should.equal(`${self.url}/${validIdentifier}`); self.validDoc.identifier = validIdentifier; let body = await self.get(validIdentifier); body.should.containEql(self.validDoc); + self.cache.nextShouldEql(self.col, self.validDoc); delete self.validDoc.identifier; res = await self.instance.post(`${self.url}?token=${self.token.update}`) .send(self.validDoc) - .expect(204); + .expect(200); - res.body.should.be.empty(); + res.body.status.should.equal(200); + res.body.identifier.should.equal(validIdentifier); + res.body.isDeduplication.should.equal(true); + should.not.exist(res.body.deduplicatedIdentifier); // no identifier change occured res.headers.location.should.equal(`${self.url}/${validIdentifier}`); self.validDoc.identifier = validIdentifier; + self.cache.nextShouldEql(self.col, self.validDoc); body = await self.search(self.validDoc.date); body.length.should.equal(1); await self.delete(validIdentifier); + self.cache.nextShouldDeleteLast(self.col) }); }); diff --git a/tests/api3.delete.test.js b/tests/api3.delete.test.js index 7cee15410a0..fb15754ed9d 100644 --- a/tests/api3.delete.test.js +++ b/tests/api3.delete.test.js @@ -24,6 +24,7 @@ describe('API3 UPDATE', function() { self.subject = authResult.subject; self.token = authResult.token; self.urlToken = `${self.url}?token=${self.token.delete}`; + self.cache = self.instance.cacheMonitor; }); @@ -32,6 +33,16 @@ describe('API3 UPDATE', function() { }); + beforeEach(() => { + self.cache.clear(); + }); + + + afterEach(() => { + self.cache.shouldBeEmpty(); + }); + + it('should require authentication', async () => { let res = await self.instance.delete(`${self.url}/FAKE_IDENTIFIER`) .expect(401); @@ -46,7 +57,7 @@ describe('API3 UPDATE', function() { .send(self.validDoc) .expect(404); - res.body.should.be.empty(); + res.body.status.should.equal(404); }); }); diff --git a/tests/api3.generic.workflow.test.js b/tests/api3.generic.workflow.test.js index 7cfbc53f618..a4888505fe8 100644 --- a/tests/api3.generic.workflow.test.js +++ b/tests/api3.generic.workflow.test.js @@ -31,7 +31,8 @@ describe('Generic REST API3', function() { self.app = self.instance.app; self.env = self.instance.env; - self.urlCol = '/api/v3/treatments'; + self.col = 'treatments'; + self.urlCol = `/api/v3/${self.col}`; self.urlResource = self.urlCol + '/' + self.identifier; self.urlHistory = self.urlCol + '/history'; @@ -40,6 +41,7 @@ describe('Generic REST API3', function() { self.subject = authResult.subject; self.token = authResult.token; self.urlToken = `${self.url}?token=${self.token.create}`; + self.cache = self.instance.cacheMonitor; }); @@ -48,13 +50,24 @@ describe('Generic REST API3', function() { }); + beforeEach(() => { + self.cache.clear(); + }); + + + afterEach(() => { + self.cache.shouldBeEmpty(); + }); + + self.checkHistoryExistence = async function checkHistoryExistence (assertions) { let res = await self.instance.get(`${self.urlHistory}/${self.historyTimestamp}?token=${self.token.read}`) .expect(200); - res.body.length.should.be.above(0); - res.body.should.matchAny(value => { + res.body.status.should.equal(200); + res.body.result.length.should.be.above(0); + res.body.result.should.matchAny(value => { value.identifier.should.be.eql(self.identifier); value.srvModified.should.be.above(self.historyTimestamp); @@ -71,9 +84,10 @@ describe('Generic REST API3', function() { let res = await self.instance.get(`${self.urlLastModified}?token=${self.token.read}`) .expect(200); - self.historyTimestamp = res.body.collections.treatments; + res.body.status.should.equal(200); + self.historyTimestamp = res.body.result.collections.treatments; if (!self.historyTimestamp) { - self.historyTimestamp = res.body.srvDate - (10 * 60 * 1000); + self.historyTimestamp = res.body.result.srvDate - (10 * 60 * 1000); } self.historyTimestamp.should.be.aboveOrEqual(testConst.YEAR_2019); }); @@ -83,7 +97,8 @@ describe('Generic REST API3', function() { let res = await self.instance.get(`/api/v3/status?token=${self.token.read}`) .expect(200); - self.historyTimestamp = res.body.srvDate; + res.body.status.should.equal(200); + self.historyTimestamp = res.body.result.srvDate; self.historyTimestamp.should.be.aboveOrEqual(testConst.YEAR_2019); }); @@ -99,7 +114,8 @@ describe('Generic REST API3', function() { .query({ 'identifier_eq': self.identifier }) .expect(200); - res.body.should.have.length(0); + res.body.status.should.equal(200); + res.body.result.should.have.length(0); }); @@ -113,6 +129,8 @@ describe('Generic REST API3', function() { await self.instance.post(`${self.urlCol}?token=${self.token.create}`) .send(self.docOriginal) .expect(201); + + self.cache.nextShouldEql(self.col, self.docOriginal) }); @@ -120,8 +138,9 @@ describe('Generic REST API3', function() { let res = await self.instance.get(`${self.urlResource}?token=${self.token.read}`) .expect(200); - res.body.should.containEql(self.docOriginal); - self.docActual = res.body; + res.body.status.should.equal(200); + res.body.result.should.containEql(self.docOriginal); + self.docActual = res.body.result; if (self.historyTimestamp >= self.docActual.srvModified) { self.historyTimestamp = self.docActual.srvModified - 1; @@ -134,8 +153,9 @@ describe('Generic REST API3', function() { .query({ 'identifier$eq': self.identifier }) .expect(200); - res.body.length.should.be.above(0); - res.body.should.matchAny(value => { + res.body.status.should.equal(200); + res.body.result.length.should.be.above(0); + res.body.result.should.matchAny(value => { value.identifier.should.be.eql(self.identifier); }); }); @@ -149,26 +169,31 @@ describe('Generic REST API3', function() { it('UPDATE document', async () => { self.docActual.insulin = 0.5; - await self.instance.put(`${self.urlResource}?token=${self.token.update}`) + let res = await self.instance.put(`${self.urlResource}?token=${self.token.update}`) .send(self.docActual) - .expect(204); + .expect(200); + res.body.status.should.equal(200); self.docActual.subject = self.subject.apiUpdate.name; + delete self.docActual.srvModified; + + self.cache.nextShouldEql(self.col, self.docActual) }); it('document changed in HISTORY', async () => { await self.checkHistoryExistence(); - }); + }); + - it('document changed in READ', async () => { let res = await self.instance.get(`${self.urlResource}?token=${self.token.read}`) .expect(200); + res.body.status.should.equal(200); delete self.docActual.srvModified; - res.body.should.containEql(self.docActual); - self.docActual = res.body; + res.body.result.should.containEql(self.docActual); + self.docActual = res.body.result; }); @@ -176,30 +201,39 @@ describe('Generic REST API3', function() { self.docActual.carbs = 5; self.docActual.insulin = 0.4; - await self.instance.patch(`${self.urlResource}?token=${self.token.update}`) + let res = await self.instance.patch(`${self.urlResource}?token=${self.token.update}`) .send({ 'carbs': self.docActual.carbs, 'insulin': self.docActual.insulin }) - .expect(204); + .expect(200); + + res.body.status.should.equal(200); + delete self.docActual.srvModified; + + self.cache.nextShouldEql(self.col, self.docActual) }); it('document changed in HISTORY', async () => { await self.checkHistoryExistence(); - }); + }); + - it('document changed in READ', async () => { let res = await self.instance.get(`${self.urlResource}?token=${self.token.read}`) .expect(200); + res.body.status.should.equal(200); delete self.docActual.srvModified; - res.body.should.containEql(self.docActual); - self.docActual = res.body; + res.body.result.should.containEql(self.docActual); + self.docActual = res.body.result; }); it('soft DELETE', async () => { - await self.instance.delete(`${self.urlResource}?token=${self.token.delete}`) - .expect(204); + let res = await self.instance.delete(`${self.urlResource}?token=${self.token.delete}`) + .expect(200); + + res.body.status.should.equal(200); + self.cache.nextShouldDeleteLast(self.col) }); @@ -215,21 +249,25 @@ describe('Generic REST API3', function() { .query({ 'identifier_eq': self.identifier }) .expect(200); - res.body.should.have.length(0); + res.body.status.should.equal(200); + res.body.result.should.have.length(0); }); - + it('document deleted in HISTORY', async () => { await self.checkHistoryExistence(value => { value.isValid.should.be.eql(false); }); - }); - + }); + it('permanent DELETE', async () => { - await self.instance.delete(`${self.urlResource}?token=${self.token.delete}`) + let res = await self.instance.delete(`${self.urlResource}?token=${self.token.delete}`) .query({ 'permanent': 'true' }) - .expect(204); + .expect(200); + + res.body.status.should.equal(200); + self.cache.nextShouldDeleteLast(self.col) }); @@ -242,13 +280,10 @@ describe('Generic REST API3', function() { it('document permanently deleted not in HISTORY', async () => { let res = await self.instance.get(`${self.urlHistory}/${self.historyTimestamp}?token=${self.token.read}`); - if (res.status === 200) { - res.body.should.matchEach(value => { - value.identifier.should.not.be.eql(self.identifier); - }); - } else { - res.status.should.equal(204); - } + res.body.status.should.equal(200); + res.body.result.should.matchEach(value => { + value.identifier.should.not.be.eql(self.identifier); + }); }); @@ -260,10 +295,14 @@ describe('Generic REST API3', function() { let res = await self.instance.get(`${self.urlResource}?token=${self.token.read}`) .expect(200); - self.docActual = res.body; + res.body.status.should.equal(200); + self.docActual = res.body.result; delete self.docActual.srvModified; const readOnlyMessage = 'Trying to modify read-only document'; + self.cache.nextShouldEql(self.col, self.docActual) + self.cache.shouldBeEmpty() + res = await self.instance.post(`${self.urlCol}?token=${self.token.update}`) .send(Object.assign({}, self.docActual, { insulin: 0.41 })) .expect(422); @@ -286,7 +325,8 @@ describe('Generic REST API3', function() { res = await self.instance.get(`${self.urlResource}?token=${self.token.read}`) .expect(200); - res.body.should.containEql(self.docOriginal); + res.body.status.should.equal(200); + res.body.result.should.containEql(self.docOriginal); }); }); diff --git a/tests/api3.patch.test.js b/tests/api3.patch.test.js index 36dccc94bfa..8bf13a68f4f 100644 --- a/tests/api3.patch.test.js +++ b/tests/api3.patch.test.js @@ -20,7 +20,7 @@ describe('API3 PATCH', function() { insulin: 0.3 }; self.validDoc.identifier = opTools.calculateIdentifier(self.validDoc); - + self.timeout(15000); @@ -31,7 +31,8 @@ describe('API3 PATCH', function() { let res = await self.instance.get(`${self.url}/${identifier}?token=${self.token.read}`) .expect(200); - return res.body; + res.body.status.should.equal(200); + return res.body.result; }; @@ -40,13 +41,15 @@ describe('API3 PATCH', function() { self.app = self.instance.app; self.env = self.instance.env; - self.url = '/api/v3/treatments'; + self.col = 'treatments'; + self.url = `/api/v3/${self.col}`; let authResult = await authSubject(self.instance.ctx.authorization.storage); self.subject = authResult.subject; self.token = authResult.token; self.urlToken = `${self.url}/${self.validDoc.identifier}?token=${self.token.update}`; + self.cache = self.instance.cacheMonitor; }); @@ -55,6 +58,16 @@ describe('API3 PATCH', function() { }); + beforeEach(() => { + self.cache.clear(); + }); + + + afterEach(() => { + self.cache.shouldBeEmpty(); + }); + + it('should require authentication', async () => { let res = await self.instance.patch(`${self.url}/FAKE_IDENTIFIER`) .expect(401); @@ -69,7 +82,7 @@ describe('API3 PATCH', function() { .send(self.validDoc) .expect(404); - res.body.should.be.empty(); + res.body.status.should.equal(404); }); @@ -78,14 +91,15 @@ describe('API3 PATCH', function() { .send(self.validDoc) .expect(404); - res.body.should.be.empty(); + res.body.status.should.equal(404); // now let's insert the document for further patching res = await self.instance.post(`${self.url}?token=${self.token.create}`) .send(self.validDoc) .expect(201); - res.body.should.be.empty(); + res.body.status.should.equal(201); + self.cache.nextShouldEql(self.col, self.validDoc) }); @@ -204,15 +218,17 @@ describe('API3 PATCH', function() { let res = await self.instance.patch(self.urlToken) .send(self.validDoc) - .expect(204); + .expect(200); - res.body.should.be.empty(); + res.body.status.should.equal(200); let body = await self.get(self.validDoc.identifier); body.carbs.should.equal(10); body.insulin.should.equal(0.3); body.subject.should.equal(self.subject.apiCreate.name); body.modifiedBy.should.equal(self.subject.apiUpdate.name); + + self.cache.nextShouldEql(self.col, body) }); }); diff --git a/tests/api3.read.test.js b/tests/api3.read.test.js index d9f73ebf13a..7a330769f7c 100644 --- a/tests/api3.read.test.js +++ b/tests/api3.read.test.js @@ -4,13 +4,13 @@ require('should'); -describe('API3 READ', function() { +describe('API3 READ', function () { const self = this , testConst = require('./fixtures/api3/const.json') , instance = require('./fixtures/api3/instance') , authSubject = require('./fixtures/api3/authSubject') , opTools = require('../lib/api3/shared/operationTools') - ; + ; self.validDoc = { date: (new Date()).getTime(), @@ -28,12 +28,14 @@ describe('API3 READ', function() { self.app = self.instance.app; self.env = self.instance.env; - self.url = '/api/v3/devicestatus'; + self.col = 'devicestatus'; + self.url = `/api/v3/${self.col}`; let authResult = await authSubject(self.instance.ctx.authorization.storage); self.subject = authResult.subject; self.token = authResult.token; + self.cache = self.instance.cacheMonitor; }); @@ -42,6 +44,16 @@ describe('API3 READ', function() { }); + beforeEach(() => { + self.cache.clear(); + }); + + + afterEach(() => { + self.cache.shouldBeEmpty(); + }); + + it('should require authentication', async () => { let res = await self.instance.get(`${self.url}/FAKE_IDENTIFIER`) .expect(401); @@ -56,13 +68,19 @@ describe('API3 READ', function() { .send(self.validDoc) .expect(404); - res.body.should.be.empty(); + res.body.status.should.equal(404); + should.not.exist(res.body.result); + self.cache.shouldBeEmpty() }); it('should not found not existing document', async () => { - await self.instance.get(`${self.url}/${self.validDoc.identifier}?token=${self.token.read}`) + let res = await self.instance.get(`${self.url}/${self.validDoc.identifier}?token=${self.token.read}`) .expect(404); + + res.body.status.should.equal(404); + should.not.exist(res.body.result); + self.cache.shouldBeEmpty() }); @@ -71,16 +89,20 @@ describe('API3 READ', function() { .send(self.validDoc) .expect(201); - res.body.should.be.empty(); + res.body.status.should.equal(201); res = await self.instance.get(`${self.url}/${self.validDoc.identifier}?token=${self.token.read}`) .expect(200); - res.body.should.containEql(self.validDoc); - res.body.should.have.property('srvCreated').which.is.a.Number(); - res.body.should.have.property('srvModified').which.is.a.Number(); - res.body.should.have.property('subject'); - self.validDoc.subject = res.body.subject; // let's store subject for later tests + res.body.status.should.equal(200); + const result = res.body.result; + result.should.containEql(self.validDoc); + result.should.have.property('srvCreated').which.is.a.Number(); + result.should.have.property('srvModified').which.is.a.Number(); + result.should.have.property('subject'); + self.validDoc.subject = result.subject; // let's store subject for later tests + + self.cache.nextShouldEql(self.col, self.validDoc) }); @@ -88,12 +110,13 @@ describe('API3 READ', function() { let res = await self.instance.get(`${self.url}/${self.validDoc.identifier}?fields=date,device,subject&token=${self.token.read}`) .expect(200); + res.body.status.should.equal(200); const correct = { date: self.validDoc.date, device: self.validDoc.device, subject: self.validDoc.subject }; - res.body.should.eql(correct); + res.body.result.should.eql(correct); }); @@ -101,8 +124,9 @@ describe('API3 READ', function() { let res = await self.instance.get(`${self.url}/${self.validDoc.identifier}?fields=_all&token=${self.token.read}`) .expect(200); + res.body.status.should.equal(200); for (let fieldName of ['app', 'date', 'device', 'identifier', 'srvModified', 'uploaderBattery', 'subject']) { - res.body.should.have.property(fieldName); + res.body.result.should.have.property(fieldName); } }); @@ -121,60 +145,76 @@ describe('API3 READ', function() { .set('If-Modified-Since', new Date(new Date(self.validDoc.date).getTime() - 1000).toUTCString()) .expect(200); - res.body.should.containEql(self.validDoc); + res.body.status.should.equal(200); + res.body.result.should.containEql(self.validDoc); }); it('should recognize softly deleted document', async () => { let res = await self.instance.delete(`${self.url}/${self.validDoc.identifier}?token=${self.token.delete}`) - .expect(204); + .expect(200); - res.body.should.be.empty(); + res.body.status.should.equal(200); + self.cache.nextShouldDeleteLast(self.col) res = await self.instance.get(`${self.url}/${self.validDoc.identifier}?token=${self.token.read}`) .expect(410); - res.body.should.be.empty(); + res.body.status.should.equal(410); + should.not.exist(res.body.result); }); - it('should not found permanently deleted document', async () => { + it('should not find permanently deleted document', async () => { let res = await self.instance.delete(`${self.url}/${self.validDoc.identifier}?permanent=true&token=${self.token.delete}`) - .expect(204); + .expect(200); - res.body.should.be.empty(); + res.body.status.should.equal(200); + self.cache.nextShouldDeleteLast(self.col) res = await self.instance.get(`${self.url}/${self.validDoc.identifier}?token=${self.token.read}`) .expect(404); - res.body.should.be.empty(); + res.body.status.should.equal(404); + should.not.exist(res.body.result); }); - it('should found document created by APIv1', async () => { + it('should find document created by APIv1', async () => { - const doc = Object.assign({}, self.validDoc, { - created_at: new Date(self.validDoc.date).toISOString() + const doc = Object.assign({}, self.validDoc, { + created_at: new Date(self.validDoc.date).toISOString() }); delete doc.identifier; - self.instance.ctx.devicestatus.create([doc], async (err) => { // let's insert the document in APIv1's way - should.not.exist(err); - const identifier = doc._id.toString(); - delete doc._id; + await new Promise((resolve, reject) => { + self.instance.ctx.devicestatus.create([doc], async (err) => { // let's insert the document in APIv1's way + + should.not.exist(err); + doc._id = doc._id.toString(); + self.cache.nextShouldEql(self.col, doc) - let res = await self.instance.get(`${self.url}/${identifier}?token=${self.token.read}`) - .expect(200); + err ? reject(err) : resolve(doc); + }); + }); - res.body.should.containEql(doc); + const identifier = doc._id.toString(); + delete doc._id; - res = await self.instance.delete(`${self.url}/${identifier}?permanent=true&token=${self.token.delete}`) - .expect(204); + let res = await self.instance.get(`${self.url}/${identifier}?token=${self.token.read}`) + .expect(200); - res.body.should.be.empty(); - }); + res.body.status.should.equal(200); + res.body.result.should.containEql(doc); + + res = await self.instance.delete(`${self.url}/${identifier}?permanent=true&token=${self.token.delete}`) + .expect(200); + + res.body.status.should.equal(200); + self.cache.nextShouldDeleteLast(self.col) }); -}); +}) +; diff --git a/tests/api3.renderer.test.js b/tests/api3.renderer.test.js index 70401897025..d897cf96306 100644 --- a/tests/api3.renderer.test.js +++ b/tests/api3.renderer.test.js @@ -41,12 +41,14 @@ describe('API3 output renderers', function() { self.app = self.instance.app; self.env = self.instance.env; - self.url = '/api/v3/entries'; + self.col = 'entries'; + self.url = `/api/v3/${self.col}`; let authResult = await authSubject(self.instance.ctx.authorization.storage); self.subject = authResult.subject; self.token = authResult.token; + self.cache = self.instance.cacheMonitor; }); @@ -55,6 +57,16 @@ describe('API3 output renderers', function() { }); + beforeEach(() => { + self.cache.clear(); + }); + + + afterEach(() => { + self.cache.shouldBeEmpty(); + }); + + /** * Checks if all properties from obj1 are string identical in obj2 * (comparison of properties is made using toString()) @@ -131,7 +143,7 @@ describe('API3 output renderers', function() { .send(doc) .expect(201); - res.body.should.be.empty(); + res.body.status.should.equal(201); res = await self.instance.get(`${self.url}/${doc.identifier}?token=${self.token.read}`) .expect(200); @@ -139,7 +151,10 @@ describe('API3 output renderers', function() { } self.doc1json = await createDoc(self.doc1); + self.cache.nextShouldEql(self.col, self.doc1) + self.doc2json = await createDoc(self.doc2); + self.cache.nextShouldEql(self.col, self.doc2) }); @@ -148,7 +163,9 @@ describe('API3 output renderers', function() { async function check406 (request) { const res = await request .expect(406); + res.status.should.equal(406); res.body.message.should.eql('Unsupported output format requested'); + should.not.exist(res.body.result); } await check406(self.instance.get(`${self.url}/${self.doc1.identifier}.ttf?fields=_all&token=${self.token.read}`)); @@ -256,9 +273,12 @@ describe('API3 output renderers', function() { it('should remove mock documents', async () => { async function deleteDoc (identifier) { - await self.instance.delete(`${self.url}/${identifier}?token=${self.token.delete}`) + let res = await self.instance.delete(`${self.url}/${identifier}?token=${self.token.delete}`) .query({ 'permanent': 'true' }) - .expect(204); + .expect(200); + + res.body.status.should.equal(200); + self.cache.nextShouldDeleteLast(self.col); } await deleteDoc(self.doc1.identifier); diff --git a/tests/api3.search.test.js b/tests/api3.search.test.js index af109a18451..d504bdb7937 100644 --- a/tests/api3.search.test.js +++ b/tests/api3.search.test.js @@ -75,6 +75,7 @@ describe('API3 SEARCH', function() { res.body.status.should.equal(401); res.body.message.should.equal('Missing or bad access token or JWT'); + should.not.exist(res.body.result); }); @@ -83,7 +84,8 @@ describe('API3 SEARCH', function() { .send(self.validDoc) .expect(404); - res.body.should.be.empty(); + res.body.status.should.equal(404); + should.not.exist(res.body.result); }); @@ -91,7 +93,8 @@ describe('API3 SEARCH', function() { let res = await self.instance.get(self.urlToken) .expect(200); - res.body.length.should.be.aboveOrEqual(self.docs.length); + res.body.status.should.equal(200); + res.body.result.length.should.be.aboveOrEqual(self.docs.length); }); @@ -99,7 +102,8 @@ describe('API3 SEARCH', function() { let res = await self.instance.get(self.urlTest) .expect(200); - res.body.length.should.be.aboveOrEqual(self.docs.length); + res.body.status.should.equal(200); + res.body.result.length.should.be.aboveOrEqual(self.docs.length); }); @@ -107,8 +111,9 @@ describe('API3 SEARCH', function() { let res = await self.instance.get(`${self.urlToken}&limit=INVALID`) .expect(400); - res.body.status.should.be.equal(400); - res.body.message.should.be.equal('Parameter limit out of tolerance'); + res.body.status.should.equal(400); + res.body.message.should.equal('Parameter limit out of tolerance'); + should.not.exist(res.body.result); }); @@ -116,8 +121,9 @@ describe('API3 SEARCH', function() { let res = await self.instance.get(`${self.urlToken}&limit=-1`) .expect(400); - res.body.status.should.be.equal(400); - res.body.message.should.be.equal('Parameter limit out of tolerance'); + res.body.status.should.equal(400); + res.body.message.should.equal('Parameter limit out of tolerance'); + should.not.exist(res.body.result); }); @@ -125,8 +131,9 @@ describe('API3 SEARCH', function() { let res = await self.instance.get(`${self.urlToken}&limit=0`) .expect(400); - res.body.status.should.be.equal(400); - res.body.message.should.be.equal('Parameter limit out of tolerance'); + res.body.status.should.equal(400); + res.body.message.should.equal('Parameter limit out of tolerance'); + should.not.exist(res.body.result); }); @@ -134,7 +141,8 @@ describe('API3 SEARCH', function() { let res = await self.instance.get(`${self.urlToken}&limit=3`) .expect(200); - res.body.length.should.be.equal(3); + res.body.status.should.equal(200); + res.body.result.length.should.equal(3); }); @@ -142,8 +150,9 @@ describe('API3 SEARCH', function() { let res = await self.instance.get(`${self.urlToken}&skip=INVALID`) .expect(400); - res.body.status.should.be.equal(400); - res.body.message.should.be.equal('Parameter skip out of tolerance'); + res.body.status.should.equal(400); + res.body.message.should.equal('Parameter skip out of tolerance'); + should.not.exist(res.body.result); }); @@ -151,8 +160,9 @@ describe('API3 SEARCH', function() { let res = await self.instance.get(`${self.urlToken}&skip=-5`) .expect(400); - res.body.status.should.be.equal(400); - res.body.message.should.be.equal('Parameter skip out of tolerance'); + res.body.status.should.equal(400); + res.body.message.should.equal('Parameter skip out of tolerance'); + should.not.exist(res.body.result); }); @@ -160,8 +170,9 @@ describe('API3 SEARCH', function() { let res = await self.instance.get(`${self.urlToken}&sort=date&sort$desc=created_at`) .expect(400); - res.body.status.should.be.equal(400); - res.body.message.should.be.equal('Parameters sort and sort_desc cannot be combined'); + res.body.status.should.equal(400); + res.body.message.should.equal('Parameters sort and sort_desc cannot be combined'); + should.not.exist(res.body.result); }); @@ -169,14 +180,16 @@ describe('API3 SEARCH', function() { let res = await self.instance.get(`${self.urlTest}&sort=date`) .expect(200); - const ascending = res.body; + res.body.status.should.equal(200); + const ascending = res.body.result; const length = ascending.length; length.should.be.aboveOrEqual(self.docs.length); res = await self.instance.get(`${self.urlTest}&sort$desc=date`) .expect(200); - const descending = res.body; + res.body.status.should.equal(200); + const descending = res.body.result; descending.length.should.equal(length); for (let i in ascending) { @@ -193,14 +206,16 @@ describe('API3 SEARCH', function() { let res = await self.instance.get(`${self.urlToken}&sort=date&limit=8`) .expect(200); - const fullDocs = res.body; - fullDocs.length.should.be.equal(8); + res.body.status.should.equal(200); + const fullDocs = res.body.result; + fullDocs.length.should.equal(8); res = await self.instance.get(`${self.urlToken}&sort=date&skip=3&limit=5`) .expect(200); - const skipDocs = res.body; - skipDocs.length.should.be.equal(5); + res.body.status.should.equal(200); + const skipDocs = res.body.result; + skipDocs.length.should.equal(5); for (let i = 0; i < 3; i++) { skipDocs[i].should.be.eql(fullDocs[i + 3]); @@ -212,7 +227,8 @@ describe('API3 SEARCH', function() { let res = await self.instance.get(`${self.urlToken}&fields=date,app,subject`) .expect(200); - res.body.forEach(doc => { + res.body.status.should.equal(200); + res.body.result.forEach(doc => { const docFields = Object.getOwnPropertyNames(doc); docFields.sort().should.be.eql(['app', 'date', 'subject']); }); @@ -223,7 +239,8 @@ describe('API3 SEARCH', function() { let res = await self.instance.get(`${self.urlToken}&fields=_all`) .expect(200); - res.body.forEach(doc => { + res.body.status.should.equal(200); + res.body.result.forEach(doc => { Object.getOwnPropertyNames(doc).length.should.be.aboveOrEqual(10); Object.prototype.hasOwnProperty.call(doc, '_id').should.not.be.true(); Object.prototype.hasOwnProperty.call(doc, 'identifier').should.be.true(); @@ -240,8 +257,8 @@ describe('API3 SEARCH', function() { let res = await self.instance.get(`${self.urlToken}&limit=10`) .expect(400); - res.body.status.should.be.equal(400); - res.body.message.should.be.equal('Parameter limit out of tolerance'); + res.body.status.should.equal(400); + res.body.message.should.equal('Parameter limit out of tolerance'); apiApp.set('API3_MAX_LIMIT', limitBackup); }); @@ -253,7 +270,8 @@ describe('API3 SEARCH', function() { let res = await self.instance.get(`${self.urlToken}`) .expect(200); - res.body.length.should.be.equal(5); + res.body.status.should.equal(200); + res.body.result.length.should.equal(5); apiApp.set('API3_MAX_LIMIT', limitBackup); }); diff --git a/tests/api3.security.test.js b/tests/api3.security.test.js index 0e88e9fae19..df0928ffe9c 100644 --- a/tests/api3.security.test.js +++ b/tests/api3.security.test.js @@ -3,7 +3,6 @@ const request = require('supertest') , apiConst = require('../lib/api3/const.json') - , semver = require('semver') , moment = require('moment') ; require('should'); @@ -33,91 +32,6 @@ describe('Security of REST API3', function() { }); - it('should require HTTPS', async () => { - if (semver.gte(process.version, '10.0.0')) { - let res = await request(self.http.baseUrl) // hangs on 8.x.x (no reason why) - .get('/api/v3/test') - .expect(403); - - res.body.status.should.equal(403); - res.body.message.should.equal(apiConst.MSG.HTTP_403_NOT_USING_HTTPS); - } - }); - - - it('should require Date header', async () => { - let res = await request(self.https.baseUrl) - .get('/api/v3/test') - .expect(401); - - res.body.status.should.equal(401); - res.body.message.should.equal(apiConst.MSG.HTTP_401_MISSING_DATE); - }); - - - it('should validate Date header syntax', async () => { - let res = await request(self.https.baseUrl) - .get('/api/v3/test') - .set('Date', 'invalid date header') - .expect(401); - - res.body.status.should.equal(401); - res.body.message.should.equal(apiConst.MSG.HTTP_401_BAD_DATE); - }); - - - it('should reject Date header out of tolerance', async () => { - const oldDate = new Date((new Date() * 1) - 2 * 3600 * 1000) - , futureDate = new Date((new Date() * 1) + 2 * 3600 * 1000); - - let res = await request(self.https.baseUrl) - .get('/api/v3/test') - .set('Date', oldDate.toUTCString()) - .expect(401); - - res.body.status.should.equal(401); - res.body.message.should.equal(apiConst.MSG.HTTP_401_DATE_OUT_OF_TOLERANCE); - - res = await request(self.https.baseUrl) - .get('/api/v3/test') - .set('Date',futureDate.toUTCString()) - .expect(401); - - res.body.status.should.equal(401); - res.body.message.should.equal(apiConst.MSG.HTTP_401_DATE_OUT_OF_TOLERANCE); - }); - - - it('should reject invalid now ABC', async () => { - let res = await request(self.https.baseUrl) - .get(`/api/v3/test?now=ABC`) - .expect(401); - - res.body.status.should.equal(401); - res.body.message.should.equal('Bad Date header'); - }); - - - it('should reject invalid now -1', async () => { - let res = await request(self.https.baseUrl) - .get(`/api/v3/test?now=-1`) - .expect(401); - - res.body.status.should.equal(401); - res.body.message.should.equal('Bad Date header'); - }); - - - it('should reject invalid now - illegal format', async () => { - let res = await request(self.https.baseUrl) - .get(`/api/v3/test?now=2019-20-60T50:90:90`) - .expect(401); - - res.body.status.should.equal(401); - res.body.message.should.equal('Bad Date header'); - }); - - it('should require token', async () => { let res = await request(self.https.baseUrl) .get('/api/v3/test') @@ -164,8 +78,8 @@ describe('Security of REST API3', function() { .get(`/api/v3/test?token=${self.token.read}&now=${moment().valueOf()}`) .expect(200); }); - - + + it('should accept valid now - epoch in seconds', async () => { await request(self.https.baseUrl) .get(`/api/v3/test?token=${self.token.read}&now=${moment().unix()}`) @@ -186,4 +100,4 @@ describe('Security of REST API3', function() { .expect(200); }); -}); \ No newline at end of file +}); diff --git a/tests/api3.socket.test.js b/tests/api3.socket.test.js index 9560c200c65..8c63486bba1 100644 --- a/tests/api3.socket.test.js +++ b/tests/api3.socket.test.js @@ -128,7 +128,7 @@ describe('Socket.IO in REST API3', function() { self.instance.put(`${self.urlResource}?token=${self.token.update}`) .send(self.docActual) - .expect(204) + .expect(200) .end((err) => { should.not.exist(err); self.docActual.subject = self.subject.apiUpdate.name; @@ -152,7 +152,7 @@ describe('Socket.IO in REST API3', function() { self.instance.patch(`${self.urlResource}?token=${self.token.update}`) .send({ 'carbs': self.docActual.carbs, 'insulin': self.docActual.insulin }) - .expect(204) + .expect(200) .end((err) => { should.not.exist(err); }); @@ -168,7 +168,7 @@ describe('Socket.IO in REST API3', function() { }); self.instance.delete(`${self.urlResource}?token=${self.token.delete}`) - .expect(204) + .expect(200) .end((err) => { should.not.exist(err); }); diff --git a/tests/api3.update.test.js b/tests/api3.update.test.js index 481827b05d6..7c28dbb2205 100644 --- a/tests/api3.update.test.js +++ b/tests/api3.update.test.js @@ -21,7 +21,7 @@ describe('API3 UPDATE', function() { eventType: 'Correction Bolus', insulin: 0.3 }; - + self.timeout(15000); @@ -32,7 +32,8 @@ describe('API3 UPDATE', function() { let res = await self.instance.get(`${self.url}/${identifier}?token=${self.token.read}`) .expect(200); - return res.body; + res.body.status.should.equal(200); + return res.body.result; }; @@ -41,13 +42,15 @@ describe('API3 UPDATE', function() { self.app = self.instance.app; self.env = self.instance.env; - self.url = '/api/v3/treatments'; + self.col = 'treatments' + self.url = `/api/v3/${self.col}`; let authResult = await authSubject(self.instance.ctx.authorization.storage); self.subject = authResult.subject; self.token = authResult.token; self.urlToken = `${self.url}/${self.validDoc.identifier}?token=${self.token.update}` + self.cache = self.instance.cacheMonitor; }); @@ -56,6 +59,16 @@ describe('API3 UPDATE', function() { }); + beforeEach(() => { + self.cache.clear(); + }); + + + afterEach(() => { + self.cache.shouldBeEmpty(); + }); + + it('should require authentication', async () => { let res = await self.instance.put(`${self.url}/FAKE_IDENTIFIER`) .expect(401); @@ -70,7 +83,7 @@ describe('API3 UPDATE', function() { .send(self.validDoc) .expect(404); - res.body.should.be.empty(); + res.body.status.should.equal(404); }); @@ -89,7 +102,9 @@ describe('API3 UPDATE', function() { .send(self.validDoc) .expect(201); - res.body.should.be.empty(); + res.body.status.should.equal(201); + res.body.identifier.should.equal(self.validDoc.identifier); + self.cache.nextShouldEql(self.col, self.validDoc) const lastModified = new Date(res.headers['last-modified']).getTime(); // Last-Modified has trimmed milliseconds @@ -110,9 +125,10 @@ describe('API3 UPDATE', function() { let res = await self.instance.put(self.urlToken) .send(self.validDoc) - .expect(204); + .expect(200); - res.body.should.be.empty(); + res.body.status.should.equal(200); + self.cache.nextShouldEql(self.col, self.validDoc) const lastModified = new Date(res.headers['last-modified']).getTime(); // Last-Modified has trimmed milliseconds @@ -134,9 +150,10 @@ describe('API3 UPDATE', function() { let res = await self.instance.put(self.urlToken) .set('If-Unmodified-Since', new Date(new Date().getTime() + 1000).toUTCString()) .send(doc) - .expect(204); + .expect(200); - res.body.should.be.empty(); + res.body.status.should.equal(200); + self.cache.nextShouldEql(self.col, doc) let body = await self.get(self.validDoc.identifier); body.should.containEql(doc); @@ -155,7 +172,7 @@ describe('API3 UPDATE', function() { .send(doc) .expect(412); - res.body.should.be.empty(); + res.body.status.should.equal(412); body = await self.get(doc.identifier); body.should.eql(self.validDoc); @@ -267,23 +284,26 @@ describe('API3 UPDATE', function() { let res = await self.instance.put(self.urlToken) .send(Object.assign({}, self.validDoc, { identifier: 'MODIFIED' })) - .expect(204); + .expect(200); - res.body.should.be.empty(); + res.body.status.should.equal(200); + delete self.validDoc.srvModified; + self.cache.nextShouldEql(self.col, self.validDoc) }); it('should not update deleted document', async () => { let res = await self.instance.delete(`${self.url}/${self.validDoc.identifier}?token=${self.token.delete}`) - .expect(204); + .expect(200); - res.body.should.be.empty(); + res.body.status.should.equal(200); + self.cache.nextShouldDeleteLast(self.col) res = await self.instance.put(self.urlToken) .send(self.validDoc) .expect(410); - res.body.should.be.empty(); + res.body.status.should.equal(410); }); }); diff --git a/tests/ar2.test.js b/tests/ar2.test.js index 01f4f3d41a1..91ae4353841 100644 --- a/tests/ar2.test.js +++ b/tests/ar2.test.js @@ -1,15 +1,17 @@ 'use strict'; -var should = require('should'); -var levels = require('../lib/levels'); +const should = require('should'); +const levels = require('../lib/levels'); +const fs = require('fs'); -var FIVE_MINS = 300000; -var SIX_MINS = 360000; +const FIVE_MINS = 300000; +const SIX_MINS = 360000; describe('ar2', function ( ) { var ctx = { settings: {} - , language: require('../lib/language')() + , language: require('../lib/language')(fs) + , levels: levels }; ctx.ddata = require('../lib/data/ddata')(); ctx.notifications = require('../lib/notifications')(env, ctx); @@ -18,7 +20,7 @@ describe('ar2', function ( ) { var ar2 = require('../lib/plugins/ar2')(ctx); var bgnow = require('../lib/plugins/bgnow')(ctx); - var env = require('../env')(); + var env = require('../lib/server/env')(); var now = Date.now(); var before = now - FIVE_MINS; @@ -40,7 +42,7 @@ describe('ar2', function ( ) { it('should plot a line if coneFactor is 0', function () { ctx.ddata.sgvs = [{mgdl: 100, mills: before}, {mgdl: 105, mills: now}]; - var env0 = require('../env')(); + var env0 = require('../lib/server/env')(); env0.extendedSettings = { ar2: { coneFactor: 0 } }; var sbx = require('../lib/sandbox')().serverInit(env0, ctx).withExtendedSettings(ar2); bgnow.setProperties(sbx); diff --git a/tests/basalprofileplugin.test.js b/tests/basalprofileplugin.test.js index fa97f84274e..59b14463e04 100644 --- a/tests/basalprofileplugin.test.js +++ b/tests/basalprofileplugin.test.js @@ -1,14 +1,15 @@ -var should = require('should'); +const should = require('should'); +const fs = require('fs'); +const language = require('../lib/language')(fs); describe('basalprofile', function ( ) { var sandbox = require('../lib/sandbox')(); - var env = require('../env')(); + var env = require('../lib/server/env')(); var ctx = { settings: {} - , language: require('../lib/language')() + , language: language }; - ctx.language.set('en'); ctx.ddata = require('../lib/data/ddata')(); ctx.notifications = require('../lib/notifications')(env, ctx); @@ -64,12 +65,11 @@ describe('basalprofile', function ( ) { done(); } } - , language: require('../lib/language')() + , language: language }; var time = new Date('2015-06-21T00:00:00+00:00').getTime(); - var sbx = sandbox.clientInit(ctx, time, data); sbx.data.profile = profile; basal.setProperties(sbx); @@ -83,12 +83,11 @@ describe('basalprofile', function ( ) { var ctx = { settings: {} , pluginBase: { } - , language: require('../lib/language')() + , language: language }; var time = new Date('2015-06-21T00:00:00+00:00').getTime(); - var sbx = sandbox.clientInit(ctx, time, data); sbx.data.profile = profile; diff --git a/tests/bgnow.test.js b/tests/bgnow.test.js index c87e513c48d..b9c97e0a304 100644 --- a/tests/bgnow.test.js +++ b/tests/bgnow.test.js @@ -15,7 +15,7 @@ describe('BG Now', function ( ) { ctx.levels = require('../lib/levels'); var bgnow = require('../lib/plugins/bgnow')(ctx); - var sandbox = require('../lib/sandbox')(); + var sandbox = require('../lib/sandbox')(ctx); var now = Date.now(); var before = now - FIVE_MINS; diff --git a/tests/boluswizardpreview.test.js b/tests/boluswizardpreview.test.js index 8f494c147b3..6cc4127e19b 100644 --- a/tests/boluswizardpreview.test.js +++ b/tests/boluswizardpreview.test.js @@ -3,12 +3,13 @@ var Stream = require('stream'); var levels = require('../lib/levels'); describe('boluswizardpreview', function ( ) { - var env = require('../env')(); + var env = require('../lib/server/env')(); env.testMode = true; var ctx = { settings: {} , language: require('../lib/language')() + , levels: levels }; ctx.ddata = require('../lib/data/ddata')(); ctx.notifications = require('../lib/notifications')(env, ctx); diff --git a/tests/cannulaage.test.js b/tests/cannulaage.test.js index 63cf417e5fa..b9108b044c7 100644 --- a/tests/cannulaage.test.js +++ b/tests/cannulaage.test.js @@ -4,14 +4,15 @@ require('should'); var levels = require('../lib/levels'); describe('cage', function ( ) { - var env = require('../env')(); + var env = require('../lib/server/env')(); var ctx = {}; ctx.ddata = require('../lib/data/ddata')(); ctx.notifications = require('../lib/notifications')(env, ctx); ctx.language = require('../lib/language')(); + ctx.levels = levels; var cage = require('../lib/plugins/cannulaage')(ctx); - var sandbox = require('../lib/sandbox')(); + var sandbox = require('../lib/sandbox')(ctx); function prepareSandbox ( ) { var sbx = require('../lib/sandbox')().serverInit(env, ctx); sbx.offerProperty('iob', function () { diff --git a/tests/careportal.test.js b/tests/careportal.test.js index 36f48d3a5a4..1da34673535 100644 --- a/tests/careportal.test.js +++ b/tests/careportal.test.js @@ -2,8 +2,6 @@ require('should'); var benv = require('benv'); -var read = require('fs').readFileSync; -var serverSettings = require('./fixtures/default-server-settings'); var nowData = { sgvs: [ @@ -12,44 +10,54 @@ var nowData = { , treatments: [] }; -describe('client', function ( ) { - this.timeout(30000); // TODO: see why this test takes longer on Travis to complete +function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); +} - var self = this; +describe('careportal', function ( ) { + this.timeout(60000); // TODO: see why this test takes longer on Travis to complete var headless = require('./fixtures/headless')(benv, this); before(function (done) { - done( ); - }); - after(function (done) { - done( ); - }); + const t = Date.now(); + console.log('Starting headless setup for Careportal test'); + + function d () { + console.log('Done called by headless', Date.now() - t ); + done(); + } - beforeEach(function (done) { - headless.setup({mockAjax: true}, done); + headless.setup({mockAjax: true}, d); + console.log('Headless setup for Careportal test done'); }); - afterEach(function (done) { + after(function (done) { headless.teardown( ); done( ); }); - it ('open careportal, and enter a treatment', function (done) { + it ('open careportal, and enter a treatment', async () =>{ + + console.log('Careportal test client start'); - var client = window.Nightscout.client; + var client = window.Nightscout.client; - var hashauth = require('../lib/hashauth'); + var hashauth = require('../lib/client/hashauth'); hashauth.init(client,$); hashauth.verifyAuthentication = function mockVerifyAuthentication(next) { hashauth.authenticated = true; next(true); }; - + console.log('Careportal test client init'); client.init(); + sleep(50); + + console.log('Careportal test client data update'); client.dataUpdate(nowData, true); + sleep(50); client.careportal.prepareEvents(); @@ -82,11 +90,12 @@ describe('client', function ( ) { return true; }; - window.alert = function mockAlert() {}; + window.alert = function mockAlert(messages) { messages.should.equal(''); }; + console.log('Careportal test saving'); + client.careportal.save(); - done(); }); }); diff --git a/ci.test.env b/tests/ci.test.env similarity index 100% rename from ci.test.env rename to tests/ci.test.env diff --git a/tests/cob.test.js b/tests/cob.test.js index 54fbcb6c50d..2da45861550 100644 --- a/tests/cob.test.js +++ b/tests/cob.test.js @@ -1,19 +1,21 @@ 'use strict'; -var _ = require('lodash'); +const _ = require('lodash'); +const fs = require('fs'); +const language = require('../lib/language')(fs); require('should'); describe('COB', function ( ) { var ctx = {}; ctx.settings = {}; - ctx.language = require('../lib/language')(); - ctx.language.set('en'); + ctx.language = language; var cob = require('../lib/plugins/cob')(ctx); var profileData = { - sens: 95 + startDate: '2015-06-21' + , sens: 95 , carbratio: 18 , carbs_hr: 30 }; diff --git a/tests/data.calcdelta.test.js b/tests/data.calcdelta.test.js index dedb2430480..164229cc509 100644 --- a/tests/data.calcdelta.test.js +++ b/tests/data.calcdelta.test.js @@ -26,6 +26,16 @@ describe('Data', function ( ) { delta.sgvs.length.should.equal(1); }); + it('should update sgv if changed', function() { + var ddata = require('../lib/data/ddata')(); + ddata.sgvs = [{mgdl: 100, mills: before},{mgdl: 100, mills: now}]; + var newData = ddata.clone(); + newData.sgvs = [{mgdl: 110, mills: before},{mgdl: 100, mills: now}]; + var delta = calcDelta(ddata,newData); + delta.delta.should.equal(true); + delta.sgvs.length.should.equal(1); + }); + it('adding one treatment record should return delta with one treatment', function() { var ddata = require('../lib/data/ddata')(); ddata.treatments = [{_id: 'someid_1', mgdl: 100, mills: before},{_id: 'someid_2', mgdl: 100, mills: now}]; diff --git a/tests/dbsize.test.js b/tests/dbsize.test.js index ce95f8652c0..ce3f373c2c7 100644 --- a/tests/dbsize.test.js +++ b/tests/dbsize.test.js @@ -1,23 +1,29 @@ 'use strict'; +const fs = require('fs'); +const language = require('../lib/language')(fs); +const levels = require('../lib/levels'); require('should'); +var topctx = { + levels: levels +} + describe('Database Size', function() { var dataInRange = { dbstats: { dataSize: 1024 * 1024 * 137, indexSize: 1024 * 1024 * 48, fileSize: 1024 * 1024 * 256 } }; var dataWarn = { dbstats: { dataSize: 1024 * 1024 * 250, indexSize: 1024 * 1024 * 100, fileSize: 1024 * 1024 * 360 } }; var dataUrgent = { dbstats: { dataSize: 1024 * 1024 * 300, indexSize: 1024 * 1024 * 150, fileSize: 1024 * 1024 * 496 } }; - var env = require('../env')(); + var env = require('../lib/server/env')(); it('display database size in range', function(done) { var sandbox = require('../lib/sandbox')(); var ctx = { settings: {} - , language: require('../lib/language')() + , language: language + , levels: levels }; - ctx.language.set('en'); - ctx.levels = require('../lib/levels'); var sbx = sandbox.clientInit(ctx, Date.now(), dataInRange); @@ -40,10 +46,9 @@ describe('Database Size', function() { var sandbox = require('../lib/sandbox')(); var ctx = { settings: {} - , language: require('../lib/language')() + , language: language + , levels: levels }; - ctx.language.set('en'); - ctx.levels = require('../lib/levels'); var sbx = sandbox.clientInit(ctx, Date.now(), dataWarn); @@ -67,10 +72,9 @@ describe('Database Size', function() { var sandbox = require('../lib/sandbox')(); var ctx = { settings: {} - , language: require('../lib/language')() + , language: language + , levels: levels }; - ctx.language.set('en'); - ctx.levels = require('../lib/levels'); var sbx = sandbox.clientInit(ctx, Date.now(), dataUrgent); @@ -93,12 +97,11 @@ describe('Database Size', function() { var sandbox = require('../lib/sandbox')(); var ctx = { settings: {} - , language: require('../lib/language')() - , notifications: require('../lib/notifications')(env, ctx) + , language: language + , notifications: require('../lib/notifications')(env, topctx) + , levels: levels }; ctx.notifications.initRequests(); - ctx.language.set('en'); - ctx.levels = require('../lib/levels'); var sbx = sandbox.clientInit(ctx, Date.now(), dataWarn); sbx.extendedSettings = { 'enableAlerts': 'TRUE' }; @@ -121,12 +124,11 @@ describe('Database Size', function() { var sandbox = require('../lib/sandbox')(); var ctx = { settings: {} - , language: require('../lib/language')() - , notifications: require('../lib/notifications')(env, ctx) + , language: language + , notifications: require('../lib/notifications')(env, topctx) + , levels: levels }; ctx.notifications.initRequests(); - ctx.language.set('en'); - ctx.levels = require('../lib/levels'); var sbx = sandbox.clientInit(ctx, Date.now(), dataUrgent); sbx.extendedSettings = { 'enableAlerts': 'TRUE' }; @@ -156,9 +158,9 @@ describe('Database Size', function() { done(); } } - , language: require('../lib/language')() + , language: language + , levels: levels }; - ctx.language.set('en'); var sandbox = require('../lib/sandbox')(); var sbx = sandbox.clientInit(ctx, Date.now(), dataUrgent); @@ -188,9 +190,9 @@ describe('Database Size', function() { done(); } } - , language: require('../lib/language')() + , language: language + , levels: levels }; - ctx.language.set('en'); var sandbox = require('../lib/sandbox')(); var sbx = sandbox.clientInit(ctx, Date.now(), dataUrgent); @@ -220,9 +222,9 @@ describe('Database Size', function() { done(); } } - , language: require('../lib/language')() + , language: language + , levels: levels }; - ctx.language.set('en'); var sandbox = require('../lib/sandbox')(); var sbx = sandbox.clientInit(ctx, Date.now(), dataInRange); @@ -252,9 +254,9 @@ describe('Database Size', function() { done(); } } - , language: require('../lib/language')() + , language: language + , levels: levels }; - ctx.language.set('en'); var sandbox = require('../lib/sandbox')(); var sbx = sandbox.clientInit(ctx, Date.now(), dataInRange); @@ -274,9 +276,9 @@ describe('Database Size', function() { done(); } } - , language: require('../lib/language')() + , language: language + , levels: levels }; - ctx.language.set('en'); var sandbox = require('../lib/sandbox')(); var sbx = sandbox.clientInit(ctx, Date.now(), {}); @@ -291,9 +293,9 @@ describe('Database Size', function() { var ctx = { settings: {} - , language: require('../lib/language')() + , language: language + , levels: levels }; - ctx.language.set('en'); var sandbox = require('../lib/sandbox')(); var sbx = sandbox.clientInit(ctx, Date.now(), dataUrgent); diff --git a/tests/ddata.test.js b/tests/ddata.test.js index ceb163b7c4f..034847b89a9 100644 --- a/tests/ddata.test.js +++ b/tests/ddata.test.js @@ -6,7 +6,7 @@ var should = require('should'); describe('ddata', function ( ) { // var sandbox = require('../lib/sandbox')(); - // var env = require('../env')(); + // var env = require('../lib/server/env')(); var ctx = {}; ctx.ddata = require('../lib/data/ddata')(); diff --git a/tests/env.test.js b/tests/env.test.js index 7990b470692..0de2a686054 100644 --- a/tests/env.test.js +++ b/tests/env.test.js @@ -7,7 +7,7 @@ describe('env', function () { process.env.SHOW_PLUGINS = 'iob'; process.env.ENABLE = 'iob cob'; - var env = require( '../env' )(); + var env = require( '../lib/server/env' )(); var showPlugins = env.settings.showPlugins; showPlugins.should.containEql( 'iob' ); showPlugins.should.containEql( 'delta' ); @@ -22,7 +22,7 @@ describe('env', function () { process.env.ENABLE = 'scaryplugin'; process.env.SCARYPLUGIN_DO_THING = 'yes'; - var env = require( '../env' )(); + var env = require( '../lib/server/env' )(); env.settings.isEnabled( 'scaryplugin' ).should.equal( true ); //Note the camelCase @@ -35,7 +35,7 @@ describe('env', function () { it( 'add pushover to enable if one of the env vars is set', function () { process.env.PUSHOVER_API_TOKEN = 'abc12345'; - var env = require( '../env' )(); + var env = require( '../lib/server/env' )(); env.settings.enable.should.containEql( 'pushover' ); env.extendedSettings.pushover.apiToken.should.equal( 'abc12345' ); @@ -45,7 +45,7 @@ describe('env', function () { it( 'add pushover to enable if one of the weird azure env vars is set', function () { process.env.CUSTOMCONNSTR_PUSHOVER_API_TOKEN = 'abc12345'; - var env = require( '../env' )(); + var env = require( '../lib/server/env' )(); env.settings.enable.should.containEql( 'pushover' ); env.extendedSettings.pushover.apiToken.should.equal( 'abc12345' ); @@ -54,17 +54,17 @@ describe('env', function () { it( 'readENVTruthy ', function () { process.env.INSECURE_USE_HTTP = 'true'; - var env = require( '../env' )(); + var env = require( '../lib/server/env' )(); env.insecureUseHttp.should.be.true(); process.env.INSECURE_USE_HTTP = 'false'; - env = require( '../env' )(); + env = require( '../lib/server/env' )(); env.insecureUseHttp.should.be.false(); process.env.INSECURE_USE_HTTP = 'not set ok, so use default value false'; - env = require( '../env' )(); + env = require( '../lib/server/env' )(); env.insecureUseHttp.should.be.false(); delete process.env.INSECURE_USE_HTTP; // unset INSECURE_USE_HTTP process.env.SECURE_HSTS_HEADER = 'true'; - env = require( '../env' )(); + env = require( '../lib/server/env' )(); env.insecureUseHttp.should.be.false(); // not defined should be false env.secureHstsHeader.should.be.true(); }); @@ -75,28 +75,28 @@ describe('env', function () { describe ( 'mmol', function () { it( 'mmol => mmol', function () { process.env.DISPLAY_UNITS = MMOL; - var env = require( '../env' )(); + var env = require( '../lib/server/env' )(); env.settings.units.should.equal( MMOL ); delete process.env.DISPLAY_UNITS; } ); it( 'mmol/l => mmol', function () { process.env.DISPLAY_UNITS = 'mmol/l'; - var env = require( '../env' )(); + var env = require( '../lib/server/env' )(); env.settings.units.should.equal( MMOL ); delete process.env.DISPLAY_UNITS; } ); it( 'mmol/L => mmol', function () { process.env.DISPLAY_UNITS = 'mmol/L'; - var env = require( '../env' )(); + var env = require( '../lib/server/env' )(); env.settings.units.should.equal( MMOL ); delete process.env.DISPLAY_UNITS; } ); it( 'MMOL => mmol', function () { process.env.DISPLAY_UNITS = 'MMOL'; - var env = require( '../env' )(); + var env = require( '../lib/server/env' )(); env.settings.units.should.equal( MMOL ); delete process.env.DISPLAY_UNITS; } ); @@ -105,28 +105,28 @@ describe('env', function () { describe ( 'mg/dl', function () { it( 'mg/dl => mg/dl', function () { process.env.DISPLAY_UNITS = MGDL; - var env = require( '../env' )(); + var env = require( '../lib/server/env' )(); env.settings.units.should.equal( MGDL ); delete process.env.DISPLAY_UNITS; } ); it( 'mg/dL => mg/dl', function () { process.env.DISPLAY_UNITS = 'mg/dL'; - var env = require( '../env' )(); + var env = require( '../lib/server/env' )(); env.settings.units.should.equal( MGDL ); delete process.env.DISPLAY_UNITS; } ); it( 'MG/DL => mg/dl', function () { process.env.DISPLAY_UNITS = 'MG/DL'; - var env = require( '../env' )(); + var env = require( '../lib/server/env' )(); env.settings.units.should.equal( MGDL ); delete process.env.DISPLAY_UNITS; } ); it( 'mgdl => mg/dl', function () { process.env.DISPLAY_UNITS = 'mgdl'; - var env = require( '../env' )(); + var env = require( '../lib/server/env' )(); env.settings.units.should.equal( MGDL ); delete process.env.DISPLAY_UNITS; } ); @@ -139,14 +139,14 @@ describe('env', function () { random = [...Array(~~(Math.random()*20)+1)].map(i=>(~~(Math.random()*36)).toString(36)).join(''); process.env.DISPLAY_UNITS = random; - var env = require( '../env' )(); + var env = require( '../lib/server/env' )(); env.settings.units.should.equal( MGDL ); delete process.env.DISPLAY_UNITS; } ); it( ' => mg/dl', function () { delete process.env.DISPLAY_UNITS; - var env = require( '../env' )(); + var env = require( '../lib/server/env' )(); env.settings.units.should.equal( MGDL ); delete process.env.DISPLAY_UNITS; } ); diff --git a/tests/errorcodes.test.js b/tests/errorcodes.test.js index cf6f5d5453a..b8d3617710f 100644 --- a/tests/errorcodes.test.js +++ b/tests/errorcodes.test.js @@ -4,15 +4,15 @@ var levels = require('../lib/levels'); describe('errorcodes', function ( ) { - var errorcodes = require('../lib/plugins/errorcodes')(); - var now = Date.now(); - var env = require('../env')(); + var env = require('../lib/server/env')(); var ctx = {}; ctx.ddata = require('../lib/data/ddata')(); ctx.notifications = require('../lib/notifications')(env, ctx); ctx.language = require('../lib/language')(); + ctx.levels = levels; + var errorcodes = require('../lib/plugins/errorcodes')(ctx); it('Not trigger an alarm when in range', function (done) { ctx.notifications.initRequests(); diff --git a/tests/fixtures/api/instance.js b/tests/fixtures/api/instance.js index ed5b28474c9..45f49185cdf 100644 --- a/tests/fixtures/api/instance.js +++ b/tests/fixtures/api/instance.js @@ -22,7 +22,7 @@ function configure () { process.env.API_SECRET = apiSecret; process.env.HOSTNAME = 'localhost'; - const env = require('../../../env')(); + const env = require('../../../lib/server/env')(); if (useHttps) { env.ssl = { diff --git a/tests/fixtures/api3/authSubject.js b/tests/fixtures/api3/authSubject.js index 6036103b0e5..b81272c3696 100644 --- a/tests/fixtures/api3/authSubject.js +++ b/tests/fixtures/api3/authSubject.js @@ -59,6 +59,8 @@ function createTestSubject (authStorage, subjectName, roles) { async function authSubject (authStorage) { + await createRole(authStorage, 'admin', '*'); + await createRole(authStorage, 'readable', '*:*:read'); await createRole(authStorage, 'apiAll', 'api:*:*'); await createRole(authStorage, 'apiAdmin', 'api:*:admin'); await createRole(authStorage, 'apiCreate', 'api:*:create'); @@ -85,7 +87,9 @@ async function authSubject (authStorage) { read: subject.apiRead.accessToken, update: subject.apiUpdate.accessToken, delete: subject.apiDelete.accessToken, - denied: subject.denied.accessToken + denied: subject.denied.accessToken, + adminAll: subject.admin.accessToken, + readable: subject.readable.accessToken }; return {subject, token}; diff --git a/tests/fixtures/api3/cacheMonitor.js b/tests/fixtures/api3/cacheMonitor.js new file mode 100644 index 00000000000..2c4180b0109 --- /dev/null +++ b/tests/fixtures/api3/cacheMonitor.js @@ -0,0 +1,79 @@ +'use strict'; + +/** + * Cache monitoring mechanism for tracking and checking cache updates. + * @param instance + * @constructor + */ +function CacheMonitor (instance) { + + const self = this; + + let operations = [] + , listening = false; + + instance.ctx.bus.on('data-update', operation => { + if (listening) { + operations.push(operation); + } + }); + + self.listen = () => { + listening = true; + return self; + } + + self.stop = () => { + listening = false; + return self; + } + + self.clear = () => { + operations = []; + return self; + } + + self.shouldBeEmpty = () => { + operations.length.should.equal(0) + } + + self.nextShouldEql = (col, doc) => { + operations.length.should.not.equal(0) + + const operation = operations.shift(); + operation.type.should.equal(col); + operation.op.should.equal('update'); + + if (doc) { + operation.changes.should.be.Array(); + operation.changes.length.should.be.eql(1); + const change = operation.changes[0]; + change.should.containEql(doc); + } + } + + self.nextShouldEqlLast = (col, doc) => { + self.nextShouldEql(col, doc); + self.shouldBeEmpty(); + } + + self.nextShouldDelete = (col, _id) => { + operations.length.should.not.equal(0) + + const operation = operations.shift(); + operation.type.should.equal(col); + operation.op.should.equal('remove'); + + if (_id) { + operation.changes.should.equal(_id); + } + } + + self.nextShouldDeleteLast = (col, _id) => { + self.nextShouldDelete(col, _id); + self.shouldBeEmpty(); + } + +} + +module.exports = CacheMonitor; diff --git a/tests/fixtures/api3/instance.js b/tests/fixtures/api3/instance.js index a7693ab3c40..358b42bb2c2 100644 --- a/tests/fixtures/api3/instance.js +++ b/tests/fixtures/api3/instance.js @@ -8,6 +8,7 @@ var fs = require('fs') , request = require('supertest') , websocket = require('../../../lib/server/websocket') , io = require('socket.io-client') + , CacheMonitor = require('./cacheMonitor') ; function configure () { @@ -24,7 +25,7 @@ function configure () { process.env.API_SECRET = apiSecret; process.env.HOSTNAME = 'localhost'; - const env = require('../../../env')(); + const env = require('../../../lib/server/env')(); if (useHttps) { env.ssl = { @@ -42,18 +43,19 @@ function configure () { self.addSecuredOperations = function addSecuredOperations (instance) { - instance.get = (url) => request(instance.baseUrl).get(url).set('Date', new Date().toUTCString()); + instance.get = (url) => request(instance.baseUrl).get(url); - instance.post = (url) => request(instance.baseUrl).post(url).set('Date', new Date().toUTCString()); + instance.post = (url) => request(instance.baseUrl).post(url); - instance.put = (url) => request(instance.baseUrl).put(url).set('Date', new Date().toUTCString()); + instance.put = (url) => request(instance.baseUrl).put(url); - instance.patch = (url) => request(instance.baseUrl).patch(url).set('Date', new Date().toUTCString()); + instance.patch = (url) => request(instance.baseUrl).patch(url); - instance.delete = (url) => request(instance.baseUrl).delete(url).set('Date', new Date().toUTCString()); + instance.delete = (url) => request(instance.baseUrl).delete(url); }; + self.bindSocket = function bindSocket (storageSocket, instance) { return new Promise(function (resolve, reject) { @@ -88,9 +90,9 @@ function configure () { /* * Create new web server instance for testing purposes */ - self.create = function createHttpServer ({ - apiSecret = 'this is my long pass phrase', - disableSecurity = false, + self.create = function createHttpServer ({ + apiSecret = 'this is my long pass phrase', + disableSecurity = false, useHttps = true, authDefaultRoles = '', enable = ['careportal', 'api'], @@ -129,6 +131,7 @@ function configure () { instance.baseUrl = `${useHttps ? 'https' : 'http'}://${instance.env.HOSTNAME}:${instance.env.PORT}`; self.addSecuredOperations(instance); + instance.cacheMonitor = new CacheMonitor(instance).listen(); websocket(instance.env, instance.ctx, instance.server); @@ -160,4 +163,4 @@ function configure () { return self; } -module.exports = configure(); \ No newline at end of file +module.exports = configure(); diff --git a/tests/fixtures/headless.js b/tests/fixtures/headless.js index 7706d5a8b0b..a3ad66b2424 100644 --- a/tests/fixtures/headless.js +++ b/tests/fixtures/headless.js @@ -9,26 +9,37 @@ function headless (benv, binding) { } function init (opts, callback) { + var localStorage = opts.localStorage || './localstorage'; + const t = Date.now(); + + console.log('Headless init'); + var htmlFile = opts.htmlFile || __dirname + '/../../views/index.html'; var serverSettings = opts.serverSettings || require('./default-server-settings'); var someData = opts.mockAjax || { }; + + console.log('Entering setup', Date.now() - t); + benv.setup(function() { - - benv.require(__dirname + '/../../tmp/js/bundle.report.js'); - - self.$ = $; + + console.log('Setting up benv', Date.now() - t); + + benv.require(__dirname + '/../../tmp/public/js/bundle.app.js'); - self.localCookieStorage = self.localStorage = self.$.localStorage = require('./localstorage'); + console.log('Bundle loaded', Date.now() - t); - //self.$ = require('jquery'); - //self.$.localStorage = require(localStorage); + self.$ = $; + + self.localCookieStorage = self.localStorage = self.$.localStorage = require(localStorage); self.$.fn.tooltip = function mockTooltip ( ) { }; var indexHtml = read(htmlFile, 'utf8'); self.$('body').html(indexHtml); + console.log('HTML set', Date.now() - t); + var d3 = require('d3'); //disable all d3 transitions so most of the other code can run with jsdom d3.timer = function mockTimer() { }; @@ -124,6 +135,7 @@ function headless (benv, binding) { }; } + console.log('Benv expose', Date.now() - t); benv.expose({ $: self.$ diff --git a/tests/hashauth.test.js b/tests/hashauth.test.js index 011ca689d10..287b2c45e70 100644 --- a/tests/hashauth.test.js +++ b/tests/hashauth.test.js @@ -16,6 +16,8 @@ describe('hashauth', function ( ) { }); after(function (done) { + // cleanup js-storage as it evaluates if the test is running in the window or not when first required + delete require.cache[require.resolve('js-storage')]; done( ); }); @@ -66,7 +68,7 @@ describe('hashauth', function ( ) { it ('should make module unauthorized', function () { var client = require('../lib/client'); - var hashauth = require('../lib/hashauth'); + var hashauth = require('../lib/client/hashauth'); hashauth.init(client,$); hashauth.verifyAuthentication = function mockVerifyAuthentication(next) { @@ -84,7 +86,7 @@ describe('hashauth', function ( ) { it ('should make module authorized', function () { var client = require('../lib/client'); - var hashauth = require('../lib/hashauth'); + var hashauth = require('../lib/client/hashauth'); hashauth.init(client,$); hashauth.verifyAuthentication = function mockVerifyAuthentication(next) { @@ -100,7 +102,7 @@ describe('hashauth', function ( ) { it ('should store hash and the remove authentication', function () { var client = require('../lib/client'); - var hashauth = require('../lib/hashauth'); + var hashauth = require('../lib/client/hashauth'); var localStorage = require('./fixtures/localstorage'); localStorage.remove('apisecrethash'); @@ -126,7 +128,7 @@ describe('hashauth', function ( ) { it ('should not store hash', function () { var client = require('../lib/client'); - var hashauth = require('../lib/hashauth'); + var hashauth = require('../lib/client/hashauth'); var localStorage = require('./fixtures/localstorage'); localStorage.remove('apisecrethash'); @@ -149,7 +151,7 @@ describe('hashauth', function ( ) { it ('should report secret too short', function () { var client = require('../lib/client'); - var hashauth = require('../lib/hashauth'); + var hashauth = require('../lib/client/hashauth'); var localStorage = require('./fixtures/localstorage'); localStorage.remove('apisecrethash'); diff --git a/tests/hooks.js b/tests/hooks.js new file mode 100644 index 00000000000..7f847f778e5 --- /dev/null +++ b/tests/hooks.js @@ -0,0 +1,14 @@ +'use strict;' + +function clearRequireCache () { + Object.keys(require.cache).forEach(function(key) { + delete require.cache[key]; + }); +} + +exports.mochaHooks = { + afterEach (done) { + clearRequireCache(); + done(); + } +}; diff --git a/tests/insulinage.test.js b/tests/insulinage.test.js index 36ca7368c39..b21b54c011d 100644 --- a/tests/insulinage.test.js +++ b/tests/insulinage.test.js @@ -4,14 +4,15 @@ require('should'); var levels = require('../lib/levels'); describe('insulinage', function ( ) { - var env = require('../env')(); + var env = require('../lib/server/env')(); var ctx = {}; + ctx.levels = levels; ctx.ddata = require('../lib/data/ddata')(); ctx.notifications = require('../lib/notifications')(env, ctx); ctx.language = require('../lib/language')(); var iage = require('../lib/plugins/insulinage')(ctx); - var sandbox = require('../lib/sandbox')(); + var sandbox = require('../lib/sandbox')(ctx); function prepareSandbox ( ) { var sbx = require('../lib/sandbox')().serverInit(env, ctx); sbx.offerProperty('iob', function () { diff --git a/tests/iob.test.js b/tests/iob.test.js index 3b92fb8d05a..b44099488c4 100644 --- a/tests/iob.test.js +++ b/tests/iob.test.js @@ -1,12 +1,12 @@ 'use strict'; -var _ = require('lodash'); -var should = require('should'); +const _ = require('lodash'); +const should = require('should'); +const fs = require('fs'); describe('IOB', function() { var ctx = {}; - ctx.language = require('../lib/language')(); - ctx.language.set('en'); + ctx.language = require('../lib/language')(fs); ctx.settings = require('../lib/settings')(); var iob = require('../lib/plugins/iob')(ctx); diff --git a/tests/language.test.js b/tests/language.test.js index fb024b85965..0de87999b4a 100644 --- a/tests/language.test.js +++ b/tests/language.test.js @@ -1,5 +1,7 @@ 'use strict'; +const fs = require('fs'); + require('should'); describe('language', function ( ) { @@ -9,21 +11,32 @@ describe('language', function ( ) { language.translate('Carbs').should.equal('Carbs'); }); + it('replace strings in translations', function () { + var language = require('../lib/language')(); + language.translate('%1 records deleted', '1').should.equal('1 records deleted'); + language.translate('%1 records deleted', 1).should.equal('1 records deleted'); + language.translate('%1 records deleted', {params: ['1']}).should.equal('1 records deleted'); + language.translate('Sensor age %1 days %2 hours', '1', '2').should.equal('Sensor age 1 days 2 hours'); + }); + it('translate to French', function () { var language = require('../lib/language')(); language.set('fr'); + language.loadLocalization(fs); language.translate('Carbs').should.equal('Glucides'); }); it('translate to Czech', function () { var language = require('../lib/language')(); language.set('cs'); + language.loadLocalization(fs); language.translate('Carbs').should.equal('Sacharidy'); }); it('translate to Czech uppercase', function () { var language = require('../lib/language')(); language.set('cs'); + language.loadLocalization(fs); language.translate('carbs', { ci: true }).should.equal('Sacharidy'); }); diff --git a/tests/loop.test.js b/tests/loop.test.js index bfe11d5075c..64f5bc81148 100644 --- a/tests/loop.test.js +++ b/tests/loop.test.js @@ -1,18 +1,21 @@ 'use strict'; -var _ = require('lodash'); -var should = require('should'); -var moment = require('moment'); - -var ctx = { - language: require('../lib/language')() +const _ = require('lodash'); +const should = require('should'); +const moment = require('moment'); +const fs = require('fs'); +const language = require('../lib/language')(fs); +const levels = require('../lib/levels'); + +var ctx_top = { + language: language , settings: require('../lib/settings')() + , levels: levels }; -ctx.language.set('en'); -var env = require('../env')(); -var loop = require('../lib/plugins/loop')(ctx); -var sandbox = require('../lib/sandbox')(); -var levels = require('../lib/levels'); +ctx_top.language.set('en'); +var env = require('../lib/server/env')(); +var loop = require('../lib/plugins/loop')(ctx_top); +var sandbox = require('../lib/sandbox')(ctx_top); var statuses = [ { @@ -130,7 +133,7 @@ describe('loop', function ( ) { done(); } } - , language: require('../lib/language')() + , language: language }; var sbx = sandbox.clientInit(ctx, now.valueOf(), {devicestatus: statuses}); @@ -166,9 +169,9 @@ describe('loop', function ( ) { first.value.should.equal('Error: SomeError'); done(); } - , language: require('../lib/language')() + , language: language }, - language: require('../lib/language')() + language: language }; var errorTime = moment(statuses[1].created_at); @@ -200,8 +203,8 @@ describe('loop', function ( ) { settings: { units: 'mg/dl' } - , notifications: require('../lib/notifications')(env, ctx) - , language: require('../lib/language')() + , notifications: require('../lib/notifications')(env, ctx_top) + , language: language }; ctx.notifications.initRequests(); @@ -227,8 +230,8 @@ describe('loop', function ( ) { settings: { units: 'mg/dl' } - , notifications: require('../lib/notifications')(env, ctx) - , language: require('../lib/language')() + , notifications: require('../lib/notifications')(env, ctx_top) + , language: language }; ctx.notifications.initRequests(); @@ -249,8 +252,8 @@ describe('loop', function ( ) { settings: { units: 'mg/dl' } - , notifications: require('../lib/notifications')(env, ctx) - , language: require('../lib/language')() + , notifications: require('../lib/notifications')(env, ctx_top) + , language: language }; var sbx = sandbox.clientInit(ctx, now.valueOf(), {devicestatus: statuses}); diff --git a/tests/maker.test.js b/tests/maker.test.js index a1256421d8f..42bcdfddab8 100644 --- a/tests/maker.test.js +++ b/tests/maker.test.js @@ -2,7 +2,11 @@ var should = require('should'); var levels = require('../lib/levels'); describe('maker', function ( ) { - var maker = require('../lib/plugins/maker')({extendedSettings: {maker: {key: '12345'}}}); + var maker = require('../lib/plugins/maker')( + { + extendedSettings: {maker: {key: '12345'}} + , levels: levels + }); //prevent any calls to iftt function noOpMakeRequest (key, event, eventName, callback) { diff --git a/tests/mongo-storage.test.js b/tests/mongo-storage.test.js index ee706906ff8..506e54e5441 100644 --- a/tests/mongo-storage.test.js +++ b/tests/mongo-storage.test.js @@ -4,7 +4,7 @@ var should = require('should'); var assert = require('assert'); describe('mongo storage', function () { - var env = require('../env')(); + var env = require('../lib/server/env')(); before(function (done) { delete env.api_secret; diff --git a/tests/notifications-api.test.js b/tests/notifications-api.test.js index 4597aa69bf5..a534f1271fa 100644 --- a/tests/notifications-api.test.js +++ b/tests/notifications-api.test.js @@ -16,8 +16,8 @@ describe('Notifications API', function ( ) { var known = 'b723e97aa97846eb92d5264f084b2823f57c4aa1'; delete process.env.API_SECRET; process.env.API_SECRET = 'this is my long pass phrase'; - var env = require('../env')( ); - env.api_secret.should.equal(known); + var env = require('../lib/server/env')( ); + env.enclave.isApiKey(known).should.equal(true); env.testMode = true; var ctx = { @@ -30,6 +30,7 @@ describe('Notifications API', function ( ) { return { }; } } + , levels: levels }; ctx.authorization = require('../lib/authorization')(env, ctx); @@ -67,7 +68,7 @@ describe('Notifications API', function ( ) { function makeRequest () { request(app) .get('/notifications/ack?level=1') - .set('api-secret', env.api_secret || '') + .set('api-secret', known || '') .expect(200) .end(function (err) { should.not.exist(err); diff --git a/tests/notifications.test.js b/tests/notifications.test.js index 332f057bfaa..054cf4594a7 100644 --- a/tests/notifications.test.js +++ b/tests/notifications.test.js @@ -12,6 +12,7 @@ describe('notifications', function ( ) { , ddata: { lastUpdated: Date.now() } + , levels: levels }; var notifications = require('../lib/notifications')(env, ctx); diff --git a/tests/openaps-storage.test.js b/tests/openaps-storage.test.js index 48c2eb7764d..36714181a40 100644 --- a/tests/openaps-storage.test.js +++ b/tests/openaps-storage.test.js @@ -4,7 +4,7 @@ var should = require('should'); describe('openaps storage', function () { - var env = require('../env')(); + var env = require('../lib/server/env')(); before(function (done) { diff --git a/tests/openaps.test.js b/tests/openaps.test.js index b2e767c8fe2..1e31e934016 100644 --- a/tests/openaps.test.js +++ b/tests/openaps.test.js @@ -1,18 +1,22 @@ 'use strict'; -var _ = require('lodash'); -var should = require('should'); -var moment = require('moment'); +const _ = require('lodash'); +const should = require('should'); +const moment = require('moment'); +const fs = require('fs'); -var ctx = { - language: require('../lib/language')() +const language = require('../lib/language')(fs); + +var top_ctx = { + language: language , settings: require('../lib/settings')() }; -ctx.language.set('en'); -var env = require('../env')(); -var openaps = require('../lib/plugins/openaps')(ctx); -var sandbox = require('../lib/sandbox')(); +top_ctx.language.set('en'); var levels = require('../lib/levels'); +top_ctx.levels = levels; +var env = require('../lib/server/env')(); +var openaps = require('../lib/plugins/openaps')(top_ctx); +var sandbox = require('../lib/sandbox')(top_ctx); var statuses = [{ created_at: '2015-12-05T19:05:00.000Z', @@ -272,7 +276,7 @@ describe('openaps', function ( ) { done(); } } - , language: require('../lib/language')() + , language: language }; var sbx = sandbox.clientInit(ctx, now.valueOf(), {devicestatus: statuses}); @@ -302,8 +306,9 @@ describe('openaps', function ( ) { settings: { units: 'mg/dl' } - , notifications: require('../lib/notifications')(env, ctx) - , language: require('../lib/language')() + , notifications: require('../lib/notifications')(env, top_ctx) + , language: language + , levels: levels }; ctx.notifications.initRequests(); @@ -330,8 +335,8 @@ describe('openaps', function ( ) { settings: { units: 'mg/dl' } - , notifications: require('../lib/notifications')(env, ctx) - , language: require('../lib/language')() + , notifications: require('../lib/notifications')(env, top_ctx) + , language: language }; ctx.notifications.initRequests(); @@ -352,8 +357,8 @@ describe('openaps', function ( ) { settings: { units: 'mg/dl' } - , notifications: require('../lib/notifications')(env, ctx) - , language: require('../lib/language')() + , notifications: require('../lib/notifications')(env, top_ctx) + , language: language }; ctx.notifications.initRequests(); @@ -376,8 +381,8 @@ describe('openaps', function ( ) { settings: { units: 'mg/dl' } - , notifications: require('../lib/notifications')(env, ctx) - , language: require('../lib/language')() + , notifications: require('../lib/notifications')(env, top_ctx) + , language: language }; var sbx = sandbox.clientInit(ctx, now.valueOf(), {devicestatus: statuses}); diff --git a/tests/pebble.test.js b/tests/pebble.test.js index e6e683f78a6..be6e09e9030 100644 --- a/tests/pebble.test.js +++ b/tests/pebble.test.js @@ -86,9 +86,14 @@ ctx.ddata.devicestatus = [{uploader: {battery: 100}}]; var bootevent = require('../lib/server/bootevent'); describe('Pebble Endpoint', function ( ) { + + this.timeout(10000); + var pebble = require('../lib/server/pebble'); before(function (done) { - var env = require('../env')( ); + delete process.env.API_SECRET; + process.env.API_SECRET = 'this is my long pass phrase'; + var env = require('../lib/server/env')( ); env.settings.authDefaultRoles = 'readable'; this.app = require('express')( ); this.app.enable('api'); @@ -223,7 +228,9 @@ describe('Pebble Endpoint', function ( ) { describe('Pebble Endpoint with Raw and IOB and COB', function ( ) { var pebbleRaw = require('../lib/server/pebble'); before(function (done) { - var env = require('../env')( ); + delete process.env.API_SECRET; + process.env.API_SECRET = 'this is my long pass phrase'; + var env = require('../lib/server/env')( ); env.settings.enable = ['rawbg', 'iob', 'cob']; env.settings.authDefaultRoles = 'readable'; this.appRaw = require('express')( ); diff --git a/tests/profileeditor.test.js b/tests/profileeditor.test.js index 42656b511af..c55d9add3ac 100644 --- a/tests/profileeditor.test.js +++ b/tests/profileeditor.test.js @@ -87,7 +87,7 @@ describe('Profile editor', function ( ) { , mockProfileEditor: true , mockAjax: someData , benvRequires: [ - __dirname + '/../static/profile/js/profileeditor.js' + __dirname + '/../static/js/profileinit.js' ] }; headless.setup(opts, done); @@ -101,7 +101,7 @@ describe('Profile editor', function ( ) { it ('should produce some html', function (done) { var client = require('../lib/client'); - var hashauth = require('../lib/hashauth'); + var hashauth = require('../lib/client/hashauth'); hashauth.init(client,$); hashauth.verifyAuthentication = function mockVerifyAuthentication(next) { hashauth.authenticated = true; @@ -117,6 +117,8 @@ describe('Profile editor', function ( ) { return true; }; + window.Nightscout.profileclient(); + client.init(); client.dataUpdate(nowData); diff --git a/tests/pump.test.js b/tests/pump.test.js index d051cbe7163..c2289fddd17 100644 --- a/tests/pump.test.js +++ b/tests/pump.test.js @@ -3,17 +3,20 @@ var _ = require('lodash'); var should = require('should'); var moment = require('moment'); +const fs = require('fs'); +const language = require('../lib/language')(fs); -var ctx = { - language: require('../lib/language')() +var top_ctx = { + language: language , settings: require('../lib/settings')() }; -ctx.language.set('en'); -var env = require('../env')(); -var pump = require('../lib/plugins/pump')(ctx); -var sandbox = require('../lib/sandbox')(); +top_ctx.language.set('en'); +var env = require('../lib/server/env')(); var levels = require('../lib/levels'); -ctx.levels = levels; +var profile = require('../lib/profilefunctions')(); +top_ctx.levels = levels; +var pump = require('../lib/plugins/pump')(top_ctx); +var sandbox = require('../lib/sandbox')(top_ctx); var statuses = [{ created_at: '2015-12-05T17:35:00.000Z' @@ -49,12 +52,58 @@ var statuses = [{ } }]; +var profileData = +{ + 'timezone': moment.tz.guess() +}; + +var statuses2 = [{ + created_at: '2015-12-05T17:35:00.000Z' + , device: 'openaps://farawaypi' + , pump: { + battery: { + status: 'normal', + voltage: 1.52 + }, + status: { + status: 'normal', + bolusing: false, + suspended: false + }, + reservoir: 86.4, + reservoir_display_override: '50+U', + clock: '2015-12-05T17:32:00.000Z' + } +}, { + created_at: '2015-12-05T19:05:00.000Z' + , device: 'openaps://abusypi' + , pump: { + battery: { + status: 'normal', + voltage: 1.52 + }, + status: { + status: 'normal', + bolusing: false, + suspended: false + }, + reservoir: 86.4, + reservoir_display_override: '50+U', + clock: '2015-12-05T19:02:00.000Z' + } +}]; + + var now = moment(statuses[1].created_at); _.forEach(statuses, function updateMills (status) { status.mills = moment(status.created_at).valueOf(); }); +_.forEach(statuses2, function updateMills (status) { + status.mills = moment(status.created_at).valueOf(); +}); + describe('pump', function ( ) { it('set the property and update the pill', function (done) { @@ -69,7 +118,8 @@ describe('pump', function ( ) { done(); } } - , language: require('../lib/language')() + , language: language + , levels: levels }; var sbx = sandbox.clientInit(ctx, now.valueOf(), {devicestatus: statuses}); @@ -89,7 +139,36 @@ describe('pump', function ( ) { }; pump.setProperties(sbx); + pump.updateVisualisation(sbx); + + }); + + it('use reservoir_display_override when available', function (done) { + var ctx = { + settings: { + units: 'mmol' + } + , pluginBase: { + updatePillText: function mockedUpdatePillText(plugin, options) { + options.label.should.equal('Pump'); + options.value.should.equal('50+U'); + done(); + } + } + , language: language + , levels: levels + }; + var sbx = sandbox.clientInit(ctx, now.valueOf(), {devicestatus: statuses2}); + + var unmockedOfferProperty = sbx.offerProperty; + sbx.offerProperty = function mockedOfferProperty (name, setter) { + name.should.equal('pump'); + sbx.offerProperty = unmockedOfferProperty; + unmockedOfferProperty(name, setter); + }; + + pump.setProperties(sbx); pump.updateVisualisation(sbx); }); @@ -99,8 +178,9 @@ describe('pump', function ( ) { settings: { units: 'mg/dl' } - , notifications: require('../lib/notifications')(env, ctx) - , language: require('../lib/language')() + , notifications: require('../lib/notifications')(env, top_ctx) + , language: language + , levels: levels }; ctx.notifications.initRequests(); @@ -108,7 +188,7 @@ describe('pump', function ( ) { var sbx = sandbox.clientInit(ctx, now.valueOf(), { devicestatus: statuses }); - sbx.extendedSettings = { 'enableAlerts': 'TRUE' }; + sbx.extendedSettings = { 'enableAlerts': true }; pump.setProperties(sbx); pump.checkNotifications(sbx); @@ -123,8 +203,9 @@ describe('pump', function ( ) { settings: { units: 'mg/dl' } - , notifications: require('../lib/notifications')(env, ctx) - , language: require('../lib/language')() + , notifications: require('../lib/notifications')(env, top_ctx) + , language: language + , levels: levels }; ctx.notifications.initRequests(); @@ -135,7 +216,7 @@ describe('pump', function ( ) { var sbx = sandbox.clientInit(ctx, now.valueOf(), { devicestatus: lowResStatuses }); - sbx.extendedSettings = { 'enableAlerts': 'TRUE' }; + sbx.extendedSettings = { 'enableAlerts': true }; pump.setProperties(sbx); pump.checkNotifications(sbx); @@ -151,8 +232,9 @@ describe('pump', function ( ) { settings: { units: 'mg/dl' } - , notifications: require('../lib/notifications')(env, ctx) - , language: require('../lib/language')() + , notifications: require('../lib/notifications')(env, top_ctx) + , language: language + , levels: levels }; ctx.notifications.initRequests(); @@ -163,7 +245,7 @@ describe('pump', function ( ) { var sbx = sandbox.clientInit(ctx, now.valueOf(), { devicestatus: lowResStatuses }); - sbx.extendedSettings = { 'enableAlerts': 'TRUE' }; + sbx.extendedSettings = { 'enableAlerts': true }; pump.setProperties(sbx); pump.checkNotifications(sbx); @@ -180,8 +262,9 @@ describe('pump', function ( ) { settings: { units: 'mg/dl' } - , notifications: require('../lib/notifications')(env, ctx) - , language: require('../lib/language')() + , notifications: require('../lib/notifications')(env, top_ctx) + , language: language + , levels: levels }; ctx.notifications.initRequests(); @@ -192,7 +275,7 @@ describe('pump', function ( ) { var sbx = sandbox.clientInit(ctx, now.valueOf(), { devicestatus: lowBattStatuses }); - sbx.extendedSettings = { 'enableAlerts': 'TRUE' }; + sbx.extendedSettings = { 'enableAlerts': true }; pump.setProperties(sbx); pump.checkNotifications(sbx); @@ -208,8 +291,9 @@ describe('pump', function ( ) { settings: { units: 'mg/dl' } - , notifications: require('../lib/notifications')(env, ctx) - , language: require('../lib/language')() + , notifications: require('../lib/notifications')(env, top_ctx) + , language: language + , levels: levels }; ctx.notifications.initRequests(); @@ -220,7 +304,7 @@ describe('pump', function ( ) { var sbx = sandbox.clientInit(ctx, now.valueOf(), { devicestatus: lowBattStatuses }); - sbx.extendedSettings = { 'enableAlerts': 'TRUE' }; + sbx.extendedSettings = { 'enableAlerts': true }; pump.setProperties(sbx); pump.checkNotifications(sbx); @@ -231,13 +315,58 @@ describe('pump', function ( ) { done(); }); - it('not generate an alert for a stale pump data, when there is an offline marker', function (done) { + it('not generate a battery alarm during night when PUMP_WARN_BATT_QUIET_NIGHT is true', function (done) { var ctx = { settings: { units: 'mg/dl' + , dayStart: 24 // Set to 24 so it always evaluates true in test + , dayEnd: 21.0 } - , notifications: require('../lib/notifications')(env, ctx) + , pluginBase: { + updatePillText: function mockedUpdatePillText(plugin, options) { + options.label.should.equal('Pump'); + options.value.should.equal('86.4U'); + done(); + } + } + , notifications: require('../lib/notifications')(env, top_ctx) , language: require('../lib/language')() + , levels: levels + }; + + ctx.notifications.initRequests(); + + var lowBattStatuses = _.cloneDeep(statuses); + lowBattStatuses[1].pump.battery.voltage = 1.00; + + var sbx = sandbox.clientInit(ctx, now.valueOf(), { + devicestatus: lowBattStatuses + , profiles: [profileData] + }); + profile.loadData(_.cloneDeep([profileData])); + sbx.data.profile = profile; + + sbx.extendedSettings = { + enableAlerts: true + , warnBattQuietNight: true + }; + pump.setProperties(sbx); + pump.checkNotifications(sbx); + + var highest = ctx.notifications.findHighestAlarm('Pump'); + should.not.exist(highest); + + done(); + }); + + it('not generate an alert for a stale pump data, when there is an offline marker', function (done) { + var ctx = { + settings: { + units: 'mg/dl' + } + , notifications: require('../lib/notifications')(env, top_ctx) + , language: language + , levels: levels }; ctx.notifications.initRequests(); @@ -246,7 +375,7 @@ describe('pump', function ( ) { devicestatus: statuses , treatments: [{eventType: 'OpenAPS Offline', mills: now.valueOf(), duration: 60}] }); - sbx.extendedSettings = { 'enableAlerts': 'TRUE' }; + sbx.extendedSettings = { 'enableAlerts': true }; pump.setProperties(sbx); pump.checkNotifications(sbx); @@ -260,9 +389,11 @@ describe('pump', function ( ) { settings: { units: 'mg/dl' } - , notifications: require('../lib/notifications')(env, ctx) - , language: require('../lib/language')() + , notifications: require('../lib/notifications')(env, top_ctx) + , language: language + , levels: levels }; + ctx.language.set('en'); var sbx = sandbox.clientInit(ctx, now.valueOf(), {devicestatus: statuses}); pump.setProperties(sbx); diff --git a/tests/pushnotify.test.js b/tests/pushnotify.test.js index 01a3d385f2b..bc7a95720e1 100644 --- a/tests/pushnotify.test.js +++ b/tests/pushnotify.test.js @@ -6,9 +6,10 @@ var levels = require('../lib/levels'); describe('pushnotify', function ( ) { it('send a pushover alarm, but only 1 time', function (done) { - var env = require('../env')(); + var env = require('../lib/server/env')(); var ctx = {}; + ctx.levels = levels; ctx.notifications = require('../lib/notifications')(env, ctx); var notify = { @@ -39,9 +40,9 @@ describe('pushnotify', function ( ) { }); it('send a pushover notification, but only 1 time', function (done) { - var env = require('../env')(); + var env = require('../lib/server/env')(); var ctx = {}; - + ctx.levels = levels; ctx.notifications = require('../lib/notifications')(env, ctx); var notify = { @@ -71,8 +72,9 @@ describe('pushnotify', function ( ) { }); it('send a pushover alarm, and then cancel', function (done) { - var env = require('../env')(); + var env = require('../lib/server/env')(); var ctx = {}; + ctx.levels = levels; ctx.notifications = require('../lib/notifications')(env, ctx); diff --git a/tests/pushover.test.js b/tests/pushover.test.js index 598086e5159..c49cc44cf3a 100644 --- a/tests/pushover.test.js +++ b/tests/pushover.test.js @@ -3,6 +3,10 @@ var should = require('should'); var levels = require('../lib/levels'); +var ctx = { + levels:levels +} + describe('pushover', function ( ) { var baseurl = 'https://nightscout.test'; @@ -17,9 +21,10 @@ describe('pushover', function ( ) { , apiToken: '6789' } } + , levels:levels }; - var pushover = require('../lib/plugins/pushover')(env); + var pushover = require('../lib/plugins/pushover')(env, ctx); it('convert a warning to a message and send it', function (done) { @@ -75,9 +80,10 @@ describe('support legacy pushover groupkey', function ( ) { , apiToken: '6789' } } + , levels: levels }; - var pushover = require('../lib/plugins/pushover')(env); + var pushover = require('../lib/plugins/pushover')(env, ctx); it('send', function (done) { @@ -111,9 +117,10 @@ describe('multi announcement pushover', function ( ) { , apiToken: '6789' } } + , levels: levels }; - var pushover = require('../lib/plugins/pushover')(env); + var pushover = require('../lib/plugins/pushover')(env, ctx); it('send multiple pushes if there are multiple keys', function (done) { @@ -155,9 +162,10 @@ describe('announcement only pushover', function ( ) { , apiToken: '6789' } } + , levels: levels }; - var pushover = require('../lib/plugins/pushover')(env); + var pushover = require('../lib/plugins/pushover')(env, ctx); it('send push if announcement', function (done) { diff --git a/tests/rawbg.test.js b/tests/rawbg.test.js index 48c21186cc5..d581a3d9bf4 100644 --- a/tests/rawbg.test.js +++ b/tests/rawbg.test.js @@ -1,11 +1,12 @@ 'use strict'; require('should'); +const fs = require('fs'); describe('Raw BG', function ( ) { var ctx = { settings: { units: 'mg/dl'} - , language: require('../lib/language')() + , language: require('../lib/language')(fs) , pluginBase: {} }; ctx.language.set('en'); diff --git a/tests/reports.test.js b/tests/reports.test.js index c77f87f2e8f..947eb5e5b03 100644 --- a/tests/reports.test.js +++ b/tests/reports.test.js @@ -191,7 +191,7 @@ describe('reports', function ( ) { , serverSettings: serverSettings , mockSimpleAjax: someData , benvRequires: [ - __dirname + '/../static/report/js/report.js' + __dirname + '/../static/js/reportinit.js' ] }; headless.setup(opts, done); @@ -206,7 +206,7 @@ describe('reports', function ( ) { it ('should produce some html', function (done) { var client = window.Nightscout.client; - var hashauth = require('../lib/hashauth'); + var hashauth = require('../lib/client/hashauth'); hashauth.init(client,$); hashauth.verifyAuthentication = function mockVerifyAuthentication(next) { hashauth.authenticated = true; @@ -220,11 +220,15 @@ describe('reports', function ( ) { window.alert = function mockAlert () { return true; }; - - window.setTimeout = function mockSetTimeout (call) { + + + window.setTimeout = function mockSetTimeout (call, timer) { + if (timer == 60000) return; call(); }; + window.Nightscout.reportclient(); + client.init(function afterInit ( ) { client.dataUpdate(nowData); @@ -258,12 +262,14 @@ describe('reports', function ( ) { $('img.editTreatment:first').click(); $('.ui-button:contains("Save")').click(); - var result = $('body').html(); - //var filesys = require('fs'); - //var logfile = filesys.createWriteStream('out.txt', { flags: 'a'} ) - //logfile.write(result); - //console.log('RESULT', result); + var result = $('body').html(); + /* + var filesys = require('fs'); + var logfile = filesys.createWriteStream('out.txt', { flags: 'a'} ) + logfile.write(result); + console.log('RESULT', result); + */ result.indexOf('Milk now').should.be.greaterThan(-1); // daytoday result.indexOf('50 g').should.be.greaterThan(-1); // daytoday result.indexOf('TDD average: 2.9U').should.be.greaterThan(-1); // daytoday @@ -281,7 +287,7 @@ describe('reports', function ( ) { it ('should produce week to week report', function (done) { var client = window.Nightscout.client; - var hashauth = require('../lib/hashauth'); + var hashauth = require('../lib/client/hashauth'); hashauth.init(client,$); hashauth.verifyAuthentication = function mockVerifyAuthentication(next) { hashauth.authenticated = true; @@ -295,9 +301,10 @@ describe('reports', function ( ) { window.alert = function mockAlert () { return true; }; - - window.setTimeout = function mockSetTimeout (call) { - call(); + + window.setTimeout = function mockSetTimeout (call, timer) { + if (timer == 60000) return; + call(); }; client.init(function afterInit ( ) { @@ -331,5 +338,7 @@ describe('reports', function ( ) { done(); }); + }); + }); diff --git a/tests/reportstorage.test.js b/tests/reportstorage.test.js new file mode 100644 index 00000000000..c422ec1c2dc --- /dev/null +++ b/tests/reportstorage.test.js @@ -0,0 +1,60 @@ +const should = require('should'); +const defaultValues = { + insulin: true, + carbs: true, + basal: true, + notes: false, + food: true, + raw: false, + iob: false, + cob: false, + predicted: false, + openAps: false, + insulindistribution: true, + predictedTruncate: true +}; + +describe('reportstorage unit tests', () => { + let reportstorage, storage, mockStorage; + + beforeEach(() => { + reportstorage = require('../lib/report/reportstorage'); + storage = require('js-storage').localStorage; + mockStorage = require('./fixtures/localstorage'); + storage.get = mockStorage.get; + storage.set = mockStorage.set; + }); + + afterEach(() => { + delete require.cache[require.resolve('js-storage')]; + delete require.cache[require.resolve('./fixtures/localstorage')]; + delete require.cache[require.resolve('../lib/report/reportstorage')]; + }); + + it('reportstorage definition - returns saveProps and getValue function', () => { + reportstorage.should.not.be.undefined(); + (reportstorage.getValue instanceof Function).should.be.true(); + (reportstorage.saveProps instanceof Function).should.be.true(); + }); + + it('reportstorage.getValue returns default properties', () => { + let keyCount = 0; + for (const v in defaultValues) { + reportstorage.getValue(v).should.equal(defaultValues[v]); + keyCount++; + } + keyCount.should.equal(Object.keys(defaultValues).length); + }); + + it('reportstorage.saveProps sets property in localstorage', () => { + reportstorage.saveProps({insulin: false}); + should.exist(mockStorage.get('reportProperties')); + mockStorage.get('reportProperties').insulin.should.be.false(); + }); + + it('reportstorage.saveProps ignores property not tracked', () => { + reportstorage.saveProps({foo: 'bar'}); + should.exist(mockStorage.get('reportProperties')); + should.not.exist(mockStorage.get('reportProperties').foo); + }); +}); diff --git a/tests/sandbox.test.js b/tests/sandbox.test.js index 966589a3129..e6422843c02 100644 --- a/tests/sandbox.test.js +++ b/tests/sandbox.test.js @@ -33,7 +33,7 @@ describe('sandbox', function ( ) { }); function createServerSandbox() { - var env = require('../env')(); + var env = require('../lib/server/env')(); var ctx = {}; ctx.ddata = require('../lib/data/ddata')(); ctx.notifications = require('../lib/notifications')(env, ctx); diff --git a/tests/security.test.js b/tests/security.test.js index 1f182970019..98088a04c18 100644 --- a/tests/security.test.js +++ b/tests/security.test.js @@ -1,12 +1,33 @@ 'use strict'; -var request = require('supertest'); -var should = require('should'); -var language = require('../lib/language')(); +const request = require('supertest'); +const should = require('should'); +const language = require('../lib/language')(); +//const io = require('socket.io-client'); -describe('API_SECRET', function ( ) { +describe('API_SECRET', function() { var api; var scope = this; + var websocket; + var app; + var server; + var listener; + + this.timeout(7000); + + afterEach(function(done) { + if (listener) { + listener.close(done); + } + done(); + }); + + after(function(done) { + if (listener) { + listener.close(done); + } + done(); + }); function setup_app (env, fn) { api = require('../lib/api/'); @@ -18,19 +39,36 @@ describe('API_SECRET', function ( ) { }); } - it('should work fail set unauthorized', function (done) { + function setup_big_app (env, fn) { + api = require('../lib/api/'); + require('../lib/server/bootevent')(env, language).boot(function booted (ctx) { + ctx.app = api(env, ctx); + scope.app = ctx.app; + scope.entries = ctx.entries; + + app = require('../lib/server/app')(env, ctx); + server = require('http').createServer(app); + listener = server.listen(1337, 'localhost'); + websocket = require('../lib/server/websocket')(env, ctx, server); + + fn(ctx); + }); + } + + it('should fail when unauthorized', function(done) { var known = 'b723e97aa97846eb92d5264f084b2823f57c4aa1'; + delete process.env.API_SECRET; process.env.API_SECRET = 'this is my long pass phrase'; - var env = require('../env')( ); - env.api_secret.should.equal(known); - setup_app(env, function (ctx) { - // console.log(this.app.enabled('api')); + var env = require('../lib/server/env')(); + + env.enclave.isApiKey(known).should.equal(true); + + setup_app(env, function(ctx) { ctx.app.enabled('api').should.equal(true); - // ping_status(ctx.app, done); - // ping_authorized_endpoint(ctx.app, 200, done); ping_status(ctx.app, again); - function again ( ) { + + function again () { ctx.app.api_secret = ''; ping_authorized_endpoint(ctx.app, 401, done); } @@ -38,60 +76,103 @@ describe('API_SECRET', function ( ) { }); - - it('should work fine set', function (done) { + it('should work fine set', function(done) { var known = 'b723e97aa97846eb92d5264f084b2823f57c4aa1'; delete process.env.API_SECRET; process.env.API_SECRET = 'this is my long pass phrase'; - var env = require('../env')( ); - env.api_secret.should.equal(known); - setup_app(env, function (ctx) { - // console.log(this.app.enabled('api')); + var env = require('../lib/server/env')(); + env.enclave.isApiKey(known).should.equal(true); + setup_app(env, function(ctx) { ctx.app.enabled('api').should.equal(true); - // ping_status(ctx.app, done); - // ping_authorized_endpoint(ctx.app, 200, done); ping_status(ctx.app, again); - function again ( ) { - ctx.app.api_secret = env.api_secret; + + function again () { + ctx.app.api_secret = known; ping_authorized_endpoint(ctx.app, 200, done); } }); }); - it('should not work short', function ( ) { + it('should not work short', function() { delete process.env.API_SECRET; process.env.API_SECRET = 'tooshort'; - var env = require('../env')( ); + var env = require('../lib/server/env')(); should.not.exist(env.api_secret); - env.err.desc.should.startWith('API_SECRET should be at least'); + env.err[0].desc.should.startWith('API_SECRET should be at least'); }); function ping_status (app, fn) { - request(app) - .get('/status.json') - .expect(200) - .end(function (err, res) { - // console.log(res.body); - res.body.status.should.equal('ok'); - fn( ); - // console.log('err', err, 'res', res); - }); + request(app) + .get('/status.json') + .expect(200) + .end(function(err, res) { + res.body.status.should.equal('ok'); + fn(); + }); } function ping_authorized_endpoint (app, fails, fn) { - request(app) - .get('/experiments/test') - .set('api-secret', app.api_secret || '') - .expect(fails) - .end(function (err, res) { - if (fails < 400) { - res.body.status.should.equal('ok'); - } - fn( ); - // console.log('err', err, 'res', res); - }); + request(app) + .get('/experiments/test') + .set('api-secret', app.api_secret || '') + .expect(fails) + .end(function(err, res) { + if (fails < 400) { + res.body.status.should.equal('ok'); + } + fn(); + }); } -}); + /* + it('socket IO should connect', function(done) { + + var known = 'b723e97aa97846eb92d5264f084b2823f57c4aa1'; + process.env.API_SECRET = 'this is my long pass phrase'; + var env = require('../lib/server/env')(); + + setup_big_app(env, function(ctx) { + + const socket2 = io.connect('ws://localhost:1337/'); + + socket2.on('connect', function() { + console.log('Socket 2 authorizing'); + socket2.emit("authorize", { + secret: known + }); + }); + + socket2.on('disconnect', function() { + //socket.emit("authorize"); + console.log('Client 2 disconnected'); + done(); + }); + + socket2.on('connected', function(msg) { + console.log('Connected'); + // Disconnect both client connections + socket2.disconnect(); + + const socket = io.connect('ws://localhost:1337/'); + + socket.on('connect', function() { + console.log('Socket 1 authorizing'); + socket.emit("authorize"); + }); + + socket.on('disconnect', function() { + //socket.emit("authorize"); + console.log('Client 1 disconnected'); + done(); + }); + + }); + + }); + + }); + */ + +}); diff --git a/tests/sensorage.test.js b/tests/sensorage.test.js index 2c7548598a4..11a6953cb37 100644 --- a/tests/sensorage.test.js +++ b/tests/sensorage.test.js @@ -5,8 +5,9 @@ var times = require('../lib/times'); var levels = require('../lib/levels'); describe('sage', function ( ) { - var env = require('../env')(); + var env = require('../lib/server/env')(); var ctx = {}; + ctx.levels = levels; ctx.ddata = require('../lib/data/ddata')(); ctx.notifications = require('../lib/notifications')(env, ctx); ctx.language = require('../lib/language')(); diff --git a/tests/simplealarms.test.js b/tests/simplealarms.test.js index e12b36241b4..eb72210da4d 100644 --- a/tests/simplealarms.test.js +++ b/tests/simplealarms.test.js @@ -2,14 +2,15 @@ var should = require('should'); var levels = require('../lib/levels'); describe('simplealarms', function ( ) { - - var simplealarms = require('../lib/plugins/simplealarms')(); - - var env = require('../env')(); + var env = require('../lib/server/env')(); var ctx = { settings: {} , language: require('../lib/language')() + , levels: levels }; + + var simplealarms = require('../lib/plugins/simplealarms')(ctx); + ctx.ddata = require('../lib/data/ddata')(); ctx.notifications = require('../lib/notifications')(env, ctx); var bgnow = require('../lib/plugins/bgnow')(ctx); diff --git a/tests/timeago.test.js b/tests/timeago.test.js index 66306a3d154..e7fc56904ec 100644 --- a/tests/timeago.test.js +++ b/tests/timeago.test.js @@ -4,6 +4,7 @@ var times = require('../lib/times'); describe('timeago', function() { var ctx = {}; + ctx.levels = levels; ctx.ddata = require('../lib/data/ddata')(); ctx.notifications = require('../lib/notifications')(env, ctx); ctx.language = require('../lib/language')(); @@ -12,7 +13,7 @@ describe('timeago', function() { var timeago = require('../lib/plugins/timeago')(ctx); - var env = require('../env')(); + var env = require('../lib/server/env')(); function freshSBX () { //set extendedSettings right before calling withExtendedSettings, there's some strange test interference here diff --git a/tests/treatmentnotify.test.js b/tests/treatmentnotify.test.js index e9bc8abbd46..7507410aaeb 100644 --- a/tests/treatmentnotify.test.js +++ b/tests/treatmentnotify.test.js @@ -4,15 +4,15 @@ var levels = require('../lib/levels'); describe('treatmentnotify', function ( ) { - var treatmentnotify = require('../lib/plugins/treatmentnotify')(); - - var env = require('../env')(); + var env = require('../lib/server/env')(); var ctx = {}; ctx.ddata = require('../lib/data/ddata')(); ctx.notifications = require('../lib/notifications')(env, ctx); ctx.levels = levels; ctx.language = require('../lib/language')().set('en'); + var treatmentnotify = require('../lib/plugins/treatmentnotify')(ctx); + var now = Date.now(); it('Request a snooze for a recent treatment and request an info notify', function (done) { diff --git a/tests/upbat.test.js b/tests/upbat.test.js index 42d18bb0854..e81d11fa5ca 100644 --- a/tests/upbat.test.js +++ b/tests/upbat.test.js @@ -1,18 +1,21 @@ 'use strict'; require('should'); +const fs = require('fs'); + +var levels = require('../lib/levels'); describe('Uploader Battery', function ( ) { var data = {devicestatus: [{mills: Date.now(), uploader: {battery: 20}}]}; it('display uploader battery status', function (done) { - var sandbox = require('../lib/sandbox')(); var ctx = { settings: {} - , language: require('../lib/language')() + , language: require('../lib/language')(fs) }; ctx.language.set('en'); - ctx.levels = require('../lib/levels'); + ctx.levels = levels; + var sandbox = require('../lib/sandbox')(ctx); var sbx = sandbox.clientInit(ctx, Date.now(), data); @@ -42,7 +45,8 @@ describe('Uploader Battery', function ( ) { done(); } } - , language: require('../lib/language')() + , language: require('../lib/language')(fs) + , levels: levels }; ctx.language.set('en'); @@ -63,7 +67,8 @@ describe('Uploader Battery', function ( ) { done(); } } - , language: require('../lib/language')() + , language: require('../lib/language')(fs) + , levels: levels }; ctx.language.set('en'); @@ -82,7 +87,8 @@ describe('Uploader Battery', function ( ) { options.hide.should.equal(true); done(); } - }, language: require('../lib/language')() + }, language: require('../lib/language')(fs) + , levels: levels }; ctx.language.set('en'); @@ -97,7 +103,8 @@ describe('Uploader Battery', function ( ) { var ctx = { settings: {} - , language: require('../lib/language')() + , language: require('../lib/language')(fs) + , levels: levels }; ctx.language.set('en'); diff --git a/tests/utils.test.js b/tests/utils.test.js index 53cccf07507..c6138f47491 100644 --- a/tests/utils.test.js +++ b/tests/utils.test.js @@ -17,18 +17,18 @@ describe('utils', function ( ) { it('format numbers short', function () { var undef; - utils.toFixedMin(3.345, 2).should.equal('3.35'); - utils.toFixedMin(5.499999999, 0).should.equal('5'); - utils.toFixedMin(5.499999999, 1).should.equal('5.5'); - utils.toFixedMin(5.499999999, 3).should.equal('5.5'); - utils.toFixedMin(123.45, -2).should.equal('100'); - utils.toFixedMin(-0.001, 2).should.equal('0'); - utils.toFixedMin(-2.47, 1).should.equal('-2.5'); - utils.toFixedMin(-2.44, 1).should.equal('-2.4'); + utils.toRoundedStr(3.345, 2).should.equal('3.35'); + utils.toRoundedStr(5.499999999, 0).should.equal('5'); + utils.toRoundedStr(5.499999999, 1).should.equal('5.5'); + utils.toRoundedStr(5.499999999, 3).should.equal('5.5'); + utils.toRoundedStr(123.45, -2).should.equal('100'); + utils.toRoundedStr(-0.001, 2).should.equal('0'); + utils.toRoundedStr(-2.47, 1).should.equal('-2.5'); + utils.toRoundedStr(-2.44, 1).should.equal('-2.4'); - utils.toFixedMin(undef, 2).should.equal('0'); - utils.toFixedMin(null, 2).should.equal('0'); - utils.toFixedMin('text', 2).should.equal('0'); + utils.toRoundedStr(undef, 2).should.equal('0'); + utils.toRoundedStr(null, 2).should.equal('0'); + utils.toRoundedStr('text', 2).should.equal('0'); }); it('merge date and time', function () { diff --git a/tests/verifyauth.test.js b/tests/verifyauth.test.js index 36624e03023..7e97b11d61c 100644 --- a/tests/verifyauth.test.js +++ b/tests/verifyauth.test.js @@ -7,6 +7,8 @@ require('should'); describe('verifyauth', function ( ) { var api = require('../lib/api/'); + this.timeout(25000); + var scope = this; function setup_app (env, fn) { require('../lib/server/bootevent')(env, language).boot(function booted (ctx) { @@ -20,27 +22,76 @@ describe('verifyauth', function ( ) { done(); }); - it('should fail unauthorized', function (done) { + it('should return defaults when called without secret', function (done) { var known = 'b723e97aa97846eb92d5264f084b2823f57c4aa1'; + var known512 = '8c8743d38cbe00debe4b3ba8d0ffbb85e4716c982a61bb9e57bab203178e3718b2965831c1a5e42b9da16f082fdf8a6cecf993b49ed67e3a8b1cd475885d8070'; delete process.env.API_SECRET; process.env.API_SECRET = 'this is my long pass phrase'; - var env = require('../env')( ); - env.api_secret.should.equal(known); + var env = require('../lib/server/env')( ); + env.enclave.isApiKey(known).should.equal(true); + env.enclave.isApiKey(known512).should.equal(true); setup_app(env, function (ctx) { ctx.app.enabled('api').should.equal(true); ctx.app.api_secret = ''; - ping_authorized_endpoint(ctx.app, 401, done); + ping_authorized_endpoint(ctx.app, 200, done); + }); + }); + + it('should fail when calling with wrong secret', function (done) { + var known = 'b723e97aa97846eb92d5264f084b2823f57c4aa1'; + delete process.env.API_SECRET; + process.env.API_SECRET = 'this is my long pass phrase'; + var env = require('../lib/server/env')( ); + env.enclave.isApiKey(known).should.equal(true); + setup_app(env, function (ctx) { + ctx.app.enabled('api').should.equal(true); + ctx.app.api_secret = 'wrong secret'; + + function check(res) { + res.body.message.message.should.equal('UNAUTHORIZED'); + done(); + } + + ping_authorized_endpoint(ctx.app, 200, check, true); }); + }); + + + it('should fail unauthorized and delay subsequent attempts', function (done) { + var known = 'b723e97aa97846eb92d5264f084b2823f57c4aa1'; + delete process.env.API_SECRET; + process.env.API_SECRET = 'this is my long pass phrase'; + var env = require('../lib/server/env')( ); + env.enclave.isApiKey(known).should.equal(true); + setup_app(env, function (ctx) { + ctx.app.enabled('api').should.equal(true); + ctx.app.api_secret = 'wrong secret'; + const time = Date.now(); + + function checkTimer(res) { + res.body.message.message.should.equal('UNAUTHORIZED'); + const delta = Date.now() - time; + delta.should.be.greaterThan(49); + done(); + } + function pingAgain (res) { + res.body.message.message.should.equal('UNAUTHORIZED'); + ping_authorized_endpoint(ctx.app, 200, checkTimer, true); + } + + ping_authorized_endpoint(ctx.app, 200, pingAgain, true); + }); }); + it('should work fine authorized', function (done) { var known = 'b723e97aa97846eb92d5264f084b2823f57c4aa1'; delete process.env.API_SECRET; process.env.API_SECRET = 'this is my long pass phrase'; - var env = require('../env')( ); - env.api_secret.should.equal(known); + var env = require('../lib/server/env')( ); + env.enclave.isApiKey(known).should.equal(true); setup_app(env, function (ctx) { ctx.app.enabled('api').should.equal(true); ctx.app.api_secret = env.api_secret; @@ -50,17 +101,14 @@ describe('verifyauth', function ( ) { }); - function ping_authorized_endpoint (app, fails, fn) { + function ping_authorized_endpoint (app, httpResponse, fn, passres) { request(app) .get('/verifyauth') .set('api-secret', app.api_secret || '') - .expect(fails) + .expect(httpResponse) .end(function (err, res) { - //console.log(res.body); - if (fails < 400) { - res.body.status.should.equal(200); - } - fn( ); + res.body.status.should.equal(httpResponse); + if (passres) { fn(res); } else { fn(); } // console.log('err', err, 'res', res); }); } diff --git a/translations/ar_SA.json b/translations/ar_SA.json new file mode 100644 index 00000000000..dbab7297f0d --- /dev/null +++ b/translations/ar_SA.json @@ -0,0 +1,707 @@ +{ + "Listening on port": "Listening on port", + "Mo": "اث", + "Tu": "ث", + "We": "أر", + "Th": "خ", + "Fr": "ج", + "Sa": "س", + "Su": "أح", + "Monday": "الأثنين", + "Tuesday": "الثلاثاء", + "Wednesday": "الأربعاء", + "Thursday": "الخميس", + "Friday": "الجمعة", + "Saturday": "السبت", + "Sunday": "الأحد", + "Category": "التصنيف", + "Subcategory": "التصنيفات الفرعية", + "Name": "الاسم", + "Today": "اليوم", + "Last 2 days": "آخر يومين", + "Last 3 days": "آخر 3 أيام", + "Last week": "الأسبوع الماضي", + "Last 2 weeks": "آخر أسبوعين", + "Last month": "الشهر الماضي", + "Last 3 months": "آخر ٣ أشهر", + "From": "مِن", + "To": "إلى", + "Notes": "الملاحظات", + "Food": "طعام", + "Insulin": "إنسولين", + "Carbs": "كربوهيدرات", + "Notes contain": "الملاحظات تحتوي على", + "Target BG range bottom": "الحد الأدنى للنطاق المستهدف لسكر الدم", + "top": "الأعلى", + "Show": "إظهار", + "Display": "عرض", + "Loading": "جاري التحميل", + "Loading profile": "تحميل الملف الشخصي", + "Loading status": "جارِ تحميل الحالة", + "Loading food database": "تحميل قاعدة بيانات الطعام", + "not displayed": "غير معروضة", + "Loading CGM data of": "تحميل بيانات CGM من", + "Loading treatments data of": "تحميل بيانات العلاج من", + "Processing data of": "جارِ معالجة بيانات", + "Portion": "حصة", + "Size": "الحجم", + "(none)": "(لا شيء)", + "None": "None", + "": "", + "Result is empty": "Result is empty", + "Day to day": "Day to day", + "Week to week": "Week to week", + "Daily Stats": "Daily Stats", + "Percentile Chart": "Percentile Chart", + "Distribution": "Distribution", + "Hourly stats": "Hourly stats", + "netIOB stats": "netIOB stats", + "temp basals must be rendered to display this report": "temp basals must be rendered to display this report", + "No data available": "No data available", + "Low": "Low", + "In Range": "In Range", + "Period": "Period", + "High": "High", + "Average": "Average", + "Low Quartile": "Low Quartile", + "Upper Quartile": "Upper Quartile", + "Quartile": "Quartile", + "Date": "Date", + "Normal": "Normal", + "Median": "Median", + "Readings": "Readings", + "StDev": "StDev", + "Daily stats report": "Daily stats report", + "Glucose Percentile report": "Glucose Percentile report", + "Glucose distribution": "Glucose distribution", + "days total": "days total", + "Total per day": "Total per day", + "Overall": "Overall", + "Range": "Range", + "% of Readings": "% of Readings", + "# of Readings": "# of Readings", + "Mean": "Mean", + "Standard Deviation": "Standard Deviation", + "Max": "Max", + "Min": "Min", + "A1c estimation*": "A1c estimation*", + "Weekly Success": "Weekly Success", + "There is not sufficient data to run this report. Select more days.": "There is not sufficient data to run this report. Select more days.", + "Using stored API secret hash": "Using stored API secret hash", + "No API secret hash stored yet. You need to enter API secret.": "No API secret hash stored yet. You need to enter API secret.", + "Database loaded": "Database loaded", + "Error: Database failed to load": "Error: Database failed to load", + "Error": "Error", + "Create new record": "Create new record", + "Save record": "Save record", + "Portions": "Portions", + "Unit": "وحدة", + "GI": "GI", + "Edit record": "Edit record", + "Delete record": "Delete record", + "Move to the top": "Move to the top", + "Hidden": "Hidden", + "Hide after use": "Hide after use", + "Your API secret must be at least 12 characters long": "Your API secret must be at least 12 characters long", + "Bad API secret": "Bad API secret", + "API secret hash stored": "API secret hash stored", + "Status": "Status", + "Not loaded": "Not loaded", + "Food Editor": "Food Editor", + "Your database": "Your database", + "Filter": "Filter", + "Save": "Save", + "Clear": "Clear", + "Record": "Record", + "Quick picks": "Quick picks", + "Show hidden": "Show hidden", + "Your API secret or token": "Your API secret or token", + "Remember this device. (Do not enable this on public computers.)": "Remember this device. (Do not enable this on public computers.)", + "Treatments": "Treatments", + "Time": "Time", + "Event Type": "Event Type", + "Blood Glucose": "Blood Glucose", + "Entered By": "Entered By", + "Delete this treatment?": "Delete this treatment?", + "Carbs Given": "Carbs Given", + "Insulin Given": "Insulin Given", + "Event Time": "Event Time", + "Please verify that the data entered is correct": "Please verify that the data entered is correct", + "BG": "BG", + "Use BG correction in calculation": "Use BG correction in calculation", + "BG from CGM (autoupdated)": "BG from CGM (autoupdated)", + "BG from meter": "BG from meter", + "Manual BG": "Manual BG", + "Quickpick": "Quickpick", + "or": "or", + "Add from database": "Add from database", + "Use carbs correction in calculation": "Use carbs correction in calculation", + "Use COB correction in calculation": "Use COB correction in calculation", + "Use IOB in calculation": "Use IOB in calculation", + "Other correction": "Other correction", + "Rounding": "Rounding", + "Enter insulin correction in treatment": "Enter insulin correction in treatment", + "Insulin needed": "Insulin needed", + "Carbs needed": "Carbs needed", + "Carbs needed if Insulin total is negative value": "Carbs needed if Insulin total is negative value", + "Basal rate": "Basal rate", + "60 minutes earlier": "60 minutes earlier", + "45 minutes earlier": "45 minutes earlier", + "30 minutes earlier": "30 minutes earlier", + "20 minutes earlier": "20 minutes earlier", + "15 minutes earlier": "15 minutes earlier", + "Time in minutes": "Time in minutes", + "15 minutes later": "15 minutes later", + "20 minutes later": "20 minutes later", + "30 minutes later": "30 minutes later", + "45 minutes later": "45 minutes later", + "60 minutes later": "60 minutes later", + "Additional Notes, Comments": "Additional Notes, Comments", + "RETRO MODE": "RETRO MODE", + "Now": "Now", + "Other": "Other", + "Submit Form": "Submit Form", + "Profile Editor": "Profile Editor", + "Reports": "Reports", + "Add food from your database": "Add food from your database", + "Reload database": "Reload database", + "Add": "Add", + "Unauthorized": "Unauthorized", + "Entering record failed": "Entering record failed", + "Device authenticated": "Device authenticated", + "Device not authenticated": "Device not authenticated", + "Authentication status": "Authentication status", + "Authenticate": "Authenticate", + "Remove": "Remove", + "Your device is not authenticated yet": "Your device is not authenticated yet", + "Sensor": "Sensor", + "Finger": "Finger", + "Manual": "Manual", + "Scale": "Scale", + "Linear": "Linear", + "Logarithmic": "Logarithmic", + "Logarithmic (Dynamic)": "Logarithmic (Dynamic)", + "Insulin-on-Board": "Insulin-on-Board", + "Carbs-on-Board": "Carbs-on-Board", + "Bolus Wizard Preview": "Bolus Wizard Preview", + "Value Loaded": "Value Loaded", + "Cannula Age": "Cannula Age", + "Basal Profile": "Basal Profile", + "Silence for 30 minutes": "Silence for 30 minutes", + "Silence for 60 minutes": "Silence for 60 minutes", + "Silence for 90 minutes": "Silence for 90 minutes", + "Silence for 120 minutes": "Silence for 120 minutes", + "Settings": "Settings", + "Units": "Units", + "Date format": "Date format", + "12 hours": "12 hours", + "24 hours": "24 hours", + "Log a Treatment": "Log a Treatment", + "BG Check": "BG Check", + "Meal Bolus": "Meal Bolus", + "Snack Bolus": "Snack Bolus", + "Correction Bolus": "Correction Bolus", + "Carb Correction": "Carb Correction", + "Note": "Note", + "Question": "Question", + "Exercise": "Exercise", + "Pump Site Change": "Pump Site Change", + "CGM Sensor Start": "CGM Sensor Start", + "CGM Sensor Stop": "CGM Sensor Stop", + "CGM Sensor Insert": "CGM Sensor Insert", + "Sensor Code": "Sensor Code", + "Transmitter ID": "Transmitter ID", + "Dexcom Sensor Start": "Dexcom Sensor Start", + "Dexcom Sensor Change": "Dexcom Sensor Change", + "Insulin Cartridge Change": "Insulin Cartridge Change", + "D.A.D. Alert": "D.A.D. Alert", + "Glucose Reading": "Glucose Reading", + "Measurement Method": "Measurement Method", + "Meter": "Meter", + "Amount in grams": "Amount in grams", + "Amount in units": "Amount in units", + "View all treatments": "View all treatments", + "Enable Alarms": "Enable Alarms", + "Pump Battery Change": "Pump Battery Change", + "Pump Battery Age": "Pump Battery Age", + "Pump Battery Low Alarm": "Pump Battery Low Alarm", + "Pump Battery change overdue!": "Pump Battery change overdue!", + "When enabled an alarm may sound.": "When enabled an alarm may sound.", + "Urgent High Alarm": "Urgent High Alarm", + "High Alarm": "High Alarm", + "Low Alarm": "Low Alarm", + "Urgent Low Alarm": "Urgent Low Alarm", + "Stale Data: Warn": "Stale Data: Warn", + "Stale Data: Urgent": "Stale Data: Urgent", + "mins": "mins", + "Night Mode": "Night Mode", + "When enabled the page will be dimmed from 10pm - 6am.": "When enabled the page will be dimmed from 10pm - 6am.", + "Enable": "Enable", + "Show Raw BG Data": "Show Raw BG Data", + "Never": "Never", + "Always": "Always", + "When there is noise": "When there is noise", + "When enabled small white dots will be displayed for raw BG data": "When enabled small white dots will be displayed for raw BG data", + "Custom Title": "Custom Title", + "Theme": "Theme", + "Default": "Default", + "Colors": "Colors", + "Colorblind-friendly colors": "Colorblind-friendly colors", + "Reset, and use defaults": "Reset, and use defaults", + "Calibrations": "Calibrations", + "Alarm Test / Smartphone Enable": "Alarm Test / Smartphone Enable", + "Bolus Wizard": "Bolus Wizard", + "in the future": "in the future", + "time ago": "time ago", + "hr ago": "hr ago", + "hrs ago": "hrs ago", + "min ago": "min ago", + "mins ago": "mins ago", + "day ago": "day ago", + "days ago": "days ago", + "long ago": "long ago", + "Clean": "Clean", + "Light": "Light", + "Medium": "Medium", + "Heavy": "Heavy", + "Treatment type": "Treatment type", + "Raw BG": "Raw BG", + "Device": "Device", + "Noise": "Noise", + "Calibration": "Calibration", + "Show Plugins": "Show Plugins", + "About": "About", + "Value in": "Value in", + "Carb Time": "Carb Time", + "Language": "Language", + "Add new": "Add new", + "g": "g", + "ml": "ml", + "pcs": "pcs", + "Drag&drop food here": "Drag&drop food here", + "Care Portal": "Care Portal", + "Medium/Unknown": "Medium/Unknown", + "IN THE FUTURE": "IN THE FUTURE", + "Order": "Order", + "oldest on top": "oldest on top", + "newest on top": "newest on top", + "All sensor events": "All sensor events", + "Remove future items from mongo database": "Remove future items from mongo database", + "Find and remove treatments in the future": "Find and remove treatments in the future", + "This task find and remove treatments in the future.": "This task find and remove treatments in the future.", + "Remove treatments in the future": "Remove treatments in the future", + "Find and remove entries in the future": "Find and remove entries in the future", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "This task find and remove CGM data in the future created by uploader with wrong date/time.", + "Remove entries in the future": "Remove entries in the future", + "Loading database ...": "Loading database ...", + "Database contains %1 future records": "Database contains %1 future records", + "Remove %1 selected records?": "Remove %1 selected records?", + "Error loading database": "Error loading database", + "Record %1 removed ...": "Record %1 removed ...", + "Error removing record %1": "Error removing record %1", + "Deleting records ...": "Deleting records ...", + "%1 records deleted": "%1 records deleted", + "Clean Mongo status database": "Clean Mongo status database", + "Delete all documents from devicestatus collection": "Delete all documents from devicestatus collection", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.", + "Delete all documents": "Delete all documents", + "Delete all documents from devicestatus collection?": "Delete all documents from devicestatus collection?", + "Database contains %1 records": "Database contains %1 records", + "All records removed ...": "All records removed ...", + "Delete all documents from devicestatus collection older than 30 days": "Delete all documents from devicestatus collection older than 30 days", + "Number of Days to Keep:": "Number of Days to Keep:", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.", + "Delete old documents from devicestatus collection?": "Delete old documents from devicestatus collection?", + "Clean Mongo entries (glucose entries) database": "Clean Mongo entries (glucose entries) database", + "Delete all documents from entries collection older than 180 days": "Delete all documents from entries collection older than 180 days", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.", + "Delete old documents": "Delete old documents", + "Delete old documents from entries collection?": "Delete old documents from entries collection?", + "%1 is not a valid number": "%1 is not a valid number", + "%1 is not a valid number - must be more than 2": "%1 is not a valid number - must be more than 2", + "Clean Mongo treatments database": "Clean Mongo treatments database", + "Delete all documents from treatments collection older than 180 days": "Delete all documents from treatments collection older than 180 days", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.", + "Delete old documents from treatments collection?": "Delete old documents from treatments collection?", + "Admin Tools": "Admin Tools", + "Nightscout reporting": "Nightscout reporting", + "Cancel": "Cancel", + "Edit treatment": "Edit treatment", + "Duration": "Duration", + "Duration in minutes": "Duration in minutes", + "Temp Basal": "Temp Basal", + "Temp Basal Start": "Temp Basal Start", + "Temp Basal End": "Temp Basal End", + "Percent": "Percent", + "Basal change in %": "Basal change in %", + "Basal value": "Basal value", + "Absolute basal value": "Absolute basal value", + "Announcement": "Announcement", + "Loading temp basal data": "Loading temp basal data", + "Save current record before changing to new?": "Save current record before changing to new?", + "Profile Switch": "Profile Switch", + "Profile": "Profile", + "General profile settings": "General profile settings", + "Title": "Title", + "Database records": "Database records", + "Add new record": "Add new record", + "Remove this record": "Remove this record", + "Clone this record to new": "Clone this record to new", + "Record valid from": "Record valid from", + "Stored profiles": "Stored profiles", + "Timezone": "Timezone", + "Duration of Insulin Activity (DIA)": "Duration of Insulin Activity (DIA)", + "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.": "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.", + "Insulin to carb ratio (I:C)": "Insulin to carb ratio (I:C)", + "Hours:": "Hours:", + "hours": "hours", + "g/hour": "g/hour", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.", + "Insulin Sensitivity Factor (ISF)": "Insulin Sensitivity Factor (ISF)", + "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.", + "Carbs activity / absorption rate": "Carbs activity / absorption rate", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).", + "Basal rates [unit/hour]": "Basal rates [unit/hour]", + "Target BG range [mg/dL,mmol/L]": "Target BG range [mg/dL,mmol/L]", + "Start of record validity": "Start of record validity", + "Icicle": "Icicle", + "Render Basal": "Render Basal", + "Profile used": "Profile used", + "Calculation is in target range.": "Calculation is in target range.", + "Loading profile records ...": "Loading profile records ...", + "Values loaded.": "Values loaded.", + "Default values used.": "Default values used.", + "Error. Default values used.": "Error. Default values used.", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "Time ranges of target_low and target_high don't match. Values are restored to defaults.", + "Valid from:": "Valid from:", + "Save current record before switching to new?": "Save current record before switching to new?", + "Add new interval before": "Add new interval before", + "Delete interval": "Delete interval", + "I:C": "I:C", + "ISF": "ISF", + "Combo Bolus": "Combo Bolus", + "Difference": "Difference", + "New time": "New time", + "Edit Mode": "Edit Mode", + "When enabled icon to start edit mode is visible": "When enabled icon to start edit mode is visible", + "Operation": "Operation", + "Move": "Move", + "Delete": "Delete", + "Move insulin": "Move insulin", + "Move carbs": "Move carbs", + "Remove insulin": "Remove insulin", + "Remove carbs": "Remove carbs", + "Change treatment time to %1 ?": "Change treatment time to %1 ?", + "Change carbs time to %1 ?": "Change carbs time to %1 ?", + "Change insulin time to %1 ?": "Change insulin time to %1 ?", + "Remove treatment ?": "Remove treatment ?", + "Remove insulin from treatment ?": "Remove insulin from treatment ?", + "Remove carbs from treatment ?": "Remove carbs from treatment ?", + "Rendering": "Rendering", + "Loading OpenAPS data of": "Loading OpenAPS data of", + "Loading profile switch data": "Loading profile switch data", + "Redirecting you to the Profile Editor to create a new profile.": "Redirecting you to the Profile Editor to create a new profile.", + "Pump": "Pump", + "Sensor Age": "Sensor Age", + "Insulin Age": "Insulin Age", + "Temporary target": "Temporary target", + "Reason": "Reason", + "Eating soon": "Eating soon", + "Top": "Top", + "Bottom": "Bottom", + "Activity": "Activity", + "Targets": "Targets", + "Bolus insulin:": "Bolus insulin:", + "Base basal insulin:": "Base basal insulin:", + "Positive temp basal insulin:": "Positive temp basal insulin:", + "Negative temp basal insulin:": "Negative temp basal insulin:", + "Total basal insulin:": "Total basal insulin:", + "Total daily insulin:": "Total daily insulin:", + "Unable to save Role": "Unable to save Role", + "Unable to delete Role": "Unable to delete Role", + "Database contains %1 roles": "Database contains %1 roles", + "Edit Role": "Edit Role", + "admin, school, family, etc": "admin, school, family, etc", + "Permissions": "Permissions", + "Are you sure you want to delete: ": "Are you sure you want to delete: ", + "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.": "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.", + "Add new Role": "Add new Role", + "Roles - Groups of People, Devices, etc": "Roles - Groups of People, Devices, etc", + "Edit this role": "Edit this role", + "Admin authorized": "Admin authorized", + "Subjects - People, Devices, etc": "Subjects - People, Devices, etc", + "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.", + "Add new Subject": "Add new Subject", + "Unable to save Subject": "Unable to save Subject", + "Unable to delete Subject": "Unable to delete Subject", + "Database contains %1 subjects": "Database contains %1 subjects", + "Edit Subject": "Edit Subject", + "person, device, etc": "person, device, etc", + "role1, role2": "role1, role2", + "Edit this subject": "Edit this subject", + "Delete this subject": "Delete this subject", + "Roles": "Roles", + "Access Token": "Access Token", + "hour ago": "hour ago", + "hours ago": "hours ago", + "Silence for %1 minutes": "Silence for %1 minutes", + "Check BG": "Check BG", + "BASAL": "BASAL", + "Current basal": "Current basal", + "Sensitivity": "Sensitivity", + "Current Carb Ratio": "Current Carb Ratio", + "Basal timezone": "Basal timezone", + "Active profile": "Active profile", + "Active temp basal": "Active temp basal", + "Active temp basal start": "Active temp basal start", + "Active temp basal duration": "Active temp basal duration", + "Active temp basal remaining": "Active temp basal remaining", + "Basal profile value": "Basal profile value", + "Active combo bolus": "Active combo bolus", + "Active combo bolus start": "Active combo bolus start", + "Active combo bolus duration": "Active combo bolus duration", + "Active combo bolus remaining": "Active combo bolus remaining", + "BG Delta": "BG Delta", + "Elapsed Time": "Elapsed Time", + "Absolute Delta": "Absolute Delta", + "Interpolated": "Interpolated", + "BWP": "BWP", + "Urgent": "Urgent", + "Warning": "Warning", + "Info": "Info", + "Lowest": "Lowest", + "Snoozing high alarm since there is enough IOB": "Snoozing high alarm since there is enough IOB", + "Check BG, time to bolus?": "Check BG, time to bolus?", + "Notice": "Notice", + "required info missing": "required info missing", + "Insulin on Board": "Insulin on Board", + "Current target": "Current target", + "Expected effect": "Expected effect", + "Expected outcome": "Expected outcome", + "Carb Equivalent": "Carb Equivalent", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS", + "%1U reduction needed in active insulin to reach low target, too much basal?": "%1U reduction needed in active insulin to reach low target, too much basal?", + "basal adjustment out of range, give carbs?": "basal adjustment out of range, give carbs?", + "basal adjustment out of range, give bolus?": "basal adjustment out of range, give bolus?", + "above high": "above high", + "below low": "below low", + "Projected BG %1 target": "Projected BG %1 target", + "aiming at": "aiming at", + "Bolus %1 units": "Bolus %1 units", + "or adjust basal": "or adjust basal", + "Check BG using glucometer before correcting!": "Check BG using glucometer before correcting!", + "Basal reduction to account %1 units:": "Basal reduction to account %1 units:", + "30m temp basal": "30m temp basal", + "1h temp basal": "1h temp basal", + "Cannula change overdue!": "Cannula change overdue!", + "Time to change cannula": "Time to change cannula", + "Change cannula soon": "Change cannula soon", + "Cannula age %1 hours": "Cannula age %1 hours", + "Inserted": "Inserted", + "CAGE": "CAGE", + "COB": "COB", + "Last Carbs": "Last Carbs", + "IAGE": "IAGE", + "Insulin reservoir change overdue!": "Insulin reservoir change overdue!", + "Time to change insulin reservoir": "Time to change insulin reservoir", + "Change insulin reservoir soon": "Change insulin reservoir soon", + "Insulin reservoir age %1 hours": "Insulin reservoir age %1 hours", + "Changed": "Changed", + "IOB": "IOB", + "Careportal IOB": "Careportal IOB", + "Last Bolus": "Last Bolus", + "Basal IOB": "Basal IOB", + "Source": "Source", + "Stale data, check rig?": "Stale data, check rig?", + "Last received:": "Last received:", + "%1m ago": "%1m ago", + "%1h ago": "%1h ago", + "%1d ago": "%1d ago", + "RETRO": "RETRO", + "SAGE": "SAGE", + "Sensor change/restart overdue!": "Sensor change/restart overdue!", + "Time to change/restart sensor": "Time to change/restart sensor", + "Change/restart sensor soon": "Change/restart sensor soon", + "Sensor age %1 days %2 hours": "Sensor age %1 days %2 hours", + "Sensor Insert": "Sensor Insert", + "Sensor Start": "Sensor Start", + "days": "days", + "Insulin distribution": "Insulin distribution", + "To see this report, press SHOW while in this view": "To see this report, press SHOW while in this view", + "AR2 Forecast": "AR2 Forecast", + "OpenAPS Forecasts": "OpenAPS Forecasts", + "Temporary Target": "Temporary Target", + "Temporary Target Cancel": "Temporary Target Cancel", + "OpenAPS Offline": "OpenAPS Offline", + "Profiles": "Profiles", + "Time in fluctuation": "Time in fluctuation", + "Time in rapid fluctuation": "Time in rapid fluctuation", + "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:": "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:", + "Filter by hours": "Filter by hours", + "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.": "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.", + "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.": "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.", + "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.", + "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.", + "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">can be found here.", + "Mean Total Daily Change": "Mean Total Daily Change", + "Mean Hourly Change": "Mean Hourly Change", + "FortyFiveDown": "slightly dropping", + "FortyFiveUp": "slightly rising", + "Flat": "holding", + "SingleUp": "rising", + "SingleDown": "dropping", + "DoubleDown": "rapidly dropping", + "DoubleUp": "rapidly rising", + "virtAsstUnknown": "That value is unknown at the moment. Please see your Nightscout site for more details.", + "virtAsstTitleAR2Forecast": "AR2 Forecast", + "virtAsstTitleCurrentBasal": "Current Basal", + "virtAsstTitleCurrentCOB": "Current COB", + "virtAsstTitleCurrentIOB": "Current IOB", + "virtAsstTitleLaunch": "Welcome to Nightscout", + "virtAsstTitleLoopForecast": "Loop Forecast", + "virtAsstTitleLastLoop": "Last Loop", + "virtAsstTitleOpenAPSForecast": "OpenAPS Forecast", + "virtAsstTitlePumpReservoir": "Insulin Remaining", + "virtAsstTitlePumpBattery": "Pump Battery", + "virtAsstTitleRawBG": "Current Raw BG", + "virtAsstTitleUploaderBattery": "Uploader Battery", + "virtAsstTitleCurrentBG": "Current BG", + "virtAsstTitleFullStatus": "Full Status", + "virtAsstTitleCGMMode": "CGM Mode", + "virtAsstTitleCGMStatus": "CGM Status", + "virtAsstTitleCGMSessionAge": "CGM Session Age", + "virtAsstTitleCGMTxStatus": "CGM Transmitter Status", + "virtAsstTitleCGMTxAge": "CGM Transmitter Age", + "virtAsstTitleCGMNoise": "CGM Noise", + "virtAsstTitleDelta": "Blood Glucose Delta", + "virtAsstStatus": "%1 and %2 as of %3.", + "virtAsstBasal": "%1 current basal is %2 units per hour", + "virtAsstBasalTemp": "%1 temp basal of %2 units per hour will end %3", + "virtAsstIob": "and you have %1 insulin on board.", + "virtAsstIobIntent": "You have %1 insulin on board", + "virtAsstIobUnits": "%1 units of", + "virtAsstLaunch": "What would you like to check on Nightscout?", + "virtAsstPreamble": "Your", + "virtAsstPreamble3person": "%1 has a ", + "virtAsstNoInsulin": "no", + "virtAsstUploadBattery": "Your uploader battery is at %1", + "virtAsstReservoir": "You have %1 units remaining", + "virtAsstPumpBattery": "Your pump battery is at %1 %2", + "virtAsstUploaderBattery": "Your uploader battery is at %1", + "virtAsstLastLoop": "The last successful loop was %1", + "virtAsstLoopNotAvailable": "Loop plugin does not seem to be enabled", + "virtAsstLoopForecastAround": "According to the loop forecast you are expected to be around %1 over the next %2", + "virtAsstLoopForecastBetween": "According to the loop forecast you are expected to be between %1 and %2 over the next %3", + "virtAsstAR2ForecastAround": "According to the AR2 forecast you are expected to be around %1 over the next %2", + "virtAsstAR2ForecastBetween": "According to the AR2 forecast you are expected to be between %1 and %2 over the next %3", + "virtAsstForecastUnavailable": "Unable to forecast with the data that is available", + "virtAsstRawBG": "Your raw bg is %1", + "virtAsstOpenAPSForecast": "The OpenAPS Eventual BG is %1", + "virtAsstCob3person": "%1 has %2 carbohydrates on board", + "virtAsstCob": "You have %1 carbohydrates on board", + "virtAsstCGMMode": "Your CGM mode was %1 as of %2.", + "virtAsstCGMStatus": "Your CGM status was %1 as of %2.", + "virtAsstCGMSessAge": "Your CGM session has been active for %1 days and %2 hours.", + "virtAsstCGMSessNotStarted": "There is no active CGM session at the moment.", + "virtAsstCGMTxStatus": "Your CGM transmitter status was %1 as of %2.", + "virtAsstCGMTxAge": "Your CGM transmitter is %1 days old.", + "virtAsstCGMNoise": "Your CGM noise was %1 as of %2.", + "virtAsstCGMBattOne": "Your CGM battery was %1 volts as of %2.", + "virtAsstCGMBattTwo": "Your CGM battery levels were %1 volts and %2 volts as of %3.", + "virtAsstDelta": "Your delta was %1 between %2 and %3.", + "virtAsstDeltaEstimated": "Your estimated delta was %1 between %2 and %3.", + "virtAsstUnknownIntentTitle": "Unknown Intent", + "virtAsstUnknownIntentText": "I'm sorry, I don't know what you're asking for.", + "Fat [g]": "Fat [g]", + "Protein [g]": "Protein [g]", + "Energy [kJ]": "Energy [kJ]", + "Clock Views:": "Clock Views:", + "Clock": "Clock", + "Color": "Color", + "Simple": "Simple", + "TDD average": "TDD average", + "Bolus average": "Bolus average", + "Basal average": "Basal average", + "Base basal average:": "Base basal average:", + "Carbs average": "Carbs average", + "Eating Soon": "Eating Soon", + "Last entry {0} minutes ago": "Last entry {0} minutes ago", + "change": "change", + "Speech": "Speech", + "Target Top": "Target Top", + "Target Bottom": "Target Bottom", + "Canceled": "Canceled", + "Meter BG": "Meter BG", + "predicted": "predicted", + "future": "future", + "ago": "ago", + "Last data received": "Last data received", + "Clock View": "Clock View", + "Protein": "Protein", + "Fat": "Fat", + "Protein average": "Protein average", + "Fat average": "Fat average", + "Total carbs": "Total carbs", + "Total protein": "Total protein", + "Total fat": "Total fat", + "Database Size": "Database Size", + "Database Size near its limits!": "Database Size near its limits!", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!", + "Database file size": "Database file size", + "%1 MiB of %2 MiB (%3%)": "%1 MiB of %2 MiB (%3%)", + "Data size": "Data size", + "virtAsstDatabaseSize": "%1 MiB. That is %2% of available database space.", + "virtAsstTitleDatabaseSize": "Database file size", + "Carbs/Food/Time": "Carbs/Food/Time", + "You have administration messages": "You have administration messages", + "Admin messages in queue": "Admin messages in queue", + "Queue empty": "Queue empty", + "There are no admin messages in queue": "There are no admin messages in queue", + "Please sign in using the API_SECRET to see your administration messages": "Please sign in using the API_SECRET to see your administration messages", + "Reads enabled in default permissions": "Reads enabled in default permissions", + "Data reads enabled": "Data reads enabled", + "Data writes enabled": "Data writes enabled", + "Data writes not enabled": "Data writes not enabled", + "Color prediction lines": "Color prediction lines", + "Release Notes": "Release Notes", + "Check for Updates": "Check for Updates", + "Open Source": "Open Source", + "Nightscout Info": "Nightscout Info", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.", + "Note that time shift is available only when viewing multiple days.": "Note that time shift is available only when viewing multiple days.", + "Please select a maximum of two weeks duration and click Show again.": "Please select a maximum of two weeks duration and click Show again.", + "Show profiles table": "Show profiles table", + "Show predictions": "Show predictions", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Timeshift on meals larger than %1 g carbs consumed between %2 and %3", + "Previous": "Previous", + "Previous day": "Previous day", + "Next day": "Next day", + "Next": "Next", + "Temp basal delta": "Temp basal delta", + "Authorized by token": "Authorized by token", + "Auth role": "Auth role", + "view without token": "view without token", + "Remove stored token": "Remove stored token", + "Weekly Distribution": "Weekly Distribution", + "Failed authentication": "Failed authentication", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?", + "Default (with leading zero and U)": "Default (with leading zero and U)", + "Concise (with U, without leading zero)": "Concise (with U, without leading zero)", + "Minimal (without leading zero and U)": "Minimal (without leading zero and U)", + "Small Bolus Display": "Small Bolus Display", + "Large Bolus Display": "Large Bolus Display", + "Bolus Display Threshold": "Bolus Display Threshold", + "%1 U and Over": "%1 U and Over", + "Event repeated %1 times.": "Event repeated %1 times.", + "minutes": "minutes", + "Last recorded %1 %2 ago.": "Last recorded %1 %2 ago.", + "Security issue": "Security issue", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.", + "less than 1": "less than 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system." +} diff --git a/translations/bg_BG.json b/translations/bg_BG.json new file mode 100644 index 00000000000..9623c18833f --- /dev/null +++ b/translations/bg_BG.json @@ -0,0 +1,707 @@ +{ + "Listening on port": "Активиране на порта", + "Mo": "Пон", + "Tu": "Вт", + "We": "Ср", + "Th": "Четв", + "Fr": "Пет", + "Sa": "Съб", + "Su": "Нед", + "Monday": "Понеделник", + "Tuesday": "Вторник", + "Wednesday": "Сряда", + "Thursday": "Четвъртък", + "Friday": "Петък", + "Saturday": "Събота", + "Sunday": "Неделя", + "Category": "Категория", + "Subcategory": "Подкатегория", + "Name": "Име", + "Today": "Днес", + "Last 2 days": "Последните 2 дни", + "Last 3 days": "Последните 3 дни", + "Last week": "Последната седмица", + "Last 2 weeks": "Последните 2 седмици", + "Last month": "Последният месец", + "Last 3 months": "Последните 3 месеца", + "From": "От", + "To": "До", + "Notes": "Бележки", + "Food": "Храна", + "Insulin": "Инсулин", + "Carbs": "Въглехидрати", + "Notes contain": "бележките съдържат", + "Target BG range bottom": "Долна граница на КЗ", + "top": "горна", + "Show": "Покажи", + "Display": "Покажи", + "Loading": "Зареждане", + "Loading profile": "Зареждане на профил", + "Loading status": "Зареждане на статус", + "Loading food database": "Зареждане на данни с храни", + "not displayed": "Не се показва", + "Loading CGM data of": "Зареждане на CGM данни от", + "Loading treatments data of": "Зареждане на въведените лечения от", + "Processing data of": "Зареждане на данни от", + "Portion": "Порция", + "Size": "Големина", + "(none)": "(няма)", + "None": "няма", + "": "<няма>", + "Result is empty": "Няма резултат", + "Day to day": "Ден за ден", + "Week to week": "седмица към седмица", + "Daily Stats": "Дневна статистика", + "Percentile Chart": "Процентна графика", + "Distribution": "Разпределение", + "Hourly stats": "Статистика по часове", + "netIOB stats": "netIOB татистика", + "temp basals must be rendered to display this report": "временните базали трябва да са показани за да се покаже тази това", + "No data available": "Няма данни за показване", + "Low": "Ниска", + "In Range": "В граници", + "Period": "Период", + "High": "Висока", + "Average": "Средна", + "Low Quartile": "Ниска четвъртинка", + "Upper Quartile": "Висока четвъртинка", + "Quartile": "Четвъртинка", + "Date": "Дата", + "Normal": "Нормалнa", + "Median": "Средно", + "Readings": "Измервания", + "StDev": "Стандартно отклонение", + "Daily stats report": "Дневна статистика", + "Glucose Percentile report": "Графика на КЗ", + "Glucose distribution": "Разпределение на КЗ", + "days total": "общо за деня", + "Total per day": "общо за деня", + "Overall": "Общо", + "Range": "Диапазон", + "% of Readings": "% от измервания", + "# of Readings": "№ от измервания", + "Mean": "Средна стойност", + "Standard Deviation": "Стандартно отклонение", + "Max": "Макс.", + "Min": "Мин.", + "A1c estimation*": "Очакван HbA1c", + "Weekly Success": "Седмичен успех", + "There is not sufficient data to run this report. Select more days.": "Няма достатъчно данни за показване. Изберете повече дни.", + "Using stored API secret hash": "Използване на запаметена API парола", + "No API secret hash stored yet. You need to enter API secret.": "Няма запаметена API парола. Tрябва да въведете API парола", + "Database loaded": "База с данни заредена", + "Error: Database failed to load": "ГРЕШКА. Базата с данни не успя да се зареди", + "Error": "Грешка", + "Create new record": "Създаване на нов запис", + "Save record": "Запази запис", + "Portions": "Порции", + "Unit": "Единици", + "GI": "ГИ", + "Edit record": "Редактирай запис", + "Delete record": "Изтрий запис", + "Move to the top": "Преместване в началото", + "Hidden": "Скрити", + "Hide after use": "Скрий след употреба", + "Your API secret must be at least 12 characters long": "Вашата АPI парола трябва да е дълга поне 12 символа", + "Bad API secret": "Некоректна API парола", + "API secret hash stored": "УРА! API парола запаметена", + "Status": "Статус", + "Not loaded": "Не е заредено", + "Food Editor": "Редактор за храна", + "Your database": "Твоята база с данни", + "Filter": "Филтър", + "Save": "Запази", + "Clear": "Изчисти", + "Record": "Запиши", + "Quick picks": "Бърз избор", + "Show hidden": "Покажи скритото", + "Your API secret or token": "Вашата АПИ парола или токен", + "Remember this device. (Do not enable this on public computers.)": "Запомни това устройство. (Не активирайте на публични компютри.)", + "Treatments": "Събития", + "Time": "Време", + "Event Type": "Вид събитие", + "Blood Glucose": "Кръвна захар", + "Entered By": "Въведено от", + "Delete this treatment?": "Изтрий това събитие", + "Carbs Given": "ВХ", + "Insulin Given": "Инсулин", + "Event Time": "Въвеждане", + "Please verify that the data entered is correct": "Моля проверете, че датата е въведена правилно", + "BG": "КЗ", + "Use BG correction in calculation": "Използвай корекцията за КЗ в изчислението", + "BG from CGM (autoupdated)": "КЗ от сензора (автоматично)", + "BG from meter": "КЗ от глюкомер", + "Manual BG": "Ръчно въведена КЗ", + "Quickpick": "Бърз избор", + "or": "или", + "Add from database": "Добави от базата с данни", + "Use carbs correction in calculation": "Включи корекцията чрез ВХ в изчислението", + "Use COB correction in calculation": "Включи активните ВХ в изчислението", + "Use IOB in calculation": "Включи активния инсулин в изчислението", + "Other correction": "Друга корекция", + "Rounding": "Закръгляне", + "Enter insulin correction in treatment": "Въведи корекция с инсулин като лечение", + "Insulin needed": "Необходим инсулин", + "Carbs needed": "Необходими въглехидрати", + "Carbs needed if Insulin total is negative value": "Необходими въглехидрати, ако няма инсулин", + "Basal rate": "Базален инсулин", + "60 minutes earlier": "Преди 60 минути", + "45 minutes earlier": "Преди 45 минути", + "30 minutes earlier": "Преди 30 минути", + "20 minutes earlier": "Преди 20 минути", + "15 minutes earlier": "Преди 15 минути", + "Time in minutes": "Времето в минути", + "15 minutes later": "След 15 минути", + "20 minutes later": "След 20 минути", + "30 minutes later": "След 30 минути", + "45 minutes later": "След 45 минути", + "60 minutes later": "След 60 минути", + "Additional Notes, Comments": "Допълнителни бележки, коментари", + "RETRO MODE": "МИНАЛО ВРЕМЕ", + "Now": "Сега", + "Other": "Друго", + "Submit Form": "Въвеждане на данните", + "Profile Editor": "Редактор на профила", + "Reports": "Статистика", + "Add food from your database": "Добави храна от твоята база с данни", + "Reload database": "Презареди базата с данни", + "Add": "Добави", + "Unauthorized": "Неразрешен достъп", + "Entering record failed": "Въвеждане на записа не се осъществи", + "Device authenticated": "Устройстово е разпознато", + "Device not authenticated": "Устройсройството не е разпознато", + "Authentication status": "Статус на удостоверяване", + "Authenticate": "Удостоверяване", + "Remove": "Премахни", + "Your device is not authenticated yet": "Вашето устройство все още не е удостоверено", + "Sensor": "Сензор", + "Finger": "От пръстта", + "Manual": "Ръчно", + "Scale": "Скала", + "Linear": "Линейна", + "Logarithmic": "Логоритмична", + "Logarithmic (Dynamic)": "Логоритмична (Динамична)", + "Insulin-on-Board": "Активен инсулин", + "Carbs-on-Board": "Активни въглехидрати", + "Bolus Wizard Preview": "Болус калкулатор", + "Value Loaded": "Стойност заредена", + "Cannula Age": "Възраст на канюлата", + "Basal Profile": "Базален профил", + "Silence for 30 minutes": "Заглуши за 30 минути", + "Silence for 60 minutes": "Заглуши за 60 минути", + "Silence for 90 minutes": "Заглуши за 90 минути", + "Silence for 120 minutes": "Заглуши за 120 минути", + "Settings": "Настройки", + "Units": "Единици", + "Date format": "Формат на датата", + "12 hours": "12 часа", + "24 hours": "24 часа", + "Log a Treatment": "Въвеждане на събитие", + "BG Check": "Проверка на КЗ", + "Meal Bolus": "Болус-основно хранене", + "Snack Bolus": "Болус-лека закуска", + "Correction Bolus": "Болус корекция", + "Carb Correction": "Корекция чрез въглехидрати", + "Note": "Бележка", + "Question": "Въпрос", + "Exercise": "Спорт", + "Pump Site Change": "Смяна на сет", + "CGM Sensor Start": "Ре/Стартиране на сензор", + "CGM Sensor Stop": "Спиране на сензор", + "CGM Sensor Insert": "Смяна на сензор", + "Sensor Code": "Код на сензора", + "Transmitter ID": "Номер трансмитер", + "Dexcom Sensor Start": "Ре/Стартиране на Декском сензор", + "Dexcom Sensor Change": "Смяна на Декском сензор", + "Insulin Cartridge Change": "Смяна на резервоар", + "D.A.D. Alert": "Сигнал от обучено куче", + "Glucose Reading": "Кръвна захар", + "Measurement Method": "Метод на измерване", + "Meter": "Глюкомер", + "Amount in grams": "К-во в грамове", + "Amount in units": "К-во в единици", + "View all treatments": "Преглед на всички събития", + "Enable Alarms": "Активни аларми", + "Pump Battery Change": "Смяна на батерия на помпата", + "Pump Battery Age": "Pump Battery Age", + "Pump Battery Low Alarm": "Аларма за слаба батерия на помпата", + "Pump Battery change overdue!": "Смяната на батерията на помпата - наложителна", + "When enabled an alarm may sound.": "Когато е активирано, алармата ще има звук", + "Urgent High Alarm": "Много висока КЗ", + "High Alarm": "Висока КЗ", + "Low Alarm": "Ниска КЗ", + "Urgent Low Alarm": "Много ниска КЗ", + "Stale Data: Warn": "Стари данни", + "Stale Data: Urgent": "Много стари данни", + "mins": "мин", + "Night Mode": "Нощен режим", + "When enabled the page will be dimmed from 10pm - 6am.": "Когато е активирано, страницата ще е затъмнена от 22-06ч", + "Enable": "Активен", + "Show Raw BG Data": "Показвай RAW данни", + "Never": "Никога", + "Always": "Винаги", + "When there is noise": "Когато има шум", + "When enabled small white dots will be displayed for raw BG data": "Когато е активно, малки бели точки ще показват RAW данните", + "Custom Title": "Име на страницата", + "Theme": "Тема", + "Default": "Черно-бяла", + "Colors": "Цветна", + "Colorblind-friendly colors": "Цветове за далтонисти", + "Reset, and use defaults": "Нулирай и използвай стандартните настройки", + "Calibrations": "Калибрации", + "Alarm Test / Smartphone Enable": "Тестване на алармата / Активно за мобилни телефони", + "Bolus Wizard": "Болус съветник ", + "in the future": "в бъдещето", + "time ago": "преди време", + "hr ago": "час по-рано", + "hrs ago": "часа по-рано", + "min ago": "мин. по-рано", + "mins ago": "мин. по-рано", + "day ago": "ден по-рано", + "days ago": "дни по-рано", + "long ago": "преди много време", + "Clean": "Чист", + "Light": "Лек", + "Medium": "Среден", + "Heavy": "Висок", + "Treatment type": "Вид събитие", + "Raw BG": "Непреработена КЗ", + "Device": "Устройство", + "Noise": "Шум", + "Calibration": "Калибрация", + "Show Plugins": "Покажи добавките", + "About": "Относно", + "Value in": "Стойност в", + "Carb Time": "Ядене след", + "Language": "Език", + "Add new": "Добави нов", + "g": "гр", + "ml": "мл", + "pcs": "бр", + "Drag&drop food here": "Хвани и премести храна тук", + "Care Portal": "Въвеждане на данни", + "Medium/Unknown": "Среден/неизвестен", + "IN THE FUTURE": "В БЪДЕШЕТО", + "Order": "Ред", + "oldest on top": "Старите най-отгоре", + "newest on top": "Новите най-отгоре", + "All sensor events": "Всички събития от сензора", + "Remove future items from mongo database": "Премахни бъдещите точки от Монго базата с данни", + "Find and remove treatments in the future": "Намери и премахни събития в бъдещето", + "This task find and remove treatments in the future.": "Тази опция намира и премахва събития в бъдещето.", + "Remove treatments in the future": "Премахни събитията в бъдешето", + "Find and remove entries in the future": "Намери и премахни данни от сензора в бъдещето", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "Тази опция ще намери и премахне данни от сензора в бъдещето, създадени поради грешна дата/време.", + "Remove entries in the future": "Премахни данните от сензора в бъдещето", + "Loading database ...": "Зареждане на базата с данни ...", + "Database contains %1 future records": "Базата с дани съдържа %1 бъдещи записи", + "Remove %1 selected records?": "Премахване на %1 от избраните записи?", + "Error loading database": "Грешка при зареждане на базата с данни", + "Record %1 removed ...": "%1 записи премахнати", + "Error removing record %1": "Грешка при премахването на %1 от записите", + "Deleting records ...": "Изтриване на записите...", + "%1 records deleted": "%1 записите са изтрити", + "Clean Mongo status database": "Изчисти статуса на Монго базата с данни", + "Delete all documents from devicestatus collection": "Изтрий всички документи от папката статус-устройство", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "Тази опция премахва всички документи от папката статус-устройство. Полезно е, когато статусът на батерията не се обновява.", + "Delete all documents": "Изтрий всички документи", + "Delete all documents from devicestatus collection?": "Изтриване на всички документи от папката статус-устройство?", + "Database contains %1 records": "Базата с данни съдържа %1 записи", + "All records removed ...": "Всички записи премахнати ...", + "Delete all documents from devicestatus collection older than 30 days": "Изтрий всички файлове от папка статус устройство по-стари от 30 дена", + "Number of Days to Keep:": "Колко дни да се съхранява:", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "Тази опция премахва всички документи от папка статус устройство, които са по-стари от 30 дена. Полезно е, когато статусът на батерията не се обновява. ", + "Delete old documents from devicestatus collection?": "Сигирен ли си, че искаш да изтриеш всички документи от папка статус-устройство? ", + "Clean Mongo entries (glucose entries) database": "Изчистване на данните с измервания на КЗ от базата данни (Монго)", + "Delete all documents from entries collection older than 180 days": "Изтрий всички файлове от папка статус устройство по-стари от 180 дена", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Тази опция премахва всички документи от папка статус устройство, които са по-стари от 180 дена. Полезно е, когато статусът на батерията не се обновява правилно. ", + "Delete old documents": "Изтрий старите документи", + "Delete old documents from entries collection?": "Сигирен ли си, че искаш да изтриеш старите документи с въведени стойности за КЗ?", + "%1 is not a valid number": "%1 е невалиден номер.", + "%1 is not a valid number - must be more than 2": "%1 е невалиден номер - трябва да е по-голям от 2", + "Clean Mongo treatments database": "Почисти леченията в Mongo база данни", + "Delete all documents from treatments collection older than 180 days": "Почисти записаните лечения по-стари от 180 дена", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Тази опция премахва всички лечения, които са по-стари от 180 дена. Полезно е, когато статусът на батерията не се обновява. ", + "Delete old documents from treatments collection?": "Изтрий стари документи от папката статус-устройство?", + "Admin Tools": "Настройки на администратора", + "Nightscout reporting": "Найтскаут статистика", + "Cancel": "Откажи", + "Edit treatment": "Редакция на събитие", + "Duration": "Времетраене", + "Duration in minutes": "Времетраене в мин.", + "Temp Basal": "Временен базал", + "Temp Basal Start": "Начало на временен базал", + "Temp Basal End": "Край на временен базал", + "Percent": "Процент", + "Basal change in %": "Промяна на базала с %", + "Basal value": "Временен базал", + "Absolute basal value": "Базална стойност", + "Announcement": "Известяване", + "Loading temp basal data": "Зареждане на данни за временния базал", + "Save current record before changing to new?": "Запази текущият запис преди да промениш новия ", + "Profile Switch": "Смяна на профил", + "Profile": "Профил", + "General profile settings": "Основни настройки на профила", + "Title": "Заглавие", + "Database records": "Записи в базата с данни", + "Add new record": "Добави нов запис", + "Remove this record": "Премахни този запис", + "Clone this record to new": "Копирай този запис като нов", + "Record valid from": "Записът е валиден от ", + "Stored profiles": "Запаметени профили", + "Timezone": "Часова зона", + "Duration of Insulin Activity (DIA)": "Продължителност на инсулиновата активност DIA", + "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.": "Представя типичната продължителност на действието на инсулина. Варира между отделните пациенти и различни инсулини. Обикновено е 3-4 часа за пациентите с помпа. Нарича се още живот на инсулина ", + "Insulin to carb ratio (I:C)": "Съотношение инсулин/въглехидратите ICR I:C И:ВХ", + "Hours:": "часове:", + "hours": "часове", + "g/hour": "гр/час", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "грам въглехидрат към 1 единица инсулин. Съотношението колко грама въглехидрат се покриват от 1 единица инсулин.", + "Insulin Sensitivity Factor (ISF)": "Фактор на инсулинова чувствителност ISF ", + "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "мг/дл или ммол към 1 единица инсулин. Съотношението как се променя кръвната захар със всяка единица инсулинова корекция", + "Carbs activity / absorption rate": "Активност на въглехидратите / време за абсорбиране", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "грам за единица време. Представлява както промяната в COB за единица време, така и количеството ВХ които биха се усвоили за това време.", + "Basal rates [unit/hour]": "Базална стойност [единица/час]", + "Target BG range [mg/dL,mmol/L]": "Целеви диапазон на КЗ [мг/дл , ммол]", + "Start of record validity": "Начало на записа", + "Icicle": "Висящ", + "Render Basal": "Базал", + "Profile used": "Използван профил", + "Calculation is in target range.": "Калкулацията е в граници", + "Loading profile records ...": "Зареждане на профили", + "Values loaded.": "Стойностите за заредени.", + "Default values used.": "Стойностите по подразбиране са използвани.", + "Error. Default values used.": "Грешка. Стойностите по подразбиране са използвани.", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "Времевите интервали за долна граница на кз и горна граница на кз не съвпадат. Стойностите са възстановени по подразбиране.", + "Valid from:": "Валиден от", + "Save current record before switching to new?": "Запазване текущият запис преди превключване на нов?", + "Add new interval before": "Добави интервал преди", + "Delete interval": "Изтрий интервал", + "I:C": "И:ВХ", + "ISF": "Инсулинова чувствителност", + "Combo Bolus": "Двоен болус", + "Difference": "Разлика", + "New time": "Ново време", + "Edit Mode": "Редактиране", + "When enabled icon to start edit mode is visible": "Когато е активно ,иконката за редактиране ще се вижда", + "Operation": "Операция", + "Move": "Премести", + "Delete": "Изтрий", + "Move insulin": "Премести инсулин", + "Move carbs": "Премести ВХ", + "Remove insulin": "Изтрий инсулин", + "Remove carbs": "Изтрий ВХ", + "Change treatment time to %1 ?": "Да променя ли времето на събитието с %1?", + "Change carbs time to %1 ?": "Да променя ли времето на ВХ с %1?", + "Change insulin time to %1 ?": "Да променя ли времето на инсулина с %1?", + "Remove treatment ?": "Изтрий събитието", + "Remove insulin from treatment ?": "Да изтрия ли инсулина от събитието?", + "Remove carbs from treatment ?": "Да изтрия ли ВХ от събитието?", + "Rendering": "Показване на графика", + "Loading OpenAPS data of": "Зареждане на OpenAPS данни от", + "Loading profile switch data": "Зареждане на данни от сменения профил", + "Redirecting you to the Profile Editor to create a new profile.": "Грешни настройки на профила. \nНяма определен профил към избраното време. \nПрепращане към редактора на профила, за създаване на нов профил.", + "Pump": "Помпа", + "Sensor Age": "Възраст на сензора (ВС)", + "Insulin Age": "Възраст на инсулина (ВИ)", + "Temporary target": "Временна граница", + "Reason": "Причина", + "Eating soon": "Ядене скоро", + "Top": "Горе", + "Bottom": "Долу", + "Activity": "Активност", + "Targets": "Граници", + "Bolus insulin:": "Болус инсулин", + "Base basal insulin:": "Основен базален инсулин", + "Positive temp basal insulin:": "Положителен временен базален инсулин", + "Negative temp basal insulin:": "Отрицателен временен базален инсулин", + "Total basal insulin:": "Общо базален инсулин", + "Total daily insulin:": "Общо инсулин за деня", + "Unable to save Role": "Неуспешно запазване на Роля", + "Unable to delete Role": "Невъзможно изтриването на Роля", + "Database contains %1 roles": "Базата данни съдържа %1 роли", + "Edit Role": "Промени Роля", + "admin, school, family, etc": "администратор,училище,семейство и т.н.", + "Permissions": "Права", + "Are you sure you want to delete: ": "Потвърдете изтриването", + "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.": "Всяка роля ще има 1 или повече права. В * правото е маска, правата са йерархия използвайки : като разделител", + "Add new Role": "Добавете нова роля", + "Roles - Groups of People, Devices, etc": "Роли - Група хора,устройства,т.н.", + "Edit this role": "Промени тази роля", + "Admin authorized": "Оторизиран като администратор", + "Subjects - People, Devices, etc": "Субекти - Хора,Устройства,т.н.", + "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "Всеки обект ще има уникален ключ за достъп и 1 или повече роли. Кликнете върху ключа за достъп, за да отворите нов изглед с избрания обект, тази секретна връзка може след това да се споделя", + "Add new Subject": "Добави нов субект", + "Unable to save Subject": "Неуспешно запазване на Субект", + "Unable to delete Subject": "Невъзможно изтриването на субекта", + "Database contains %1 subjects": "Базата данни съдържа %1 субекти", + "Edit Subject": "Промени субект", + "person, device, etc": "човек,устройство,т.н.", + "role1, role2": "Роля1, Роля2", + "Edit this subject": "Промени този субект", + "Delete this subject": "Изтрий този субект", + "Roles": "Роли", + "Access Token": "Ключ за достъп", + "hour ago": "Преди час", + "hours ago": "Преди часове", + "Silence for %1 minutes": "Заглушаване за %1 минути", + "Check BG": "Проверка КЗ", + "BASAL": "Базал", + "Current basal": "Актуален базал", + "Sensitivity": "Инсулинова чувствителност (ISF)", + "Current Carb Ratio": "Актуално Въглехидратно Съотношение", + "Basal timezone": "Базална часова зона", + "Active profile": "Активен профил", + "Active temp basal": "Активен временен базал", + "Active temp basal start": "Старт на активен временен базал", + "Active temp basal duration": "Продължителност на Активен временен базал", + "Active temp basal remaining": "Оставащ Активен временен базал", + "Basal profile value": "Базален профил стойност", + "Active combo bolus": "Активен комбиниран болус", + "Active combo bolus start": "Активен комбиниран болус", + "Active combo bolus duration": "Продължителност на активния комбиниран болус", + "Active combo bolus remaining": "Оставащ активен комбиниран болус", + "BG Delta": "Дельта ГК", + "Elapsed Time": "Изминало време", + "Absolute Delta": "Абсолютно изменение", + "Interpolated": "Интерполирано", + "BWP": "БП", + "Urgent": "Спешно", + "Warning": "Предупреждение", + "Info": "Информация", + "Lowest": "Най-ниско", + "Snoozing high alarm since there is enough IOB": "Изключване на аларма за висока КЗ, тъй като има достатъчно IOB", + "Check BG, time to bolus?": "Провери КЗ, не е ли време за болус?", + "Notice": "Известие", + "required info missing": "Липсва необходима информация", + "Insulin on Board": "Активен Инсулин (IOB)", + "Current target": "Настояща целева КЗ", + "Expected effect": "Очакван ефект", + "Expected outcome": "Очакван резултат", + "Carb Equivalent": "Равностойност във ВХ", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "Излишният инсулин %1U е повече от необходимия за достигане до долната граница, ВХ не се вземат под внимание", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "Излишният инсулин %1U е повече от необходимия за достигане до долната граница, ПРОВЕРИ ДАЛИ IOB СЕ ПОКРИВА ОТ ВЪГЛЕХИДРАТИТЕ", + "%1U reduction needed in active insulin to reach low target, too much basal?": "%1U намаляне е необходимо в активния инсулин до достигане до долната граница, прекалено висок базал?", + "basal adjustment out of range, give carbs?": "Корекция на базала не е възможна, добавка на въглехидрати? ", + "basal adjustment out of range, give bolus?": "Корекция на базала не е възможна, добавка на болус? ", + "above high": "над горната", + "below low": "под долната", + "Projected BG %1 target": "Предполагаемата КЗ %1 в граници", + "aiming at": "цел към", + "Bolus %1 units": "Болус %1 единици", + "or adjust basal": "или корекция на базала", + "Check BG using glucometer before correcting!": "Провери КЗ с глюкомер, преди кореция!", + "Basal reduction to account %1 units:": "Намаляне на базала с %1 единици", + "30m temp basal": "30м временен базал", + "1h temp basal": "1 час временен базал", + "Cannula change overdue!": "Времето за смяна на сет просрочено", + "Time to change cannula": "Време за смяна на сет", + "Change cannula soon": "Смени сета скоро", + "Cannula age %1 hours": "Сетът е на %1 часове", + "Inserted": "Поставен", + "CAGE": "ВС", + "COB": "АВХ", + "Last Carbs": "Последни ВХ", + "IAGE": "ИнсСрок", + "Insulin reservoir change overdue!": "Смянатата на резервоара просрочена", + "Time to change insulin reservoir": "Време е за смяна на резервоара", + "Change insulin reservoir soon": "Смени резервоара скоро", + "Insulin reservoir age %1 hours": "Резервоарът е на %1 часа", + "Changed": "Сменен", + "IOB": "АИ", + "Careportal IOB": "АИ от Кеърпортал", + "Last Bolus": "Последен болус", + "Basal IOB": "Базален АИ", + "Source": "Източник", + "Stale data, check rig?": "Стари данни, провери телефона", + "Last received:": "Последно получени", + "%1m ago": "преди %1 мин.", + "%1h ago": "преди %1 час", + "%1d ago": "преди %1 ден", + "RETRO": "РЕТРО", + "SAGE": "ВС", + "Sensor change/restart overdue!": "Смяната/рестартът на сензора са пресрочени", + "Time to change/restart sensor": "Време за смяна/рестарт на сензора", + "Change/restart sensor soon": "Смени/рестартирай сензора скоро", + "Sensor age %1 days %2 hours": "Сензорът е на %1 дни %2 часа ", + "Sensor Insert": "Поставяне на сензора", + "Sensor Start": "Стартиране на сензора", + "days": "дни", + "Insulin distribution": "разпределение на инсулина", + "To see this report, press SHOW while in this view": "За да видите тази статистика, натиснете ПОКАЖИ", + "AR2 Forecast": "AR2 прогнози", + "OpenAPS Forecasts": "OpenAPS прогнози", + "Temporary Target": "временна цел", + "Temporary Target Cancel": "Отмяна на временна цел", + "OpenAPS Offline": "OpenAPS спрян", + "Profiles": "Профили", + "Time in fluctuation": "Време в промяна", + "Time in rapid fluctuation": "Време в бърза промяна", + "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:": "Това е само грубо изчисление, което може да е много неточно и не изключва реалния кръвен тест. Формулата, кокято е използвана е взета от:", + "Filter by hours": "Филтър по часове", + "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.": "Време в промяна и време в бърза промяна измерват % от време в разгледания период, през който КЗ са се променяли бързо или много бързо. По-ниски стойности са по-добри.", + "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.": "Средната дневна промяна е сумата на всички промени в стойностите на КЗ за разгледания период, разделена на броя дни в периода. По-ниската стойност е по-добра", + "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "Средната промяна за час е сумата на всички промени в стойностите на КЗ за разгледания период, разделена на броя часове в периода. По-ниската стойност е по-добра", + "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "Този параметър се изчислява от квадрата на растоянието на всички стойности на КЗ извън нормата, сумирането им, разделяне на броят им и прилагане на корен квадрат, Този измерител е подобен на време в границите (TiR ) , но тук стойностите с голямо отдалечаване са с по-голяма тежест. По-ниските стойности на този показател са по-добри.", + "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">тук.", + "Mean Total Daily Change": "Средна промяна за ден", + "Mean Hourly Change": "Средна промяна за час", + "FortyFiveDown": "лек спад", + "FortyFiveUp": "леко покачване", + "Flat": "равна", + "SingleUp": "покачване", + "SingleDown": "спад", + "DoubleDown": "бързо спадане", + "DoubleUp": "бързо покачване", + "virtAsstUnknown": "Тази стойност е неизвестна в момента. Моля вижте вашият Nightscout сайт за повече подробности.", + "virtAsstTitleAR2Forecast": "AR2 прогноза", + "virtAsstTitleCurrentBasal": "Текущ базал", + "virtAsstTitleCurrentCOB": "Активни ВХ", + "virtAsstTitleCurrentIOB": "Активен инсулин", + "virtAsstTitleLaunch": "Добре дошли в Nightscout", + "virtAsstTitleLoopForecast": "Loop прогноза", + "virtAsstTitleLastLoop": "Последен Loop", + "virtAsstTitleOpenAPSForecast": "OpenAPS прогнозa", + "virtAsstTitlePumpReservoir": "Оставащ инсулин", + "virtAsstTitlePumpBattery": "Батерия на помпата", + "virtAsstTitleRawBG": "Текуща КЗ (нефилтр)", + "virtAsstTitleUploaderBattery": "Батерия на качващия тел", + "virtAsstTitleCurrentBG": "Текуща КЗ", + "virtAsstTitleFullStatus": "Пълен статус", + "virtAsstTitleCGMMode": "CGM режим", + "virtAsstTitleCGMStatus": "CGM статус", + "virtAsstTitleCGMSessionAge": "Възраст на сензора", + "virtAsstTitleCGMTxStatus": "Статус на трансмитер", + "virtAsstTitleCGMTxAge": "Възраст на трансмитер", + "virtAsstTitleCGMNoise": "Шум", + "virtAsstTitleDelta": "Делта на КЗ", + "virtAsstStatus": "%1 и %2 от %3.\n", + "virtAsstBasal": "%1 současný bazál je %2 jednotek za hodinu", + "virtAsstBasalTemp": "%1 dočasný bazál %2 jednotek za hodinu skončí %3", + "virtAsstIob": "a máte %1 jednotek aktivního inzulínu.", + "virtAsstIobIntent": "Máte %1 jednotek aktivního inzulínu", + "virtAsstIobUnits": "%1 единици от\n", + "virtAsstLaunch": "Какво искате да проверите в Nightscout?", + "virtAsstPreamble": "Вашият", + "virtAsstPreamble3person": "%1 има", + "virtAsstNoInsulin": "без", + "virtAsstUploadBattery": "Батерията на качващия телефон е %1", + "virtAsstReservoir": "Имате оставащи %1 единици", + "virtAsstPumpBattery": "Батерията на помпата е на %1 %2", + "virtAsstUploaderBattery": "Батерията на качващия телефон е %1", + "virtAsstLastLoop": "Последният успешен цикъл беше в %1", + "virtAsstLoopNotAvailable": "Този плъгин изглежда не е активиран", + "virtAsstLoopForecastAround": "Според loop прогнозата ще сте около %1 през следващите %2", + "virtAsstLoopForecastBetween": "Според loop прогнозата ще сте между %1 и %2 през следващите %3", + "virtAsstAR2ForecastAround": "Според AR2 прогнозата ще сте около %1 през следващите %2", + "virtAsstAR2ForecastBetween": "Според АР2 прогнозата ще сте между %1 и %2 през следващите %3", + "virtAsstForecastUnavailable": "Невъзможо е прогнозиране с тези данни", + "virtAsstRawBG": "Чистата КЗ е %1", + "virtAsstOpenAPSForecast": "Прогнозираната захар според OpenAPS е %1", + "virtAsstCob3person": "%1 има %2 активни въглехидрати", + "virtAsstCob": "Имате %1 активни въглехидрати", + "virtAsstCGMMode": "Режим на сензора е %1 от %2", + "virtAsstCGMStatus": "Статус на сензора беше %1 от %2", + "virtAsstCGMSessAge": "Сесията на сензора е активна от %1 дни и %2 часа.", + "virtAsstCGMSessNotStarted": "Няма активен сензор в момента.", + "virtAsstCGMTxStatus": "Статус на трансмитера беше %1 от %2", + "virtAsstCGMTxAge": "Трансмитерът ви е на %1 дни.", + "virtAsstCGMNoise": "Шум на сензора беше %1 в %2", + "virtAsstCGMBattOne": "Батерията беше %1 волта в %2", + "virtAsstCGMBattTwo": "Батерийте са %1 волта и %2 волта в %3.", + "virtAsstDelta": "Делтата беше %1 между %2 и %3.", + "virtAsstDeltaEstimated": "Очакваната делта беше %1 между %2 и %3.", + "virtAsstUnknownIntentTitle": "Неуспешен опит", + "virtAsstUnknownIntentText": "Съжалявам, не разбирам за какво питате.", + "Fat [g]": "Мазнини [гр]", + "Protein [g]": "Протеини [гр]", + "Energy [kJ]": "Енергия [kJ]", + "Clock Views:": "Часовник изглед:", + "Clock": "Часовник", + "Color": "Цвят", + "Simple": "Прост", + "TDD average": "Обща дневна доза средно", + "Bolus average": "Среден болус", + "Basal average": "Среден базал", + "Base basal average:": "Среден базов базал:", + "Carbs average": "Въглехидрати средно", + "Eating Soon": "Преди хранене", + "Last entry {0} minutes ago": "Последен запис преди {0} минути", + "change": "промяна", + "Speech": "Глас", + "Target Top": "Горна граница", + "Target Bottom": "Долна граница", + "Canceled": "Отказан", + "Meter BG": "Измерена КЗ", + "predicted": "прогнозна", + "future": "бъдеще", + "ago": "преди", + "Last data received": "Последни данни преди", + "Clock View": "Изглед часовник", + "Protein": "Протеини", + "Fat": "Мазнини", + "Protein average": "Протеини средно", + "Fat average": "Мазнини средно", + "Total carbs": "Общо въглехидрати", + "Total protein": "Общо протеини", + "Total fat": "Общо мазнини", + "Database Size": "Големина на базата данни", + "Database Size near its limits!": "Базата данни е близо до лимита!", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "Размерът на базата е %1 Мб от %2 Мб. Моля да я архивирате и почистите!", + "Database file size": "Файл на БД", + "%1 MiB of %2 MiB (%3%)": "%1 Мб от %2 Мб (%3%)", + "Data size": "Размер на данни", + "virtAsstDatabaseSize": "%1 Мб. Това са %2% от свободното пространство.", + "virtAsstTitleDatabaseSize": "Файл на БД", + "Carbs/Food/Time": "Въгл/Храна/Време", + "You have administration messages": "Имате съобшение от администратор", + "Admin messages in queue": "Съобшения от админ в опашката", + "Queue empty": "Опашката е празна", + "There are no admin messages in queue": "Няма съобщения от админ в опашката", + "Please sign in using the API_SECRET to see your administration messages": "Логнете се с API_SECRET за да видите съобщенията от администратор", + "Reads enabled in default permissions": "Четенето позволено в правата по поодразбиране", + "Data reads enabled": "Четенето на данни позволено", + "Data writes enabled": "Записа на данни позволено", + "Data writes not enabled": "Записа на данни рабранен", + "Color prediction lines": "Линии на евентуална КЗ", + "Release Notes": "Бележки към тази версия", + "Check for Updates": "Проверка за нови версии", + "Open Source": "Отворен код", + "Nightscout Info": "Nightscout инфо", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "Основната цел на това е да визуализира колко успешно се справя системата Loop. Може да работи и с други системи, независимо отворени или затворени. В зависимост от ползвания софтуер може да има дупки в графиката или тя да е напълно празна. Винаги преглеждайте за цялост на графиката. Стартирайте с период от един ден и плавно увеличавайте,", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer вклюва отместване на времето. Например ако един ден закусвате в 7:00 и в 8:00 на следващия то кривата на средната КЗ за тези 2 дни ще бъде гладка и няма да показва адекватната реакция след закуска. Превъртането на времето ще изчисли следната времева стойност на тези харанения и ще премести отмести всички данни ( въгл, инсулин, базал и др ) от двата дни в тази зона, така и двете хранения ще съвпадат със средното време.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "В този пример всички данни от първия ден са изместени 30 минути напред, а тези от втория 30 минути назад във времето така че все едно сте закусвали в 7:30 в двата дни. Това ви показва средната КЗ в следствие на храненето.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Отместването оцветява периода след средното време на старт на хранене в сиво, за ПИД( Продължителност на Инсулинвото Действие ). Понеже всички данни за деня са отместени, кривите извън сивата зона може да не са акуратни. ", + "Note that time shift is available only when viewing multiple days.": "Отместването е възможно само когато преглеждате няколко дни.", + "Please select a maximum of two weeks duration and click Show again.": "Моля изберете максимално 2 седмици и натиснете Покажи отново.", + "Show profiles table": "Покажи таблицата с профили", + "Show predictions": "Покажи прогнози", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Timeshift on meals larger than %1 g carbs consumed between %2 and %3", + "Previous": "Предишен", + "Previous day": "Преден ден", + "Next day": "Следващ ден", + "Next": "Напред", + "Temp basal delta": "Промяна на врем базал", + "Authorized by token": "Ауторизиран чрез токен", + "Auth role": "Авторизационна роля", + "view without token": "виж без токен", + "Remove stored token": "Премахни токен", + "Weekly Distribution": "Седмично разпределение", + "Failed authentication": "Неуспешна ауторизация", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "Устр с IP адрес %1 опита да се ауторизира в Nightscout с грешни парола или токен. Проверете в софтуера си дали не е сгрешен вашия API_SECRET или токен?", + "Default (with leading zero and U)": "Стандартен ( с водеща нула и Е)", + "Concise (with U, without leading zero)": "Кратък( с Е, без водеща нула)", + "Minimal (without leading zero and U)": "Минимален (без водеща нула и Е)", + "Small Bolus Display": "Малък болусен бутон", + "Large Bolus Display": "Голям болусен бутон", + "Bolus Display Threshold": "Отстояние на болусния бутон", + "%1 U and Over": "%1 Е и повече", + "Event repeated %1 times.": "Event repeated %1 times.", + "minutes": "minutes", + "Last recorded %1 %2 ago.": "Last recorded %1 %2 ago.", + "Security issue": "Security issue", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.", + "less than 1": "less than 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system." +} diff --git a/translations/cs_CZ.json b/translations/cs_CZ.json new file mode 100644 index 00000000000..4815eabaf8d --- /dev/null +++ b/translations/cs_CZ.json @@ -0,0 +1,707 @@ +{ + "Listening on port": "Naslouchám na portu", + "Mo": "Po", + "Tu": "Út", + "We": "St", + "Th": "Čt", + "Fr": "Pá", + "Sa": "So", + "Su": "Ne", + "Monday": "Pondělí", + "Tuesday": "Úterý", + "Wednesday": "Středa", + "Thursday": "Čtvrtek", + "Friday": "Pátek", + "Saturday": "Sobota", + "Sunday": "Neděle", + "Category": "Kategorie", + "Subcategory": "Podkategorie", + "Name": "Jméno", + "Today": "Dnes", + "Last 2 days": "Poslední 2 dny", + "Last 3 days": "Poslední 3 dny", + "Last week": "Poslední týden", + "Last 2 weeks": "Poslední 2 týdny", + "Last month": "Poslední měsíc", + "Last 3 months": "Poslední 3 měsíce", + "From": "Od", + "To": "Do", + "Notes": "Poznámky", + "Food": "Jídlo", + "Insulin": "Inzulín", + "Carbs": "Sacharidy", + "Notes contain": "Poznámky obsahují", + "Target BG range bottom": "Cílová glykémie dolní", + "top": "horní", + "Show": "Zobrazit", + "Display": "Zobraz", + "Loading": "Nahrávám", + "Loading profile": "Nahrávám profil", + "Loading status": "Nahrávám status", + "Loading food database": "Nahrávám databázi jídel", + "not displayed": "není zobrazeno", + "Loading CGM data of": "Nahrávám CGM data", + "Loading treatments data of": "Nahrávám data ošetření", + "Processing data of": "Zpracovávám data", + "Portion": "Porce", + "Size": "Velikost", + "(none)": "(Žádný)", + "None": "Žádný", + "": "<Žádný>", + "Result is empty": "Prázdný výsledek", + "Day to day": "Den po dni", + "Week to week": "Týden po týdnu", + "Daily Stats": "Denní statistiky", + "Percentile Chart": "Percentil", + "Distribution": "Rozložení", + "Hourly stats": "Statistika po hodinách", + "netIOB stats": "statistiky netIOB", + "temp basals must be rendered to display this report": "pro zobrazení reportu musí být vykresleny dočasné bazály", + "No data available": "Žádná dostupná data", + "Low": "Nízká", + "In Range": "V rozsahu", + "Period": "Období", + "High": "Vysoká", + "Average": "Průměr", + "Low Quartile": "Nízký kvartil", + "Upper Quartile": "Vysoký kvartil", + "Quartile": "Kvartil", + "Date": "Datum", + "Normal": "Normální", + "Median": "Medián", + "Readings": "Záznamů", + "StDev": "Směrodatná odchylka", + "Daily stats report": "Denní statistiky", + "Glucose Percentile report": "Tabulka percentilu glykémií", + "Glucose distribution": "Rozložení glykémií", + "days total": "dní celkem", + "Total per day": "Celkem za den", + "Overall": "Celkem", + "Range": "Rozsah", + "% of Readings": "% záznamů", + "# of Readings": "počet záznamů", + "Mean": "Střední hodnota", + "Standard Deviation": "Standardní odchylka", + "Max": "Max", + "Min": "Min", + "A1c estimation*": "Předpokládané HBA1c*", + "Weekly Success": "Týdenní úspěšnost", + "There is not sufficient data to run this report. Select more days.": "Není dostatek dat. Vyberte delší časové období.", + "Using stored API secret hash": "Používám uložený hash API hesla", + "No API secret hash stored yet. You need to enter API secret.": "Není uložený žádný hash API hesla. Musíte zadat API heslo.", + "Database loaded": "Databáze načtena", + "Error: Database failed to load": "Chyba při načítání databáze", + "Error": "Chyba", + "Create new record": "Vytvořit nový záznam", + "Save record": "Uložit záznam", + "Portions": "Porce", + "Unit": "Jedn", + "GI": "GI", + "Edit record": "Upravit záznam", + "Delete record": "Smazat záznam", + "Move to the top": "Přesuň na začátek", + "Hidden": "Skrytý", + "Hide after use": "Skryj po použití", + "Your API secret must be at least 12 characters long": "Vaše API heslo musí mít alespoň 12 znaků", + "Bad API secret": "Chybné API heslo", + "API secret hash stored": "Hash API hesla uložen", + "Status": "Stav", + "Not loaded": "Nenačtený", + "Food Editor": "Editor jídel", + "Your database": "Vaše databáze", + "Filter": "Filtr", + "Save": "Ulož", + "Clear": "Vymaž", + "Record": "Záznam", + "Quick picks": "Rychlý výběr", + "Show hidden": "Zobraz skryté", + "Your API secret or token": "Vaše API heslo nebo token", + "Remember this device. (Do not enable this on public computers.)": "Pamatovat si toto zařízení. (nepovolujte na veřejných počítačích.)", + "Treatments": "Ošetření", + "Time": "Čas", + "Event Type": "Typ události", + "Blood Glucose": "Glykémie", + "Entered By": "Zadal", + "Delete this treatment?": "Vymazat toto ošetření?", + "Carbs Given": "Sacharidů", + "Insulin Given": "Inzulín", + "Event Time": "Čas události", + "Please verify that the data entered is correct": "Prosím zkontrolujte, zda jsou údaje zadány správně", + "BG": "Glykémie", + "Use BG correction in calculation": "Použij korekci na glykémii", + "BG from CGM (autoupdated)": "Glykémie z CGM (automaticky aktualizovaná)", + "BG from meter": "Glykémie z glukoměru", + "Manual BG": "Ručně zadaná glykémie", + "Quickpick": "Rychlý výběr", + "or": "nebo", + "Add from database": "Přidat z databáze", + "Use carbs correction in calculation": "Použij korekci na sacharidy", + "Use COB correction in calculation": "Použij korekci na COB", + "Use IOB in calculation": "Použij IOB ve výpočtu", + "Other correction": "Jiná korekce", + "Rounding": "Zaokrouhlení", + "Enter insulin correction in treatment": "Zahrň inzulín do záznamu ošetření", + "Insulin needed": "Potřebný inzulín", + "Carbs needed": "Potřebné sach", + "Carbs needed if Insulin total is negative value": "Chybějící sacharidy v případě, že výsledek je záporný", + "Basal rate": "Bazál", + "60 minutes earlier": "60 min předem", + "45 minutes earlier": "45 min předem", + "30 minutes earlier": "30 min předem", + "20 minutes earlier": "20 min předem", + "15 minutes earlier": "15 min předem", + "Time in minutes": "Čas v minutách", + "15 minutes later": "15 min po", + "20 minutes later": "20 min po", + "30 minutes later": "30 min po", + "45 minutes later": "45 min po", + "60 minutes later": "60 min po", + "Additional Notes, Comments": "Dalši poznámky, komentáře", + "RETRO MODE": "V MINULOSTI", + "Now": "Nyní", + "Other": "Jiný", + "Submit Form": "Odeslat formulář", + "Profile Editor": "Editor profilu", + "Reports": "Výkazy", + "Add food from your database": "Přidat jidlo z Vaší databáze", + "Reload database": "Znovu nahraj databázi", + "Add": "Přidej", + "Unauthorized": "Neautorizováno", + "Entering record failed": "Vložení záznamu selhalo", + "Device authenticated": "Zařízení ověřeno", + "Device not authenticated": "Zařízení není ověřeno", + "Authentication status": "Stav ověření", + "Authenticate": "Ověřit", + "Remove": "Vymazat", + "Your device is not authenticated yet": "Toto zařízení nebylo dosud ověřeno", + "Sensor": "Senzor", + "Finger": "Glukoměr", + "Manual": "Ručně", + "Scale": "Měřítko", + "Linear": "Lineární", + "Logarithmic": "Logaritmické", + "Logarithmic (Dynamic)": "Logaritmické (Dynamické)", + "Insulin-on-Board": "Aktivní inzulín", + "Carbs-on-Board": "Aktivní sacharidy", + "Bolus Wizard Preview": "BWP-Náhled bolusového kalk.", + "Value Loaded": "Hodnoty načteny", + "Cannula Age": "Stáří kanyly", + "Basal Profile": "Bazál", + "Silence for 30 minutes": "Ztlumit na 30 minut", + "Silence for 60 minutes": "Ztlumit na 60 minut", + "Silence for 90 minutes": "Ztlumit na 90 minut", + "Silence for 120 minutes": "Ztlumit na 120 minut", + "Settings": "Nastavení", + "Units": "Jednotky", + "Date format": "Formát datumu", + "12 hours": "12 hodin", + "24 hours": "24 hodin", + "Log a Treatment": "Záznam ošetření", + "BG Check": "Kontrola glykémie", + "Meal Bolus": "Bolus na jídlo", + "Snack Bolus": "Bolus na svačinu", + "Correction Bolus": "Bolus na glykémii", + "Carb Correction": "Přídavek sacharidů", + "Note": "Poznámka", + "Question": "Otázka", + "Exercise": "Cvičení", + "Pump Site Change": "Výměna setu", + "CGM Sensor Start": "Spuštění senzoru", + "CGM Sensor Stop": "Zastavení senzoru", + "CGM Sensor Insert": "Výměna senzoru", + "Sensor Code": "Kód senzoru", + "Transmitter ID": "ID vysílače", + "Dexcom Sensor Start": "Spuštění senzoru Dexcom", + "Dexcom Sensor Change": "Výměna senzoru Dexcom", + "Insulin Cartridge Change": "Výměna inzulínu", + "D.A.D. Alert": "Hlášení psa", + "Glucose Reading": "Hodnota glykémie", + "Measurement Method": "Metoda měření", + "Meter": "Glukoměr", + "Amount in grams": "Množství v gramech", + "Amount in units": "Množství v jednotkách", + "View all treatments": "Zobraz všechny ošetření", + "Enable Alarms": "Povolit alarmy", + "Pump Battery Change": "Výměna baterie pumpy", + "Pump Battery Age": "Stáří baterie v pumpě", + "Pump Battery Low Alarm": "Upozornění na nízký stav baterie pumpy", + "Pump Battery change overdue!": "Překročen čas pro výměnu baterie!", + "When enabled an alarm may sound.": "Při povoleném alarmu zní zvuk.", + "Urgent High Alarm": "Urgentní vysoká glykémie", + "High Alarm": "Vysoká glykémie", + "Low Alarm": "Nízká glykémie", + "Urgent Low Alarm": "Urgentní nízká glykémie", + "Stale Data: Warn": "Zastaralá data", + "Stale Data: Urgent": "Zastaralá data urgentní", + "mins": "min", + "Night Mode": "Noční mód", + "When enabled the page will be dimmed from 10pm - 6am.": "Když je povoleno, obrazovka je ztlumena 22:00 - 6:00.", + "Enable": "Povoleno", + "Show Raw BG Data": "Zobraz RAW data", + "Never": "Nikdy", + "Always": "Vždy", + "When there is noise": "Při šumu", + "When enabled small white dots will be displayed for raw BG data": "Když je povoleno, malé tečky budou zobrazeny pro RAW data", + "Custom Title": "Vlastní název stránky", + "Theme": "Téma", + "Default": "Výchozí", + "Colors": "Barevné", + "Colorblind-friendly colors": "Pro barvoslepé", + "Reset, and use defaults": "Vymaž a nastav výchozí hodnoty", + "Calibrations": "Kalibrace", + "Alarm Test / Smartphone Enable": "Test alarmu", + "Bolus Wizard": "Bolusový kalkulátor", + "in the future": "v budoucnosti", + "time ago": "min zpět", + "hr ago": "hod zpět", + "hrs ago": "hod zpět", + "min ago": "min zpět", + "mins ago": "min zpět", + "day ago": "den zpět", + "days ago": "dnů zpět", + "long ago": "dlouho zpět", + "Clean": "Čistý", + "Light": "Lehký", + "Medium": "Střední", + "Heavy": "Velký", + "Treatment type": "Typ ošetření", + "Raw BG": "Glykémie z RAW dat", + "Device": "Zařízení", + "Noise": "Šum", + "Calibration": "Kalibrace", + "Show Plugins": "Zobrazuj pluginy", + "About": "O aplikaci", + "Value in": "Hodnota v", + "Carb Time": "Čas jídla", + "Language": "Jazyk", + "Add new": "Přidat nový", + "g": "g", + "ml": "ml", + "pcs": "ks", + "Drag&drop food here": "Sem táhni & pusť jídlo", + "Care Portal": "Portál ošetření", + "Medium/Unknown": "Střední/Neznámá", + "IN THE FUTURE": "V BUDOUCNOSTI", + "Order": "Pořadí", + "oldest on top": "nejstarší nahoře", + "newest on top": "nejnovější nahoře", + "All sensor events": "Všechny události sensoru", + "Remove future items from mongo database": "Odebrání položek v budoucnosti z Mongo databáze", + "Find and remove treatments in the future": "Najít a odstranit záznamy ošetření v budoucnosti", + "This task find and remove treatments in the future.": "Tento úkol najde a odstraní ošetření v budoucnosti.", + "Remove treatments in the future": "Odstraň ošetření v budoucnosti", + "Find and remove entries in the future": "Najít a odstranit CGM data v budoucnosti", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "Tento úkol najde a odstraní CGM data v budoucnosti vzniklé špatně nastaveným datem v uploaderu.", + "Remove entries in the future": "Odstraň CGM data v budoucnosti", + "Loading database ...": "Nahrávám databázi ...", + "Database contains %1 future records": "Databáze obsahuje %1 záznamů v budoucnosti", + "Remove %1 selected records?": "Odstranit %1 vybraných záznamů?", + "Error loading database": "Chyba při nahrávání databáze", + "Record %1 removed ...": "Záznam %1 odstraněn ...", + "Error removing record %1": "Chyba při odstaňování záznamu %1", + "Deleting records ...": "Odstraňování záznamů ...", + "%1 records deleted": "%1 záznamů odstraněno", + "Clean Mongo status database": "Vyčištění Mongo databáze statusů", + "Delete all documents from devicestatus collection": "Odstranění všech záznamů z kolekce devicestatus", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "Tento úkol odstraní všechny dokumenty z kolekce devicestatus. Je to vhodné udělat, pokud se ukazatel stavu baterie neobnovuje správně.", + "Delete all documents": "Odstranit všechny dokumenty", + "Delete all documents from devicestatus collection?": "Odstranit všechny dokumenty z kolekce devicestatus?", + "Database contains %1 records": "Databáze obsahuje %1 záznamů", + "All records removed ...": "Všechny záznamy odstraněny ...", + "Delete all documents from devicestatus collection older than 30 days": "Odstranit všechny dokumenty z tabulky devicestatus starší než 30 dní", + "Number of Days to Keep:": "Počet dní k zachovaní:", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "Tento úkol odstraní všechny záznamy z tabulky devicestatus. Je to vhodné udělat, pokud se ukazatel stavu baterie neukazuje správně.", + "Delete old documents from devicestatus collection?": "Odstranit všechny staré záznamy z tabulky devicestatus?", + "Clean Mongo entries (glucose entries) database": "Vymazat záznamy (glykémie) z Mongo databáze", + "Delete all documents from entries collection older than 180 days": "Odstranit z kolekce entries všechny záznamy starší než 180 dní", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Tato úloha odstraní záznamy z kolekce entries, které jsou starší než 180 dní. Je vhodné ji spustit, pokud máte problémy se zobrazováním stavu baterie uploaderu.", + "Delete old documents": "Smazat staré záznamy", + "Delete old documents from entries collection?": "Odstranit staré záznamy z kolekce entries?", + "%1 is not a valid number": "%1 není platné číslo", + "%1 is not a valid number - must be more than 2": "%1 není platné číslo - musí být větší než 2", + "Clean Mongo treatments database": "Vyčistit kolekci treatments v Mongo databázi", + "Delete all documents from treatments collection older than 180 days": "Odstranit z kolekce treatments všechny záznamy starší než 180 dní", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Tato úloha odstraní záznamy z kolekce treatments, které jsou starší než 180 dní. Je vhodné ji spustit, pokud máte problémy se zobrazováním stavu baterie uploaderu.", + "Delete old documents from treatments collection?": "Odstranit staré záznamy z kolekce treatments?", + "Admin Tools": "Nástroje pro správu", + "Nightscout reporting": "Nightscout - Výkazy", + "Cancel": "Zrušit", + "Edit treatment": "Upravit ošetření", + "Duration": "Doba trvání", + "Duration in minutes": "Doba trvání v minutách", + "Temp Basal": "Dočasný bazál", + "Temp Basal Start": "Dočasný bazál začátek", + "Temp Basal End": "Dočasný bazál konec", + "Percent": "Procenta", + "Basal change in %": "Změna bazálu v %", + "Basal value": "Hodnota bazálu", + "Absolute basal value": "Absolutní hodnota bazálu", + "Announcement": "Oznámení", + "Loading temp basal data": "Nahrávám dočasné bazály", + "Save current record before changing to new?": "Uložit současný záznam před změnou na nový?", + "Profile Switch": "Přepnutí profilu", + "Profile": "Profil", + "General profile settings": "Obecná nastavení profilu", + "Title": "Název", + "Database records": "Záznamy v databázi", + "Add new record": "Přidat nový záznam", + "Remove this record": "Vymazat tento záznam", + "Clone this record to new": "Zkopíruj tento záznam do nového", + "Record valid from": "Záznam platný od", + "Stored profiles": "Uložené profily", + "Timezone": "Časová zóna", + "Duration of Insulin Activity (DIA)": "Doba působnosti inzulínu (DIA)", + "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.": "Představuje typickou dobu, po kterou inzulín působí. Bývá různá podle pacienta a inzulínu. Typicky 3-4 hodiny pro pacienty s pumpou.", + "Insulin to carb ratio (I:C)": "Inzulíno-sacharidový poměr (I:C).", + "Hours:": "Hodin:", + "hours": "hodin", + "g/hour": "g/hod", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "gramy na jednotku inzulínu. Poměr, jaké množství sacharidů pokryje jednotku inzulínu.", + "Insulin Sensitivity Factor (ISF)": "Citlivost inzulínu (ISF)", + "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "mg/dL nebo mmol/L na jednotku inzulínu. Poměr, jak se změní glykémie po podaní jednotky inzulínu", + "Carbs activity / absorption rate": "Rychlost absorbce sacharidů", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "gramy za jednotku času. Reprezentuje jak změnu COB za jednoku času, tak množství sacharidů, které se za tu dobu projevily. Křivka absorbce sacharidů je mnohem méně pochopitelná než IOB, ale může být aproximována počáteční pauzou následovanou konstantní hodnotou absorbce (g/hod).", + "Basal rates [unit/hour]": "Bazály [U/hod].", + "Target BG range [mg/dL,mmol/L]": "Cílový rozsah glykémií [mg/dL,mmol/L]", + "Start of record validity": "Začátek platnosti záznamu", + "Icicle": "Rampouch", + "Render Basal": "Zobrazení bazálu", + "Profile used": "Použitý profil", + "Calculation is in target range.": "Kalkulace je v cílovém rozsahu.", + "Loading profile records ...": "Nahrávám profily ...", + "Values loaded.": "Data nahrána.", + "Default values used.": "Použity výchozí hodnoty.", + "Error. Default values used.": "CHYBA: Použity výchozí hodnoty.", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "Rozsahy časů pro limity glykémií si neodpovídají. Budou nastaveny výchozí hodnoty.", + "Valid from:": "Platné od:", + "Save current record before switching to new?": "Uložit současný záznam před přepnutím na nový?", + "Add new interval before": "Přidat nový interval před", + "Delete interval": "Smazat interval", + "I:C": "I:C", + "ISF": "ISF", + "Combo Bolus": "Kombinovaný bolus", + "Difference": "Rozdíl", + "New time": "Nový čas", + "Edit Mode": "Editační mód", + "When enabled icon to start edit mode is visible": "Pokud je povoleno, ikona pro vstup do editačního módu je zobrazena", + "Operation": "Operace", + "Move": "Přesunout", + "Delete": "Odstranit", + "Move insulin": "Přesunout inzulín", + "Move carbs": "Přesunout sacharidy", + "Remove insulin": "Odstranit inzulín", + "Remove carbs": "Odstranit sacharidy", + "Change treatment time to %1 ?": "Změnit čas ošetření na %1 ?", + "Change carbs time to %1 ?": "Změnit čas sacharidů na %1 ?", + "Change insulin time to %1 ?": "Změnit čas inzulínu na %1 ?", + "Remove treatment ?": "Odstranit ošetření ?", + "Remove insulin from treatment ?": "Odstranit inzulín z ošetření ?", + "Remove carbs from treatment ?": "Odstranit sacharidy z ošetření ?", + "Rendering": "Vykresluji", + "Loading OpenAPS data of": "Nahrávám OpenAPS data z", + "Loading profile switch data": "Nahrávám data přepnutí profilu", + "Redirecting you to the Profile Editor to create a new profile.": "Provádím přesměrování na editor profilu pro zadání nového profilu.", + "Pump": "Pumpa", + "Sensor Age": "Stáří senzoru", + "Insulin Age": "Stáří inzulínu", + "Temporary target": "Dočasný cíl", + "Reason": "Důvod", + "Eating soon": "Následuje jídlo", + "Top": "Horní", + "Bottom": "Dolní", + "Activity": "Aktivita", + "Targets": "Cíl", + "Bolus insulin:": "Bolusový inzulín:", + "Base basal insulin:": "Základní bazální inzulín:", + "Positive temp basal insulin:": "Pozitivní dočasný bazální inzulín:", + "Negative temp basal insulin:": "Negativní dočasný bazální inzulín:", + "Total basal insulin:": "Celkový bazální inzulín:", + "Total daily insulin:": "Celkový denní inzulín:", + "Unable to save Role": "Role nelze uložit", + "Unable to delete Role": "Nelze odstranit Roli", + "Database contains %1 roles": "Databáze obsahuje %1 rolí", + "Edit Role": "Editovat roli", + "admin, school, family, etc": "administrátor, škola, rodina atd...", + "Permissions": "Oprávnění", + "Are you sure you want to delete: ": "Opravdu vymazat: ", + "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.": "Každá role má 1 nebo více oprávnění. Oprávnění * je zástupný znak, oprávnění jsou hiearchie používající : jako oddělovač.", + "Add new Role": "Přidat novou roli", + "Roles - Groups of People, Devices, etc": "Role - Skupiny lidí, zařízení atd.", + "Edit this role": "Editovat tuto roli", + "Admin authorized": "Admin autorizován", + "Subjects - People, Devices, etc": "Subjekty - Lidé, zařízení atd.", + "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "Každý subjekt má svůj unikátní token a 1 nebo více rolí. Klikem na přístupový token se otevře nové okno pro tento subjekt. Tento link je možné sdílet.", + "Add new Subject": "Přidat nový subjekt", + "Unable to save Subject": "Subjekt nelze uložit", + "Unable to delete Subject": "Nelze odstranit Subjekt", + "Database contains %1 subjects": "Databáze obsahuje %1 subjektů", + "Edit Subject": "Editovat subjekt", + "person, device, etc": "osoba, zařízeni atd.", + "role1, role2": "role1, role2", + "Edit this subject": "Editovat tento subjekt", + "Delete this subject": "Smazat tento subjekt", + "Roles": "Role", + "Access Token": "Přístupový token", + "hour ago": "hodina zpět", + "hours ago": "hodin zpět", + "Silence for %1 minutes": "Ztlumit na %1 minut", + "Check BG": "Zkontrolovat glykémii", + "BASAL": "BAZÁL", + "Current basal": "Současný bazál", + "Sensitivity": "Citlivost", + "Current Carb Ratio": "Sacharidový poměr", + "Basal timezone": "Časová zóna", + "Active profile": "Aktivní profil", + "Active temp basal": "Aktivní dočasný bazál", + "Active temp basal start": "Začátek dočasného bazálu", + "Active temp basal duration": "Trvání dočasného bazálu", + "Active temp basal remaining": "Zbývající dočasný bazál", + "Basal profile value": "Základní hodnota bazálu", + "Active combo bolus": "Aktivní kombinovaný bolus", + "Active combo bolus start": "Začátek kombinovaného bolusu", + "Active combo bolus duration": "Trvání kombinovaného bolusu", + "Active combo bolus remaining": "Zbývající kombinovaný bolus", + "BG Delta": "Změna glykémie", + "Elapsed Time": "Dosažený čas", + "Absolute Delta": "Absolutní rozdíl", + "Interpolated": "Interpolováno", + "BWP": "BWP", + "Urgent": "Urgentní", + "Warning": "Varování", + "Info": "Informativní", + "Lowest": "Nejnižší", + "Snoozing high alarm since there is enough IOB": "Vypínání alarmu vyskoké glykémie, protože je dostatek IOB", + "Check BG, time to bolus?": "Zkontrolovat glykémii, čas na bolus?", + "Notice": "Poznámka", + "required info missing": "chybějící informace", + "Insulin on Board": "Aktivní inzulín", + "Current target": "Aktuální cílová hodnota", + "Expected effect": "Očekávaný efekt", + "Expected outcome": "Očekávaný výsledek", + "Carb Equivalent": "Ekvivalent v sacharidech", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "Nadbytek inzulínu: o %1U více, než na dosažení spodní hranice cíle. Nepočítáno se sacharidy.", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "Nadbytek inzulínu: o %1U více, než na dosažení spodní hranice cíle. UJISTĚTE SE, ŽE JE TO POKRYTO SACHARIDY", + "%1U reduction needed in active insulin to reach low target, too much basal?": "Nutné snížení aktivního inzulínu o %1U k dosažení spodního cíle. Příliž mnoho bazálu?", + "basal adjustment out of range, give carbs?": "úprava změnou bazálu není možná. Podat sacharidy?", + "basal adjustment out of range, give bolus?": "úprava změnou bazálu není možná. Podat bolus?", + "above high": "nad horním", + "below low": "pod spodním", + "Projected BG %1 target": "Předpokládaná glykémie %1 cílem", + "aiming at": "s cílem", + "Bolus %1 units": "Bolus %1 jednotek", + "or adjust basal": "nebo úprava bazálu", + "Check BG using glucometer before correcting!": "Před korekcí zkontrolujte glukometrem glykémii!", + "Basal reduction to account %1 units:": "Úprava bazálu pro náhradu bolusu %1 U ", + "30m temp basal": "30ti minutový dočasný bazál", + "1h temp basal": "hodinový dočasný bazál", + "Cannula change overdue!": "Čas na výměnu set vypršel!", + "Time to change cannula": "Čas na výměnu setu", + "Change cannula soon": "Blíží se čas výměny setu", + "Cannula age %1 hours": "Stáří setu %1 hodin", + "Inserted": "Nasazený", + "CAGE": "SET", + "COB": "COB", + "Last Carbs": "Poslední sacharidy", + "IAGE": "INZ", + "Insulin reservoir change overdue!": "Čas na výměnu zásobníku vypršel!", + "Time to change insulin reservoir": "Čas na výměnu zásobníku", + "Change insulin reservoir soon": "Blíží se čas výměny zásobníku", + "Insulin reservoir age %1 hours": "Stáří zásobníku %1 hodin", + "Changed": "Vyměněno", + "IOB": "IOB", + "Careportal IOB": "IOB z ošetření", + "Last Bolus": "Poslední bolus", + "Basal IOB": "IOB z bazálů", + "Source": "Zdroj", + "Stale data, check rig?": "Zastaralá data, zkontrolovat mobil?", + "Last received:": "Naposledy přijato:", + "%1m ago": "%1m zpět", + "%1h ago": "%1h zpět", + "%1d ago": "%1d zpět", + "RETRO": "Zastaralé", + "SAGE": "SENZ", + "Sensor change/restart overdue!": "Čas na výměnu senzoru vypršel!", + "Time to change/restart sensor": "Čas na výměnu senzoru", + "Change/restart sensor soon": "Blíží se čas na výměnu senzoru", + "Sensor age %1 days %2 hours": "Stáří senzoru %1 dní %2 hodin", + "Sensor Insert": "Výměna sensoru", + "Sensor Start": "Spuštění sensoru", + "days": "dní", + "Insulin distribution": "Rozložení inzulínu", + "To see this report, press SHOW while in this view": "Pro zobrazení toho výkazu stiskněte Zobraz na této záložce", + "AR2 Forecast": "AR2 predikci", + "OpenAPS Forecasts": "OpenAPS predikci", + "Temporary Target": "Dočasný cíl glykémie", + "Temporary Target Cancel": "Dočasný cíl glykémie konec", + "OpenAPS Offline": "OpenAPS vypnuto", + "Profiles": "Profily", + "Time in fluctuation": "Doba měnící se glykémie", + "Time in rapid fluctuation": "Doba rychle se měnící glykémie", + "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:": "Toto je pouze hrubý odhad, který může být nepřesný a nenahrazuje kontrolu z krve. Vzorec je převzatý z:", + "Filter by hours": " Filtr podle hodin", + "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.": "Doba měnící se glykémie a rapidně se měnící glykémie měří % času ve zkoumaném období, během kterého se glykémie měnila relativně rychle nebo rapidně. Nižší hodnota je lepší.", + "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.": "Průměrná celková denní změna je součet absolutních hodnoty všech glykémií za sledované období, děleno počtem dní. Nižší hodnota je lepší.", + "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "Průměrná hodinová změna je součet absolutní hodnoty všech glykémií za sledované období, dělených počtem hodin v daném období. Nižší hodnota je lepší.", + "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "Mimo dosah RMS se vypočítá tak, že se odečte vzdálenost od rozsahu pro všechny hodnoty glykémie za vyšetřované období, hodnoty se sečtou, vydělí počtem a odmocní. Tato metrika je podobná v procentech z rozsahu, ale hodnoty váhy jsou mnohem vyšší. Nižší hodnoty jsou lepší.", + "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">zde.", + "Mean Total Daily Change": "Průměrná celková denní změna", + "Mean Hourly Change": "Průměrná hodinová změna", + "FortyFiveDown": "lehce dolů", + "FortyFiveUp": "lehce nahoru", + "Flat": "stabilní", + "SingleUp": "nahoru", + "SingleDown": "dolů", + "DoubleDown": "rychle dolů", + "DoubleUp": "rychle nahoru", + "virtAsstUnknown": "Hodnota je v tuto chvíli neznámá. Pro více informací se podívejte na stránky Nightscout.", + "virtAsstTitleAR2Forecast": "AR2 predikce", + "virtAsstTitleCurrentBasal": "Aktuální bazál", + "virtAsstTitleCurrentCOB": "Aktuální COB", + "virtAsstTitleCurrentIOB": "Aktuální IOB", + "virtAsstTitleLaunch": "Vítejte v Nightscoutu", + "virtAsstTitleLoopForecast": "Loop predikce", + "virtAsstTitleLastLoop": "Poslední běh", + "virtAsstTitleOpenAPSForecast": "OpenAPS predikce", + "virtAsstTitlePumpReservoir": "Zbývající inzulín", + "virtAsstTitlePumpBattery": "Baterie pumpy", + "virtAsstTitleRawBG": "Aktuální Raw glykemie", + "virtAsstTitleUploaderBattery": "Baterie telefonu", + "virtAsstTitleCurrentBG": "Aktuální glykemie", + "virtAsstTitleFullStatus": "Plný status", + "virtAsstTitleCGMMode": "Režim CGM", + "virtAsstTitleCGMStatus": "Stav CGM", + "virtAsstTitleCGMSessionAge": "Staří senzoru CGM", + "virtAsstTitleCGMTxStatus": "Stav vysílače CGM", + "virtAsstTitleCGMTxAge": "Stáří vysílače CGM", + "virtAsstTitleCGMNoise": "Šum CGM", + "virtAsstTitleDelta": "Změna krevní glukózy", + "virtAsstStatus": "%1 %2 čas %3.", + "virtAsstBasal": "%1 aktuální bazál je %2 jednotek za hodinu", + "virtAsstBasalTemp": "%1 dočasný bazál %2 jednotek za hodinu skončí v %3", + "virtAsstIob": "a máte %1 aktivního inzulínu.", + "virtAsstIobIntent": "Máte %1 aktivního inzulínu", + "virtAsstIobUnits": "%1 jednotek", + "virtAsstLaunch": "Co chcete v Nightscoutu zkontrolovat?", + "virtAsstPreamble": "Vaše", + "virtAsstPreamble3person": "%1 má ", + "virtAsstNoInsulin": "žádný", + "virtAsstUploadBattery": "Baterie mobilu má %1", + "virtAsstReservoir": "V zásobníku zbývá %1 jednotek", + "virtAsstPumpBattery": "Baterie v pumpě má %1 %2", + "virtAsstUploaderBattery": "Baterie uploaderu má %1", + "virtAsstLastLoop": "Poslední úšpěšné provedení smyčky %1", + "virtAsstLoopNotAvailable": "Plugin Loop není patrně povolený", + "virtAsstLoopForecastAround": "Podle přepovědi smyčky je očekávána glykémie okolo %1 během následujících %2", + "virtAsstLoopForecastBetween": "Podle přepovědi smyčky je očekávána glykémie mezi %1 a %2 během následujících %3", + "virtAsstAR2ForecastAround": "Podle AR2 predikce je očekávána glykémie okolo %1 během následujících %2", + "virtAsstAR2ForecastBetween": "Podle AR2 predikce je očekávána glykémie mezi %1 a %2 během následujících %3", + "virtAsstForecastUnavailable": "S dostupnými daty přepověď není možná", + "virtAsstRawBG": "Raw glykémie je %1", + "virtAsstOpenAPSForecast": "OpenAPS Eventual BG je %1", + "virtAsstCob3person": "%1 má %2 aktivních sacharidů", + "virtAsstCob": "Máte %1 aktivních sacharidů", + "virtAsstCGMMode": "Váš CGM režim byl %1 od %2.", + "virtAsstCGMStatus": "Váš stav CGM byl %1 od %2.", + "virtAsstCGMSessAge": "Vaše CGM relace byla aktivní %1 dní a %2 hodin.", + "virtAsstCGMSessNotStarted": "V tuto chvíli není aktivní žádná relace CGM.", + "virtAsstCGMTxStatus": "Stav CGM vysílače byl %1 od %2.", + "virtAsstCGMTxAge": "Stáří CGM vysílače je %1 dní.", + "virtAsstCGMNoise": "Šum CGM byl %1 od %2.", + "virtAsstCGMBattOne": "Baterie CGM vysílače byla %1 voltů od %2.", + "virtAsstCGMBattTwo": "Stav baterie CGM vysílače byla mezi %1 voltů a %2 voltů od %3.", + "virtAsstDelta": "Vaše delta byla %1 mezi %2 a %3.", + "virtAsstDeltaEstimated": "Vaše odhadovaná delta byla %1 mezi %2 a %3.", + "virtAsstUnknownIntentTitle": "Neznámý úmysl", + "virtAsstUnknownIntentText": "Je mi líto. Nevím, na co se ptáte.", + "Fat [g]": "Tuk [g]", + "Protein [g]": "Proteiny [g]", + "Energy [kJ]": "Energie [kJ]", + "Clock Views:": "Hodiny:", + "Clock": "Hodiny", + "Color": "Barevné", + "Simple": "Jednoduché", + "TDD average": "Průměrná denní dávka", + "Bolus average": "Průměrný bolus", + "Basal average": "Průměrný bazál", + "Base basal average:": "Průměrná hodnota bazálu:", + "Carbs average": "Průměrné množství sacharidů", + "Eating Soon": "Blížící se jídlo", + "Last entry {0} minutes ago": "Poslední hodnota {0} minut zpět", + "change": "změna", + "Speech": "Hlas", + "Target Top": "Horní cíl", + "Target Bottom": "Dolní cíl", + "Canceled": "Zrušený", + "Meter BG": "Hodnota z glukoměru", + "predicted": "přepověď", + "future": "budoucnost", + "ago": "zpět", + "Last data received": "Poslední data přiajata", + "Clock View": "Hodiny", + "Protein": "Bílkoviny", + "Fat": "Tuk", + "Protein average": "Průměrně bílkovin", + "Fat average": "Průměrně tuků", + "Total carbs": "Celkové sacharidy", + "Total protein": "Celkem bílkovin", + "Total fat": "Celkový tuk", + "Database Size": "Velikost databáze", + "Database Size near its limits!": "Databáze bude brzy plná!", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "Velikost databáze je %1 MiB z %2 MiB. Udělejte si zálohu dat a vyčistěte databázi!", + "Database file size": "Velikost databáze", + "%1 MiB of %2 MiB (%3%)": "%1 MiB z %2 MiB (%3%)", + "Data size": "Velikost dat", + "virtAsstDatabaseSize": "%1 MiB. To odpovídá %2% dostupného místa v databázi.", + "virtAsstTitleDatabaseSize": "Velikost databáze", + "Carbs/Food/Time": "Sacharidy/Jídlo/Čas", + "You have administration messages": "Máte zprávy pro administrátora", + "Admin messages in queue": "Ve frontě jsou zprávy pro adminstrátora", + "Queue empty": "Fronta je prázdná", + "There are no admin messages in queue": "Ve frontě nejsou žádné zprávy pro administrátora", + "Please sign in using the API_SECRET to see your administration messages": "Pro zobrazení zpráv pro administrátora se přihlašte pomocí API_SECRET", + "Reads enabled in default permissions": "Ve výchozích oprávněních je čtení povoleno", + "Data reads enabled": "Čtení dat povoleno", + "Data writes enabled": "Zápis dat povolen", + "Data writes not enabled": "Zápis dat není povolen", + "Color prediction lines": "Barevné křivky předpovědí", + "Release Notes": "Poznámky k vydání", + "Check for Updates": "Zkontrolovat aktualizace", + "Open Source": "Open Source", + "Nightscout Info": "Informace o Nightscoutu", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "Hlavním úkolem Loopalyzeru je vizualizace systému uzavřené smyčky. Funguje to při jakémkoliv nastavení - s uzavřenou či otevřenou smyčkou, nebo bez smyčky. Nicméně v návaznosti na tom, jaký uploader používáte, jaká data je schopen načíst a následně odeslat, jak je schopen doplňovat chybějící údaje, mohou některé grafy obsahovat chybějící data, nebo dokonce mohou být prázdné. Vždy si zajistěte, aby grafy vypadaly rozumně. Nejlepší je zobrazit nejprve jeden den, a až pak zobrazit více dní najednou.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer obsahuje funkci časového posunu. Například máte-li snídani jeden den v 7:00, a den poté v 8:00, budou průměrné křivky glykémie za tyto 2 dny pravděpodobně vypadat zploštělé, a odezva smyčky pak bude zkreslená. Časový posun vypočítá průměrnou dobu, po kterou byla tato jídla konzumována, poté posune všechna data (sacharidy, inzulín, bazál atd.) během obou dnů o odpovídající časový rozdíl tak, aby obě jídla odpovídala průměrné době začátku jídla.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "V tomto příkladu jsou všechna data z prvního dne posunuta o 30 minut vpřed, a všechna data z druhého dne o 30 minut zpět, takže to vypadá, jako byste oba dny měli snídani v 7:30. To vám umožní zobrazit průměrnou reakci na glukózu v krvi z jídla.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Časový posun zvýrazňuje šedou barvou období po průměrné době zahájení jídla po dobu trvání DIA (doba působení inzulínu). Protože jsou všechny datové body za celý den posunuté, nemusí být křivky mimo šedou oblast přesné.", + "Note that time shift is available only when viewing multiple days.": "Berte na vědomí, že časový posun je k dispozici pouze při prohlížení více dní.", + "Please select a maximum of two weeks duration and click Show again.": "Vyberte, prosím, dobu trvání maximálně 2 týdny, a klepněte na tlačítko Zobrazit znovu.", + "Show profiles table": "Zobrazit tabulku profilů", + "Show predictions": "Zobrazit predikce", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Časový posun jídla větší než %1 g sacharidů spotřebovaných mezi %2 a %3", + "Previous": "Předchozí", + "Previous day": "Předchozí den", + "Next day": "Následující den", + "Next": "Další", + "Temp basal delta": "Rozdíl dočasného bazálu", + "Authorized by token": "Autorizováno pomocí tokenu", + "Auth role": "Autorizační role", + "view without token": "zobrazit bez tokenu", + "Remove stored token": "Odstranit uložený token", + "Weekly Distribution": "Týdenní rozložení", + "Failed authentication": "Ověření selhalo", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "Zařízení s IP adresou %1 se pokusilo o příhlášení do Nightscoutu s nesprávnými údaji. Zkontrolujte, zda nemáte v uploaderu nastaveno špatné API_SECRET nebo token.", + "Default (with leading zero and U)": "Výchozí (s nulou a U)", + "Concise (with U, without leading zero)": "Blikání (s U, bez čelní nuly)", + "Minimal (without leading zero and U)": "Minimální (bez nuly a U)", + "Small Bolus Display": "Malý bolus displej", + "Large Bolus Display": "Velký bolus displej", + "Bolus Display Threshold": "Limit zobrazení bolusu", + "%1 U and Over": "%1 U a více", + "Event repeated %1 times.": "Událost se opakovala %1 krát.", + "minutes": "minut", + "Last recorded %1 %2 ago.": "Naposledy zaznamenáno před %1 %2.", + "Security issue": "Bezpečnostní problém", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Zjištěno slabé API_SECRET. Ke snížení rizika neoprávněného přístupu prosím použijte kombinaci malých a VELKÝCH písmen, čísel a jiných než alfanumerických znaků, jako je například !#%&/. Minimální délka API_SECRET je 12 znaků.", + "less than 1": "méně než 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "Heslo do MongoDB a API_SECRET jsou stejné. To je opravdu velmi špatný nápad. Změňte prosím obojí, a už nikdy nepoužívejte pro různé služby v jednom systému stejná hesla." +} diff --git a/translations/da_DK.json b/translations/da_DK.json new file mode 100644 index 00000000000..576c2a1de9a --- /dev/null +++ b/translations/da_DK.json @@ -0,0 +1,707 @@ +{ + "Listening on port": "Lytter på port", + "Mo": "Man", + "Tu": "Tir", + "We": "Ons", + "Th": "Tor", + "Fr": "Fre", + "Sa": "Lør", + "Su": "Søn", + "Monday": "Mandag", + "Tuesday": "Tirsdag", + "Wednesday": "Onsdag", + "Thursday": "Torsdag", + "Friday": "Fredag", + "Saturday": "Lørdag", + "Sunday": "Søndag", + "Category": "Kategori", + "Subcategory": "Underkategori", + "Name": "Navn", + "Today": "I dag", + "Last 2 days": "Sidste 2 dage", + "Last 3 days": "Sidste 3 dage", + "Last week": "Sidste uge", + "Last 2 weeks": "Sidste 2 uger", + "Last month": "Sidste måned", + "Last 3 months": "Sidste 3 måneder", + "From": "Fra", + "To": "Til", + "Notes": "Noter", + "Food": "Mad", + "Insulin": "Insulin", + "Carbs": "Kulhydrater", + "Notes contain": "Noter indeholder", + "Target BG range bottom": "Nedre grænse for blodsukkerværdier", + "top": "top", + "Show": "Vis", + "Display": "Vis", + "Loading": "Indlæser", + "Loading profile": "Indlæser profil", + "Loading status": "Indlæsningsstatus", + "Loading food database": "Indlæser mad database", + "not displayed": "vises ikke", + "Loading CGM data of": "Indlæser CGM-data for", + "Loading treatments data of": "Indlæser behandlingsdata for", + "Processing data of": "Behandler data for", + "Portion": "Portion", + "Size": "Størrelse", + "(none)": "(ingen)", + "None": "Ingen", + "": "", + "Result is empty": "Tomt resultat", + "Day to day": "Dag til dag", + "Week to week": "Uge til uge", + "Daily Stats": "Daglig statistik", + "Percentile Chart": "Percentildiagram", + "Distribution": "Fordeling", + "Hourly stats": "Timestatistik", + "netIOB stats": "netIOB statistik", + "temp basals must be rendered to display this report": "temp basaler skal være tilgængelige for at vise denne rapport", + "No data available": "Ingen tilgængelige data", + "Low": "Lav", + "In Range": "Indenfor intervallet", + "Period": "Periode", + "High": "Høj", + "Average": "Gennemsnit", + "Low Quartile": "Nedre kvartil", + "Upper Quartile": "Øvre kvartil", + "Quartile": "Kvartil", + "Date": "Dato", + "Normal": "Normal", + "Median": "Median", + "Readings": "Aflæsninger", + "StDev": "Standard afvigelse", + "Daily stats report": "Daglig statistik rapport", + "Glucose Percentile report": "Rapport af glukose Percentiler", + "Glucose distribution": "Glukosefordeling", + "days total": "dage i alt", + "Total per day": "Total pr. dag", + "Overall": "Samlet", + "Range": "Interval", + "% of Readings": "% af aflæsninger", + "# of Readings": "Antal aflæsninger", + "Mean": "Gennemsnit", + "Standard Deviation": "Standardafvigelse", + "Max": "Maks", + "Min": "Min", + "A1c estimation*": "A1c estimering*", + "Weekly Success": "Ugentlig succes", + "There is not sufficient data to run this report. Select more days.": "Der er utilstrækkeligt data til at generere rapporten. Vælg flere dage.", + "Using stored API secret hash": "Anvender gemt API-nøgle", + "No API secret hash stored yet. You need to enter API secret.": "Mangler API-nøgle. Du skal indtaste API nøglen.", + "Database loaded": "Database indlæst", + "Error: Database failed to load": "Fejl: Database kan ikke indlæses", + "Error": "Fejl", + "Create new record": "Opret ny post", + "Save record": "Gemmer post", + "Portions": "Portioner", + "Unit": "Enheder", + "GI": "GI", + "Edit record": "Rediger post", + "Delete record": "Slet post", + "Move to the top": "Flyt til toppen", + "Hidden": "Skjult", + "Hide after use": "Skjul efter brug", + "Your API secret must be at least 12 characters long": "Din API nøgle skal være mindst 12 tegn lang", + "Bad API secret": "Forkert API-nøgle", + "API secret hash stored": "Hemmelig API-hash gemt", + "Status": "Status", + "Not loaded": "Ikke indlæst", + "Food Editor": "Mad editor", + "Your database": "Din database", + "Filter": "Filtrer", + "Save": "Gem", + "Clear": "Rense", + "Record": "Post", + "Quick picks": "Hurtig valg", + "Show hidden": "Vis skjulte", + "Your API secret or token": "Din API hemmelighed eller token", + "Remember this device. (Do not enable this on public computers.)": "Husk denne enhed. (Aktiver ikke dette på offentlige computere)", + "Treatments": "Behandling", + "Time": "Tid", + "Event Type": "Hændelsestype", + "Blood Glucose": "Blodsukker", + "Entered By": "Indtastet af", + "Delete this treatment?": "Slet denne hændelse?", + "Carbs Given": "Kulhydrater givet", + "Insulin Given": "Insulin givet", + "Event Time": "Tidspunkt for hændelsen", + "Please verify that the data entered is correct": "Venligst verificer at indtastet data er korrekt", + "BG": "BS", + "Use BG correction in calculation": "Anvend BS-korrektion i beregning", + "BG from CGM (autoupdated)": "BG fra CGM (automatisk)", + "BG from meter": "BG fra blodsukkerapperat", + "Manual BG": "Manuelt BG", + "Quickpick": "Hurtig valg", + "or": "eller", + "Add from database": "Tilføj fra database", + "Use carbs correction in calculation": "Benyt kulhydratkorrektion i beregning", + "Use COB correction in calculation": "Benyt aktive kulhydrater i beregning", + "Use IOB in calculation": "Benyt aktivt insulin i beregningen", + "Other correction": "Øvrig korrektion", + "Rounding": "Afrunding", + "Enter insulin correction in treatment": "Indtast insulinkorrektion", + "Insulin needed": "Insulin påkrævet", + "Carbs needed": "Kulhydrater påkrævet", + "Carbs needed if Insulin total is negative value": "Kulhydrater er nødvendige når total insulin mængde er negativ", + "Basal rate": "Basalrate", + "60 minutes earlier": "60 min tidligere", + "45 minutes earlier": "45 min tidligere", + "30 minutes earlier": "30 min tidigere", + "20 minutes earlier": "20 min tidligere", + "15 minutes earlier": "15 min tidligere", + "Time in minutes": "Tid i minutter", + "15 minutes later": "15 min senere", + "20 minutes later": "20 min senere", + "30 minutes later": "30 min senere", + "45 minutes later": "45 min senere", + "60 minutes later": "60 min senere", + "Additional Notes, Comments": "Ekstra noter, kommentarer", + "RETRO MODE": "Retro mode", + "Now": "Nu", + "Other": "Øvrige", + "Submit Form": "Gem", + "Profile Editor": "Profil editor", + "Reports": "Rapporter", + "Add food from your database": "Tilføj mad fra din database", + "Reload database": "Genindlæs databasen", + "Add": "Tilføj", + "Unauthorized": "Uautoriseret", + "Entering record failed": "Tilføjelse af post fejlede", + "Device authenticated": "Enhed godkendt", + "Device not authenticated": "Enhed ikke godkendt", + "Authentication status": "Godkendelsesstatus", + "Authenticate": "Godkend", + "Remove": "Fjern", + "Your device is not authenticated yet": "Din enhed er ikke godkendt endnu", + "Sensor": "Sensor", + "Finger": "Finger", + "Manual": "Manuel", + "Scale": "Skala", + "Linear": "Lineær", + "Logarithmic": "Logaritmisk", + "Logarithmic (Dynamic)": "Logaritmisk (dynamisk)", + "Insulin-on-Board": "Aktivt insulin (IOB)", + "Carbs-on-Board": "Aktive kulhydrater (COB)", + "Bolus Wizard Preview": "Bolus Wizard (BWP)", + "Value Loaded": "Værdi indlæst", + "Cannula Age": "Indstik alder (CAGE)", + "Basal Profile": "Basal profil", + "Silence for 30 minutes": "Stilhed i 30 min", + "Silence for 60 minutes": "Stilhed i 60 min", + "Silence for 90 minutes": "Stilhed i 90 min", + "Silence for 120 minutes": "Stilhed i 120 min", + "Settings": "Indstillinger", + "Units": "Enheder", + "Date format": "Dato format", + "12 hours": "12 timer", + "24 hours": "24 timer", + "Log a Treatment": "Log en hændelse", + "BG Check": "BG kontrol", + "Meal Bolus": "Måltidsbolus", + "Snack Bolus": "Mellemmåltidsbolus", + "Correction Bolus": "Korrektionsbolus", + "Carb Correction": "Kulhydratskorrektion", + "Note": "Kommentar", + "Question": "Spørgsmål", + "Exercise": "Træning", + "Pump Site Change": "Skiftet infusionssted", + "CGM Sensor Start": "Sensorstart", + "CGM Sensor Stop": "Sensor Stop", + "CGM Sensor Insert": "Sensor påsat", + "Sensor Code": "Sensor Kode", + "Transmitter ID": "Transmitter ID", + "Dexcom Sensor Start": "Dexcom sensor start", + "Dexcom Sensor Change": "Dexcom sensor ombytning", + "Insulin Cartridge Change": "Skift insulin beholder", + "D.A.D. Alert": "Vuf Vuf! (Diabeteshundealarm!)", + "Glucose Reading": "Blodsukker aflæsning", + "Measurement Method": "Målemetode", + "Meter": "Blodsukkermåler", + "Amount in grams": "Antal gram", + "Amount in units": "Antal enheder", + "View all treatments": "Se alle behandlinger", + "Enable Alarms": "Aktivere alarmer", + "Pump Battery Change": "Udskiftet pumpebatteri", + "Pump Battery Age": "Pumpe batterialder", + "Pump Battery Low Alarm": "Pumpebatteri lav Alarm", + "Pump Battery change overdue!": "Pumpebatteri skal skiftes!", + "When enabled an alarm may sound.": "Når aktiveret kan en alarm starte.", + "Urgent High Alarm": "Kritisk høj alarm", + "High Alarm": "Høj alarm", + "Low Alarm": "Lav alarm", + "Urgent Low Alarm": "Kritisk lav alarm", + "Stale Data: Warn": "Advarsel: Gamle data", + "Stale Data: Urgent": "Kritisk: Gamle data", + "mins": "min", + "Night Mode": "Nattilstand", + "When enabled the page will be dimmed from 10pm - 6am.": "Når aktiveret vil denne side dæmpes fra 22:00-6:00.", + "Enable": "Aktiver", + "Show Raw BG Data": "Vis rå BG data", + "Never": "Aldrig", + "Always": "Altid", + "When there is noise": "Når der er støj", + "When enabled small white dots will be displayed for raw BG data": "Ved aktivering vil små hvide prikker blive vist for rå BG tal", + "Custom Title": "Brugerdefineret titel", + "Theme": "Tema", + "Default": "Standard", + "Colors": "Farver", + "Colorblind-friendly colors": "Farveblindvenlige farver", + "Reset, and use defaults": "Nulstil og brug standardindstillinger", + "Calibrations": "Kalibrering", + "Alarm Test / Smartphone Enable": "Alarm test / Smartphone aktiveret", + "Bolus Wizard": "Bolusberegner", + "in the future": "i fremtiden", + "time ago": "tid siden", + "hr ago": "time siden", + "hrs ago": "timer siden", + "min ago": "minut siden", + "mins ago": "minutter siden", + "day ago": "dag siden", + "days ago": "dage siden", + "long ago": "længe siden", + "Clean": "Rens", + "Light": "Let", + "Medium": "Middel", + "Heavy": "Kraftig", + "Treatment type": "Behandlingstype", + "Raw BG": "Råt BG", + "Device": "Enhed", + "Noise": "Støj", + "Calibration": "Kalibrering", + "Show Plugins": "Vis plugins", + "About": "Om", + "Value in": "Værdi i", + "Carb Time": "Kulhydratstid", + "Language": "Sprog", + "Add new": "Tilføj ny", + "g": "g", + "ml": "ml", + "pcs": "stk", + "Drag&drop food here": "Træk og slip mad her", + "Care Portal": "Omsorgsportal", + "Medium/Unknown": "Medium/Ukendt", + "IN THE FUTURE": "I FREMTIDEN", + "Order": "Sorter", + "oldest on top": "ældste først", + "newest on top": "nyeste først", + "All sensor events": "Alle sensorhændelser", + "Remove future items from mongo database": "Fjern fremtidige værdier fra mongo databasen", + "Find and remove treatments in the future": "Find og fjern fremtidige behandlinger", + "This task find and remove treatments in the future.": "Denne handling finder og fjerner fremtidige behandlinger.", + "Remove treatments in the future": "Fjern behandlinger i fremtiden", + "Find and remove entries in the future": "Find og slet poster i fremtiden", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "Denne handling finder og sletter CGM data i fremtiden forårsaget af indlæsning med forkert dato/tid.", + "Remove entries in the future": "Fjern poster i fremtiden", + "Loading database ...": "Indlæser database ...", + "Database contains %1 future records": "Databasen indeholder %1 fremtidige poster", + "Remove %1 selected records?": "Fjern %1 valgte poster?", + "Error loading database": "Fejl ved indlæsning af database", + "Record %1 removed ...": "Post %1 fjernet ...", + "Error removing record %1": "Fejl ved fjernelse af post %1", + "Deleting records ...": "Sletter poster...", + "%1 records deleted": "%1 poster slettet", + "Clean Mongo status database": "Slet Mongo status database", + "Delete all documents from devicestatus collection": "Sletter alle dokumenter fra devicestatus collection", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "Denne handling sletter alle dokumenter fra devicestatus collection. Brugbart når uploader batteri status ikke opdateres korrekt.", + "Delete all documents": "Slet alle dokumenter", + "Delete all documents from devicestatus collection?": "Fjern alle dokumenter fra devicestatus collection?", + "Database contains %1 records": "Databasen indeholder %1 poster", + "All records removed ...": "Alle poster fjernet ...", + "Delete all documents from devicestatus collection older than 30 days": "Fjerne alle dokumenter fra devicestatus collection der er ældre end 30 dage", + "Number of Days to Keep:": "Antal af dage, der skal beholdes:", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "Denne handling fjerner alle dokumenter fra devicestatus collection. Brugbart når uploader batteri status ikke opdateres korrekt.", + "Delete old documents from devicestatus collection?": "Fjerne gamle dokumenter fra devicestatus collection?", + "Clean Mongo entries (glucose entries) database": "Slet Mongo poster (glucose poster) database", + "Delete all documents from entries collection older than 180 days": "Slet alle dokumenter i entries collection, som er ældre end 180 dage", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Denne handling fjerner alle dokumenter fra entries collection, der er ældre end 180 dage. Nyttigt når uploaderens batteristatus ikke opdateres korrekt.", + "Delete old documents": "Slet gamle dokumenter", + "Delete old documents from entries collection?": "Slet gamle dokumenter fra entries collection?", + "%1 is not a valid number": "%1 er ikke et gyldigt tal", + "%1 is not a valid number - must be more than 2": "%1 er ikke et gyldigt tal - skal være højere end 2", + "Clean Mongo treatments database": "Slet Mongo treatments database", + "Delete all documents from treatments collection older than 180 days": "Slet alle dokumenter i treatments collection, som er ældre end 180 dage", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Denne handling sletter alle dokumenter fra treatments collection, der er ældre end 180 dage. Nyttigt, når uploaderens batteristatus ikke er korrekt opdateret.", + "Delete old documents from treatments collection?": "Slet gamle dokumenter fra treatments collection?", + "Admin Tools": "Admin værktøjer", + "Nightscout reporting": "Nightscout - rapporter", + "Cancel": "Annuller", + "Edit treatment": "Rediger behandling", + "Duration": "Varighed", + "Duration in minutes": "Varighed i minutter", + "Temp Basal": "Midlertidig basal", + "Temp Basal Start": "Midlertidig basal start", + "Temp Basal End": "Midlertidig basal slut", + "Percent": "Procent", + "Basal change in %": "Basal ændring i %", + "Basal value": "Basalværdi", + "Absolute basal value": "Absolut basalværdi", + "Announcement": "Meddelelse", + "Loading temp basal data": "Indlæser midlertidig basal data", + "Save current record before changing to new?": "Gem aktuelle post før der skiftes til ny?", + "Profile Switch": "Skift profil", + "Profile": "Profil", + "General profile settings": "Generelle profil indstillinger", + "Title": "Overskrift", + "Database records": "Database poster", + "Add new record": "Tilføj ny post", + "Remove this record": "Fjern denne post", + "Clone this record to new": "Kopier denne post til ny", + "Record valid from": "Post gyldig fra", + "Stored profiles": "Gemte profiler", + "Timezone": "Tidszone", + "Duration of Insulin Activity (DIA)": "Varighed af insulin aktivitet (DIA)", + "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.": "Repræsenterer den typiske tid hvor insulinen virker. Varierer per patient og per insulin type. Typisk 3-4 timer for de fleste pumpe insulin og for de fleste patienter.", + "Insulin to carb ratio (I:C)": "Insulin til Kulhydratsforhold (I:C)", + "Hours:": "Timer:", + "hours": "timer", + "g/hour": "g/time", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "gr kulhydrater per enhed insulin. Den mængde kulhydrat, som dækkes af en enhed insulin.", + "Insulin Sensitivity Factor (ISF)": "Insulinfølsomhedsfaktor (ISF)", + "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "mg/dl eller mmol per enhed insulin. Beskriver hvor mange mmol eller mg/dl blodsukkeret sænkes per enhed insulin (Insulinfølsomheden)", + "Carbs activity / absorption rate": "Kulhydrattid / optagelsestid", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "gram per tidsenhed. Repræsentere både ændring i aktive kulhydrater per tidsenhed, samt mængden af kulhydrater, der indtages i dette tidsrum. Kulhydratsoptag / aktivitetskurver er svære at forudse i forhold til aktiv insulin, men man kan lave en tilnærmet beregning, ved at inkludere en forsinkelse i beregningen, sammen med en konstant absorberingstid (g/time).", + "Basal rates [unit/hour]": "Basal [enhed/t]", + "Target BG range [mg/dL,mmol/L]": "Ønsket blodsukkerinterval [mg/dl,mmol]", + "Start of record validity": "Starttid for gyldighed", + "Icicle": "Istap", + "Render Basal": "Gengiv basal", + "Profile used": "Profil brugt", + "Calculation is in target range.": "Beregning er i målområdet", + "Loading profile records ...": "Indlæser profilposter...", + "Values loaded.": "Værdier hentet.", + "Default values used.": "Standardværdier brugt.", + "Error. Default values used.": "Fejl. Standardværdier brugt.", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "Tidsintervaller for lav og høj matcher ikke. Værdier gendannes til standardværdier.", + "Valid from:": "Gyldig fra:", + "Save current record before switching to new?": "Gem nuværende data inden der skiftes til ny?", + "Add new interval before": "Tilføj nyt interval før", + "Delete interval": "Slet interval", + "I:C": "I:C", + "ISF": "ISF", + "Combo Bolus": "Kombineret bolus", + "Difference": "Forskel", + "New time": "Ny tid", + "Edit Mode": "Redigerings tilstand", + "When enabled icon to start edit mode is visible": "Ikon vises når redigering er aktivt", + "Operation": "Handling", + "Move": "Flyt", + "Delete": "Slet", + "Move insulin": "Flyt insulin", + "Move carbs": "Flyt kulhydrater", + "Remove insulin": "Fjern insulin", + "Remove carbs": "Fjern kulhydrater", + "Change treatment time to %1 ?": "Ændre behandlingstid til %1?", + "Change carbs time to %1 ?": "Ændre kulhydratstid til %1 ?", + "Change insulin time to %1 ?": "Ændre insulintid til %1 ?", + "Remove treatment ?": "Slet behandling ?", + "Remove insulin from treatment ?": "Fjern insulin fra behandling ?", + "Remove carbs from treatment ?": "Fjern kulhydrater fra behandling ?", + "Rendering": "Arbejder...", + "Loading OpenAPS data of": "Henter OpenAPS data for", + "Loading profile switch data": "Indlæser profilskiftdata", + "Redirecting you to the Profile Editor to create a new profile.": "Omdirigere til profil editoren for at lave en ny profil.", + "Pump": "Pumpe", + "Sensor Age": "Sensor alder (SAGE)", + "Insulin Age": "Insulinalder (IAGE)", + "Temporary target": "Midlertidig mål", + "Reason": "Årsag", + "Eating soon": "Spiser snart", + "Top": "Øverst", + "Bottom": "Bund", + "Activity": "Aktivitet", + "Targets": "Mål", + "Bolus insulin:": "Bolusinsulin:", + "Base basal insulin:": "Base basalinsulin:", + "Positive temp basal insulin:": "Positiv midlertidig basalinsulin:", + "Negative temp basal insulin:": "Negativ midlertidig basalinsulin:", + "Total basal insulin:": "Total daglig basalinsulin:", + "Total daily insulin:": "Total dagsdosis insulin", + "Unable to save Role": "Rolle kan ikke gemmes", + "Unable to delete Role": "Kan ikke slette rolle", + "Database contains %1 roles": "Databasen indeholder %1 roller", + "Edit Role": "Rediger rolle", + "admin, school, family, etc": "Administrator, skole, familie, etc", + "Permissions": "Rettigheder", + "Are you sure you want to delete: ": "Er du sikker på at du vil slette:", + "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.": "Hver rolle vil have en eller flere rettigheder. Rollen * fungere som wildcard / joker, rettigheder sættes hierakisk med : som skilletegn.", + "Add new Role": "Tilføj ny rolle", + "Roles - Groups of People, Devices, etc": "Roller - Grupper af brugere, Enheder, etc", + "Edit this role": "Rediger denne rolle", + "Admin authorized": "Administrator godkendt", + "Subjects - People, Devices, etc": "Emner - Brugere, Enheder, etc", + "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "Hvert emne vil have en unik sikkerhedsnøgle samt en eller flere roller. Klik på sikkerhedsnøglen for at åbne et nyt view med det valgte emne, dette hemmelige link kan derefter blive delt.", + "Add new Subject": "Tilføj nyt emne", + "Unable to save Subject": "Emne kan ikke gemmes", + "Unable to delete Subject": "Kan ikke slette emne", + "Database contains %1 subjects": "Databasen indeholder %1 emner", + "Edit Subject": "Rediger emne", + "person, device, etc": "person, emne, etc", + "role1, role2": "Rolle1, Rolle2", + "Edit this subject": "Rediger emne", + "Delete this subject": "Slet dette emne", + "Roles": "Roller", + "Access Token": "Adgangs Token", + "hour ago": "time siden", + "hours ago": "timer siden", + "Silence for %1 minutes": "Stilhed i %1 minutter", + "Check BG": "Kontroller BG", + "BASAL": "BASAL", + "Current basal": "Nuværende basal", + "Sensitivity": "Følsomhed", + "Current Carb Ratio": "Nuværende kulhydratratio", + "Basal timezone": "Basal tidszone", + "Active profile": "Aktiv profil", + "Active temp basal": "Aktiv midlertidig basal", + "Active temp basal start": "Aktiv midlertidig basal start", + "Active temp basal duration": "Aktiv midlertidig basal varighed", + "Active temp basal remaining": "Aktiv temp basal resterende", + "Basal profile value": "Basalprofil værdi", + "Active combo bolus": "Aktiv kombobolus", + "Active combo bolus start": "Aktiv kombibolus start", + "Active combo bolus duration": "Aktiv kombibolus varighed", + "Active combo bolus remaining": "Resterende aktiv kombibolus", + "BG Delta": "BG delta", + "Elapsed Time": "Forløbet tid", + "Absolute Delta": "Absolut delta", + "Interpolated": "Interpoleret", + "BWP": "Bolusberegner (BWP)", + "Urgent": "Kritisk", + "Warning": "Advarsel", + "Info": "Info", + "Lowest": "Laveste", + "Snoozing high alarm since there is enough IOB": "Udsætter høj alarm siden der er nok aktiv insulin (IOB)", + "Check BG, time to bolus?": "Kontroler BG, tid til en bolus?", + "Notice": "Bemærk", + "required info missing": "påkrævet info mangler", + "Insulin on Board": "Aktivt insulin (IOB)", + "Current target": "Aktuelt mål", + "Expected effect": "Forventet effekt", + "Expected outcome": "Forventet resultat", + "Carb Equivalent": "Kulhydrat ækvivalent", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "Overskydende insulin svarende til %1U mere end nødvendigt for at nå lav målværdi, kulhydrater ikke medregnet", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "Overskydende insulin svarende til %1U mere end nødvendigt for at nå lav målværdi, VÆR SIKKER PÅ AT IOB ER DÆKKET IND AF KULHYDRATER", + "%1U reduction needed in active insulin to reach low target, too much basal?": "%1U reduktion nødvendig i aktiv insulin for at nå lav mål, for meget basal?", + "basal adjustment out of range, give carbs?": "basalændring uden for grænseværdi, giv kulhydrater?", + "basal adjustment out of range, give bolus?": "basalændring udenfor grænseværdi, giv bolus?", + "above high": "over høj", + "below low": "under lav", + "Projected BG %1 target": "Projekteret mål for BG %1", + "aiming at": "sigte mod", + "Bolus %1 units": "Bolus %1 enheder", + "or adjust basal": "eller juster basal", + "Check BG using glucometer before correcting!": "Kontrollere blodsukker med fingerprikker / blodsukkermåler før der korrigeres!", + "Basal reduction to account %1 units:": "Basalsænkning for at nå %1 enheder", + "30m temp basal": "30 minuters midlertidig basal", + "1h temp basal": "60 minutters midlertidig basal", + "Cannula change overdue!": "Tid for skift af infusionssæt overskredet!", + "Time to change cannula": "Tid til at skifte infusionssæt", + "Change cannula soon": "Skift infusionssæt snart", + "Cannula age %1 hours": "Infusionssæt alder %1 timer", + "Inserted": "Isat", + "CAGE": "Indstik alder", + "COB": "COB", + "Last Carbs": "Seneste kulhydrater", + "IAGE": "Insulinalder", + "Insulin reservoir change overdue!": "Tid for skift af insulinreservoir overskredet!", + "Time to change insulin reservoir": "Tid til at skifte insulinreservoir", + "Change insulin reservoir soon": "Skift insulinreservoir snart", + "Insulin reservoir age %1 hours": "Insulinreservoiralder %1 timer", + "Changed": "Skiftet", + "IOB": "IOB", + "Careportal IOB": "IOB i Careportal", + "Last Bolus": "Seneste Bolus", + "Basal IOB": "Basal IOB", + "Source": "Kilde", + "Stale data, check rig?": "Gammel data, kontrollere uploader?", + "Last received:": "Senest modtaget:", + "%1m ago": "%1m siden", + "%1h ago": "%1t siden", + "%1d ago": "%1d siden", + "RETRO": "RETRO", + "SAGE": "Sensoralder", + "Sensor change/restart overdue!": "Sensor skift/genstart overskredet!", + "Time to change/restart sensor": "Tid til at skifte/genstarte sensor", + "Change/restart sensor soon": "Skift eller genstart sensor snart", + "Sensor age %1 days %2 hours": "Sensoralder %1 dage %2 timer", + "Sensor Insert": "Sensor isat", + "Sensor Start": "Sensor start", + "days": "dage", + "Insulin distribution": "Insulinfordeling", + "To see this report, press SHOW while in this view": "For at se denne rapport, klik på \"VIS\"", + "AR2 Forecast": "AR2 Prognose", + "OpenAPS Forecasts": "OpenAPS Prognose", + "Temporary Target": "Midlertidigt mål", + "Temporary Target Cancel": "Annullér midlertidig mål", + "OpenAPS Offline": "OpenAPS Offline", + "Profiles": "Profiler", + "Time in fluctuation": "Tid i udsving", + "Time in rapid fluctuation": "Tid i hurtige udsving", + "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:": "Dette er kun en grov estimering som kan være misvisende. Det erstatter ikke en blodprøve. Formelen er hentet fra:", + "Filter by hours": "Filtrer efter timer", + "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.": "Tid i udsving og tid i hurtig udsving måler % af tiden i den undersøgte periode, under hvilket blodsukkeret har ændret sig relativt hurtigt. Lavere værdier er bedre.", + "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.": "Middel Total Daglig Ændring er summen af absolutværdier af alla glukoseændringer i den undersøgte periode, divideret med antallet af dage. Lavere er bedre.", + "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "Middelværdier per time er summen af absolutværdier fra alle glukoseændringer i den undersøgte periode divideret med antallet af timer. Lavere er bedre.", + "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "Ud af RMS beregnes ved at kvadratere afstanden ud af intervallet for alle glucoseaflæsninger for den undersøgte periode, summere dem, dividere med tæller og tage kvadratroden. Denne måling svarer til in-range procenten, men vægte aflæsninger langt ud af rækkevidde højere. Lavere værdier er bedre.", + "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">kan findes her.", + "Mean Total Daily Change": "Middel Total Daglig Ændring", + "Mean Hourly Change": "Middelværdier per time", + "FortyFiveDown": "svagt faldende", + "FortyFiveUp": "svagt stigende", + "Flat": "stabilt", + "SingleUp": "stigende", + "SingleDown": "faldende", + "DoubleDown": "hurtigt faldende", + "DoubleUp": "hurtigt stigende", + "virtAsstUnknown": "Denne værdi er ukendt i øjeblikket. Se venligst dit Nightscout website for flere detaljer.", + "virtAsstTitleAR2Forecast": "AR2 Prognose", + "virtAsstTitleCurrentBasal": "Nuværende Basal", + "virtAsstTitleCurrentCOB": "Nuværende COB", + "virtAsstTitleCurrentIOB": "Nuværende IOB", + "virtAsstTitleLaunch": "Velkommen til Nightscout", + "virtAsstTitleLoopForecast": "Loop Prognose", + "virtAsstTitleLastLoop": "Sidste Loop", + "virtAsstTitleOpenAPSForecast": "OpenAPS Prognose", + "virtAsstTitlePumpReservoir": "Resterende Insulin", + "virtAsstTitlePumpBattery": "Pumpe batteri", + "virtAsstTitleRawBG": "Nuværende rå BG", + "virtAsstTitleUploaderBattery": "Uploader batteri", + "virtAsstTitleCurrentBG": "Nuværende BG", + "virtAsstTitleFullStatus": "Fuld Status", + "virtAsstTitleCGMMode": "CGM mode", + "virtAsstTitleCGMStatus": "CGM Status", + "virtAsstTitleCGMSessionAge": "CGM Sessionsalder", + "virtAsstTitleCGMTxStatus": "CGM Transmitter Status", + "virtAsstTitleCGMTxAge": "CGM transmitter alder", + "virtAsstTitleCGMNoise": "CGM Støj", + "virtAsstTitleDelta": "Blodsukker Delta", + "virtAsstStatus": "%1 og %2 af %3.", + "virtAsstBasal": "%1 nuværende basal er %2 enheder per time", + "virtAsstBasalTemp": "%1 midlertidig basal af %2 enheder per time stopper %3", + "virtAsstIob": "og du har %1 aktivt insulin.", + "virtAsstIobIntent": "Du har %1 aktivt insulin", + "virtAsstIobUnits": "%1 enheder af", + "virtAsstLaunch": "Hvad ønsker du at tjekke på Nightscout?", + "virtAsstPreamble": "Dine", + "virtAsstPreamble3person": "%1 har en ", + "virtAsstNoInsulin": "nej", + "virtAsstUploadBattery": "Din uploaders batteri er %1", + "virtAsstReservoir": "Du har %1 enheder tilbage", + "virtAsstPumpBattery": "Din pumpes batteri er %1 %2", + "virtAsstUploaderBattery": "Din uploaders batteri er %1", + "virtAsstLastLoop": "Seneste successfulde loop var %1", + "virtAsstLoopNotAvailable": "Loop plugin lader ikke til at være slået til", + "virtAsstLoopForecastAround": "Ifølge Loops prognose forventes du at blive around %1 i den næste %2", + "virtAsstLoopForecastBetween": "Ifølge Loops prognose forventes du at blive between %1 and %2 i den næste %3", + "virtAsstAR2ForecastAround": "Ifølge AR2-prognosen forventes du at være omkring %1 i løbet af de næste %2", + "virtAsstAR2ForecastBetween": "Ifølge AR2-prognosen forventes du at være mellem %1 og %2 i løbet af de næste %3", + "virtAsstForecastUnavailable": "Det er ikke muligt at forudsige med de tilgængelige data", + "virtAsstRawBG": "Dit rå BG er %1", + "virtAsstOpenAPSForecast": "OpenAPS's forventet BG er %1", + "virtAsstCob3person": "%1 har %2 aktive kulhydrater", + "virtAsstCob": "Du har %1 aktive kulhydrater", + "virtAsstCGMMode": "Din CGM-mode var %1 pr. %2.", + "virtAsstCGMStatus": "Din CGM-status var %1 fra %2.", + "virtAsstCGMSessAge": "Din CGM-session har været aktiv i %1 dage og %2 timer.", + "virtAsstCGMSessNotStarted": "Der er ingen aktiv CGM-session i øjeblikket.", + "virtAsstCGMTxStatus": "Din CGM transmitter status var %1 fra %2.", + "virtAsstCGMTxAge": "Din CGM-sender er %1 dage gammel.", + "virtAsstCGMNoise": "Din CGM-støj var %1 pr. %2.", + "virtAsstCGMBattOne": "Dit CGM batteri var %1 volt fra %2.", + "virtAsstCGMBattTwo": "Dine CGM batteriniveauer var %1 volt og %2 volt fra %3.", + "virtAsstDelta": "Dit delta var %1 mellem %2 og %3.", + "virtAsstDeltaEstimated": "Dit anslåede delta var %1 mellem %2 og %3.", + "virtAsstUnknownIntentTitle": "Unknown Intent", + "virtAsstUnknownIntentText": "Beklager, jeg ved ikke, hvad du beder om.", + "Fat [g]": "Fedt [g]", + "Protein [g]": "Protein [g]", + "Energy [kJ]": "Energi [kJ]", + "Clock Views:": "Ur visninger:", + "Clock": "Klokken", + "Color": "Farve", + "Simple": "Simpel", + "TDD average": "Gennemsnitlig TDD", + "Bolus average": "Bolus gennemsnit", + "Basal average": "Basal gennemsnit", + "Base basal average:": "Base basal gennemsnit:", + "Carbs average": "Kulhydrater gennemsnit", + "Eating Soon": "Spiser snart", + "Last entry {0} minutes ago": "Seneste post {0} minutter siden", + "change": "ændre", + "Speech": "Tale", + "Target Top": "Højt mål", + "Target Bottom": "Lavt mål", + "Canceled": "Annulleret", + "Meter BG": "Blodsukkermåler BG", + "predicted": "forventet", + "future": "fremtid", + "ago": "siden", + "Last data received": "Sidste data modtaget", + "Clock View": "Ur visning", + "Protein": "Protein", + "Fat": "Fedt", + "Protein average": "Gennemsnitlig protein", + "Fat average": "Fedt gennemsnit", + "Total carbs": "Kulhydrater i alt", + "Total protein": "Protein i alt", + "Total fat": "Fedt i alt", + "Database Size": "Databasestørrelse", + "Database Size near its limits!": "Database størrelse nær dens grænser!", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "Database størrelse er %1 MiB ud af %2 MiB. Lav en backup og rydde op i databasen!", + "Database file size": "Database filstørrelse", + "%1 MiB of %2 MiB (%3%)": "%1 MiB af %2 MiB (%3%)", + "Data size": "Data størrelse", + "virtAsstDatabaseSize": "%1 MiB. Det er %2% af den tilgængelige databaseplads.", + "virtAsstTitleDatabaseSize": "Database filstørrelse", + "Carbs/Food/Time": "Kulhydrater/mad/tid", + "You have administration messages": "Du har administrative beskeder", + "Admin messages in queue": "Admin beskeder i kø", + "Queue empty": "Kø tom", + "There are no admin messages in queue": "Der er ingen admin-beskeder i kø", + "Please sign in using the API_SECRET to see your administration messages": "Log venligst ind med API_SECRET for at se dine administrationsmeddelelser", + "Reads enabled in default permissions": "'Reads' aktiveret i standard tilladelser", + "Data reads enabled": "Data 'reads' aktiveret", + "Data writes enabled": "Data 'writes' aktiveret", + "Data writes not enabled": "Data 'writes' ikke aktiveret", + "Color prediction lines": "Farve prognose linjer", + "Release Notes": "Udgivelsesnoter", + "Check for Updates": "Søg efter opdateringer", + "Open Source": "Open Source", + "Nightscout Info": "Nightscout Info", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "Det primære formål med Loopalyzer er at visualisere, hvordan Loop lukket-loop system udføres. Det kan virke med andre opsætninger samt, både lukket og åben loop, og ikke loop. Men afhængigt af, hvilken uploader du bruger, hvor ofte det er i stand til at fange dine data og uploade, og hvordan det er i stand til at fylde manglende data kan nogle grafer kan have huller eller endda være helt tom. Sikre altid at graferne ser fornuftige ud. Bedst er at se en dag ad gangen og rulle gennem en række dage først at se.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer indeholder en tidsforskydning funktion. Hvis du for eksempel har morgenmad kl 07:00 en dag og kl 08:00 dagen efter din gennemsnitlige blodglukose kurve disse to dage vil sandsynligvis se fladt og ikke vise den faktiske respons efter en morgenmad. Tidsforskydning vil beregne den gennemsnitlige tid disse måltider blev spist og derefter skifte alle data (kulhydrater, insulin, basal osv. i begge dage den tilsvarende tidsforskel, således at begge måltider stemmer overens med den gennemsnitlige starttid for måltidet.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "I dette eksempel er alle data fra første dag skubbet 30 minutter frem i tid og alle data fra anden dag 30 minutter tilbage i tid, så det ser ud som om du havde haft morgenmad på 07:30 begge dage. Dette giver dig mulighed for at se din gennemsnitlige blodsukkerrespons fra et måltid.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Tidsforskydning fremhæver perioden efter det gennemsnitlige måltid starttidspunkt i grå, i varigheden af DIA (Duration of Insulin Action). Da alle datapunkter hele dagen forskydes kurverne uden for det grå område er muligvis ikke nøjagtige.", + "Note that time shift is available only when viewing multiple days.": "Bemærk, at tidsforskydning kun er tilgængelig, når du ser flere dage.", + "Please select a maximum of two weeks duration and click Show again.": "Vælg højst to ugers varighed og klik på Vis igen.", + "Show profiles table": "Vis profil tabellen", + "Show predictions": "Vis forudsigelser", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Tidsforskydning på måltider større end %1 g kulhydrater forbruges mellem %2 og %3", + "Previous": "Forrige", + "Previous day": "Forrige dag", + "Next day": "Næste dag", + "Next": "Næste", + "Temp basal delta": "Temp basal delta", + "Authorized by token": "Godkendt af token", + "Auth role": "Auth rolle", + "view without token": "se uden token", + "Remove stored token": "Fjern gemt token", + "Weekly Distribution": "Ugentlig Distribution", + "Failed authentication": "Mislykket godkendelse", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "En enhed på IP-adressen %1 forsøgte at godkende med Nightscout med forkerte legitimationsoplysninger. Tjek om du har en uploader opsætning med forkert API_SECRET eller token?", + "Default (with leading zero and U)": "Standard (med foranstillet nul og U)", + "Concise (with U, without leading zero)": "Kortfattet (med U, uden foranstillet nul)", + "Minimal (without leading zero and U)": "Minimal (uden foranstillet nul og U)", + "Small Bolus Display": "Lille bolus visning", + "Large Bolus Display": "Stor bolus visning", + "Bolus Display Threshold": "Bolus visning grænse", + "%1 U and Over": "%1 U og over", + "Event repeated %1 times.": "Hændelsen skete %1 gange.", + "minutes": "minutter", + "Last recorded %1 %2 ago.": "Sidst optaget %1 %2 siden.", + "Security issue": "Problemer med sikkerhed", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Svag API_SECRET fundet. For at reducere risikoen for uautoriseret adgang, så brug venligst en blanding af små og STORE bogstaver, tal og ikke-alfanumeriske tegn som !#%&/ . Den mindste længde af API_SECRET er 12 tegn.", + "less than 1": "mindre end 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "MongoDB adgangskode og API_SECRET match. Dette er en virkelig dårlig idé. Skift begge og genbrug ikke adgangskoder på tværs af systemet." +} diff --git a/translations/de_DE.json b/translations/de_DE.json new file mode 100644 index 00000000000..ad2dbd979fa --- /dev/null +++ b/translations/de_DE.json @@ -0,0 +1,707 @@ +{ + "Listening on port": "Lauscht auf Port", + "Mo": "Mo", + "Tu": "Di", + "We": "Mi", + "Th": "Do", + "Fr": "Fr", + "Sa": "Sa", + "Su": "So", + "Monday": "Montag", + "Tuesday": "Dienstag", + "Wednesday": "Mittwoch", + "Thursday": "Donnerstag", + "Friday": "Freitag", + "Saturday": "Samstag", + "Sunday": "Sonntag", + "Category": "Kategorie", + "Subcategory": "Unterkategorie", + "Name": "Name", + "Today": "Heute", + "Last 2 days": "Letzten 2 Tage", + "Last 3 days": "Letzten 3 Tage", + "Last week": "Letzte Woche", + "Last 2 weeks": "Letzten 2 Wochen", + "Last month": "Letzter Monat", + "Last 3 months": "Letzten 3 Monate", + "From": "Von", + "To": "Bis", + "Notes": "Notiz", + "Food": "Ernährung", + "Insulin": "Insulin", + "Carbs": "Kohlenhydrate", + "Notes contain": "Notizen enthalten", + "Target BG range bottom": "Vorgabe unteres BG-Ziel", + "top": "oben", + "Show": "Zeigen", + "Display": "Anzeigen", + "Loading": "Laden", + "Loading profile": "Lade Profil", + "Loading status": "Lade Status", + "Loading food database": "Lade Ernährungs-Datenbank", + "not displayed": "nicht angezeigt", + "Loading CGM data of": "Lade CGM-Daten von", + "Loading treatments data of": "Lade Behandlungsdaten von", + "Processing data of": "Verarbeite Daten von", + "Portion": "Abschnitt", + "Size": "Größe", + "(none)": "(nichts)", + "None": "Nichts", + "": "", + "Result is empty": "Ergebnis ist leer", + "Day to day": "Von Tag zu Tag", + "Week to week": "Woche zu Woche", + "Daily Stats": "Tägliche Statistik", + "Percentile Chart": "Perzentil-Diagramm", + "Distribution": "Verteilung", + "Hourly stats": "Stündliche Statistik", + "netIOB stats": "netIOB Statistiken", + "temp basals must be rendered to display this report": "temporäre Basalraten müssen für diesen Report sichtbar sein", + "No data available": "Keine Daten verfügbar", + "Low": "Tief", + "In Range": "Im Zielbereich", + "Period": "Zeitabschnitt", + "High": "Hoch", + "Average": "Mittelwert", + "Low Quartile": "Unteres Quartil", + "Upper Quartile": "Oberes Quartil", + "Quartile": "Quartil", + "Date": "Datum", + "Normal": "Regulär", + "Median": "Median", + "Readings": "Messwerte", + "StDev": "StAbw", + "Daily stats report": "Tagesstatistik Bericht", + "Glucose Percentile report": "Glukose-Perzentil Bericht", + "Glucose distribution": "Glukose Verteilung", + "days total": "Gesamttage", + "Total per day": "Gesamt pro Tag", + "Overall": "Insgesamt", + "Range": "Bereich", + "% of Readings": "% der Messwerte", + "# of Readings": "Anzahl der Messwerte", + "Mean": "Mittelwert", + "Standard Deviation": "Standardabweichung", + "Max": "Max", + "Min": "Min", + "A1c estimation*": "Einschätzung HbA1c*", + "Weekly Success": "Wöchentlicher Erfolg", + "There is not sufficient data to run this report. Select more days.": "Für diesen Bericht sind nicht genug Daten verfügbar. Bitte weitere Tage auswählen.", + "Using stored API secret hash": "Gespeicherte API-Prüfsumme verwenden", + "No API secret hash stored yet. You need to enter API secret.": "Keine API-Prüfsumme gespeichert. Bitte API-Prüfsumme eingeben.", + "Database loaded": "Datenbank geladen", + "Error: Database failed to load": "Fehler: Datenbank konnte nicht geladen werden", + "Error": "Fehler", + "Create new record": "Erstelle neuen Datensatz", + "Save record": "Speichere Datensatz", + "Portions": "Portionen", + "Unit": "Einheit", + "GI": "GI", + "Edit record": "Bearbeite Datensatz", + "Delete record": "Lösche Datensatz", + "Move to the top": "Gehe zum Anfang", + "Hidden": "Verborgen", + "Hide after use": "Verberge nach Gebrauch", + "Your API secret must be at least 12 characters long": "Dein API-Geheimnis muss mindestens 12 Zeichen lang sein", + "Bad API secret": "Fehlerhaftes API-Geheimnis", + "API secret hash stored": "API-Geheimnis-Prüfsumme gespeichert", + "Status": "Status", + "Not loaded": "Nicht geladen", + "Food Editor": "Nahrungsmittel-Editor", + "Your database": "Deine Datenbank", + "Filter": "Filter", + "Save": "Speichern", + "Clear": "Löschen", + "Record": "Datensatz", + "Quick picks": "Schnellauswahl", + "Show hidden": "Verborgenes zeigen", + "Your API secret or token": "Dein API-Geheimnis oder Token", + "Remember this device. (Do not enable this on public computers.)": "An dieses Gerät erinnern. (Nicht auf öffentlichen Geräten verwenden)", + "Treatments": "Behandlungen", + "Time": "Zeit", + "Event Type": "Ereignis-Typ", + "Blood Glucose": "Blutglukose", + "Entered By": "Eingabe durch", + "Delete this treatment?": "Diese Behandlung löschen?", + "Carbs Given": "Kohlenhydratgabe", + "Insulin Given": "Insulingabe", + "Event Time": "Ereignis-Zeit", + "Please verify that the data entered is correct": "Bitte Daten auf Plausibilität prüfen", + "BG": "BZ", + "Use BG correction in calculation": "Verwende BG-Korrektur zur Berechnung", + "BG from CGM (autoupdated)": "Blutglukose vom CGM (Auto-Update)", + "BG from meter": "Blutzucker vom Messgerät", + "Manual BG": "BG von Hand", + "Quickpick": "Schnellauswahl", + "or": "oder", + "Add from database": "Ergänze aus Datenbank", + "Use carbs correction in calculation": "Verwende Kohlenhydrate-Korrektur zur Berechnung", + "Use COB correction in calculation": "Verwende verzehrte Kohlenhydrate zur Berechnung", + "Use IOB in calculation": "Verwende Insulin on Board zur Berechnung", + "Other correction": "Weitere Korrektur", + "Rounding": "Gerundet", + "Enter insulin correction in treatment": "Insulin Korrektur zur Behandlung eingeben", + "Insulin needed": "Benötigtes Insulin", + "Carbs needed": "Benötigte Kohlenhydrate", + "Carbs needed if Insulin total is negative value": "Benötigte Kohlenhydrate sofern Gesamtinsulin einen negativen Wert aufweist", + "Basal rate": "Basalrate", + "60 minutes earlier": "60 Minuten früher", + "45 minutes earlier": "45 Minuten früher", + "30 minutes earlier": "30 Minuten früher", + "20 minutes earlier": "20 Minuten früher", + "15 minutes earlier": "15 Minuten früher", + "Time in minutes": "Zeit in Minuten", + "15 minutes later": "15 Minuten später", + "20 minutes later": "20 Minuten später", + "30 minutes later": "30 Minuten später", + "45 minutes later": "45 Minuten später", + "60 minutes later": "60 Minuten später", + "Additional Notes, Comments": "Ergänzende Hinweise/Kommentare", + "RETRO MODE": "RETRO-MODUS", + "Now": "Jetzt", + "Other": "Weitere", + "Submit Form": "Formular absenden", + "Profile Editor": "Profil-Editor", + "Reports": "Berichte", + "Add food from your database": "Ergänze Nahrung aus Deiner Datenbank", + "Reload database": "Datenbank nachladen", + "Add": "Hinzufügen", + "Unauthorized": "Unbefugt", + "Entering record failed": "Eingabe Datensatz fehlerhaft", + "Device authenticated": "Gerät authentifiziert", + "Device not authenticated": "Gerät nicht authentifiziert", + "Authentication status": "Authentifizierungsstatus", + "Authenticate": "Authentifizieren", + "Remove": "Entfernen", + "Your device is not authenticated yet": "Dein Gerät ist noch nicht authentifiziert", + "Sensor": "Sensor", + "Finger": "Finger", + "Manual": "Von Hand", + "Scale": "Skalierung", + "Linear": "Linear", + "Logarithmic": "Logarithmisch", + "Logarithmic (Dynamic)": "Logarithmisch (dynamisch)", + "Insulin-on-Board": "Aktives Insulin", + "Carbs-on-Board": "Aktiv wirksame Kohlenhydrate", + "Bolus Wizard Preview": "Bolus-Assistent Vorschau (BWP)", + "Value Loaded": "Geladener Wert", + "Cannula Age": "Kanülenalter", + "Basal Profile": "Basalraten-Profil", + "Silence for 30 minutes": "Lautlos für 30 Minuten", + "Silence for 60 minutes": "Lautlos für 60 Minuten", + "Silence for 90 minutes": "Lautlos für 90 Minuten", + "Silence for 120 minutes": "Lautlos für 120 Minuten", + "Settings": "Einstellungen", + "Units": "Einheiten", + "Date format": "Datumsformat", + "12 hours": "12 Stunden", + "24 hours": "24 Stunden", + "Log a Treatment": "Behandlung eingeben", + "BG Check": "BG-Messung", + "Meal Bolus": "Mahlzeiten-Bolus", + "Snack Bolus": "Snack-Bolus", + "Correction Bolus": "Korrektur-Bolus", + "Carb Correction": "Kohlenhydrat-Korrektur", + "Note": "Bemerkung", + "Question": "Frage", + "Exercise": "Bewegung", + "Pump Site Change": "Pumpen-Katheter Wechsel", + "CGM Sensor Start": "CGM Sensor Start", + "CGM Sensor Stop": "CGM Sensor Stopp", + "CGM Sensor Insert": "CGM Sensor Wechsel", + "Sensor Code": "Sensor-Code", + "Transmitter ID": "Transmitter-ID", + "Dexcom Sensor Start": "Dexcom Sensor Start", + "Dexcom Sensor Change": "Dexcom Sensor Wechsel", + "Insulin Cartridge Change": "Insulin Ampullenwechsel", + "D.A.D. Alert": "Diabeteswarnhund-Alarm", + "Glucose Reading": "Glukosemesswert", + "Measurement Method": "Messmethode", + "Meter": "BZ-Messgerät", + "Amount in grams": "Menge in Gramm", + "Amount in units": "Anzahl in Einheiten", + "View all treatments": "Zeige alle Behandlungen", + "Enable Alarms": "Alarme einschalten", + "Pump Battery Change": "Pumpenbatterie wechseln", + "Pump Battery Age": "Alter der Pumpenbatterie", + "Pump Battery Low Alarm": "Pumpenbatterie niedrig Alarm", + "Pump Battery change overdue!": "Pumpenbatterie Wechsel überfällig!", + "When enabled an alarm may sound.": "Sofern eingeschaltet ertönt ein Alarm", + "Urgent High Alarm": "Akuter Hoch Alarm", + "High Alarm": "Hoch Alarm", + "Low Alarm": "Niedrig Alarm", + "Urgent Low Alarm": "Akuter Niedrig Alarm", + "Stale Data: Warn": "Warnung: Daten nicht mehr gültig", + "Stale Data: Urgent": "Achtung: Daten nicht mehr gültig", + "mins": "Minuten", + "Night Mode": "Nacht Modus", + "When enabled the page will be dimmed from 10pm - 6am.": "Sofern aktiviert wird die Anzeige von 22h - 6h gedimmt", + "Enable": "Aktivieren", + "Show Raw BG Data": "Zeige Roh-BG Daten", + "Never": "Nie", + "Always": "Immer", + "When there is noise": "Sofern Sensorrauschen vorhanden", + "When enabled small white dots will be displayed for raw BG data": "Bei Aktivierung erscheinen kleine weiße Punkte für Roh-BG Daten", + "Custom Title": "Benutzerdefinierter Titel", + "Theme": "Aussehen", + "Default": "Standard", + "Colors": "Farben", + "Colorblind-friendly colors": "Farbenblind-freundliche Darstellung", + "Reset, and use defaults": "Zurücksetzen und Voreinstellungen verwenden", + "Calibrations": "Kalibrierung", + "Alarm Test / Smartphone Enable": "Alarm Test / Smartphone aktivieren", + "Bolus Wizard": "Bolus-Assistent", + "in the future": "in der Zukunft", + "time ago": "seit Kurzem", + "hr ago": "Stunde her", + "hrs ago": "Stunden her", + "min ago": "Minute her", + "mins ago": "Minuten her", + "day ago": "Tag her", + "days ago": "Tage her", + "long ago": "lange her", + "Clean": "Löschen", + "Light": "Leicht", + "Medium": "Mittel", + "Heavy": "Stark", + "Treatment type": "Behandlungstyp", + "Raw BG": "Roh-BG", + "Device": "Gerät", + "Noise": "Rauschen", + "Calibration": "Kalibrierung", + "Show Plugins": "Zeige Plugins", + "About": "Über", + "Value in": "Wert in", + "Carb Time": "Kohlenhydrat-Zeit", + "Language": "Sprache", + "Add new": "Neu hinzufügen", + "g": "g", + "ml": "ml", + "pcs": "Stk.", + "Drag&drop food here": "Mahlzeit hierher verschieben", + "Care Portal": "Behandlungs-Portal", + "Medium/Unknown": "Mittel/Unbekannt", + "IN THE FUTURE": "IN DER ZUKUNFT", + "Order": "Reihenfolge", + "oldest on top": "älteste oben", + "newest on top": "neueste oben", + "All sensor events": "Alle Sensor-Ereignisse", + "Remove future items from mongo database": "Entferne zukünftige Objekte aus Mongo-Datenbank", + "Find and remove treatments in the future": "Finde und entferne zukünftige Behandlungen", + "This task find and remove treatments in the future.": "Finde und entferne Behandlungen in der Zukunft.", + "Remove treatments in the future": "Entferne Behandlungen in der Zukunft", + "Find and remove entries in the future": "Finde und entferne Einträge in der Zukunft", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "Finde und entferne CGM-Daten in der Zukunft, die vom Uploader mit falschem Datum/Uhrzeit erstellt wurden.", + "Remove entries in the future": "Entferne Einträge in der Zukunft", + "Loading database ...": "Lade Datenbank ...", + "Database contains %1 future records": "Datenbank enthält %1 zukünftige Einträge", + "Remove %1 selected records?": "Lösche ausgewählten %1 Eintrag?", + "Error loading database": "Fehler beim Laden der Datenbank", + "Record %1 removed ...": "Eintrag %1 entfernt ...", + "Error removing record %1": "Fehler beim Entfernen des Eintrags %1", + "Deleting records ...": "Entferne Einträge ...", + "%1 records deleted": "%1 Einträge gelöscht", + "Clean Mongo status database": "Bereinige Mongo Status-Datenbank", + "Delete all documents from devicestatus collection": "Lösche alle Dokumente der Gerätestatus-Sammlung", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "Diese Aufgabe entfernt alle Dokumente aus der Gerätestatus-Sammlung. Nützlich wenn der Uploader-Batteriestatus sich nicht aktualisiert.", + "Delete all documents": "Lösche alle Dokumente", + "Delete all documents from devicestatus collection?": "Löschen aller Dokumente der Gerätestatus-Sammlung?", + "Database contains %1 records": "Datenbank enthält %1 Einträge", + "All records removed ...": "Alle Einträge entfernt...", + "Delete all documents from devicestatus collection older than 30 days": "Alle Dokumente der Gerätestatus-Sammlung löschen, die älter als 30 Tage sind", + "Number of Days to Keep:": "Daten löschen, die älter sind (in Tagen) als:", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "Diese Aufgabe entfernt alle Dokumente aus der Gerätestatus-Sammlung, die älter sind als 30 Tage. Nützlich wenn der Uploader-Batteriestatus sich nicht aktualisiert.", + "Delete old documents from devicestatus collection?": "Alte Dokumente aus der Gerätestatus-Sammlung entfernen?", + "Clean Mongo entries (glucose entries) database": "Mongo-Einträge (Glukose-Einträge) Datenbank bereinigen", + "Delete all documents from entries collection older than 180 days": "Alle Dokumente aus der Einträge-Sammlung löschen, die älter sind als 180 Tage", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Diese Aufgabe entfernt alle Dokumente aus der Einträge-Sammlung, die älter sind als 180 Tage. Nützlich wenn der Uploader-Batteriestatus sich nicht aktualisiert.", + "Delete old documents": "Alte Dokumente löschen", + "Delete old documents from entries collection?": "Alte Dokumente aus der Einträge-Sammlung entfernen?", + "%1 is not a valid number": "%1 ist keine gültige Zahl", + "%1 is not a valid number - must be more than 2": "%1 ist keine gültige Zahl - Eingabe muss größer als 2 sein", + "Clean Mongo treatments database": "Mongo-Behandlungsdatenbank bereinigen", + "Delete all documents from treatments collection older than 180 days": "Alle Dokumente aus der Behandlungs-Sammlung löschen, die älter sind als 180 Tage", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Diese Aufgabe entfernt alle Dokumente aus der Behandlungs-Sammlung, die älter sind als 180 Tage. Nützlich wenn der Uploader-Batteriestatus sich nicht aktualisiert.", + "Delete old documents from treatments collection?": "Alte Dokumente aus der Behandlungs-Sammlung entfernen?", + "Admin Tools": "Administrator-Werkzeuge", + "Nightscout reporting": "Nightscout-Berichte", + "Cancel": "Abbrechen", + "Edit treatment": "Bearbeite Behandlung", + "Duration": "Dauer", + "Duration in minutes": "Dauer in Minuten", + "Temp Basal": "Temporäre Basalrate", + "Temp Basal Start": "Start Temporäre Basalrate", + "Temp Basal End": "Ende Temporäre Basalrate", + "Percent": "Prozent", + "Basal change in %": "Basalratenänderung in %", + "Basal value": "Basalrate", + "Absolute basal value": "Absoluter Basalratenwert", + "Announcement": "Ankündigung", + "Loading temp basal data": "Lade temporäre Basaldaten", + "Save current record before changing to new?": "Aktuelle Einträge speichern?", + "Profile Switch": "Profil wechseln", + "Profile": "Profil", + "General profile settings": "Allgemeine Profileinstellungen", + "Title": "Überschrift", + "Database records": "Datenbankeinträge", + "Add new record": "Neuen Eintrag hinzufügen", + "Remove this record": "Diesen Eintrag löschen", + "Clone this record to new": "Diesen Eintrag duplizieren", + "Record valid from": "Eintrag gültig ab", + "Stored profiles": "Gespeicherte Profile", + "Timezone": "Zeitzone", + "Duration of Insulin Activity (DIA)": "Dauer der Insulinaktivität (DIA)", + "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.": "Entspricht der typischen Dauer, die das Insulin wirkt. Variiert je nach Patient und Art des Insulins. Häufig 3-4 Stunden für die meisten Pumpeninsuline und die meisten Patienten. Manchmal auch Insulin-Wirkungsdauer genannt.", + "Insulin to carb ratio (I:C)": "Insulin/Kohlenhydrate-Verhältnis (I:KH)", + "Hours:": "Stunden:", + "hours": "Stunden", + "g/hour": "g/h", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "g Kohlenhydrate pro Einheit Insulin. Das Verhältnis wie viele Gramm Kohlenhydrate je Einheit Insulin verbraucht werden.", + "Insulin Sensitivity Factor (ISF)": "Insulinsensibilitätsfaktor (ISF)", + "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "mg/dL oder mmol/L pro Einheit Insulin. Verhältnis von BG-Veränderung je Einheit Korrekturinsulin.", + "Carbs activity / absorption rate": "Kohlenhydrataktivität / Kohlenhydrat-Absorptionsrate", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "Gramm pro Zeiteinheit. Bedeutet sowohl die Änderung in COB je Zeiteinheit, als auch die Menge an Kohlenhydraten, die über diese Zeit wirken sollten. Kohlenhydrat-Absorption / Aktivitätskurven werden weniger genau verstanden als Insulinaktivität, aber sie können angenähert werden indem eine Anfangsverzögerung mit konstanter Aufnahme (g/Std.) verwendet wird.", + "Basal rates [unit/hour]": "Basalraten [Einheit/h]", + "Target BG range [mg/dL,mmol/L]": "Blutzucker-Zielbereich [mg/dL, mmol/L]", + "Start of record validity": "Beginn der Aufzeichnungsgültigkeit", + "Icicle": "Eiszapfen", + "Render Basal": "Basalraten-Darstellung", + "Profile used": "Verwendetes Profil", + "Calculation is in target range.": "Berechnung ist innerhalb des Zielbereichs", + "Loading profile records ...": "Lade Profilaufzeichnungen ...", + "Values loaded.": "Werte geladen.", + "Default values used.": "Standardwerte werden verwendet.", + "Error. Default values used.": "Fehler. Standardwerte werden verwendet.", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "Zeitspannen vom untern und oberen Zielwert stimmen nicht überein. Werte auf Standard zurückgesetzt.", + "Valid from:": "Gültig ab:", + "Save current record before switching to new?": "Aktuellen Datensatz speichern?", + "Add new interval before": "Neues Intervall vorher hinzufügen", + "Delete interval": "Intervall löschen", + "I:C": "IE:KH", + "ISF": "ISF", + "Combo Bolus": "Verzögerter Bolus", + "Difference": "Unterschied", + "New time": "Neue Zeit", + "Edit Mode": "Bearbeitungsmodus", + "When enabled icon to start edit mode is visible": "Wenn aktiviert wird das Icons zum Start des Bearbeitungsmodus sichtbar", + "Operation": "Operation", + "Move": "Verschieben", + "Delete": "Löschen", + "Move insulin": "Insulin verschieben", + "Move carbs": "Kohlenhydrate verschieben", + "Remove insulin": "Insulin löschen", + "Remove carbs": "Kohlenhydrate löschen", + "Change treatment time to %1 ?": "Behandlungsdauer ändern zu %1 ?", + "Change carbs time to %1 ?": "Kohlenhydrat-Zeit ändern zu %1 ?", + "Change insulin time to %1 ?": "Insulinzeit ändern zu %1 ?", + "Remove treatment ?": "Behandlung löschen?", + "Remove insulin from treatment ?": "Insulin der Behandlung löschen?", + "Remove carbs from treatment ?": "Kohlenhydrate der Behandlung löschen?", + "Rendering": "Darstellung", + "Loading OpenAPS data of": "Lade OpenAPS-Daten von", + "Loading profile switch data": "Lade Daten Profil-Wechsel", + "Redirecting you to the Profile Editor to create a new profile.": "Sie werden zum Profil-Editor weitergeleitet, um ein neues Profil anzulegen.", + "Pump": "Pumpe", + "Sensor Age": "Sensor-Alter", + "Insulin Age": "Insulin-Alter", + "Temporary target": "Temporäres Ziel", + "Reason": "Begründung", + "Eating soon": "Bald essen", + "Top": "Oben", + "Bottom": "Unten", + "Activity": "Aktivität", + "Targets": "Ziele", + "Bolus insulin:": "Bolus Insulin:", + "Base basal insulin:": "Basis Basal Insulin:", + "Positive temp basal insulin:": "Positives temporäres Basal Insulin:", + "Negative temp basal insulin:": "Negatives temporäres Basal Insulin:", + "Total basal insulin:": "Gesamt Basal Insulin:", + "Total daily insulin:": "Gesamtes tägliches Insulin:", + "Unable to save Role": "Rolle kann nicht gespeichert werden", + "Unable to delete Role": "Rolle nicht löschbar", + "Database contains %1 roles": "Datenbank enthält %1 Rollen", + "Edit Role": "Rolle editieren", + "admin, school, family, etc": "Administrator, Schule, Familie, etc", + "Permissions": "Berechtigungen", + "Are you sure you want to delete: ": "Sind sie sicher, das Sie löschen wollen:", + "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.": "Jede Rolle hat eine oder mehrere Berechtigungen. Die * Berechtigung ist ein Platzhalter, Berechtigungen sind hierarchisch mit : als Separator.", + "Add new Role": "Eine neue Rolle hinzufügen", + "Roles - Groups of People, Devices, etc": "Rollen - Gruppierungen von Menschen, Geräten, etc.", + "Edit this role": "Editiere diese Rolle", + "Admin authorized": "als Administrator autorisiert", + "Subjects - People, Devices, etc": "Subjekte - Menschen, Geräte, etc", + "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "Jedes Subjekt erhält einen einzigartigen Zugriffsschlüssel und eine oder mehrere Rollen. Klicke auf den Zugriffsschlüssel, um eine neue Ansicht mit dem ausgewählten Subjekt zu erhalten. Dieser geheime Link kann geteilt werden.", + "Add new Subject": "Füge ein neues Subjekt hinzu", + "Unable to save Subject": "Subjekt kann nicht gespeichert werden", + "Unable to delete Subject": "Kann Subjekt nicht löschen", + "Database contains %1 subjects": "Datenbank enthält %1 Subjekte", + "Edit Subject": "Editiere Subjekt", + "person, device, etc": "Person, Gerät, etc", + "role1, role2": "Rolle1, Rolle2", + "Edit this subject": "Editiere dieses Subjekt", + "Delete this subject": "Lösche dieses Subjekt", + "Roles": "Rollen", + "Access Token": "Zugriffsschlüssel (Token)", + "hour ago": "vor einer Stunde", + "hours ago": "vor mehreren Stunden", + "Silence for %1 minutes": "Ruhe für %1 Minuten", + "Check BG": "BZ kontrollieren", + "BASAL": "BASAL", + "Current basal": "Aktuelle Basalrate", + "Sensitivity": "Empfindlichkeit", + "Current Carb Ratio": "Aktuelles KH-Verhältnis", + "Basal timezone": "Basal Zeitzone", + "Active profile": "Aktives Profil", + "Active temp basal": "Aktive temp. Basalrate", + "Active temp basal start": "Start aktive temp. Basalrate", + "Active temp basal duration": "Dauer aktive temp. Basalrate", + "Active temp basal remaining": "Verbleibene Dauer temp. Basalrate", + "Basal profile value": "Basal-Profil Wert", + "Active combo bolus": "Aktiver verzögerter Bolus", + "Active combo bolus start": "Start des aktiven verzögerten Bolus", + "Active combo bolus duration": "Dauer des aktiven verzögerten Bolus", + "Active combo bolus remaining": "Verbleibender aktiver verzögerter Bolus", + "BG Delta": "BZ Differenz", + "Elapsed Time": "Vergangene Zeit", + "Absolute Delta": "Absolute Differenz", + "Interpolated": "Interpoliert", + "BWP": "Bolus-Assistent (BWP)", + "Urgent": "Akut", + "Warning": "Warnung", + "Info": "Info", + "Lowest": "Niedrigster", + "Snoozing high alarm since there is enough IOB": "Ignoriere Alarm hoch, da genügend aktives Insulin (IOB) vorhanden", + "Check BG, time to bolus?": "BZ kontrollieren, ggf. Bolus abgeben?", + "Notice": "Notiz", + "required info missing": "Benötigte Information(en) fehl(t/en)", + "Insulin on Board": "Aktives Insulin", + "Current target": "Aktueller Zielbereich", + "Expected effect": "Erwarteter Effekt", + "Expected outcome": "Erwartetes Ergebnis", + "Carb Equivalent": "Kohlenhydrat-Äquivalent", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "Überschüssiges Insulin: %1U mehr als zum Erreichen der Untergrenze notwendig, Kohlenhydrate sind unberücksichtigt", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "Überschüssiges Insulin: %1U mehr als zum Erreichen der Untergrenze notwendig. SICHERSTELLEN, DASS IOB DURCH KOHLENHYDRATE ABGEDECKT WIRD", + "%1U reduction needed in active insulin to reach low target, too much basal?": "Aktives Insulin um %1U reduzieren, um Untergrenze zu erreichen. Basal zu hoch?", + "basal adjustment out of range, give carbs?": "Basalrate geht außerhalb des Zielbereiches. Kohlenhydrate nehmen?", + "basal adjustment out of range, give bolus?": "Anpassung der Basalrate außerhalb des Zielbereichs. Bolus abgeben?", + "above high": "überhalb Obergrenze", + "below low": "unterhalb Untergrenze", + "Projected BG %1 target": "Erwarteter BZ %1", + "aiming at": "angestrebt werden", + "Bolus %1 units": "Bolus von %1 Einheiten", + "or adjust basal": "oder Basal anpassen", + "Check BG using glucometer before correcting!": "Überprüfe deinen BZ mit dem Messgerät, bevor du eine Korrektur vornimmst!", + "Basal reduction to account %1 units:": "Reduktion der Basalrate um %1 Einheiten zu kompensieren:", + "30m temp basal": "30min temporäres Basal", + "1h temp basal": "1h temporäres Basal", + "Cannula change overdue!": "Kanülenwechsel überfällig!", + "Time to change cannula": "Es ist Zeit, die Kanüle zu wechseln", + "Change cannula soon": "Kanüle bald wechseln", + "Cannula age %1 hours": "Kanülen Alter %1 Stunden", + "Inserted": "Eingesetzt", + "CAGE": "CAGE", + "COB": "COB", + "Last Carbs": "Letzte Kohlenhydrate", + "IAGE": "IAGE", + "Insulin reservoir change overdue!": "Ampullenwechsel überfällig!", + "Time to change insulin reservoir": "Es ist Zeit, die Ampulle zu wechseln", + "Change insulin reservoir soon": "Ampulle bald wechseln", + "Insulin reservoir age %1 hours": "Ampullen Alter %1 Stunden", + "Changed": "Gewechselt", + "IOB": "IOB", + "Careportal IOB": "Behandlungs-Portal IOB", + "Last Bolus": "Letzter Bolus", + "Basal IOB": "Basal IOB", + "Source": "Quelle", + "Stale data, check rig?": "Daten sind veraltet, Übertragungsgerät prüfen?", + "Last received:": "Zuletzt empfangen:", + "%1m ago": "vor %1m", + "%1h ago": "vor %1h", + "%1d ago": "vor 1d", + "RETRO": "Rückschau", + "SAGE": "SAGE", + "Sensor change/restart overdue!": "Sensorwechsel/-neustart überfällig!", + "Time to change/restart sensor": "Es ist Zeit, den Sensor zu wechseln/neuzustarten", + "Change/restart sensor soon": "Sensor bald wechseln/neustarten", + "Sensor age %1 days %2 hours": "Sensor Alter %1 Tage %2 Stunden", + "Sensor Insert": "Sensor eingesetzt", + "Sensor Start": "Sensorstart", + "days": "Tage", + "Insulin distribution": "Insulinverteilung", + "To see this report, press SHOW while in this view": "Auf ZEIGEN drücken, um den Bericht in dieser Ansicht anzuzeigen", + "AR2 Forecast": "AR2-Vorhersage", + "OpenAPS Forecasts": "OpenAPS-Vorhersage", + "Temporary Target": "Temporäres Ziel", + "Temporary Target Cancel": "Temporäres Ziel abbrechen", + "OpenAPS Offline": "OpenAPS offline", + "Profiles": "Profile", + "Time in fluctuation": "Zeit in Fluktuation (Schwankung)", + "Time in rapid fluctuation": "Zeit in starker Fluktuation (Schwankung)", + "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:": "Dies ist lediglich eine grobe Schätzung, die sehr ungenau sein kann und eine Überprüfung des tatsächlichen Blutzuckers nicht ersetzen kann. Die verwendete Formel wurde genommen von:", + "Filter by hours": "Filtern nach Stunden", + "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.": "Zeit in Fluktuation und Zeit in starker Fluktuation messen den Teil der Zeit, in der sich der Blutzuckerwert relativ oder sehr schnell verändert hat. Niedrigere Werte sind besser.", + "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.": "Die gesamte mittlere Änderung pro Tag ist die Summe der absoluten Werte aller Glukoseveränderungen im Betrachtungszeitraum geteilt durch die Anzahl der Tage. Niedrigere Werte sind besser.", + "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "Die mittlere Änderung pro Stunde ist die Summe der absoluten Werte aller Glukoseveränderungen im Betrachtungszeitraum geteilt durch die Anzahl der Stunden. Niedrigere Werte sind besser.", + "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "Der \"außerhalb des Zielbereichs RMS-Wert\" wird berechnet, indem der Abstand außerhalb des Zielbereichs für alle Glukosemesswerte im untersuchten Zeitraum quadriert, addiert, durch die Anzahl geteilt und die Quadratwurzel genommen wird. Diese Metrik ähnelt dem Im-Zielbereich-Prozentsatz, gewichtet aber Messwerte weit außerhalb des Bereichs höher. Niedrigere Werte sind besser.", + "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">hier.", + "Mean Total Daily Change": "Gesamte mittlere Änderung pro Tag", + "Mean Hourly Change": "Mittlere Änderung pro Stunde", + "FortyFiveDown": "leicht sinkend", + "FortyFiveUp": "leicht steigend", + "Flat": "gleichbleibend", + "SingleUp": "steigend", + "SingleDown": "sinkend", + "DoubleDown": "schnell sinkend", + "DoubleUp": "schnell steigend", + "virtAsstUnknown": "Dieser Wert ist momentan unbekannt. Prüfe deine Nightscout-Webseite für weitere Details!", + "virtAsstTitleAR2Forecast": "AR2-Vorhersage", + "virtAsstTitleCurrentBasal": "Aktuelles Basalinsulin", + "virtAsstTitleCurrentCOB": "Aktuelle Kohlenhydrate", + "virtAsstTitleCurrentIOB": "Aktuelles Restinsulin", + "virtAsstTitleLaunch": "Willkommen bei Nightscout", + "virtAsstTitleLoopForecast": "Loop-Vorhersage", + "virtAsstTitleLastLoop": "Letzter Loop", + "virtAsstTitleOpenAPSForecast": "OpenAPS-Vorhersage", + "virtAsstTitlePumpReservoir": "Verbleibendes Insulin", + "virtAsstTitlePumpBattery": "Pumpenbatterie", + "virtAsstTitleRawBG": "Aktueller Blutzucker-Rohwert", + "virtAsstTitleUploaderBattery": "Uploader Batterie", + "virtAsstTitleCurrentBG": "Aktueller Blutzucker", + "virtAsstTitleFullStatus": "Gesamtstatus", + "virtAsstTitleCGMMode": "CGM Modus", + "virtAsstTitleCGMStatus": "CGM-Status", + "virtAsstTitleCGMSessionAge": "CGM Sitzungs-Alter", + "virtAsstTitleCGMTxStatus": "CGM Transmitter Status", + "virtAsstTitleCGMTxAge": "CGM-Transmitteralter", + "virtAsstTitleCGMNoise": "CGM Sensorrauschen", + "virtAsstTitleDelta": "Blutzucker-Delta", + "virtAsstStatus": "%1 und bis %3 %2.", + "virtAsstBasal": "%1 aktuelle Basalrate ist %2 Einheiten je Stunde", + "virtAsstBasalTemp": "%1 temporäre Basalrate von %2 Einheiten endet %3", + "virtAsstIob": "und du hast %1 Insulin wirkend.", + "virtAsstIobIntent": "Du hast noch %1 Insulin wirkend", + "virtAsstIobUnits": "noch %1 Einheiten", + "virtAsstLaunch": "Was möchtest du von Nightscout wissen?", + "virtAsstPreamble": "Deine", + "virtAsstPreamble3person": "%1 hat eine", + "virtAsstNoInsulin": "kein", + "virtAsstUploadBattery": "Der Akku deines Uploader-Handys ist bei %1", + "virtAsstReservoir": "Du hast %1 Einheiten übrig", + "virtAsstPumpBattery": "Der Batteriestand deiner Pumpe ist bei %1 %2", + "virtAsstUploaderBattery": "Der Akku deines Uploaders ist bei %1", + "virtAsstLastLoop": "Der letzte erfolgreiche Loop war %1", + "virtAsstLoopNotAvailable": "Das Loop-Plugin scheint nicht aktiviert zu sein", + "virtAsstLoopForecastAround": "Entsprechend der Loop-Vorhersage wirst in den nächsten %2 bei %1 sein", + "virtAsstLoopForecastBetween": "Entsprechend der Loop-Vorhersage wirst du zwischen %1 und %2 während der nächsten %3 sein", + "virtAsstAR2ForecastAround": "Entsprechend der AR2-Vorhersage wirst du in %2 bei %1 sein", + "virtAsstAR2ForecastBetween": "Entsprechend der AR2-Vorhersage wirst du in %3 zwischen %1 and %2 sein", + "virtAsstForecastUnavailable": "Mit den verfügbaren Daten ist eine Loop-Vorhersage nicht möglich", + "virtAsstRawBG": "Dein Rohblutzucker ist %1", + "virtAsstOpenAPSForecast": "Der von OpenAPS vorhergesagte Blutzucker ist %1", + "virtAsstCob3person": "%1 hat %2 Kohlenhydrate wirkend", + "virtAsstCob": "Du hast noch %1 Kohlenhydrate wirkend", + "virtAsstCGMMode": "Ihr CGM Modus von %2 war %1.", + "virtAsstCGMStatus": "Ihr CGM Status von %2 war %1.", + "virtAsstCGMSessAge": "Deine CGM Sitzung ist seit %1 Tagen und %2 Stunden aktiv.", + "virtAsstCGMSessNotStarted": "Derzeit gibt es keine aktive CGM Sitzung.", + "virtAsstCGMTxStatus": "Dein CGM Status von %2 war %1.", + "virtAsstCGMTxAge": "Dein CGM Transmitter ist %1 Tage alt.", + "virtAsstCGMNoise": "Dein CGM Sensorrauschen von %2 war %1.", + "virtAsstCGMBattOne": "Dein CGM Akku von %2 war %1 Volt.", + "virtAsstCGMBattTwo": "Deine CGM Akkustände von %3 waren %1 Volt und %2 Volt.", + "virtAsstDelta": "Dein Delta war %1 zwischen %2 und %3.", + "virtAsstDeltaEstimated": "Dein geschätztes Delta war %1 zwischen %2 und %3.", + "virtAsstUnknownIntentTitle": "Unbekanntes Vorhaben", + "virtAsstUnknownIntentText": "Tut mir leid, ich hab deine Frage nicht verstanden.", + "Fat [g]": "Fett [g]", + "Protein [g]": "Proteine [g]", + "Energy [kJ]": "Energie [kJ]", + "Clock Views:": "Uhr-Anzeigen:", + "Clock": "Uhr", + "Color": "Farbe", + "Simple": "Einfach", + "TDD average": "durchschnittliches Insulin pro Tag (TDD)", + "Bolus average": "Bolus-Durchschnitt", + "Basal average": "Basal-Durchschnitt", + "Base basal average:": "Basis-Basal-Durchschnitt:", + "Carbs average": "durchschnittliche Kohlenhydrate pro Tag", + "Eating Soon": "Bald Essen", + "Last entry {0} minutes ago": "Letzter Eintrag vor {0} Minuten", + "change": "verändern", + "Speech": "Sprache", + "Target Top": "Oberes Ziel", + "Target Bottom": "Unteres Ziel", + "Canceled": "Abgebrochen", + "Meter BG": "Wert Blutzuckermessgerät", + "predicted": "vorhergesagt", + "future": "Zukunft", + "ago": "vor", + "Last data received": "Zuletzt Daten empfangen", + "Clock View": "Uhr-Anzeigen", + "Protein": "Proteine", + "Fat": "Fett", + "Protein average": "Proteine Durchschnitt", + "Fat average": "Fett Durchschnitt", + "Total carbs": "Kohlenhydrate gesamt", + "Total protein": "Protein gesamt", + "Total fat": "Fett gesamt", + "Database Size": "Datenbankgröße", + "Database Size near its limits!": "Datenbank fast voll!", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "Die Datenbankgröße beträgt %1 MiB von %2 MiB. Bitte sichere deine Daten und bereinige die Datenbank!", + "Database file size": "Datenbank-Dateigröße", + "%1 MiB of %2 MiB (%3%)": "%1 MiB von %2 MiB (%3%)", + "Data size": "Datengröße", + "virtAsstDatabaseSize": "%1 MiB. Das sind %2% des verfügbaren Datenbank-Speicherplatzes.", + "virtAsstTitleDatabaseSize": "Datenbank-Dateigröße", + "Carbs/Food/Time": "Kohlenhydrate/Nahrung/Zeit", + "You have administration messages": "Neue Admin-Nachrichten liegen vor", + "Admin messages in queue": "Admin-Nachrichten in Warteschlange", + "Queue empty": "Warteschlange leer", + "There are no admin messages in queue": "Keine Admin-Nachrichten in der Warteschlange", + "Please sign in using the API_SECRET to see your administration messages": "Bitte melde dich mit dem API_SECRET an, um die Admin-Nachrichten sehen zu können", + "Reads enabled in default permissions": "Leseberechtigung aktiviert durch Standardberechtigungen", + "Data reads enabled": "Daten lesen aktiviert", + "Data writes enabled": "Datenschreibvorgänge aktiviert", + "Data writes not enabled": "Datenschreibvorgänge deaktiviert", + "Color prediction lines": "Farbige Vorhersage-Linien", + "Release Notes": "Versionshinweise", + "Check for Updates": "Nach Updates suchen", + "Open Source": "Open Source", + "Nightscout Info": "Nightscout Info", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "Der Hauptzweck von Loopalyzer ist die Visualisierung der Leistung des Loop-Closed-Loop-Systems. Es kann auch mit anderen Setups funktionieren, sowohl mit geschlossener als auch mit offener Schleife und ohne Schleife. Abhängig davon, welchen Uploader Sie verwenden, wie häufig Ihre Daten erfasst und hochgeladen werden können und wie fehlende Daten nachgefüllt werden können, können einige Diagramme Lücken aufweisen oder sogar vollständig leer sein. Stellen Sie immer sicher, dass die Grafiken angemessen aussehen. Am besten sehen Sie sich einen Tag nach dem anderen an und scrollen zuerst durch einige Tage, um zu sehen.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer enthält eine Zeitverschiebungsfunktion. Wenn Sie beispielsweise an einem Tag um 07:00 Uhr und am Tag nach Ihrer durchschnittlichen Blutzuckerkurve um 08:00 Uhr frühstücken, sehen diese beiden Tage höchstwahrscheinlich abgeflacht aus und zeigen nach dem Frühstück nicht die tatsächliche Reaktion. Die Zeitverschiebung berechnet die durchschnittliche Zeit, in der diese Mahlzeiten gegessen wurden, und verschiebt dann alle Daten (Kohlenhydrate, Insulin, Basal usw.) an beiden Tagen um den entsprechenden Zeitunterschied, sodass beide Mahlzeiten mit der durchschnittlichen Startzeit der Mahlzeit übereinstimmen.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "In diesem Beispiel werden alle Daten vom ersten Tag 30 Minuten vorwärts und alle Daten vom zweiten Tag 30 Minuten rückwärts verschoben, sodass es so aussieht, als hätten Sie an beiden Tagen um 07:30 Uhr gefrühstückt. Auf diese Weise können Sie Ihre tatsächliche durchschnittliche Blutzuckerreaktion nach einer Mahlzeit anzeigen.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Die Zeitverschiebung hebt den Zeitraum nach der durchschnittlichen Beginnzeit der Mahlzeit für die Dauer der DIA (Dauer der Insulinwirkung) grau hervor. Da alle Datenpunkte den ganzen Tag verschoben sind, sind die Kurven außerhalb des grauen Bereichs möglicherweise nicht genau.", + "Note that time shift is available only when viewing multiple days.": "Beachte, dass die Zeitverschiebung nur verfügbar ist, wenn mehrere Tage angezeigt werden.", + "Please select a maximum of two weeks duration and click Show again.": "Bitte wählen Sie eine maximale Dauer von zwei Wochen aus und klicken Sie erneut auf Anzeigen.", + "Show profiles table": "Profiltabelle anzeigen", + "Show predictions": "Vorhersage anzeigen", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Zeitverschiebung bei Mahlzeiten mit mehr als %1 g Kohlenhydraten, die zwischen %2 und %3 verzehrt werden", + "Previous": "Vorherige", + "Previous day": "Vorheriger Tag", + "Next day": "Nächster Tag", + "Next": "Nächste", + "Temp basal delta": "Temporäre Basal Delta", + "Authorized by token": "Autorisiert durch Token", + "Auth role": "Auth-Rolle", + "view without token": "Ohne Token anzeigen", + "Remove stored token": "Gespeichertes Token entfernen", + "Weekly Distribution": "Wöchentliche Verteilung", + "Failed authentication": "Authentifizierung fehlgeschlagen", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "Ein Gerät mit der IP-Adresse %1 hat versucht sich mit falschen Zugangsdaten bei Nightscout anzumelden. Prüfe, ob einer deiner Uploader ein falsches API_SECRET oder Token verwendet.", + "Default (with leading zero and U)": "Standard (mit führender Null und U)", + "Concise (with U, without leading zero)": "Knapp (mit U, ohne führende Null)", + "Minimal (without leading zero and U)": "Minimal (ohne führende Null und U)", + "Small Bolus Display": "Kleine Bolusanzeige", + "Large Bolus Display": "Große Bolusanzeige", + "Bolus Display Threshold": "Schwellenwert für Bolusanzeige", + "%1 U and Over": "%1 U und darüber", + "Event repeated %1 times.": "Ereignis %1 mal wiederholt.", + "minutes": "Minuten", + "Last recorded %1 %2 ago.": "Zuletzt vor %1 %2 aufgezeichnet.", + "Security issue": "Sicherheitsproblem", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Schwaches Passwort API_SECRET erkannt. Bitte verwende eine Mischung aus Klein- und Groß--Buchstaben, Zahlen und nicht-alphanumerischen Zeichen wie !#%&/ um das Risiko eines unberechtigten Zugriffs zu verringern. Die Mindestlänge des API_SECRET beträgt 12 Zeichen.", + "less than 1": "kleiner als 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "MongoDB-Passwort und API_SECRET stimmen überein. Dies ist eine wirklich schlechte Idee. Bitte ändern Sie beide Passwörter und verwenden Sie Passwörter nicht mehrfach." +} diff --git a/translations/el_GR.json b/translations/el_GR.json new file mode 100644 index 00000000000..b1669ca1904 --- /dev/null +++ b/translations/el_GR.json @@ -0,0 +1,707 @@ +{ + "Listening on port": "Παρακολούθηση θύρας", + "Mo": "Δε", + "Tu": "Τρ", + "We": "Τε", + "Th": "Πε", + "Fr": "Πα", + "Sa": "Σα", + "Su": "Κυ", + "Monday": "Δευτέρα", + "Tuesday": "Τρίτη", + "Wednesday": "Τετάρτη", + "Thursday": "Πέμπτη", + "Friday": "Παρασκευή", + "Saturday": "Σάββατο", + "Sunday": "Κυριακή", + "Category": "Κατηγορία", + "Subcategory": "Υποκατηγορία", + "Name": "Όνομα", + "Today": "Σήμερα", + "Last 2 days": "Τελευταίες 2 μέρες", + "Last 3 days": "Τελευταίες 3 μέρες", + "Last week": "Τελευταία εβδομάδα", + "Last 2 weeks": "Τελευταίες 2 εβδομάδες", + "Last month": "Τελευταίος μήνας", + "Last 3 months": "Τελευταίοι 3 μήνες", + "From": "Από", + "To": "Έως", + "Notes": "Σημειώσεις", + "Food": "Φαγητό", + "Insulin": "Ινσουλίνη", + "Carbs": "Υδατάνθρακες", + "Notes contain": "Οι σημειώσεις περιέχουν", + "Target BG range bottom": "Στόχος γλυκόζης - Ελάχιστη τιμή", + "top": "Πάνω όριο", + "Show": "Εμφάνιση", + "Display": "Εμφάνιση", + "Loading": "Φορτώνει", + "Loading profile": "Ανάκτηση Προφίλ", + "Loading status": "Φόρτωση Κατάστασης", + "Loading food database": "Φόρτωση βάσης δεδομένων φαγητών", + "not displayed": "Δεν απεικονίζεται", + "Loading CGM data of": "Φόρτωση δεδομένων CGM", + "Loading treatments data of": "Φόρτωση δεδομένων ενεργειών", + "Processing data of": "Επεξεργασία Δεδομένων", + "Portion": "Μερίδα", + "Size": "Μέγεθος", + "(none)": "(κενό)", + "None": "Κενό", + "": "<κενό>", + "Result is empty": "Το αποτέλεσμα είναι κενό", + "Day to day": "Ανά ημέρα", + "Week to week": "Ανά εβδομάδα", + "Daily Stats": "Στατιστικά ημέρας", + "Percentile Chart": "Ποσοστιαίο γράφημα (%)", + "Distribution": "Κατανομή", + "Hourly stats": "Ωριαία Στατιστικά", + "netIOB stats": "στατιστικά netIOB", + "temp basals must be rendered to display this report": "οι προσωρινοί βασικοί ρυθμοί είναι απαραίτητοι για την προβολή της αναφοράς", + "No data available": "Τα δεδομένα δεν είναι διαθέσιμα", + "Low": "Χαμηλό", + "In Range": "Εντός στόχου", + "Period": "Περίοδος", + "High": "Υψηλό", + "Average": "Μέση τιμή", + "Low Quartile": "Χαμηλότερο Τεταρτημόριο", + "Upper Quartile": "Υψηλότερο τεταρτημόριο", + "Quartile": "Τεταρτημόριο", + "Date": "Ημερομηνία", + "Normal": "Εντός Στόχου", + "Median": "Διάμεσος", + "Readings": "Μετρήσεις", + "StDev": "Τυπική Απόκλιση", + "Daily stats report": "Αναφορά ημερήσιων στατιστικών", + "Glucose Percentile report": "Ποσοστιαία αναφορά γλυκόζης", + "Glucose distribution": "Κατανομή Τιμών Γλυκόζης", + "days total": "ημέρες συνολικά", + "Total per day": "Σύνολο ανά ημέρα", + "Overall": "Σύνολο", + "Range": "Εύρος τιμών", + "% of Readings": "% μετρήσεων", + "# of Readings": "# μετρήσεων", + "Mean": "Μέσος Όρος", + "Standard Deviation": "Τυπική Απόκλιση", + "Max": "Μέγιστο", + "Min": "Ελάχιστο", + "A1c estimation*": "Εκτίμηση HbA1c", + "Weekly Success": "Εβδομαδιαία Κατανομή", + "There is not sufficient data to run this report. Select more days.": "Δεν υπάρχουν επαρκή δεδομένα για αυτή την αναφορά. Επιλέξτε περισσότερες ημέρες.", + "Using stored API secret hash": "Χρηση αποθηκευμένου συνθηματικού", + "No API secret hash stored yet. You need to enter API secret.": "Δεν υπάρχει αποθηκευμένο συνθηματικό API. Πρέπει να εισάγετε το συνθηματικό API", + "Database loaded": "Φόρτωση βάσης δεδομένων", + "Error: Database failed to load": "Σφάλμα: Αποτυχία φόρτωσης της Βάσης δεδομένων", + "Error": "Σφάλμα", + "Create new record": "Δημιουργία νέας εγγραφής", + "Save record": "Αποθήκευση εγγραφής", + "Portions": "Μερίδες", + "Unit": "Μονάδα", + "GI": "Γλυκαιμικός Δείκτης", + "Edit record": "Επεξεργασία εγγραφής", + "Delete record": "Διαγραφή εγγραφής", + "Move to the top": "Μετακίνηση στην κορυφή", + "Hidden": "Απόκρυψη", + "Hide after use": "Απόκρυψη μετά τη χρήση", + "Your API secret must be at least 12 characters long": "Το API secret πρέπει να έχει τουλάχιστον 12 χαρακτήρες", + "Bad API secret": "Λανθασμένο API secret", + "API secret hash stored": "Το συνθηματικό αποθηκεύτηκε", + "Status": "Κατάσταση", + "Not loaded": "Δεν έγινε μεταφόρτωση", + "Food Editor": "Επεξεργασία Δεδομένων Φαγητών", + "Your database": "Η Βάση Δεδομένων σας", + "Filter": "Φίλτρο", + "Save": "Αποθήκευση", + "Clear": "Καθαρισμός", + "Record": "Εγγραφή", + "Quick picks": "Γρήγορες επιλογές", + "Show hidden": "Εμφάνιση κρυφών εγγραφών", + "Your API secret or token": "Το API secret ή το token σας", + "Remember this device. (Do not enable this on public computers.)": "Αποθήκευση κωδικού σε αυτή την συσκευή. (Μην το επιλέγετε σε κοινόχρηστους υπολογιστές.)", + "Treatments": "Θεραπείες", + "Time": "Ώρα", + "Event Type": "Ενέργεια", + "Blood Glucose": "Γλυκόζη Αίματος", + "Entered By": "Εισαγωγή από", + "Delete this treatment?": "Διαγραφή θεραπείας;", + "Carbs Given": "Υδατάνθρακες που δόθηκαν", + "Insulin Given": "Ινσουλίνη που δόθηκε", + "Event Time": "Ώρα ενέργειας", + "Please verify that the data entered is correct": "Παρακαλώ ελέγξτε ότι τα δεδομένα είναι σωστά", + "BG": "Γλυκόζη αίματος", + "Use BG correction in calculation": "Χρήση της διόρθωσης της τιμής γλυκόζης για τον υπολογισμό", + "BG from CGM (autoupdated)": "Τιμή γλυκόζης από τον αισθητήρα (αυτόματη ενημέρωση)", + "BG from meter": "Τιμή γλυκόζης από τον μετρητή", + "Manual BG": "Χειροκίνητη εισαγωγή τιμής γλυκόζης", + "Quickpick": "Γρήγορη επιλογή", + "or": "ή", + "Add from database": "Προσθήκη από τη βάση δεδομένων", + "Use carbs correction in calculation": "Χρήση της διόρθωσης με υδατάνθρακες στον υπολογισμό", + "Use COB correction in calculation": "Χρήση των υδατανθράκων που απομένουν για τον υπολογισμό", + "Use IOB in calculation": "Χρήση της ινσουλίνης που έχει απομείνει για τον υπολογισμό", + "Other correction": "Άλλη διόρθωση", + "Rounding": "Στρογγυλοποίηση", + "Enter insulin correction in treatment": "Υπολογισθείσα ποσότητα ινσουλίνης που απαιτείται", + "Insulin needed": "Απαιτούμενη ινσουλίνη", + "Carbs needed": "Απαιτούμενοι υδατάνθρακες", + "Carbs needed if Insulin total is negative value": "Απαιτούμενοι υδατάνθρακες εάν η συνολική ινσουλίνη έχει αρνητική τιμή", + "Basal rate": "Βασικός ρυθμός", + "60 minutes earlier": "60 λεπτά νωρίτερα", + "45 minutes earlier": "45 λεπτά νωρίτερα", + "30 minutes earlier": "30 λεπτά νωρίτερα", + "20 minutes earlier": "20 λεπτά νωρίτερα", + "15 minutes earlier": "15 λεπτά νωρίτερα", + "Time in minutes": "Ώρα σε λεπτά", + "15 minutes later": "15 λεπτά αργότερα", + "20 minutes later": "20 λεπτά αργότερα", + "30 minutes later": "30 λεπτά αργότερα", + "45 minutes later": "45 λεπτά αργότερα", + "60 minutes later": "60 λεπτά αργότερα", + "Additional Notes, Comments": "Επιπλέον σημειώσεις/σχόλια", + "RETRO MODE": "Ιστορικά στοιχεία", + "Now": "Τώρα", + "Other": "Άλλο", + "Submit Form": "Υποβολή Φόρμας", + "Profile Editor": "Επεξεργασία Προφίλ", + "Reports": "Αναφορές", + "Add food from your database": "Προσθήκη φαγητού από τη Βάση Δεδομένων", + "Reload database": "Επαναφόρτωση Βάσης Δεδομένων", + "Add": "Προσθήκη", + "Unauthorized": "Χωρίς εξουσιοδότηση", + "Entering record failed": "Η εισαγωγή της εγγραφής απέτυχε", + "Device authenticated": "Η συσκευή ταυτοποιήθηκε", + "Device not authenticated": "Μη ταυτοποιημένη συσκευή", + "Authentication status": "Κατάσταση ταυτοποίησης", + "Authenticate": "Πιστοποίηση", + "Remove": "Αφαίρεση", + "Your device is not authenticated yet": "Η συκευή σας δεν έχει ταυτοποιηθεί ακόμα", + "Sensor": "Αισθητήρας", + "Finger": "Δάχτυλο", + "Manual": "Χειροκίνητο", + "Scale": "Κλίμακα", + "Linear": "Γραμμική", + "Logarithmic": "Λογαριθμική", + "Logarithmic (Dynamic)": "Λογαριθμική (Δυναμική)", + "Insulin-on-Board": "Ενεργή Ινσουλίνη (IOB)", + "Carbs-on-Board": "Ενεργοί Υδατάνθρακες (COB)", + "Bolus Wizard Preview": "Οδηγός υπολογισμού bolus ινσουλίνης (ΒWP)", + "Value Loaded": "Φόρτωση τιμής", + "Cannula Age": "Ημέρες Χρήσης Κάνουλας (CAGE)", + "Basal Profile": "Προφίλ βασικού ρυθμού ινσουλίνης", + "Silence for 30 minutes": "Σίγαση για 30 λεπτά", + "Silence for 60 minutes": "Σίγαση για 60 λεπτά", + "Silence for 90 minutes": "Σίγαση για 90 λεπτά", + "Silence for 120 minutes": "Σίγαση για 120 λεπτά", + "Settings": "Ρυθμίσεις", + "Units": "Μονάδες", + "Date format": "Μορφή Ώρας", + "12 hours": "12ωρο", + "24 hours": "24ωρο", + "Log a Treatment": "Καταγραφή Θεραπείας", + "BG Check": "Έλεγχος Γλυκόζης", + "Meal Bolus": "Ινσουλίνη Γέυματος", + "Snack Bolus": "Ινσουλίνη Σνακ", + "Correction Bolus": "Διόρθωση με Ινσουλίνη", + "Carb Correction": "Διόρθωση με Υδατάνθρακες", + "Note": "Σημείωση", + "Question": "Ερώτηση", + "Exercise": "Άσκηση", + "Pump Site Change": "Αλλαγή σημείου αντλίας", + "CGM Sensor Start": "Έναρξη αισθητήρα καταγραφής γλυκόζης", + "CGM Sensor Stop": "Παύση αισθητήρα καταγραφής γλυκόζης", + "CGM Sensor Insert": "Τοποθέτηση αισθητήρα γλυκόζης", + "Sensor Code": "Κωδικός αισθητήρα", + "Transmitter ID": "ID αναμεταδότη", + "Dexcom Sensor Start": "Εκκίνηση αισθητήρα Dexcom", + "Dexcom Sensor Change": "Αλλαγή αισθητήρα Dexcom", + "Insulin Cartridge Change": "Αλλαγή αμπούλας ινσουλίνης", + "D.A.D. Alert": "Προειδοποίηση συνοδού σκύλου για διαβητικό", + "Glucose Reading": "Τιμή Γλυκόζης", + "Measurement Method": "Μέθοδος Μέτρησης", + "Meter": "Μετρητής", + "Amount in grams": "Ποσότητα σε γραμμάρια", + "Amount in units": "Ποσότητα σε μονάδες", + "View all treatments": "Προβολή όλων των θεραπειών", + "Enable Alarms": "Ενεργοποίηση συναγερμών", + "Pump Battery Change": "Αλλαγή μπαταρίας αντλίας", + "Pump Battery Age": "Pump Battery Age", + "Pump Battery Low Alarm": "Συναγερμός χαμηλής στάθμης μπαταρίας", + "Pump Battery change overdue!": "Η αλλαγή της μπαταρίας της αντλίας έχει καθυστερήσει!", + "When enabled an alarm may sound.": "Όταν είναι ενεργοποιημένο, μπορεί να ακουστεί συναγερμός.", + "Urgent High Alarm": "Ειδοποίηση ιδιαίτερα υψηλής γλυκόζης", + "High Alarm": "Ειδοποίηση υψηλής γλυκόζης", + "Low Alarm": "Ειδοποίηση χαμηλής γλυκόζης", + "Urgent Low Alarm": "Ειδοποίηση ιδιαίτερα χαμηλής γλυκόζης", + "Stale Data: Warn": "Τα δεδομένα δεν ενημερώνονται: Προειδοποίηση", + "Stale Data: Urgent": "Τα δεδομένα δεν ενημερώνονται: Επείγον", + "mins": "λεπτά", + "Night Mode": "Λειτουργία Νυκτός", + "When enabled the page will be dimmed from 10pm - 6am.": "Όταν ενεργοποιηθεί, η φωτεινότητα της οθόνης θα είναι μειωμένη μεταξύ 22.00 - 6.00.", + "Enable": "Ενεργοποίηση", + "Show Raw BG Data": "Εμφάνιση δεδομένων αισθητήρα χωρίς εξομάλυνση", + "Never": "Ποτέ", + "Always": "Πάντα", + "When there is noise": "Όταν υπάρχει θόρυβος στις μετρήσεις", + "When enabled small white dots will be displayed for raw BG data": "Όταν είναι ενεργοποιημένο, μικρές λευκές κουκίδες θα αναπαριστούν τα δεδομένα χωρίς εξομάλυσνη του αισθητήρα", + "Custom Title": "Προσαρμοσμένος τίτλος", + "Theme": "Θέμα απεικόνισης", + "Default": "Αρχική ρύθμιση", + "Colors": "Χρώματα", + "Colorblind-friendly colors": "Χρώματα για χρήστες με αχρωματοψία", + "Reset, and use defaults": "Επαναφορά και χρήση των προκαθορισμένων ρυθμίσεων", + "Calibrations": "Βαθμονομήσεις", + "Alarm Test / Smartphone Enable": "Δοκιμή Συναγερμού / Ενεργοποίηση smartphone", + "Bolus Wizard": "Οδηγός υπολογισμού ινσουλίνης", + "in the future": "στο μέλλον", + "time ago": "πριν από ώρα", + "hr ago": "ώρα πριν", + "hrs ago": "ώρες πριν", + "min ago": "λεπτό πριν", + "mins ago": "λεπτά πριν", + "day ago": "ημέρα πριν", + "days ago": "ημέρες πριν", + "long ago": "πολύ πριν από", + "Clean": "Εκκαθάριση", + "Light": "Ελαφριά", + "Medium": "Μέση", + "Heavy": "Βαριά", + "Treatment type": "Τύπος Θεραπείας", + "Raw BG": "Τιμές γλυκόζης χωρίς εξομάλυνση", + "Device": "Συσκευή", + "Noise": "Θόρυβος μετρήσεων", + "Calibration": "Βαθμονόμηση", + "Show Plugins": "Εμφάνιση πρόσθετων συστήματος", + "About": "Σχετικά με", + "Value in": "Τιμή σε", + "Carb Time": "Ώρα χορήγησης υδ/κων", + "Language": "Γλώσσα", + "Add new": "Προσθήκη νέου", + "g": "g", + "ml": "ml", + "pcs": "τεμάχια", + "Drag&drop food here": "Σύρετε εδώ το φαγητό", + "Care Portal": "Πύλη Φροντίδας", + "Medium/Unknown": "Μέσος/Άγνωστος", + "IN THE FUTURE": "ΣΤΟ ΜΕΛΛΟΝ", + "Order": "Ταξινόμηση", + "oldest on top": "τα παλαιότερα πρώτα", + "newest on top": "τα νεότερα πρώτα", + "All sensor events": "Όλα τα συμβάντα του αισθητήρα", + "Remove future items from mongo database": "Αφαίρεση μελλοντικών εγγραφών από τη βάση δεδομένων mongo", + "Find and remove treatments in the future": "Εύρεση και αφαίρεση μελλοντικών θεραπειών από τη βάση δεδομένων", + "This task find and remove treatments in the future.": "Αυτή η ενέργεια βρίσκει και αφαιρεί θεραπείες στο μέλλον.", + "Remove treatments in the future": "Αφαίρεση μελλοντικών θεραπειών", + "Find and remove entries in the future": "Εύρεση και αφαίρεση μελλοντικών εγγραφών", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "Αυτή η ενέργεια βρίσκει και αφαιρεί δεδομένα αιθητήρα τα οποία εισήχθησαν σε μελλοντικό χρόνο από αισθητήρα με λάθος ρυθμίσεις χρόνου/ώρας.", + "Remove entries in the future": "Αφαίρεση μελλοντικών εγγραφών", + "Loading database ...": "Φόρτωση Βάσης Δεδομένων", + "Database contains %1 future records": "Η Βάση Δεδομένων περιέχει %1 μελλοντικές εγγραφές", + "Remove %1 selected records?": "Αφαίρεση %1 των επιλεγμένων εγγραφών;", + "Error loading database": "Σφάλμα στη φόρτωση της βάσης δεδομένων", + "Record %1 removed ...": "%1 εγγραφές αφαιρέθηκαν...", + "Error removing record %1": "Σφάλμα αφαίρεσης %1 εγγραφών", + "Deleting records ...": "Αφαίρεση Εγγραφών...", + "%1 records deleted": "%1 εγγραφών διαγράφηκαν", + "Clean Mongo status database": "Καθαρισμός κατάστασης βάσης δεδομένων Mongo", + "Delete all documents from devicestatus collection": "Διαγραφή όλων των εγγράφων από τη συλλογή καταστάσεων της συσκευής ανάγνωσης του αισθητήρα", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "Αυτή η ενέργεια διαγράφει όλα τα έγγραφα της συλλογής με τις καταστάσεις της συσκευής ανάγνωσης. Χρήσιμη όταν η κατάσταση της μπαταρίας της συσκευής ανάγνωσης δεν ανανεώνεται σωστά.", + "Delete all documents": "Διαγραφή όλων των εγγράφων", + "Delete all documents from devicestatus collection?": "Διαγραφή όλων των εγγράφων κατάστασης της συσκευής ανάγνωσης;", + "Database contains %1 records": "Η βάση δεδομένων περιέχει %1 εγγραφές", + "All records removed ...": "Όλες οι εγγραφές διαγράφηκαν...", + "Delete all documents from devicestatus collection older than 30 days": "Διαγραφή όλων των εγγράφων από τη συλλογή καταστάσεων της συσκευής ανάγνωσης του αισθητήρα άνω των 30 ημερών", + "Number of Days to Keep:": "Αριθμός ημερών προς διατήρηση:", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "Αυτή η ενέργεια διαγράφει όλα τα έγγραφα της κατάστασης της συσκευής ανάγνωσης που είναι παλαιότερα από 30 ημέρες. Χρήσιμη όταν η κατάσταση της μπαταρίας της συσκευής ανάγνωσης δεν ανανεώνεται σωστά.", + "Delete old documents from devicestatus collection?": "Διαγραφή όλων των εγγράφων από τη συλλογή καταστάσεων της συσκευής;", + "Clean Mongo entries (glucose entries) database": "Καθαρίστε τις καταχωρίσεις της βάσης δεδομένων Mongo (καταγραφή γλυκόζης)", + "Delete all documents from entries collection older than 180 days": "Διαγραφή όλων των εγγράφων από τη συλλογή καταχωρίσεων παλαιότερων των 180 ημερών", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Αυτή η ενέργεια αφαιρεί όλα τα έγγραφα από τη συλλογή καταχωρίσεων που είναι παλαιότερα από 180 ημέρες. Χρήσιμη όταν η κατάσταση της μπαταρίας της συσκευής ανάγνωσης δεν ανανεώνεται σωστά.", + "Delete old documents": "Διαγραφή παλαιών εγγράφων", + "Delete old documents from entries collection?": "Διαγραφή παλαιών δεδομένων από τη συλλογή καταχωρίσεων;", + "%1 is not a valid number": "Το %1 δεν είναι έγκυρος αριθμός", + "%1 is not a valid number - must be more than 2": "Το %1 δεν είναι έγκυρος αριθμός - πρέπει να είναι μεγαλύτερος από 2", + "Clean Mongo treatments database": "Εκκαθάριση θεραπειών από τη βάση δεδομένων Mongo", + "Delete all documents from treatments collection older than 180 days": "Διαγραφή όλων των εγγράφων από τη συλλογή θεραπειών ηλικίας παλαιότερων των 180 ημερών", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Αυτή η ενέργεια αφαιρεί όλα τα έγγραφα από τη συλλογή θεραπειών που είναι παλαιότερα από 180 ημέρες. Χρήσιμη όταν η κατάσταση της μπαταρίας της συσκευής ανάγνωσης δεν ανανεώνεται σωστά.", + "Delete old documents from treatments collection?": "Διαγραφή παλαιών εγγράφων από τη συλλογή θεραπειών;", + "Admin Tools": "Εργαλεία Διαχειριστή", + "Nightscout reporting": "Αναφορές του Nightscout", + "Cancel": "Ακύρωση", + "Edit treatment": "Επεξεργασία θεραπείας", + "Duration": "Διάρκεια", + "Duration in minutes": "Διάρκεια σε λεπτά", + "Temp Basal": "Προσωρινός βασικός ρυθμός", + "Temp Basal Start": "Έναρξη προσωρινού βασικού ρυθμού", + "Temp Basal End": "Παύση προσωρινού βασικού", + "Percent": "Ποσοστό", + "Basal change in %": "% Αλλαγής βασικού", + "Basal value": "Τιμή Βασικού ρυθμού", + "Absolute basal value": "Απόλυτη τιμή βασικού ρυθμού", + "Announcement": "Ανακοίνωση", + "Loading temp basal data": "Φόρτωση δεδομένων προσωρινού βασικού ρυθμού", + "Save current record before changing to new?": "Αποθήκευση τρεχουσας εγγραφής πριν την αλλαγή σε νέα;", + "Profile Switch": "Αλλαγή προφίλ", + "Profile": "Προφίλ", + "General profile settings": "Γενικές Ρυθμίσεις Προφίλ", + "Title": "Τίτλος", + "Database records": "Εγραφές Βάσης Δεδομένων", + "Add new record": "Προσθήκη νέας εγγραφής", + "Remove this record": "Αφαίρεση εγγραφής", + "Clone this record to new": "Αντιγραφή εγγραφής σε νέα", + "Record valid from": "Η εγγραφή ισχύει από", + "Stored profiles": "Αποθηκευμένα προφίλ", + "Timezone": "Ζώνη Ώρας", + "Duration of Insulin Activity (DIA)": "Διάρκεια Δράσης Ινσουλίνης (DIA)", + "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.": "Αντιπροσωπευει την τυπική διάρκεια δράσης της χορηγηθείσας ινσουλίνης. Διαφοροποιείται ανά ασθενή και ανά τύπο ινσουλίνης. Τυπικά γύρω στις 3-4 ώρες για την ινσουλίνη μέσω αντλίας και τους περισσότερους ασθενείς. Μερικές φορές αναφέρεται ως χρόνος ζωής της ινσουλίνης.", + "Insulin to carb ratio (I:C)": "Αναλογία Ινσουλίνης/Υδατανθράκων (I:C)", + "Hours:": "Ώρες:", + "hours": "ώρες", + "g/hour": "γρ/ώρα", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "γραμμάρια (gr) υδατανθράκων ανά μονάδα (U) ινσουλίνης. Ο λόγος των γραμμαρίων υδατανθράκων που εξουδετερώνονται από κάθε μία μονάδα ινσουλίνης.", + "Insulin Sensitivity Factor (ISF)": "Ευαισθησία στην Ινοσυλίνη (ISF)", + "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "mg/dl ή mmol/L ανά μονάδα U ινσουλίνης. Ο λόγος της μεταβολής της τιμής της γλυκόζης ανά μια μονάδα ινσουλίνης που δίνεται για διόρθωση.", + "Carbs activity / absorption rate": "Ρυθμός απορρόφησης υδατανθράκων", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "Γραμμάρια ανά μονάδα χρόνου. Αναπαριστά τόσο την μεταβολή του COB στη μονάδα του χρόνου. Οι καμπύλες της απορρόφησης υδατανθράκων και της άσκησης δεν έχουν κατανοηθεί πλήρως από την επιστημονική κοινότητα, αλλά μπορούν να προσεγγιστούν βάζοντας μία αρχική καθυστέρηση ακολουθούμενη από έναν σταθερό ρυθμό απορρόφησης (g/hr).", + "Basal rates [unit/hour]": "Βασικός ρυθμός ινσουλίνης [μον/ώρα]", + "Target BG range [mg/dL,mmol/L]": "Στόχος Γλυκόζης Αίματος [mg/dl,mmol/l]", + "Start of record validity": "Ισχύει από", + "Icicle": "Απεικόνιση Icicle", + "Render Basal": "Απεικόνιση βασικού ρυθμού", + "Profile used": "Προφίλ σε χρήση", + "Calculation is in target range.": "Ο υπολογισμός είναι εντός στόχου", + "Loading profile records ...": "Φόρτωση δεδομένων προφίλ ...", + "Values loaded.": "Φόρτωση δεδομένων.", + "Default values used.": "Χρήση προκαθορισμένων τιμών.", + "Error. Default values used.": "Σφάλμα: Χρήση προκαθορισμένων τιμών.", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "Το χρονικό διάστημα του χαμηλού_στόχου και του υψηλού_στόχου, δεν συμβαδίζουν. Γίνεται επαναφορά στις προκαθορισμένες τιμές.", + "Valid from:": "Ισχύει από:", + "Save current record before switching to new?": "Αποθήκευση αλλαγών στην εγγραφή πριν γίνει εναλλαγή σε νέα;", + "Add new interval before": "Προσθήκη νέου διαστήματος, πριν από", + "Delete interval": "Διαγραφή διαστήματος", + "I:C": "Ινσ:Υδ", + "ISF": "ISF", + "Combo Bolus": "Εκτεταμένη γευματική ινσουλίνη Bolus", + "Difference": "Διαφορά", + "New time": "Νέα ώρα", + "Edit Mode": "Λειτουργία Επεξεργασίας", + "When enabled icon to start edit mode is visible": "Όταν ενεργοποιηθεί, το εικονίδιο της λειτουργίας επεξεργασίας είναι ορατό", + "Operation": "Λειτουργία", + "Move": "Μετακίνηση", + "Delete": "Διαγραφή", + "Move insulin": "Μετακίνηση ινσουλίνης", + "Move carbs": "Μετακίνηση υδατανθράκων", + "Remove insulin": "Αφαίρεση ινσουλίνης", + "Remove carbs": "Αφαίρεση υδατανθράκων", + "Change treatment time to %1 ?": "Αλλαγή του χρόνου της θεραπείας σε %1 ;", + "Change carbs time to %1 ?": "Αλλαγή του χρόνου πρόσληψης υδατανθράκων σε %1 ;", + "Change insulin time to %1 ?": "Αλλαγή του χρόνου χορήγησης ινσουλίνης σε %1 ;", + "Remove treatment ?": "Διαγραφή θεραπείας ;", + "Remove insulin from treatment ?": "Διαγραφή ινσουλίνης από τη θεραπεία ;", + "Remove carbs from treatment ?": "Διαγραφή των υδατανθράκων από τη θεραπεία ;", + "Rendering": "Απεικόνιση", + "Loading OpenAPS data of": "Φόρτωση δεδομένων OpenAPS του", + "Loading profile switch data": "Φόρτωση εναλλαγής δεδομένων προφίλ", + "Redirecting you to the Profile Editor to create a new profile.": "Ανακατεύθυνση στην επεξεργασία Προφίλ για τη δημιουργία νέου προφίλ.", + "Pump": "Αντλία", + "Sensor Age": "Ηλικία αισθητήρα", + "Insulin Age": "Ηλικία ινσουλίνης", + "Temporary target": "Προσωρινός στόχος", + "Reason": "Αιτία", + "Eating soon": "Εκκίνηση γεύματος", + "Top": "Άνω", + "Bottom": "Κάτω", + "Activity": "Δραστηριότητα", + "Targets": "Στόχοι", + "Bolus insulin:": "Ένεση ινσουλίνης:", + "Base basal insulin:": "Βασικός ρυθμός ινσουλίνης:", + "Positive temp basal insulin:": "Θετικός προσωρινός ρυθμός ινσουλίνης:", + "Negative temp basal insulin:": "Αρνητικός προσωρινός ρυθμός ινσουλίνης:", + "Total basal insulin:": "Συνολικός βασικός ρυθμός ινσουλίνης:", + "Total daily insulin:": "Συνολική Ημερήσια Ινσουλίνη", + "Unable to save Role": "Δεν ήταν δυνατή η αποθήκευση του Ρόλου", + "Unable to delete Role": "Δεν είναι δυνατή η διαγραφή του Ρόλου", + "Database contains %1 roles": "Η βάση δεδομένων περιέχει %1 ρόλους", + "Edit Role": "Επεξεργασία ρόλου", + "admin, school, family, etc": "διαχειριστής, σχολείο, οικογένεια, κλπ", + "Permissions": "Δικαιώματα", + "Are you sure you want to delete: ": "Είστε σίγουρος/η ότι θέλετε να διαγράψετε; ", + "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.": "Κάθε ρόλος θα έχει 1 ή περισσότερα δικαιώματα. Το δικαίωμα * είναι ένα μπαλαντέρ, τα δικαιώματα είναι μια ιεραρχία χρησιμοποιώντας : ως διαχωριστικό.", + "Add new Role": "Προσθήκη νέου Ρόλου", + "Roles - Groups of People, Devices, etc": "Ρόλοι - Ομάδες ανθρώπων, Συσκευές, κλπ", + "Edit this role": "Επεξεργασία του ρόλου", + "Admin authorized": "Ο διαχειριστής εξουσιοδοτήθηκε", + "Subjects - People, Devices, etc": "Θέματα - Άνθρωποι, Συσκευές, κλπ", + "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "Κάθε αντικείμενο θα έχει ένα μοναδικό αναγνωριστικό πρόσβασης και 1 ή περισσότερους ρόλους. Κάνετε κλικ στο αναγνωριστικό πρόσβασης για να ανοίξετε μια νέα απεικόνιση με το επιλεγμένο αντικείμενο. Αυτός ο μυστικός σύνδεσης μπορεί να μοιραστεί.", + "Add new Subject": "Προσθήκη νέου Αντικειμένου", + "Unable to save Subject": "Δεν ήταν δυνατή η αποθήκευση του αντικειμένου", + "Unable to delete Subject": "Δεν ήταν δυνατή η διαγραφή του αντικειμένου", + "Database contains %1 subjects": "Η βάση δεδομένων περιέχει %1 αντικείμενα", + "Edit Subject": "Επεξεργασία Αντικειμένου", + "person, device, etc": "πρόσωπο, συσκευή, κλπ", + "role1, role2": "ρόλος1, ρόλος2", + "Edit this subject": "Επεξεργασία αυτού του αντικειμένου", + "Delete this subject": "Διαγραφή αυτού του αντικειμένου", + "Roles": "Ρόλοι", + "Access Token": "Αναγνωριστικό Πρόσβασης", + "hour ago": "ώρα πριν", + "hours ago": "ώρες πριν", + "Silence for %1 minutes": "Σίγαση για %1 λεπτά", + "Check BG": "Έλεγχος γλυκόζης", + "BASAL": "Βασικός ρυθμός", + "Current basal": "Τρέχων βασικός ρυθμός", + "Sensitivity": "Ευαισθησία", + "Current Carb Ratio": "Τρέχουσα Αναλογία Υδατανθράκων", + "Basal timezone": "Ζώνη ώρας βασικού ρυθμού", + "Active profile": "Ενεργό προφίλ", + "Active temp basal": "Ενεργός προσωρινός βασικός ρυθμός", + "Active temp basal start": "Εκκίνηση ενεργού προσωρινού βασικού ρυθμού", + "Active temp basal duration": "Διάρκεια ενεργού προσωρινού βασικού ρυθμού", + "Active temp basal remaining": "Ενεργός προσωρινός βασικός ρυθμός που απομένει", + "Basal profile value": "Τιμή προφίλ βασικού ρυθμού", + "Active combo bolus": "Ενεργή εκτεταμένη ένεση", + "Active combo bolus start": "Έναρξη ενεργής εκτεταμένης ένεσης ινσουλίνης", + "Active combo bolus duration": "Διάρκεια εκτεταμένης ένεσης ινσουλίνης", + "Active combo bolus remaining": "Διάρκεια εκτεταμένης ένεσης ινσουλίνης που απομένει", + "BG Delta": "Διαφορά γλυκόζης", + "Elapsed Time": "Χρόνος που έχει περάσει", + "Absolute Delta": "Απόλυτη τιμή διαφοράς γλυκόζης", + "Interpolated": "Παρεμβολή", + "BWP": "BWP", + "Urgent": "Επείγον", + "Warning": "Προειδοποίηση", + "Info": "Πληροφορίες", + "Lowest": "Ελάχιστο", + "Snoozing high alarm since there is enough IOB": "Αναβολή συναγερμού υψηλής τιμής γλυκόζης καθώς υπάρχει αρκετή IOB", + "Check BG, time to bolus?": "Ελέγξτε τη γλυκόζη. Μήπως είναι ώρα για ένεση ινσουλίνης;", + "Notice": "Σημείωση", + "required info missing": "οι απαιτούμενες πληροφορίες λείπουν", + "Insulin on Board": "Ενεργή Ινσουλίνη", + "Current target": "Τρέχων στόχος", + "Expected effect": "Αναμενόμενο αποτέλεσμα", + "Expected outcome": "Αναμενόμενη έκβαση", + "Carb Equivalent": "Ισοδύναμο υδατανθράκων", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "Υπέρβαση ισοδύναμου ινσουλίνης %1 πάνω από ότι χρειάζεται για να επιτευχθεί ο χαμηλός στόχος, χωρίς να υπολογιστούν οι υδατάνθρακες", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "Υπέρβαση ισοδύναμου ινσουλίνης %1 πάνω από ότι χρειάζεται για να επιτευχθεί ο χαμηλός στόχος, ΔΙΑΣΦΑΛΙΣΤΕ ΟΤΙ Η ΕΝΕΡΓΗ ΙΝΣΟΥΛΙΝΗ ΚΑΛΥΠΤΕΤΑΙ ΑΠΟ ΥΔΑΤΑΝΘΡΑΚΕΣ", + "%1U reduction needed in active insulin to reach low target, too much basal?": "Απαιτείται %1U μείωση της ενεργής ινσουλίνης για την επίτευξη του χαμηλού στόχου, μήπως είναι υψηλός ο βασικός;", + "basal adjustment out of range, give carbs?": "ρύθμιση βασικού ρυθμού εκτός στόχου, Μήπως χρειάζονται υδατάνθρακες;", + "basal adjustment out of range, give bolus?": "ρύθμιση βασικού ρυθμού εκτός στόχου, Μήπως χρειάζεται ένεση ινσουλίνης;", + "above high": "πάνω από τον υψηλό", + "below low": "κάτω από τον χαμηλό", + "Projected BG %1 target": "Προβλεπόμενη γλυκόζη %1 στόχο", + "aiming at": "στοχεύοντας σε", + "Bolus %1 units": "Κάντε ένεση %1 μονάδες", + "or adjust basal": "ή ρυθμίστε το βασικό ρυθμό", + "Check BG using glucometer before correcting!": "Ελέγξτε τη γλυκόζη με αίμα πριν κάνετε διόρθωση!", + "Basal reduction to account %1 units:": "Μείωση βασικού για να καλύψει %1 μονάδες:", + "30m temp basal": "Προσωρινός βασικός για 30 λεπτά", + "1h temp basal": "Προσωρινός βασικός για 1 ώρα", + "Cannula change overdue!": "Υπέρβαση χρόνου αλλαγής καθετήρα!", + "Time to change cannula": "Ώρα για να αλλαγή καθετήρα", + "Change cannula soon": "Αλλάξτε καθετήρα σύντομα", + "Cannula age %1 hours": "Ηλικία καθετήρα %1 ώρες", + "Inserted": "Εισήχθη", + "CAGE": "CAGE", + "COB": "Ενεργοί υδατάνθρακες", + "Last Carbs": "Τελευταίοι Υδατάνθρακες", + "IAGE": "IAGE", + "Insulin reservoir change overdue!": "Υπέρβαση χρόνου αλλαγής δεξαμενής ινσουλίνης!", + "Time to change insulin reservoir": "Ώρα για αλλαγή δεξαμενής ινσουλίνης", + "Change insulin reservoir soon": "Αλλάξτε σύντομα τη δεξαμενή ινσουλίνης", + "Insulin reservoir age %1 hours": "Ηλικία δεξαμενής ινσουλίνης %1 ώρες", + "Changed": "Αντικαταστάθηκε", + "IOB": "IOB", + "Careportal IOB": "Πύλη φροντίδας IOB", + "Last Bolus": "Τελευταία ένεση ινσουλίνης", + "Basal IOB": "Βασικός ρυθμός IOB", + "Source": "Προέλευση", + "Stale data, check rig?": "Παλιότερα δεδομένα, έλεγχος συστήματος;", + "Last received:": "Τελευταία λήψη:", + "%1m ago": "%1λ πριν", + "%1h ago": "%1ω πριν", + "%1d ago": "%1d πριν", + "RETRO": "Ιστορικά στοιχεία", + "SAGE": "SAGE", + "Sensor change/restart overdue!": "Υπέρβαση χρόνου αλλαγής/επανεκκίνησης αιθητήρα!", + "Time to change/restart sensor": "Ώρα για αλλαγή/επανεκκίνηση αισθητήρα", + "Change/restart sensor soon": "Αλλάξτε/επανεκκινήστε τον αισθητήρα σύντομα", + "Sensor age %1 days %2 hours": "Ηλικία αισθητήρα %1 ημέρες %2 ώρες", + "Sensor Insert": "Εισαγωγή αισθητήρα", + "Sensor Start": "Εκκίνηση αισθητήρα", + "days": "ημέρες", + "Insulin distribution": "Κατανομή ινσουλίνης", + "To see this report, press SHOW while in this view": "Για να δείτε αυτή την αναφορά, πιέστε το κουμπί \"ΕΜΦΑΝΙΣΗ\" όσο βρίσκεστε σε αυτή την προβολή", + "AR2 Forecast": "Πρόβλεψη από AR2", + "OpenAPS Forecasts": "Προβλέψεις OpenAPS", + "Temporary Target": "Προσωρινός στόχος", + "Temporary Target Cancel": "Ακύρωση προσωρινού στόχου", + "OpenAPS Offline": "Το OpenAPS είνα ανενεργό", + "Profiles": "Προφίλ", + "Time in fluctuation": "Χρόνος σε διακύμανση", + "Time in rapid fluctuation": "Χρόνος σε μεγάλη διακύμανση", + "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:": "Αυτή είναι μια πρόχειρη εκτίμηση που μπορεί να είναι πολύ ανακριωής και δεν υποκαθιστά την πραγματική εξέταση αίματος. Ο τύπος που χρησιμοποιείται είναι από:", + "Filter by hours": "Φίλτρο ανά ώρες", + "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.": "Ο χρόνος σε διακύμανση και ο χρόνοσς σε γρήγορη διακύμανση μετρά το % του χρόνου της εξεταζόμενης περιόδου, κατά την οποία η γλυκόζη του αίματος μεταβλήθηκε σχετικά γρήγορα ή και πολύ γρήγορα. Οι χαμηλότερες τιμές είναι καλύτερες.", + "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.": "Μέση Συνολική Ημερήσια Αλλαγή είναι το σύνολο των απόλυτων τιμών όλων των εκτός ορίων τιμών γλυκόζης για την εξεταζόμενη περίοδο, διαιρεμένο από τον αριθμό των ημερών. Χαμηλότερες τιμές είναι καλύτερες.", + "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "Μέση Συνολική Ωριαία Αλλαγή είναι το σύνολο των απόλυτων τιμών όλων των εκτός ορίων τιμών γλυκόζης για την εξεταζόμενη περίοδο, διαιρεμένο από τον αριθμό των ωρών της περιόδου. Χαμηλότερες τιμές είναι καλύτερες.", + "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.", + "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">μπορεί να βρεθεί εδώ.", + "Mean Total Daily Change": "Μέση Συνολική Ημερήσια Αλλαγή", + "Mean Hourly Change": "Μέση Ωριαία Αλλαγή", + "FortyFiveDown": "ελαφρά πτωτική", + "FortyFiveUp": "ελαφρά αυξητική", + "Flat": "σταθερή", + "SingleUp": "αυξητική", + "SingleDown": "πτωτική", + "DoubleDown": "ταχεία πτωτική", + "DoubleUp": "ταχχεία αυξητική", + "virtAsstUnknown": "Αυτή η τιμή είναι άγνωστη αυτή τη στιγμή. Παρακαλώ δείτε τον ιστότοπό σας Nightscout για περισσότερες λεπτομέρειες.", + "virtAsstTitleAR2Forecast": "Πρόβλεψη AR2", + "virtAsstTitleCurrentBasal": "Τρέχων βασικός ρυθμός", + "virtAsstTitleCurrentCOB": "Τρέχοντες ενεργοί υδατάνθρακες", + "virtAsstTitleCurrentIOB": "Τρέχουσα ενεργή ινσουλίνη", + "virtAsstTitleLaunch": "Καλώς ήρθατε στο Nightscout", + "virtAsstTitleLoopForecast": "Πρόβλεψη Loop", + "virtAsstTitleLastLoop": "Τελευταίο loop", + "virtAsstTitleOpenAPSForecast": "Πρόβλεψη OpenAPS", + "virtAsstTitlePumpReservoir": "Εναπομείνουσα Ινσουλίνη", + "virtAsstTitlePumpBattery": "Μπαταρία Αντλίας", + "virtAsstTitleRawBG": "Τρέχουσα τιμή γλυκόζης χωρίς εξομάλυνση", + "virtAsstTitleUploaderBattery": "Μπαταρία uploader", + "virtAsstTitleCurrentBG": "Τρέχουσα τιμή γλυκόζης", + "virtAsstTitleFullStatus": "Πλήρης κατάσταση", + "virtAsstTitleCGMMode": "Λειτουργία CGM", + "virtAsstTitleCGMStatus": "Κατάσταση CGM", + "virtAsstTitleCGMSessionAge": "Ηλικία του CGM", + "virtAsstTitleCGMTxStatus": "Κατάσταση πομπού CGM", + "virtAsstTitleCGMTxAge": "Ηλικία πομπού CGM", + "virtAsstTitleCGMNoise": "Θόρυβος μετρήσεων CGM", + "virtAsstTitleDelta": "Διαφορά γλυκόζης αίματος", + "virtAsstStatus": "%1 και %2 από %3.", + "virtAsstBasal": "%1 του τρέχοντος βασικού ρυθμού είναι %2 μονάδες ανά ώρα", + "virtAsstBasalTemp": "%1 του προσωρινού βασικού ρυθμού των %2 μονάδων ανά ώρα θα σταματήσει %3", + "virtAsstIob": "και έχετε ακόμα %1 ενεργή ινσουλίνη.", + "virtAsstIobIntent": "Έχετε %1 ενεργή ινσουλίνη", + "virtAsstIobUnits": "%1 μονάδες από", + "virtAsstLaunch": "Τι θα θέλατε να ελέγξετε στο Nightscout;", + "virtAsstPreamble": "Σας", + "virtAsstPreamble3person": "%1 έχει ένα ", + "virtAsstNoInsulin": "όχι", + "virtAsstUploadBattery": "Η μπαταρία του uploader είναι στο %1", + "virtAsstReservoir": "Έχετε ακόμη %1 μονάδες", + "virtAsstPumpBattery": "Η μπαταρία της αντλίας σας είναι στο %1 %2", + "virtAsstUploaderBattery": "Η μπαταρία του uploader είναι στο %1", + "virtAsstLastLoop": "Το τελευταίο επιτυχές loop ήταν %1", + "virtAsstLoopNotAvailable": "Το πρόσθετο κλειστού κυκλώματος δεν φαίνεται να είναι ενεργοποιημένο", + "virtAsstLoopForecastAround": "Σύμφωνα με την πρόβλεψη του κλειστού κυκλώματος, αναμένεται να είναι περίπου %1 στα επόμενα %2", + "virtAsstLoopForecastBetween": "Σύμφωνα με την πρόβλεψη του κλειστού κυκλώματος, αναμένεται να είστε ανάμεσα στο %1 και %2 στα επόμενα %3", + "virtAsstAR2ForecastAround": "Σύμφωνα μετην πρόβλεψη AR2 αναμένεται να είστε γύρω στο %1 στα επόμενα %2", + "virtAsstAR2ForecastBetween": "Σύμφωνα μετην πρόβλεψη AR2 αναμένεται να είστε ανάμεσα στο %1 και %2 στα επόμενα %3", + "virtAsstForecastUnavailable": "Δεν υπάρχει η δυνατότητα πρόβλεψηε με τα διαθέσιμα δεδομένα", + "virtAsstRawBG": "Η μη φιλτραρισμένη τιμή ζαχάρου είναι %1", + "virtAsstOpenAPSForecast": "Η πιθανή τιμή ζαχάρου βάσει OpenAPS is %1", + "virtAsstCob3person": "%1 έχει %2 ενεργούς υδατάνθρακες", + "virtAsstCob": "Έχετε %1 ενεργούς υδατάνθρακες", + "virtAsstCGMMode": "Η λειτουργία καταγραφής ήταν %1 από %2.", + "virtAsstCGMStatus": "Η κατάσταση καταγραφής ήταν %1 από %2.", + "virtAsstCGMSessAge": "Η περίοδος χρήσης της καταγραφής είναι %1 ημέρες και %2 ώρες.", + "virtAsstCGMSessNotStarted": "Δεν υπάρχει ενεργή καταγραφή ατυή τη στιγμή.", + "virtAsstCGMTxStatus": "Η κατάσταση του πομπού καταγραφής ήταν %1 από %2.", + "virtAsstCGMTxAge": "Ο πομπός καταγραφής είναι %1 ημέρών.", + "virtAsstCGMNoise": "Ο θόρυβος του συστήματος καταγραφής ήταν %1 από %2.", + "virtAsstCGMBattOne": "Η μπαταρία της καταγραφής ήταν %1 vols από τα %2.", + "virtAsstCGMBattTwo": "Το επίπεδο μπαταρίας της καταγραφής ήταν %1 volts και %2 volts από %3.", + "virtAsstDelta": "Η διαφορά τιμών ήταν %1 ανάμεσα στο %2 και το %3.", + "virtAsstDeltaEstimated": "Η εκτιμώμενη διαφορά τιμών ήταν %1 ανάμεσα σε %2 και %3.", + "virtAsstUnknownIntentTitle": "Άγνωστη πρόθεση", + "virtAsstUnknownIntentText": "Συγγνώμη, δεν γνωρίζω τι είναι αυτό που μου ζητάτε.", + "Fat [g]": "Λιπαρά [g]", + "Protein [g]": "Πρωτεΐνη [g]", + "Energy [kJ]": "Ενέργεια [kJ]", + "Clock Views:": "Clock Views:", + "Clock": "Clock", + "Color": "Χρώμα", + "Simple": "Απλή", + "TDD average": "Μέσος όρος Συνολικής πρόσληψης ημερήσιας ινσουλίνης", + "Bolus average": "Μέσος όρος bolus", + "Basal average": "Μέσος όρος βασικού ρυθμού", + "Base basal average:": "Μέσος όρος βασικού ρυθμού:", + "Carbs average": "Μέσος όρος υδατανθράκων", + "Eating Soon": "Eating Soon", + "Last entry {0} minutes ago": "Last entry {0} minutes ago", + "change": "change", + "Speech": "Speech", + "Target Top": "Target Top", + "Target Bottom": "Target Bottom", + "Canceled": "Canceled", + "Meter BG": "Meter BG", + "predicted": "predicted", + "future": "future", + "ago": "ago", + "Last data received": "Last data received", + "Clock View": "Clock View", + "Protein": "Protein", + "Fat": "Fat", + "Protein average": "Protein average", + "Fat average": "Fat average", + "Total carbs": "Total carbs", + "Total protein": "Total protein", + "Total fat": "Total fat", + "Database Size": "Database Size", + "Database Size near its limits!": "Database Size near its limits!", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!", + "Database file size": "Database file size", + "%1 MiB of %2 MiB (%3%)": "%1 MiB of %2 MiB (%3%)", + "Data size": "Data size", + "virtAsstDatabaseSize": "%1 MiB. That is %2% of available database space.", + "virtAsstTitleDatabaseSize": "Database file size", + "Carbs/Food/Time": "Carbs/Food/Time", + "You have administration messages": "You have administration messages", + "Admin messages in queue": "Διαθέσιμα μηνύματα διαχειριστή", + "Queue empty": "Σειρά μηνυμάτων κενή", + "There are no admin messages in queue": "Δεν υπάρχουν αδιάβαστα μηνύματα διαχείρισης", + "Please sign in using the API_SECRET to see your administration messages": "Παρακαλούμε συνδεθείτε χρησιμοποιώντας το API_SECRET για να δείτε τα μηνύματα διαχείρισης", + "Reads enabled in default permissions": "Reads enabled in default permissions", + "Data reads enabled": "Data reads enabled", + "Data writes enabled": "Data writes enabled", + "Data writes not enabled": "Data writes not enabled", + "Color prediction lines": "Γραμμές πρόβλεψης με χρωματικό κώδικα", + "Release Notes": "Σημειώσεις έκδοσης", + "Check for Updates": "Έλεγχος για ενημερώσεις", + "Open Source": "Ανοικτός κώδικας", + "Nightscout Info": "Πληροφορίες Nightscout", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.", + "Note that time shift is available only when viewing multiple days.": "Note that time shift is available only when viewing multiple days.", + "Please select a maximum of two weeks duration and click Show again.": "Please select a maximum of two weeks duration and click Show again.", + "Show profiles table": "Show profiles table", + "Show predictions": "Εμφάνιση προβλέψεων", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Χρονική μετατόπιση για γεύματα μεγαλύτερα από %1 γρ. υδατανθράκων που καταναλώνονται μεταξύ %2 και %3", + "Previous": "Previous", + "Previous day": "Previous day", + "Next day": "Next day", + "Next": "Next", + "Temp basal delta": "Temp basal delta", + "Authorized by token": "Πιστοποίηση από Token", + "Auth role": "Πιστοποίηση ρόλου", + "view without token": "view without token", + "Remove stored token": "Αφαίρεση αποθηκευμένου token", + "Weekly Distribution": "Εβδομαδιαία Κατανομή", + "Failed authentication": "Αποτυχία ταυτοποίησης στοιχείων", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "Έγινε προσπάθεια πιστοποίησης στο Nightscout μια συσκευής από τη διεύθυνση IP %1 με λάθος διαπιστευτήρια. Ελέγξτε αν έχετε ρυθμίσει τον uploader με λάθος API_SECRET ή token.", + "Default (with leading zero and U)": "Default (with leading zero and U)", + "Concise (with U, without leading zero)": "Concise (with U, without leading zero)", + "Minimal (without leading zero and U)": "Minimal (without leading zero and U)", + "Small Bolus Display": "Small Bolus Display", + "Large Bolus Display": "Large Bolus Display", + "Bolus Display Threshold": "Bolus Display Threshold", + "%1 U and Over": "%1 U and Over", + "Event repeated %1 times.": "Η ενέργεια επανλήφθηκε %1 φορές.", + "minutes": "λεπτά", + "Last recorded %1 %2 ago.": "Τελευταία καταγραφή πριν από %1 %2.", + "Security issue": "Πρόβλημα ασφάλειας", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Ανίχνευση αδύναμου API_SECRET. Χρησιμοποιείστε ένα συνδυασμό από μικρά και ΚΕΦΑΛΑΙΑ γράμματα, αριθμούς και σύμβολα, όπως τα !#%&/ για να μειώσετε τον κίνδυνο μη εξουσιοδοτημένης πρόσβασης. Το ελάχιστο μέγεθος για το API_SECRET είναι 12 χαρακτήρες.", + "less than 1": "λιγότερο από 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "Ο κωδικός πρόσβασης στο MongoDB και το API_SECRET είναι ίδια. Αυή δεν είναι καθόλου καλή πρακτική. Σας παρακαλούμε αλλάξτε τα και τα δύο και μην χρησιμοποιήσετε ίδια passwords στο σύστημα." +} diff --git a/translations/en/en.json b/translations/en/en.json new file mode 100644 index 00000000000..13782a2f503 --- /dev/null +++ b/translations/en/en.json @@ -0,0 +1,708 @@ +{ + "Listening on port":"Listening on port" + ,"Mo":"Mo" + ,"Tu":"Tu" + ,"We":"We" + ,"Th":"Th" + ,"Fr":"Fr" + ,"Sa":"Sa" + ,"Su":"Su" + ,"Monday":"Monday" + ,"Tuesday":"Tuesday" + ,"Wednesday":"Wednesday" + ,"Thursday":"Thursday" + ,"Friday":"Friday" + ,"Saturday":"Saturday" + ,"Sunday":"Sunday" + ,"Category":"Category" + ,"Subcategory":"Subcategory" + ,"Name":"Name" + ,"Today":"Today" + ,"Last 2 days":"Last 2 days" + ,"Last 3 days":"Last 3 days" + ,"Last week":"Last week" + ,"Last 2 weeks":"Last 2 weeks" + ,"Last month":"Last month" + ,"Last 3 months":"Last 3 months" + ,"From":"From" + ,"To":"To" + ,"Notes":"Notes" + ,"Food":"Food" + ,"Insulin":"Insulin" + ,"Carbs":"Carbs" + ,"Notes contain":"Notes contain" + ,"Target BG range bottom":"Target BG range bottom" + ,"top":"top" + ,"Show":"Show" + ,"Display":"Display" + ,"Loading":"Loading" + ,"Loading profile":"Loading profile" + ,"Loading status":"Loading status" + ,"Loading food database":"Loading food database" + ,"not displayed":"not displayed" + ,"Loading CGM data of":"Loading CGM data of" + ,"Loading treatments data of":"Loading treatments data of" + ,"Processing data of":"Processing data of" + ,"Portion":"Portion" + ,"Size":"Size" + ,"(none)":"(none)" + ,"None":"None" + ,"":"" + ,"Result is empty":"Result is empty" + ,"Day to day":"Day to day" + ,"Week to week":"Week to week" + ,"Daily Stats":"Daily Stats" + ,"Percentile Chart":"Percentile Chart" + ,"Distribution":"Distribution" + ,"Hourly stats":"Hourly stats" + ,"netIOB stats":"netIOB stats" + ,"temp basals must be rendered to display this report":"temp basals must be rendered to display this report" + ,"No data available":"No data available" + ,"Low":"Low" + ,"In Range":"In Range" + ,"Period":"Period" + ,"High":"High" + ,"Average":"Average" + ,"Low Quartile":"Low Quartile" + ,"Upper Quartile":"Upper Quartile" + ,"Quartile":"Quartile" + ,"Date":"Date" + ,"Normal":"Normal" + ,"Median":"Median" + ,"Readings":"Readings" + ,"StDev":"StDev" + ,"Daily stats report":"Daily stats report" + ,"Glucose Percentile report":"Glucose Percentile report" + ,"Glucose distribution":"Glucose distribution" + ,"days total":"days total" + ,"Total per day":"Total per day" + ,"Overall":"Overall" + ,"Range":"Range" + ,"% of Readings":"% of Readings" + ,"# of Readings":"# of Readings" + ,"Mean":"Mean" + ,"Standard Deviation":"Standard Deviation" + ,"Max":"Max" + ,"Min":"Min" + ,"A1c estimation*":"A1c estimation*" + ,"Weekly Success":"Weekly Success" + ,"There is not sufficient data to run this report. Select more days.":"There is not sufficient data to run this report. Select more days." + ,"Using stored API secret hash":"Using stored API secret hash" + ,"No API secret hash stored yet. You need to enter API secret.":"No API secret hash stored yet. You need to enter API secret." + ,"Database loaded":"Database loaded" + ,"Error: Database failed to load":"Error: Database failed to load" + ,"Error":"Error" + ,"Create new record":"Create new record" + ,"Save record":"Save record" + ,"Portions":"Portions" + ,"Unit":"Unit" + ,"GI":"GI" + ,"Edit record":"Edit record" + ,"Delete record":"Delete record" + ,"Move to the top":"Move to the top" + ,"Hidden":"Hidden" + ,"Hide after use":"Hide after use" + ,"Your API secret must be at least 12 characters long":"Your API secret must be at least 12 characters long" + ,"Bad API secret":"Bad API secret" + ,"API secret hash stored":"API secret hash stored" + ,"Status":"Status" + ,"Not loaded":"Not loaded" + ,"Food Editor":"Food Editor" + ,"Your database":"Your database" + ,"Filter":"Filter" + ,"Save":"Save" + ,"Clear":"Clear" + ,"Record":"Record" + ,"Quick picks":"Quick picks" + ,"Show hidden":"Show hidden" + ,"Your API secret or token":"Your API secret or token" + ,"Remember this device. (Do not enable this on public computers.)":"Remember this device. (Do not enable this on public computers.)" + ,"Treatments":"Treatments" + ,"Time":"Time" + ,"Event Type":"Event Type" + ,"Blood Glucose":"Blood Glucose" + ,"Entered By":"Entered By" + ,"Delete this treatment?":"Delete this treatment?" + ,"Carbs Given":"Carbs Given" + ,"Insulin Given":"Insulin Given" + ,"Event Time":"Event Time" + ,"Please verify that the data entered is correct":"Please verify that the data entered is correct" + ,"BG":"BG" + ,"Use BG correction in calculation":"Use BG correction in calculation" + ,"BG from CGM (autoupdated)":"BG from CGM (autoupdated)" + ,"BG from meter":"BG from meter" + ,"Manual BG":"Manual BG" + ,"Quickpick":"Quickpick" + ,"or":"or" + ,"Add from database":"Add from database" + ,"Use carbs correction in calculation":"Use carbs correction in calculation" + ,"Use COB correction in calculation":"Use COB correction in calculation" + ,"Use IOB in calculation":"Use IOB in calculation" + ,"Other correction":"Other correction" + ,"Rounding":"Rounding" + ,"Enter insulin correction in treatment":"Enter insulin correction in treatment" + ,"Insulin needed":"Insulin needed" + ,"Carbs needed":"Carbs needed" + ,"Carbs needed if Insulin total is negative value":"Carbs needed if Insulin total is negative value" + ,"Basal rate":"Basal rate" + ,"60 minutes earlier":"60 minutes earlier" + ,"45 minutes earlier":"45 minutes earlier" + ,"30 minutes earlier":"30 minutes earlier" + ,"20 minutes earlier":"20 minutes earlier" + ,"15 minutes earlier":"15 minutes earlier" + ,"Time in minutes":"Time in minutes" + ,"15 minutes later":"15 minutes later" + ,"20 minutes later":"20 minutes later" + ,"30 minutes later":"30 minutes later" + ,"45 minutes later":"45 minutes later" + ,"60 minutes later":"60 minutes later" + ,"Additional Notes, Comments":"Additional Notes, Comments" + ,"RETRO MODE":"RETRO MODE" + ,"Now":"Now" + ,"Other":"Other" + ,"Submit Form":"Submit Form" + ,"Profile Editor":"Profile Editor" + ,"Reports":"Reports" + ,"Add food from your database":"Add food from your database" + ,"Reload database":"Reload database" + ,"Add":"Add" + ,"Unauthorized":"Unauthorized" + ,"Entering record failed":"Entering record failed" + ,"Device authenticated":"Device authenticated" + ,"Device not authenticated":"Device not authenticated" + ,"Authentication status":"Authentication status" + ,"Authenticate":"Authenticate" + ,"Remove":"Remove" + ,"Your device is not authenticated yet":"Your device is not authenticated yet" + ,"Sensor":"Sensor" + ,"Finger":"Finger" + ,"Manual":"Manual" + ,"Scale":"Scale" + ,"Linear":"Linear" + ,"Logarithmic":"Logarithmic" + ,"Logarithmic (Dynamic)":"Logarithmic (Dynamic)" + ,"Insulin-on-Board":"Insulin-on-Board" + ,"Carbs-on-Board":"Carbs-on-Board" + ,"Bolus Wizard Preview":"Bolus Wizard Preview" + ,"Value Loaded":"Value Loaded" + ,"Cannula Age":"Cannula Age" + ,"Basal Profile":"Basal Profile" + ,"Silence for 30 minutes":"Silence for 30 minutes" + ,"Silence for 60 minutes":"Silence for 60 minutes" + ,"Silence for 90 minutes":"Silence for 90 minutes" + ,"Silence for 120 minutes":"Silence for 120 minutes" + ,"Settings":"Settings" + ,"Units":"Units" + ,"Date format":"Date format" + ,"12 hours":"12 hours" + ,"24 hours":"24 hours" + ,"Log a Treatment":"Log a Treatment" + ,"BG Check":"BG Check" + ,"Meal Bolus":"Meal Bolus" + ,"Snack Bolus":"Snack Bolus" + ,"Correction Bolus":"Correction Bolus" + ,"Carb Correction":"Carb Correction" + ,"Note":"Note" + ,"Question":"Question" + ,"Exercise":"Exercise" + ,"Pump Site Change":"Pump Site Change" + ,"CGM Sensor Start":"CGM Sensor Start" + ,"CGM Sensor Stop":"CGM Sensor Stop" + ,"CGM Sensor Insert":"CGM Sensor Insert" + ,"Sensor Code":"Sensor Code" + ,"Transmitter ID":"Transmitter ID" + ,"Dexcom Sensor Start":"Dexcom Sensor Start" + ,"Dexcom Sensor Change":"Dexcom Sensor Change" + ,"Insulin Cartridge Change":"Insulin Cartridge Change" + ,"D.A.D. Alert":"D.A.D. Alert" + ,"Glucose Reading":"Glucose Reading" + ,"Measurement Method":"Measurement Method" + ,"Meter":"Meter" + ,"Amount in grams":"Amount in grams" + ,"Amount in units":"Amount in units" + ,"View all treatments":"View all treatments" + ,"Enable Alarms":"Enable Alarms" + ,"Pump Battery Change":"Pump Battery Change" + ,"Pump Battery Age":"Pump Battery Age" + ,"Pump Battery Low Alarm":"Pump Battery Low Alarm" + ,"Pump Battery change overdue!":"Pump Battery change overdue!" + ,"When enabled an alarm may sound.":"When enabled an alarm may sound." + ,"Urgent High Alarm":"Urgent High Alarm" + ,"High Alarm":"High Alarm" + ,"Low Alarm":"Low Alarm" + ,"Urgent Low Alarm":"Urgent Low Alarm" + ,"Stale Data: Warn":"Stale Data: Warn" + ,"Stale Data: Urgent":"Stale Data: Urgent" + ,"mins":"mins" + ,"Night Mode":"Night Mode" + ,"When enabled the page will be dimmed from 10pm - 6am.":"When enabled the page will be dimmed from 10pm - 6am." + ,"Enable":"Enable" + ,"Show Raw BG Data":"Show Raw BG Data" + ,"Never":"Never" + ,"Always":"Always" + ,"When there is noise":"When there is noise" + ,"When enabled small white dots will be displayed for raw BG data":"When enabled small white dots will be displayed for raw BG data" + ,"Custom Title":"Custom Title" + ,"Theme":"Theme" + ,"Default":"Default" + ,"Colors":"Colors" + ,"Colorblind-friendly colors":"Colorblind-friendly colors" + ,"Reset, and use defaults":"Reset, and use defaults" + ,"Calibrations":"Calibrations" + ,"Alarm Test / Smartphone Enable":"Alarm Test / Smartphone Enable" + ,"Bolus Wizard":"Bolus Wizard" + ,"in the future":"in the future" + ,"time ago":"time ago" + ,"hr ago":"hr ago" + ,"hrs ago":"hrs ago" + ,"min ago":"min ago" + ,"mins ago":"mins ago" + ,"day ago":"day ago" + ,"days ago":"days ago" + ,"long ago":"long ago" + ,"Clean":"Clean" + ,"Light":"Light" + ,"Medium":"Medium" + ,"Heavy":"Heavy" + ,"Treatment type":"Treatment type" + ,"Raw BG":"Raw BG" + ,"Device":"Device" + ,"Noise":"Noise" + ,"Calibration":"Calibration" + ,"Show Plugins":"Show Plugins" + ,"About":"About" + ,"Value in":"Value in" + ,"Carb Time":"Carb Time" + ,"Language":"Language" + ,"Add new":"Add new" + ,"g":"g" + ,"ml":"ml" + ,"pcs":"pcs" + ,"Drag&drop food here":"Drag&drop food here" + ,"Care Portal":"Care Portal" + ,"Medium/Unknown":"Medium/Unknown" + ,"IN THE FUTURE":"IN THE FUTURE" + ,"Order":"Order" + ,"oldest on top":"oldest on top" + ,"newest on top":"newest on top" + ,"All sensor events":"All sensor events" + ,"Remove future items from mongo database":"Remove future items from mongo database" + ,"Find and remove treatments in the future":"Find and remove treatments in the future" + ,"This task find and remove treatments in the future.":"This task find and remove treatments in the future." + ,"Remove treatments in the future":"Remove treatments in the future" + ,"Find and remove entries in the future":"Find and remove entries in the future" + ,"This task find and remove CGM data in the future created by uploader with wrong date/time.":"This task find and remove CGM data in the future created by uploader with wrong date/time." + ,"Remove entries in the future":"Remove entries in the future" + ,"Loading database ...":"Loading database ..." + ,"Database contains %1 future records":"Database contains %1 future records" + ,"Remove %1 selected records?":"Remove %1 selected records?" + ,"Error loading database":"Error loading database" + ,"Record %1 removed ...":"Record %1 removed ..." + ,"Error removing record %1":"Error removing record %1" + ,"Deleting records ...":"Deleting records ..." + ,"%1 records deleted":"%1 records deleted" + ,"Clean Mongo status database":"Clean Mongo status database" + ,"Delete all documents from devicestatus collection":"Delete all documents from devicestatus collection" + ,"This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.":"This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated." + ,"Delete all documents":"Delete all documents" + ,"Delete all documents from devicestatus collection?":"Delete all documents from devicestatus collection?" + ,"Database contains %1 records":"Database contains %1 records" + ,"All records removed ...":"All records removed ..." + ,"Delete all documents from devicestatus collection older than 30 days":"Delete all documents from devicestatus collection older than 30 days" + ,"Number of Days to Keep:":"Number of Days to Keep:" + ,"This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.":"This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated." + ,"Delete old documents from devicestatus collection?":"Delete old documents from devicestatus collection?" + ,"Clean Mongo entries (glucose entries) database":"Clean Mongo entries (glucose entries) database" + ,"Delete all documents from entries collection older than 180 days":"Delete all documents from entries collection older than 180 days" + ,"This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.":"This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated." + ,"Delete old documents":"Delete old documents" + ,"Delete old documents from entries collection?":"Delete old documents from entries collection?" + ,"%1 is not a valid number":"%1 is not a valid number" + ,"%1 is not a valid number - must be more than 2":"%1 is not a valid number - must be more than 2" + ,"Clean Mongo treatments database":"Clean Mongo treatments database" + ,"Delete all documents from treatments collection older than 180 days":"Delete all documents from treatments collection older than 180 days" + ,"This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.":"This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated." + ,"Delete old documents from treatments collection?":"Delete old documents from treatments collection?" + ,"Admin Tools":"Admin Tools" + ,"Nightscout reporting":"Nightscout reporting" + ,"Cancel":"Cancel" + ,"Edit treatment":"Edit treatment" + ,"Duration":"Duration" + ,"Duration in minutes":"Duration in minutes" + ,"Temp Basal":"Temp Basal" + ,"Temp Basal Start":"Temp Basal Start" + ,"Temp Basal End":"Temp Basal End" + ,"Percent":"Percent" + ,"Basal change in %":"Basal change in %" + ,"Basal value":"Basal value" + ,"Absolute basal value":"Absolute basal value" + ,"Announcement":"Announcement" + ,"Loading temp basal data":"Loading temp basal data" + ,"Save current record before changing to new?":"Save current record before changing to new?" + ,"Profile Switch":"Profile Switch" + ,"Profile":"Profile" + ,"General profile settings":"General profile settings" + ,"Title":"Title" + ,"Database records":"Database records" + ,"Add new record":"Add new record" + ,"Remove this record":"Remove this record" + ,"Clone this record to new":"Clone this record to new" + ,"Record valid from":"Record valid from" + ,"Stored profiles":"Stored profiles" + ,"Timezone":"Timezone" + ,"Duration of Insulin Activity (DIA)":"Duration of Insulin Activity (DIA)" + ,"Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.":"Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime." + ,"Insulin to carb ratio (I:C)":"Insulin to carb ratio (I:C)" + ,"Hours:":"Hours:" + ,"hours":"hours" + ,"g/hour":"g/hour" + ,"g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.":"g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin." + ,"Insulin Sensitivity Factor (ISF)":"Insulin Sensitivity Factor (ISF)" + ,"mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.":"mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin." + ,"Carbs activity / absorption rate":"Carbs activity / absorption rate" + ,"grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).":"grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr)." + ,"Basal rates [unit/hour]":"Basal rates [unit/hour]" + ,"Target BG range [mg/dL,mmol/L]":"Target BG range [mg/dL,mmol/L]" + ,"Start of record validity":"Start of record validity" + ,"Icicle":"Icicle" + ,"Render Basal":"Render Basal" + ,"Profile used":"Profile used" + ,"Calculation is in target range.":"Calculation is in target range." + ,"Loading profile records ...":"Loading profile records ..." + ,"Values loaded.":"Values loaded." + ,"Default values used.":"Default values used." + ,"Error. Default values used.":"Error. Default values used." + ,"Time ranges of target_low and target_high don't match. Values are restored to defaults.":"Time ranges of target_low and target_high don't match. Values are restored to defaults." + ,"Valid from:":"Valid from:" + ,"Save current record before switching to new?":"Save current record before switching to new?" + ,"Add new interval before":"Add new interval before" + ,"Delete interval":"Delete interval" + ,"I:C":"I:C" + ,"ISF":"ISF" + ,"Combo Bolus":"Combo Bolus" + ,"Difference":"Difference" + ,"New time":"New time" + ,"Edit Mode":"Edit Mode" + ,"When enabled icon to start edit mode is visible":"When enabled icon to start edit mode is visible" + ,"Operation":"Operation" + ,"Move":"Move" + ,"Delete":"Delete" + ,"Move insulin":"Move insulin" + ,"Move carbs":"Move carbs" + ,"Remove insulin":"Remove insulin" + ,"Remove carbs":"Remove carbs" + ,"Change treatment time to %1 ?":"Change treatment time to %1 ?" + ,"Change carbs time to %1 ?":"Change carbs time to %1 ?" + ,"Change insulin time to %1 ?":"Change insulin time to %1 ?" + ,"Remove treatment ?":"Remove treatment ?" + ,"Remove insulin from treatment ?":"Remove insulin from treatment ?" + ,"Remove carbs from treatment ?":"Remove carbs from treatment ?" + ,"Rendering":"Rendering" + ,"Loading OpenAPS data of":"Loading OpenAPS data of" + ,"Loading profile switch data":"Loading profile switch data" + ,"Redirecting you to the Profile Editor to create a new profile.":"Redirecting you to the Profile Editor to create a new profile." + ,"Pump":"Pump" + ,"Sensor Age":"Sensor Age" + ,"Insulin Age":"Insulin Age" + ,"Temporary target":"Temporary target" + ,"Reason":"Reason" + ,"Eating soon":"Eating soon" + ,"Top":"Top" + ,"Bottom":"Bottom" + ,"Activity":"Activity" + ,"Targets":"Targets" + ,"Bolus insulin:":"Bolus insulin:" + ,"Base basal insulin:":"Base basal insulin:" + ,"Positive temp basal insulin:":"Positive temp basal insulin:" + ,"Negative temp basal insulin:":"Negative temp basal insulin:" + ,"Total basal insulin:":"Total basal insulin:" + ,"Total daily insulin:":"Total daily insulin:" + ,"Unable to save Role":"Unable to save Role" + ,"Unable to delete Role":"Unable to delete Role" + ,"Database contains %1 roles":"Database contains %1 roles" + ,"Edit Role":"Edit Role" + ,"admin, school, family, etc":"admin, school, family, etc" + ,"Permissions":"Permissions" + ,"Are you sure you want to delete: ":"Are you sure you want to delete: " + ,"Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.":"Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator." + ,"Add new Role":"Add new Role" + ,"Roles - Groups of People, Devices, etc":"Roles - Groups of People, Devices, etc" + ,"Edit this role":"Edit this role" + ,"Admin authorized":"Admin authorized" + ,"Subjects - People, Devices, etc":"Subjects - People, Devices, etc" + ,"Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.":"Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared." + ,"Add new Subject":"Add new Subject" + ,"Unable to save Subject":"Unable to save Subject" + ,"Unable to delete Subject":"Unable to delete Subject" + ,"Database contains %1 subjects":"Database contains %1 subjects" + ,"Edit Subject":"Edit Subject" + ,"person, device, etc":"person, device, etc" + ,"role1, role2":"role1, role2" + ,"Edit this subject":"Edit this subject" + ,"Delete this subject":"Delete this subject" + ,"Roles":"Roles" + ,"Access Token":"Access Token" + ,"hour ago":"hour ago" + ,"hours ago":"hours ago" + ,"Silence for %1 minutes":"Silence for %1 minutes" + ,"Check BG":"Check BG" + ,"BASAL":"BASAL" + ,"Current basal":"Current basal" + ,"Sensitivity":"Sensitivity" + ,"Current Carb Ratio":"Current Carb Ratio" + ,"Basal timezone":"Basal timezone" + ,"Active profile":"Active profile" + ,"Active temp basal":"Active temp basal" + ,"Active temp basal start":"Active temp basal start" + ,"Active temp basal duration":"Active temp basal duration" + ,"Active temp basal remaining":"Active temp basal remaining" + ,"Basal profile value":"Basal profile value" + ,"Active combo bolus":"Active combo bolus" + ,"Active combo bolus start":"Active combo bolus start" + ,"Active combo bolus duration":"Active combo bolus duration" + ,"Active combo bolus remaining":"Active combo bolus remaining" + ,"BG Delta":"BG Delta" + ,"Elapsed Time":"Elapsed Time" + ,"Absolute Delta":"Absolute Delta" + ,"Interpolated":"Interpolated" + ,"BWP":"BWP" + ,"Urgent":"Urgent" + ,"Warning":"Warning" + ,"Info":"Info" + ,"Lowest":"Lowest" + ,"Snoozing high alarm since there is enough IOB":"Snoozing high alarm since there is enough IOB" + ,"Check BG, time to bolus?":"Check BG, time to bolus?" + ,"Notice":"Notice" + ,"required info missing":"required info missing" + ,"Insulin on Board":"Insulin on Board" + ,"Current target":"Current target" + ,"Expected effect":"Expected effect" + ,"Expected outcome":"Expected outcome" + ,"Carb Equivalent":"Carb Equivalent" + ,"Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs":"Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs" + ,"Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS":"Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS" + ,"%1U reduction needed in active insulin to reach low target, too much basal?":"%1U reduction needed in active insulin to reach low target, too much basal?" + ,"basal adjustment out of range, give carbs?":"basal adjustment out of range, give carbs?" + ,"basal adjustment out of range, give bolus?":"basal adjustment out of range, give bolus?" + ,"above high":"above high" + ,"below low":"below low" + ,"Projected BG %1 target":"Projected BG %1 target" + ,"aiming at":"aiming at" + ,"Bolus %1 units":"Bolus %1 units" + ,"or adjust basal":"or adjust basal" + ,"Check BG using glucometer before correcting!":"Check BG using glucometer before correcting!" + ,"Basal reduction to account %1 units:":"Basal reduction to account %1 units:" + ,"30m temp basal":"30m temp basal" + ,"1h temp basal":"1h temp basal" + ,"Cannula change overdue!":"Cannula change overdue!" + ,"Time to change cannula":"Time to change cannula" + ,"Change cannula soon":"Change cannula soon" + ,"Cannula age %1 hours":"Cannula age %1 hours" + ,"Inserted":"Inserted" + ,"CAGE":"CAGE" + ,"COB":"COB" + ,"Last Carbs":"Last Carbs" + ,"IAGE":"IAGE" + ,"Insulin reservoir change overdue!":"Insulin reservoir change overdue!" + ,"Time to change insulin reservoir":"Time to change insulin reservoir" + ,"Change insulin reservoir soon":"Change insulin reservoir soon" + ,"Insulin reservoir age %1 hours":"Insulin reservoir age %1 hours" + ,"Changed":"Changed" + ,"IOB":"IOB" + ,"Careportal IOB":"Careportal IOB" + ,"Last Bolus":"Last Bolus" + ,"Basal IOB":"Basal IOB" + ,"Source":"Source" + ,"Stale data, check rig?":"Stale data, check rig?" + ,"Last received:":"Last received:" + ,"%1m ago":"%1m ago" + ,"%1h ago":"%1h ago" + ,"%1d ago":"%1d ago" + ,"RETRO":"RETRO" + ,"SAGE":"SAGE" + ,"Sensor change/restart overdue!":"Sensor change/restart overdue!" + ,"Time to change/restart sensor":"Time to change/restart sensor" + ,"Change/restart sensor soon":"Change/restart sensor soon" + ,"Sensor age %1 days %2 hours":"Sensor age %1 days %2 hours" + ,"Sensor Insert":"Sensor Insert" + ,"Sensor Start":"Sensor Start" + ,"days":"days" + ,"Insulin distribution":"Insulin distribution" + ,"To see this report, press SHOW while in this view":"To see this report, press SHOW while in this view" + ,"AR2 Forecast":"AR2 Forecast" + ,"OpenAPS Forecasts":"OpenAPS Forecasts" + ,"Temporary Target":"Temporary Target" + ,"Temporary Target Cancel":"Temporary Target Cancel" + ,"OpenAPS Offline":"OpenAPS Offline" + ,"Profiles":"Profiles" + ,"Time in fluctuation":"Time in fluctuation" + ,"Time in rapid fluctuation":"Time in rapid fluctuation" + ,"This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:":"This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:" + ,"Filter by hours":"Filter by hours" + ,"Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.":"Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better." + ,"Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.":"Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better." + ,"Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.":"Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better." + ,"Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.":"Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better." + ,"GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.":"\">can be found here." + ,"Mean Total Daily Change":"Mean Total Daily Change" + ,"Mean Hourly Change":"Mean Hourly Change" + ,"FortyFiveDown":"slightly dropping" + ,"FortyFiveUp":"slightly rising" + ,"Flat":"holding" + ,"SingleUp":"rising" + ,"SingleDown":"dropping" + ,"DoubleDown":"rapidly dropping" + ,"DoubleUp":"rapidly rising" + ,"virtAsstUnknown":"That value is unknown at the moment. Please see your Nightscout site for more details." + ,"virtAsstTitleAR2Forecast":"AR2 Forecast" + ,"virtAsstTitleCurrentBasal":"Current Basal" + ,"virtAsstTitleCurrentCOB":"Current COB" + ,"virtAsstTitleCurrentIOB":"Current IOB" + ,"virtAsstTitleLaunch":"Welcome to Nightscout" + ,"virtAsstTitleLoopForecast":"Loop Forecast" + ,"virtAsstTitleLastLoop":"Last Loop" + ,"virtAsstTitleOpenAPSForecast":"OpenAPS Forecast" + ,"virtAsstTitlePumpReservoir":"Insulin Remaining" + ,"virtAsstTitlePumpBattery":"Pump Battery" + ,"virtAsstTitleRawBG":"Current Raw BG" + ,"virtAsstTitleUploaderBattery":"Uploader Battery" + ,"virtAsstTitleCurrentBG":"Current BG" + ,"virtAsstTitleFullStatus":"Full Status" + ,"virtAsstTitleCGMMode":"CGM Mode" + ,"virtAsstTitleCGMStatus":"CGM Status" + ,"virtAsstTitleCGMSessionAge":"CGM Session Age" + ,"virtAsstTitleCGMTxStatus":"CGM Transmitter Status" + ,"virtAsstTitleCGMTxAge":"CGM Transmitter Age" + ,"virtAsstTitleCGMNoise":"CGM Noise" + ,"virtAsstTitleDelta":"Blood Glucose Delta" + ,"virtAsstStatus":"%1 and %2 as of %3." + ,"virtAsstBasal":"%1 current basal is %2 units per hour" + ,"virtAsstBasalTemp":"%1 temp basal of %2 units per hour will end %3" + ,"virtAsstIob":"and you have %1 insulin on board." + ,"virtAsstIobIntent":"You have %1 insulin on board" + ,"virtAsstIobUnits":"%1 units of" + ,"virtAsstLaunch":"What would you like to check on Nightscout?" + ,"virtAsstPreamble":"Your" + ,"virtAsstPreamble3person":"%1 has a " + ,"virtAsstNoInsulin":"no" + ,"virtAsstUploadBattery":"Your uploader battery is at %1" + ,"virtAsstReservoir":"You have %1 units remaining" + ,"virtAsstPumpBattery":"Your pump battery is at %1 %2" + ,"virtAsstUploaderBattery":"Your uploader battery is at %1" + ,"virtAsstLastLoop":"The last successful loop was %1" + ,"virtAsstLoopNotAvailable":"Loop plugin does not seem to be enabled" + ,"virtAsstLoopForecastAround":"According to the loop forecast you are expected to be around %1 over the next %2" + ,"virtAsstLoopForecastBetween":"According to the loop forecast you are expected to be between %1 and %2 over the next %3" + ,"virtAsstAR2ForecastAround":"According to the AR2 forecast you are expected to be around %1 over the next %2" + ,"virtAsstAR2ForecastBetween":"According to the AR2 forecast you are expected to be between %1 and %2 over the next %3" + ,"virtAsstForecastUnavailable":"Unable to forecast with the data that is available" + ,"virtAsstRawBG":"Your raw bg is %1" + ,"virtAsstOpenAPSForecast":"The OpenAPS Eventual BG is %1" + ,"virtAsstCob3person":"%1 has %2 carbohydrates on board" + ,"virtAsstCob":"You have %1 carbohydrates on board" + ,"virtAsstCGMMode":"Your CGM mode was %1 as of %2." + ,"virtAsstCGMStatus":"Your CGM status was %1 as of %2." + ,"virtAsstCGMSessAge":"Your CGM session has been active for %1 days and %2 hours." + ,"virtAsstCGMSessNotStarted":"There is no active CGM session at the moment." + ,"virtAsstCGMTxStatus":"Your CGM transmitter status was %1 as of %2." + ,"virtAsstCGMTxAge":"Your CGM transmitter is %1 days old." + ,"virtAsstCGMNoise":"Your CGM noise was %1 as of %2." + ,"virtAsstCGMBattOne":"Your CGM battery was %1 volts as of %2." + ,"virtAsstCGMBattTwo":"Your CGM battery levels were %1 volts and %2 volts as of %3." + ,"virtAsstDelta":"Your delta was %1 between %2 and %3." + ,"virtAsstDeltaEstimated": "Your estimated delta was %1 between %2 and %3." + ,"virtAsstUnknownIntentTitle":"Unknown Intent" + ,"virtAsstUnknownIntentText":"I'm sorry, I don't know what you're asking for." + ,"Fat [g]":"Fat [g]" + ,"Protein [g]":"Protein [g]" + ,"Energy [kJ]":"Energy [kJ]" + ,"Clock Views:":"Clock Views:" + ,"Clock":"Clock" + ,"Color":"Color" + ,"Simple":"Simple" + ,"TDD average":"TDD average" + ,"Bolus average":"Bolus average" + ,"Basal average":"Basal average" + ,"Base basal average:":"Base basal average:" + ,"Carbs average":"Carbs average" + ,"Eating Soon":"Eating Soon" + ,"Last entry {0} minutes ago":"Last entry {0} minutes ago" + ,"change":"change" + ,"Speech":"Speech" + ,"Target Top":"Target Top" + ,"Target Bottom":"Target Bottom" + ,"Canceled":"Canceled" + ,"Meter BG":"Meter BG" + ,"predicted":"predicted" + ,"future":"future" + ,"ago":"ago" + ,"Last data received":"Last data received" + ,"Clock View":"Clock View" + ,"Protein":"Protein" + ,"Fat":"Fat" + ,"Protein average":"Protein average" + ,"Fat average":"Fat average" + ,"Total carbs":"Total carbs" + ,"Total protein":"Total protein" + ,"Total fat":"Total fat" + ,"Database Size":"Database Size" + ,"Database Size near its limits!":"Database Size near its limits!" + ,"Database size is %1 MiB out of %2 MiB. Please backup and clean up database!":"Database size is %1 MiB out of %2 MiB. Please backup and clean up database!" + ,"Database file size":"Database file size" + ,"%1 MiB of %2 MiB (%3%)":"%1 MiB of %2 MiB (%3%)" + ,"Data size":"Data size" + ,"virtAsstDatabaseSize":"%1 MiB. That is %2% of available database space." + ,"virtAsstTitleDatabaseSize":"Database file size" + ,"Carbs/Food/Time":"Carbs/Food/Time" + ,"You have administration messages":"You have administration messages" + ,"Admin messages in queue":"Admin messages in queue" + ,"Queue empty":"Queue empty" + ,"There are no admin messages in queue":"There are no admin messages in queue" + ,"Please sign in using the API_SECRET to see your administration messages":"Please sign in using the API_SECRET to see your administration messages" + ,"Reads enabled in default permissions":"Reads enabled in default permissions" + ,"Data reads enabled": "Data reads enabled" + ,"Data writes enabled": "Data writes enabled" + ,"Data writes not enabled": "Data writes not enabled" + ,"Color prediction lines": "Color prediction lines" + ,"Release Notes":"Release Notes" + ,"Check for Updates":"Check for Updates" + ,"Open Source":"Open Source" + ,"Nightscout Info":"Nightscout Info" + ,"The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.":"The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see." + ,"Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.":"Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time." + ,"In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.":"In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal." + ,"Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.":"Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate." + ,"Note that time shift is available only when viewing multiple days.":"Note that time shift is available only when viewing multiple days." + ,"Please select a maximum of two weeks duration and click Show again.":"Please select a maximum of two weeks duration and click Show again." + ,"Show profiles table":"Show profiles table" + ,"Show predictions":"Show predictions" + ,"Timeshift on meals larger than %1 g carbs consumed between %2 and %3":"Timeshift on meals larger than %1 g carbs consumed between %2 and %3" + ,"Previous":"Previous" + ,"Previous day":"Previous day" + ,"Next day":"Next day" + ,"Next":"Next" + ,"Temp basal delta":"Temp basal delta" + ,"Authorized by token":"Authorized by token" + ,"Auth role":"Auth role" + ,"view without token":"view without token" + ,"Remove stored token":"Remove stored token" + ,"Weekly Distribution":"Weekly Distribution" + ,"Failed authentication":"Failed authentication" + ,"A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?" + ,"Default (with leading zero and U)":"Default (with leading zero and U)" + ,"Concise (with U, without leading zero)":"Concise (with U, without leading zero)" + ,"Minimal (without leading zero and U)":"Minimal (without leading zero and U)" + ,"Small Bolus Display":"Small Bolus Display" + ,"Large Bolus Display":"Large Bolus Display" + ,"Bolus Display Threshold":"Bolus Display Threshold" + ,"%1 U and Over":"%1 U and Over" + ,"Event repeated %1 times.":"Event repeated %1 times." + ,"minutes":"minutes" + ,"hours":"hours" + ,"Last recorded %1 %2 ago.":"Last recorded %1 %2 ago." + ,"Security issue":"Security issue" + ,"Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.":"Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters." + ,"less than 1": "less than 1" + ,"MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.":"MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system." +} diff --git a/translations/es_ES.json b/translations/es_ES.json new file mode 100644 index 00000000000..b16e68dc0c7 --- /dev/null +++ b/translations/es_ES.json @@ -0,0 +1,707 @@ +{ + "Listening on port": "Escuchando en el puerto", + "Mo": "Lu", + "Tu": "Mar", + "We": "Mie", + "Th": "Jue", + "Fr": "Vie", + "Sa": "Sab", + "Su": "Dom", + "Monday": "Lunes", + "Tuesday": "Martes", + "Wednesday": "Miércoles", + "Thursday": "Jueves", + "Friday": "Viernes", + "Saturday": "Sábado", + "Sunday": "Domingo", + "Category": "Categoría", + "Subcategory": "Subcategoría", + "Name": "Nombre", + "Today": "Hoy", + "Last 2 days": "Últimos 2 días", + "Last 3 days": "Últimos 3 días", + "Last week": "Semana pasada", + "Last 2 weeks": "Últimas 2 semanas", + "Last month": "Mes pasado", + "Last 3 months": "Últimos 3 meses", + "From": "Desde", + "To": "Hasta", + "Notes": "Notas", + "Food": "Comida", + "Insulin": "Insulina", + "Carbs": "Hidratos de carbono", + "Notes contain": "Contenido de las notas", + "Target BG range bottom": "Objetivo inferior de glucemia", + "top": "Superior", + "Show": "Mostrar", + "Display": "Visualizar", + "Loading": "Cargando", + "Loading profile": "Cargando perfil", + "Loading status": "Cargando estado", + "Loading food database": "Cargando base de datos de alimentos", + "not displayed": "no mostrado", + "Loading CGM data of": "Cargando datos de MCG de", + "Loading treatments data of": "Cargando datos de tratamientos de", + "Processing data of": "Procesando datos de", + "Portion": "Porción", + "Size": "Tamaño", + "(none)": "(ninguno)", + "None": "Ninguno", + "": "", + "Result is empty": "Resultado vacío", + "Day to day": "Día a día", + "Week to week": "Semana a semana", + "Daily Stats": "Estadísticas diarias", + "Percentile Chart": "Percentiles", + "Distribution": "Distribución", + "Hourly stats": "Estadísticas por hora", + "netIOB stats": "estadísticas netIOB", + "temp basals must be rendered to display this report": "basales temporales deben ser terminadas para mostrar este informe", + "No data available": "No hay datos disponibles", + "Low": "Bajo", + "In Range": "En rango", + "Period": "Periodo", + "High": "Alto", + "Average": "Media", + "Low Quartile": "Cuartil inferior", + "Upper Quartile": "Cuartil superior", + "Quartile": "Cuartil", + "Date": "Fecha", + "Normal": "Normal", + "Median": "Mediana", + "Readings": "Valores", + "StDev": "Desviación estándar", + "Daily stats report": "Informe de estadísticas diarias", + "Glucose Percentile report": "Informe de percetiles de glucemia", + "Glucose distribution": "Distribución de glucemias", + "days total": "Total de días", + "Total per day": "Total por días", + "Overall": "General", + "Range": "Intervalo", + "% of Readings": "% de valores", + "# of Readings": "N° de valores", + "Mean": "Media", + "Standard Deviation": "Desviación estándar", + "Max": "Máx", + "Min": "Mín", + "A1c estimation*": "Estimación de HbA1c*", + "Weekly Success": "Resultados semanales", + "There is not sufficient data to run this report. Select more days.": "No hay datos suficientes para generar este informe. Seleccione más días.", + "Using stored API secret hash": "Usando hash del API secreto pre-almacenado", + "No API secret hash stored yet. You need to enter API secret.": "No se ha almacenado ningún hash todavía. Debe introducir su secreto API.", + "Database loaded": "Base de datos cargada", + "Error: Database failed to load": "Error: Carga de base de datos fallida", + "Error": "Error", + "Create new record": "Crear nuevo registro", + "Save record": "Guardar registro", + "Portions": "Porciones", + "Unit": "Unidades", + "GI": "IG", + "Edit record": "Editar registro", + "Delete record": "Borrar registro", + "Move to the top": "Mover arriba", + "Hidden": "Oculto", + "Hide after use": "Ocultar después de utilizar", + "Your API secret must be at least 12 characters long": "Su API secreo debe contener al menos 12 carácteres", + "Bad API secret": "API secreto incorrecto", + "API secret hash stored": "Hash del API secreto guardado", + "Status": "Estado", + "Not loaded": "No cargado", + "Food Editor": "Editor de alimentos", + "Your database": "Su base de datos", + "Filter": "Filtro", + "Save": "Salvar", + "Clear": "Limpiar", + "Record": "Guardar", + "Quick picks": "Selección rápida", + "Show hidden": "Mostrar ocultos", + "Your API secret or token": "Tu API secret o token", + "Remember this device. (Do not enable this on public computers.)": "Recordar este dispositivo. (No activar esto en ordenadores públicos.)", + "Treatments": "Tratamientos", + "Time": "Hora", + "Event Type": "Tipo de evento", + "Blood Glucose": "Glucemia", + "Entered By": "Introducido por", + "Delete this treatment?": "¿Borrar este tratamiento?", + "Carbs Given": "Hidratos de carbono puestos", + "Insulin Given": "Insulina introducida", + "Event Time": "Hora del evento", + "Please verify that the data entered is correct": "Por favor, verifique que los datos introducidos son correctos", + "BG": "Glucemia en sangre", + "Use BG correction in calculation": "Usar la corrección de glucemia en los cálculos", + "BG from CGM (autoupdated)": "Glucemia del sensor (Auto-actualizado)", + "BG from meter": "Glucemia del glucómetro", + "Manual BG": "Glucemia manual", + "Quickpick": "Selección rápida", + "or": "o", + "Add from database": "Añadir desde la base de datos", + "Use carbs correction in calculation": "Usar la corrección de hidratos de carbono en los cálculos", + "Use COB correction in calculation": "Usar carbohidratos activos para los cálculos", + "Use IOB in calculation": "Usar Insulina activa en los cálculos", + "Other correction": "Otra corrección", + "Rounding": "Redondeo", + "Enter insulin correction in treatment": "Introducir correción de insulina en tratamiento", + "Insulin needed": "Insulina necesaria", + "Carbs needed": "Hidratos de carbono necesarios", + "Carbs needed if Insulin total is negative value": "Carbohidratos necesarios si total insulina es un valor negativo", + "Basal rate": "Tasa basal", + "60 minutes earlier": "60 min antes", + "45 minutes earlier": "45 min antes", + "30 minutes earlier": "30 min antes", + "20 minutes earlier": "20 min antes", + "15 minutes earlier": "15 min antes", + "Time in minutes": "Tiempo en minutos", + "15 minutes later": "15 min más tarde", + "20 minutes later": "20 min más tarde", + "30 minutes later": "30 min más tarde", + "45 minutes later": "45 min más tarde", + "60 minutes later": "60 min más tarde", + "Additional Notes, Comments": "Notas adicionales, Comentarios", + "RETRO MODE": "Modo Retrospectivo", + "Now": "Ahora", + "Other": "Otro", + "Submit Form": "Enviar formulario", + "Profile Editor": "Editor de perfil", + "Reports": "Informes", + "Add food from your database": "Añadir alimento a su base de datos", + "Reload database": "Recargar base de datos", + "Add": "Añadir", + "Unauthorized": "No autorizado", + "Entering record failed": "Entrada de registro fallida", + "Device authenticated": "Dispositivo autorizado", + "Device not authenticated": "Dispositivo no autorizado", + "Authentication status": "Estado de autorización", + "Authenticate": "Autentificar", + "Remove": "Eliminar", + "Your device is not authenticated yet": "Su dispositivo no ha sido autentificado todavía", + "Sensor": "Sensor", + "Finger": "Dedo", + "Manual": "Manual", + "Scale": "Escala", + "Linear": "Lineal", + "Logarithmic": "Logarítmica", + "Logarithmic (Dynamic)": "Logarítmo (Dinámico)", + "Insulin-on-Board": "Insulina activa", + "Carbs-on-Board": "Carbohidratos activos", + "Bolus Wizard Preview": "Vista previa del cálculo del bolo", + "Value Loaded": "Valor cargado", + "Cannula Age": "Antigüedad cánula", + "Basal Profile": "Perfil Basal", + "Silence for 30 minutes": "Silenciar durante 30 minutos", + "Silence for 60 minutes": "Silenciar durante 60 minutos", + "Silence for 90 minutes": "Silenciar durante 90 minutos", + "Silence for 120 minutes": "Silenciar durante 120 minutos", + "Settings": "Ajustes", + "Units": "Unidades", + "Date format": "Formato de fecha", + "12 hours": "12 horas", + "24 hours": "24 horas", + "Log a Treatment": "Apuntar un tratamiento", + "BG Check": "Control de glucemia", + "Meal Bolus": "Bolo de comida", + "Snack Bolus": "Bolo de aperitivo", + "Correction Bolus": "Bolo corrector", + "Carb Correction": "Carbohidratos de corrección", + "Note": "Nota", + "Question": "Pregunta", + "Exercise": "Ejercicio", + "Pump Site Change": "Cambio de catéter", + "CGM Sensor Start": "Inicio de sensor", + "CGM Sensor Stop": "Detener sensor MCG", + "CGM Sensor Insert": "Cambio de sensor", + "Sensor Code": "Código del sensor", + "Transmitter ID": "ID del transmisor", + "Dexcom Sensor Start": "Inicio de sensor Dexcom", + "Dexcom Sensor Change": "Cambio de sensor Dexcom", + "Insulin Cartridge Change": "Cambio de reservorio de insulina", + "D.A.D. Alert": "Alerta de perro de alerta diabética", + "Glucose Reading": "Valor de glucemia", + "Measurement Method": "Método de medida", + "Meter": "Glucómetro", + "Amount in grams": "Cantidad en gramos", + "Amount in units": "Cantidad en unidades", + "View all treatments": "Visualizar todos los tratamientos", + "Enable Alarms": "Activar las alarmas", + "Pump Battery Change": "Cambio batería bomba", + "Pump Battery Age": "Edad de la batería de la bomba", + "Pump Battery Low Alarm": "Alarma de Bomba Baja", + "Pump Battery change overdue!": "Cambio de batería de bomba atrasado!", + "When enabled an alarm may sound.": "Cuando estén activas, una alarma podrá sonar", + "Urgent High Alarm": "Alarma de glucemia alta urgente", + "High Alarm": "Alarma de glucemia alta", + "Low Alarm": "Alarma de glucemia baja", + "Urgent Low Alarm": "Alarma de glucemia baja urgente", + "Stale Data: Warn": "Datos obsoletos: aviso", + "Stale Data: Urgent": "Datos obsoletos: Urgente", + "mins": "min", + "Night Mode": "Modo nocturno", + "When enabled the page will be dimmed from 10pm - 6am.": "Cuando esté activo, el brillo de la página bajará de 10pm a 6am.", + "Enable": "Activar", + "Show Raw BG Data": "Mostrat datos en glucemia en crudo", + "Never": "Nunca", + "Always": "Siempre", + "When there is noise": "Cuando hay ruido", + "When enabled small white dots will be displayed for raw BG data": "Cuando esté activo, pequeños puntos blancos mostrarán los datos en crudo", + "Custom Title": "Título personalizado", + "Theme": "Tema", + "Default": "Por defecto", + "Colors": "Colores", + "Colorblind-friendly colors": "Colores para Daltónicos", + "Reset, and use defaults": "Inicializar y utilizar los valores por defecto", + "Calibrations": "Calibraciones", + "Alarm Test / Smartphone Enable": "Test de Alarma / Activar teléfono", + "Bolus Wizard": "Calculador Bolos", + "in the future": "en el futuro", + "time ago": "tiempo atrás", + "hr ago": "hr atrás", + "hrs ago": "hrs atrás", + "min ago": "min atrás", + "mins ago": "mins atrás", + "day ago": "día atrás", + "days ago": "días atrás", + "long ago": "Hace mucho tiempo", + "Clean": "Limpio", + "Light": "Ligero", + "Medium": "Medio", + "Heavy": "Fuerte", + "Treatment type": "Tipo de tratamiento", + "Raw BG": "Glucemia en crudo", + "Device": "Dispositivo", + "Noise": "Ruido", + "Calibration": "Calibración", + "Show Plugins": "Mostrar Plugins", + "About": "Sobre", + "Value in": "Valor en", + "Carb Time": "Momento de la ingesta", + "Language": "Lenguaje", + "Add new": "Añadir nuevo", + "g": "gr", + "ml": "ml", + "pcs": "pza", + "Drag&drop food here": "Arrastre y suelte aquí alimentos", + "Care Portal": "Portal cuidador", + "Medium/Unknown": "Medio/Desconocido", + "IN THE FUTURE": "EN EL FUTURO", + "Order": "Ordenar", + "oldest on top": "Más antiguo arriba", + "newest on top": "Más nuevo arriba", + "All sensor events": "Todos los eventos del sensor", + "Remove future items from mongo database": "Remover elementos futuros desde basedatos Mongo", + "Find and remove treatments in the future": "Encontrar y eliminar tratamientos futuros", + "This task find and remove treatments in the future.": "Este comando encuentra y elimina tratamientos futuros.", + "Remove treatments in the future": "Elimina tratamientos futuros", + "Find and remove entries in the future": "Encuentra y elimina entradas futuras", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "Este comando encuentra y elimina datos del sensor futuros creados por actualizaciones con errores en fecha/hora", + "Remove entries in the future": "Elimina entradas futuras", + "Loading database ...": "Cargando base de datos ...", + "Database contains %1 future records": "Base de datos contiene %1 registros futuros", + "Remove %1 selected records?": "Eliminar %1 registros seleccionados?", + "Error loading database": "Error al cargar base de datos", + "Record %1 removed ...": "Registro %1 eliminado ...", + "Error removing record %1": "Error al eliminar registro %1", + "Deleting records ...": "Eliminando registros ...", + "%1 records deleted": "%1 registros eliminados", + "Clean Mongo status database": "Limpiar estado de la base de datos Mongo", + "Delete all documents from devicestatus collection": "Borrar todos los documentos desde colección devicesatatus", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "Este comando elimina todos los documentos desde la colección devicestatus. Útil cuando el estado de la batería cargadora no se actualiza correctamente", + "Delete all documents": "Borra todos los documentos", + "Delete all documents from devicestatus collection?": "Borrar todos los documentos desde la colección devicestatus?", + "Database contains %1 records": "La Base de datos contiene %1 registros", + "All records removed ...": "Todos los registros eliminados ...", + "Delete all documents from devicestatus collection older than 30 days": "Eliminar todos los documentos de la colección devicestatus de hace más de 30 días", + "Number of Days to Keep:": "Número de días a guardar:", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "Esta tarea elimina todos los documentos de la colección de devicestatus que tienen más de 30 días. Es útil cuando el estado de la batería del cargador no se actualiza correctamente.", + "Delete old documents from devicestatus collection?": "Borrar todos los documentos desde la colección devicestatus?", + "Clean Mongo entries (glucose entries) database": "Limpiar base de datos Mongo entradas (entradas glucosas)", + "Delete all documents from entries collection older than 180 days": "Eliminar todos los documentos de la colección entries de hace más de 180 días", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Esta tarea elimina todos los documentos de la colección entradas que tienen más de 180 días. Es útil cuando el estado de la batería del cargador no se actualiza correctamente.", + "Delete old documents": "Eliminar documentos antiguos", + "Delete old documents from entries collection?": "¿Eliminar documentos antiguos de la colección de entradas?", + "%1 is not a valid number": "%1 no es un número válido", + "%1 is not a valid number - must be more than 2": "%1 no es un número válido - debe ser más de 2", + "Clean Mongo treatments database": "Limpiar base de datos de tratamientos de Mongo", + "Delete all documents from treatments collection older than 180 days": "Eliminar todos los documentos de la colección de tratamientos de hace más de 180 días", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Esta tarea elimina todos los documentos de la colección de tratamientos que tienen más de 180 días. Es útil cuando el estado de la batería del cargador no se actualiza correctamente.", + "Delete old documents from treatments collection?": "¿Eliminar documentos antiguos de la colección de entradas?", + "Admin Tools": "Herramientas Administrativas", + "Nightscout reporting": "Informes - Nightscout", + "Cancel": "Cancelar", + "Edit treatment": "Editar tratamiento", + "Duration": "Duración", + "Duration in minutes": "Duración en minutos", + "Temp Basal": "Tasa basal temporal", + "Temp Basal Start": "Inicio Tasa Basal temporal", + "Temp Basal End": "Fin Tasa Basal temporal", + "Percent": "Porcentaje", + "Basal change in %": "Basal modificada en %", + "Basal value": "Valor basal", + "Absolute basal value": "Valor basal absoluto", + "Announcement": "Aviso", + "Loading temp basal data": "Cargando datos tasa basal temporal", + "Save current record before changing to new?": "Grabar datos actuales antes de cambiar por nuevos?", + "Profile Switch": "Cambiar Perfil", + "Profile": "Perfil", + "General profile settings": "Configuración perfil genérico", + "Title": "Titulo", + "Database records": "Registros grabados en base datos", + "Add new record": "Añadir nuevo registro", + "Remove this record": "Eliminar este registro", + "Clone this record to new": "Duplicar este registro como nuevo", + "Record valid from": "Registro válido desde", + "Stored profiles": "Perfiles guardados", + "Timezone": "Zona horaria", + "Duration of Insulin Activity (DIA)": "Duración Insulina Activa (DIA)", + "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.": "Representa la duración típica durante la cual la insulina tiene efecto. Varía por paciente y por tipo de insulina. Típicamente 3-4 horas para la mayoría de la insulina bombeada y la mayoría de los pacientes. A veces también se llama insulina de por vida ", + "Insulin to carb ratio (I:C)": "Relación Insulina/Carbohidratos (I:C)", + "Hours:": "Horas:", + "hours": "horas", + "g/hour": "gr/hora", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "gr. de carbohidratos por unidad de insulina. La proporción de cuántos gramos de carbohidratos se consumen por unidad de insulina.", + "Insulin Sensitivity Factor (ISF)": "Factor Sensibilidad a la Insulina (ISF)", + "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "mg/dl o mmol/L por unidad Insulina. La relación de la caída de glucosa y cada unidad de insulina de corrección administrada.", + "Carbs activity / absorption rate": "Actividad de carbohidratos / tasa de absorción", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "gramos por unidad de tiempo. Representa tanto el cambio en carbohidratos activos por unidad de tiempo como la cantidad de carbohidratos absorbidos durante este tiempo. Las curvas de captación / actividad de carbohidratos son más difíciles de predecir que la insulina activa, pero se pueden calcular utilizando un retraso de inicio seguido de una tasa de absorción constante (gr/h)", + "Basal rates [unit/hour]": "Tasas basales [Unidad/hora]", + "Target BG range [mg/dL,mmol/L]": "Intervalo glucemia dentro del objetivo [mg/dL,mmol/L]", + "Start of record validity": "Inicio de validez de datos", + "Icicle": "Inverso", + "Render Basal": "Representación Basal", + "Profile used": "Perfil utilizado", + "Calculation is in target range.": "El cálculo está dentro del rango objetivo", + "Loading profile records ...": "Cargando datos perfil ....", + "Values loaded.": "Valores cargados", + "Default values used.": "Se usan valores predeterminados", + "Error. Default values used.": "Error. Se usan valores predeterminados.", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "Los marcos temporales para objetivo inferior y objetivo superior no coinciden. Los valores predeterminados son usados.", + "Valid from:": "Válido desde:", + "Save current record before switching to new?": "Grabar datos actuales antes cambiar a uno nuevo?", + "Add new interval before": "Agregar nuevo intervalo antes", + "Delete interval": "Borrar intervalo", + "I:C": "I:C", + "ISF": "ISF (Factor Sensibilidad Insulina)", + "Combo Bolus": "Combo-Bolo", + "Difference": "Diferencia", + "New time": "Nueva hora", + "Edit Mode": "Modo edición", + "When enabled icon to start edit mode is visible": "Si está activado, el icono estará visible al inicio del modo de edición", + "Operation": "Operación", + "Move": "Mover", + "Delete": "Borrar", + "Move insulin": "Mover insulina", + "Move carbs": "Mover carbohidratos", + "Remove insulin": "Eliminar insulina", + "Remove carbs": "Eliminar carbohidratos", + "Change treatment time to %1 ?": "Cambiar horario tratamiento a %1 ?", + "Change carbs time to %1 ?": "Cambiar horario carbohidratos a %1 ?", + "Change insulin time to %1 ?": "Cambiar horario insulina a %1 ?", + "Remove treatment ?": "Eliminar tratamiento?", + "Remove insulin from treatment ?": "Eliminar insulina del tratamiento?", + "Remove carbs from treatment ?": "Eliminar carbohidratos del tratamiento?", + "Rendering": "Gráfica", + "Loading OpenAPS data of": "Cargando datos OpenAPS de", + "Loading profile switch data": "Cargando el cambio de perfil de datos", + "Redirecting you to the Profile Editor to create a new profile.": "Configuración incorrecta del perfil. \n No establecido ningún perfil en el tiempo mostrado. \n Continuar en editor de perfil para crear perfil nuevo.", + "Pump": "Bomba", + "Sensor Age": "Días uso del sensor", + "Insulin Age": "Días uso cartucho insulina", + "Temporary target": "Objetivo temporal", + "Reason": "Razonamiento", + "Eating soon": "Comer pronto", + "Top": "Superior", + "Bottom": "Inferior", + "Activity": "Actividad", + "Targets": "Objetivos", + "Bolus insulin:": "Bolo de Insulina", + "Base basal insulin:": "Insulina basal básica", + "Positive temp basal insulin:": "Insulina Basal temporal positiva:", + "Negative temp basal insulin:": "Insulina basal temporal negativa:", + "Total basal insulin:": "Total Insulina basal:", + "Total daily insulin:": "Total Insulina diaria:", + "Unable to save Role": "No se ha podido guardar el perfil", + "Unable to delete Role": "Imposible elimar Rol", + "Database contains %1 roles": "Base de datos contiene %1 Roles", + "Edit Role": "Editar Rol", + "admin, school, family, etc": "Adminitrador, escuela, família, etc", + "Permissions": "Permisos", + "Are you sure you want to delete: ": "Seguro que quieres eliminarlo:", + "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.": "Cada Rol tiene uno o más permisos. El permiso * es un marcador de posición y los permisos son jerárquicos con : como separador.", + "Add new Role": "Añadir nuevo Rol", + "Roles - Groups of People, Devices, etc": "Roles - Grupos de Gente, Dispositivos, etc.", + "Edit this role": "Editar este Rol", + "Admin authorized": "Administrador autorizado", + "Subjects - People, Devices, etc": "Sujetos - Personas, Dispositivos, etc", + "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "Cada sujeto tendrá un identificador de acceso único y 1 o más roles. Haga clic en el identificador de acceso para abrir una nueva vista con el tema seleccionado, este enlace secreto puede ser compartido.", + "Add new Subject": "Añadir nuevo Sujeto", + "Unable to save Subject": "No se puede guardar el objeto", + "Unable to delete Subject": "Imposible eliminar objeto", + "Database contains %1 subjects": "Base de datos contiene %1 objetos", + "Edit Subject": "Editar objeto", + "person, device, etc": "Persona, dispositivo, etc", + "role1, role2": "Rol1, Rol2", + "Edit this subject": "Editar este objeto", + "Delete this subject": "Eliminar este sujeto", + "Roles": "Roles", + "Access Token": "Acceso Identificador", + "hour ago": "hora atrás", + "hours ago": "horas atrás", + "Silence for %1 minutes": "Silenciado por %1 minutos", + "Check BG": "Verificar glucemia", + "BASAL": "BASAL", + "Current basal": "Basal actual", + "Sensitivity": "Sensibilidad", + "Current Carb Ratio": "Relación actual Insulina:Carbohidratos", + "Basal timezone": "Zona horaria basal", + "Active profile": "Perfil activo", + "Active temp basal": "Basal temporal activa", + "Active temp basal start": "Inicio Basal temporal activa", + "Active temp basal duration": "Duración Basal Temporal activa", + "Active temp basal remaining": "Basal temporal activa restante", + "Basal profile value": "Valor perfil Basal", + "Active combo bolus": "Activo combo-bolo", + "Active combo bolus start": "Inicio del combo-bolo activo", + "Active combo bolus duration": "Duración del Combo-Bolo activo", + "Active combo bolus remaining": "Restante Combo-Bolo activo", + "BG Delta": "Diferencia de glucemia", + "Elapsed Time": "Tiempo transcurrido", + "Absolute Delta": "Diferencia absoluta", + "Interpolated": "Interpolado", + "BWP": "VistaPreviaCalculoBolo (BWP)", + "Urgent": "Urgente", + "Warning": "Aviso", + "Info": "Información", + "Lowest": "Más bajo", + "Snoozing high alarm since there is enough IOB": "Ignorar alarma de Hiperglucemia al tener suficiente insulina activa", + "Check BG, time to bolus?": "Controle su glucemia, ¿quizás un bolo Insulina?", + "Notice": "Nota", + "required info missing": "Falta información requerida", + "Insulin on Board": "Insulina activa (IOB)", + "Current target": "Objetivo actual", + "Expected effect": "Efecto previsto", + "Expected outcome": "Resultado previsto", + "Carb Equivalent": "Equivalencia en Carbohidratos", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "Exceso de insulina en %1U más de lo necesario para alcanzar un objetivo bajo, sin tener en cuenta los carbohidratos", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "Exceso de insulina en %1U más de la necesaria para alcanzar objetivo inferior. ASEGÚRESE QUE LA INSULINA ACTIVA IOB ESTA CUBIERTA POR CARBOHIDRATOS", + "%1U reduction needed in active insulin to reach low target, too much basal?": "Se necesita una reducción del %1U insulina activa para objetivo inferior, exceso en basal?", + "basal adjustment out of range, give carbs?": "ajuste basal fuera de rango, dar carbohidratos?", + "basal adjustment out of range, give bolus?": "Ajuste de basal fuera de rango, corregir con insulina?", + "above high": "por encima límite superior", + "below low": "por debajo límite inferior", + "Projected BG %1 target": "Glucemia estimada %1 en objetivo", + "aiming at": "resultado deseado", + "Bolus %1 units": "Bolus %1 unidades", + "or adjust basal": "o ajustar basal", + "Check BG using glucometer before correcting!": "Verifique glucemia antes de corregir!", + "Basal reduction to account %1 units:": "Reducir basal para compesar %1 unidades:", + "30m temp basal": "30 min. temporal basal", + "1h temp basal": "1h temporal Basal", + "Cannula change overdue!": "¡Cambio de agujas vencido!", + "Time to change cannula": " Hora sustituir cánula", + "Change cannula soon": "Cambiar cannula pronto", + "Cannula age %1 hours": "Cánula usada %1 horas", + "Inserted": "Insertado", + "CAGE": "Cánula desde", + "COB": "Carb. activos", + "Last Carbs": "último carbohidrato", + "IAGE": "Insul.desde", + "Insulin reservoir change overdue!": "Excedido plazo del cambio depósito de insulina!", + "Time to change insulin reservoir": "Hora de sustituir depósito insulina", + "Change insulin reservoir soon": "Sustituir depósito insulina en breve", + "Insulin reservoir age %1 hours": "Depósito insulina desde %1 horas", + "Changed": "Cambiado", + "IOB": "Insulina Activa IOB", + "Careportal IOB": "Insulina activa en Careportal", + "Last Bolus": "Último bolo", + "Basal IOB": "Basal Insulina activa", + "Source": "Fuente", + "Stale data, check rig?": "Datos desactualizados, controlar la subida?", + "Last received:": "Último recibido:", + "%1m ago": "%1min. atrás", + "%1h ago": "%1h. atrás", + "%1d ago": "%1d atrás", + "RETRO": "RETRO", + "SAGE": "Sensor desde", + "Sensor change/restart overdue!": "Sustituir/reiniciar, sensor vencido", + "Time to change/restart sensor": "Hora de sustituir/reiniciar sensor", + "Change/restart sensor soon": "Cambiar/Reiniciar sensor en breve", + "Sensor age %1 days %2 hours": "Sensor desde %1 días %2 horas", + "Sensor Insert": "Insertar sensor", + "Sensor Start": "Inicio del sensor", + "days": "días", + "Insulin distribution": "Distribución de la insulina", + "To see this report, press SHOW while in this view": "Presione SHOW para mostrar el informe en esta vista", + "AR2 Forecast": "Pronóstico AR2", + "OpenAPS Forecasts": "Pronóstico OpenAPS", + "Temporary Target": "Objetivo temporal", + "Temporary Target Cancel": "Objetivo temporal cancelado", + "OpenAPS Offline": "OpenAPS desconectado", + "Profiles": "Perfiles", + "Time in fluctuation": "Tiempo fluctuando", + "Time in rapid fluctuation": "Tiempo fluctuando rápido", + "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:": "Esto es sólo una estimación apróximada que puede ser muy inexacta y no reemplaza las pruebas de sangre reales. La fórmula utilizada está tomada de: ", + "Filter by hours": "Filtrar por horas", + "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.": "Tiempo en fluctuación y Tiempo en fluctuación rápida miden el % de tiempo del período exáminado, durante la cual la glucosa en sangre ha estado cambiando relativamente rápido o rápidamente. Valores más bajos son mejores.", + "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.": "El cambio medio diario total es la suma de los valores absolutos de todas las glucémias en el período examinado, dividido por el número de días. Mejor valores bajos.", + "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "El cambio medio por hora, es la suma del valor absoluto de todas las glucemias para el período examinado, dividido por el número de horas en el período. Más bajo es mejor.", + "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "El RMS fuera de rango se calcula al cuadrar la distancia fuera de rango para todas las lecturas de glucosa durante el período examinado. resumiéndolos, dividiéndolos por el contador y tomando la raíz cuadrada. Esta métrica es similar al porcentaje en el rango pero pesa lecturas fuera del rango más alto. Valores más bajos son mejores.", + "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">here.", + "Mean Total Daily Change": "Variación media total diaria", + "Mean Hourly Change": "Variación media total por horas", + "FortyFiveDown": "Disminuye lentamente", + "FortyFiveUp": "Asciende lentamente", + "Flat": "Sin variación", + "SingleUp": "Ascendiendo", + "SingleDown": "Bajando", + "DoubleDown": "Bajando rápido", + "DoubleUp": "Subiendo rápido", + "virtAsstUnknown": "Ese valor es desconocido en este momento. Por favor, consulta tu sitio de Nightscout para más detalles.", + "virtAsstTitleAR2Forecast": "Pronóstico AR2", + "virtAsstTitleCurrentBasal": "Basal actual", + "virtAsstTitleCurrentCOB": "COB actual", + "virtAsstTitleCurrentIOB": "IOB actual", + "virtAsstTitleLaunch": "Bienvenido a Nightscout", + "virtAsstTitleLoopForecast": "Pronóstico del lazo", + "virtAsstTitleLastLoop": "Último ciclo del lazo", + "virtAsstTitleOpenAPSForecast": "Pronóstico OpenAPS", + "virtAsstTitlePumpReservoir": "Insulina restante", + "virtAsstTitlePumpBattery": "Batería de la Bomba", + "virtAsstTitleRawBG": "GS Actual en crudo", + "virtAsstTitleUploaderBattery": "Batería del Uploader", + "virtAsstTitleCurrentBG": "BG actual", + "virtAsstTitleFullStatus": "Estado completo", + "virtAsstTitleCGMMode": "Modo MCG", + "virtAsstTitleCGMStatus": "Estado de MCG", + "virtAsstTitleCGMSessionAge": "Edad de la sesión MCG", + "virtAsstTitleCGMTxStatus": "Estado del transmisor MCG", + "virtAsstTitleCGMTxAge": "Edad del transmisor MCG", + "virtAsstTitleCGMNoise": "Ruido MCG", + "virtAsstTitleDelta": "Delta glucosa de sangre", + "virtAsstStatus": "%1 y %2 como de %3.", + "virtAsstBasal": "%1 basal actual es %2 unidades por hora", + "virtAsstBasalTemp": "%1 Basal temporal de %2 unidades por hora hasta el fin %3", + "virtAsstIob": "y tu tienes %1 insulina activa.", + "virtAsstIobIntent": "Tienes %1 insulina activa", + "virtAsstIobUnits": "%1 unidades de", + "virtAsstLaunch": "¿Qué te gustaría comprobar en Nightscout?", + "virtAsstPreamble": "Tu", + "virtAsstPreamble3person": "%1 tiene un ", + "virtAsstNoInsulin": "no", + "virtAsstUploadBattery": "La batería del cargador está en %1", + "virtAsstReservoir": "Tienes %1 unidades restantes", + "virtAsstPumpBattery": "La batería de la bomba está en %1 %2", + "virtAsstUploaderBattery": "La batería del cargador está en %1", + "virtAsstLastLoop": "El último lazo exitoso fue %1", + "virtAsstLoopNotAvailable": "El plugin Loop parece no estar habilitado", + "virtAsstLoopForecastAround": "De acuerdo con la previsión del lazo se espera que estés alrededor de %1 durante los siguientes %2", + "virtAsstLoopForecastBetween": "De acuerdo con la previsión del lazo se espera que estés entre %1 y %2 en los siguientes %3", + "virtAsstAR2ForecastAround": "De acuerdo con la previsión del lazo se espera que estés alrededor de %1 durante los siguientes %2", + "virtAsstAR2ForecastBetween": "De acuerdo con la previsión del lazo se espera que estés entre %1 y %2 en los siguientes %2", + "virtAsstForecastUnavailable": "No se puede predecir con los datos que están disponibles", + "virtAsstRawBG": "Tu Bg crudo es %1", + "virtAsstOpenAPSForecast": "El pronóstico de BG de OpenAPS es %1", + "virtAsstCob3person": "%1 tiene %2 hidratos de carbono a bordo", + "virtAsstCob": "Tienes %1 hidratos de carbono a bordo", + "virtAsstCGMMode": "Tu modo MCG era %1 a partir de %2.", + "virtAsstCGMStatus": "Su estado MCG fue %1 a partir de %2.", + "virtAsstCGMSessAge": "Su sesión MCG ha estado activa durante %1 días y %2 horas.", + "virtAsstCGMSessNotStarted": "No hay ninguna sesión MCG activa en este momento.", + "virtAsstCGMTxStatus": "Su estado del transmisor MCG fue %1 a %2.", + "virtAsstCGMTxAge": "Tu transmisor MCG tiene %1 días.", + "virtAsstCGMNoise": "El ruido MCG fue %1 a partir de %2.", + "virtAsstCGMBattOne": "Su batería MCG fue de %1 voltios a %2.", + "virtAsstCGMBattTwo": "Sus niveles de batería MCG eran %1 voltios y %2 voltios a %3.", + "virtAsstDelta": "Tu delta estaba %1 entre %2 y %3.", + "virtAsstDeltaEstimated": "Tu delta estimada era %1 entre %2 y %3.", + "virtAsstUnknownIntentTitle": "Intento desconocido", + "virtAsstUnknownIntentText": "Lo siento, no sé lo que estás pidiendo.", + "Fat [g]": "Grasas [g]", + "Protein [g]": "Proteina [g]", + "Energy [kJ]": "Energía [Kj]", + "Clock Views:": "Vista del reloj:", + "Clock": "Reloj", + "Color": "Color", + "Simple": "Simple", + "TDD average": "Promedio de TDD", + "Bolus average": "Bolo medio", + "Basal average": "Basal media", + "Base basal average:": "Media basal base:", + "Carbs average": "Carbohidratos promedio", + "Eating Soon": "ComidendoPronto", + "Last entry {0} minutes ago": "Última entrada hace {0} minutos", + "change": "cambio", + "Speech": "Voz", + "Target Top": "Objetivo alto", + "Target Bottom": "Objetivo Bajo", + "Canceled": "Cancelado", + "Meter BG": "Meter BG", + "predicted": "previsto", + "future": "próximo", + "ago": "hace", + "Last data received": "Últimos datos recibidos", + "Clock View": "Vista del reloj", + "Protein": "Proteínas", + "Fat": "Grasa", + "Protein average": "Proteína media", + "Fat average": "Media de grasa", + "Total carbs": "Total de glúcidos", + "Total protein": "Total de proteínas", + "Total fat": "Grasa total", + "Database Size": "Tamaño de la Base de Datos", + "Database Size near its limits!": "Tamaño de la base de datos cerca de sus límites!", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "El tamaño de la base de datos es %1 MiB de %2 MiB. ¡Por favor, haz una copia de seguridad y limpia la base de datos!", + "Database file size": "Tamaño del archivo de la base de datos", + "%1 MiB of %2 MiB (%3%)": "%1 MiB de %2 MiB (%3%)", + "Data size": "Tamaño de los datos", + "virtAsstDatabaseSize": "%1 MiB. Es el %2% del espacio disponible en la base de datos.", + "virtAsstTitleDatabaseSize": "Tamaño del archivo de la base de datos", + "Carbs/Food/Time": "Carbs/Comida/Hora", + "You have administration messages": "Tienes mensajes de administración", + "Admin messages in queue": "Mensajes de administración en cola", + "Queue empty": "Cola vacía", + "There are no admin messages in queue": "No hay mensajes de administración en cola", + "Please sign in using the API_SECRET to see your administration messages": "Por favor, inicia sesión usando API_SECRET para ver tus mensajes de administración", + "Reads enabled in default permissions": "Lecturas habilitadas en los permisos por defecto", + "Data reads enabled": "Lecturas de datos habilitadas", + "Data writes enabled": "Escrituras de datos habilitadas", + "Data writes not enabled": "Escrituras de datos no habilitadas", + "Color prediction lines": "Líneas de predicción de color", + "Release Notes": "Notas informativas", + "Check for Updates": "Buscar actualizaciones", + "Open Source": "Código abierto", + "Nightscout Info": "Información de Nightscout", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "El objetivo principal de Loopalyzer es visualizar cómo funciona el sistema de lazo cerrado. También puede funcionar con otras configuraciones, tanto de lazo cerrado como abierto, y sin loop. Sin embargo, dependiendo del uploader que utilice, con qué frecuencia es capaz de capturar sus datos y cargar, y cómo es capaz de rellenar datos faltantes, algunos gráficos pueden tener lagunas o incluso estar completamente vacíos. Siempre asegúrese de que los gráficos se vean razonables. Mejor es ver un día a la vez y pasar a través de un número de días para ver.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer incluye una función de cambio de tiempo. Si por ejemplo usted toma el desayuno a las 07:00 un día y a las 08:00 el día después de su curva media de glucosa, estos dos días muy probablemente se verán aplanados y no mostrarán la respuesta real después de un desayuno. El cambio de tiempo calculará el tiempo promedio de estas comidas se comieron y luego desplazará todos los datos (carbones, insulina, basal etc. durante ambos días la diferencia horaria correspondiente de modo que ambas comidas se alineen con la hora media de inicio de la comida.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "En este ejemplo todos los datos del primer día se empujan 30 minutos hacia adelante en el tiempo y todos los datos del segundo día 30 minutos hacia atrás en el tiempo así que parece como si usted tuviera el desayuno a las 07:30 ambos días. Esto le permite ver su respuesta real promedio de glucosa en la sangre a través de una comida.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "El cambio de tiempo resalta el período después de la comida media de inicio en gris, durante la duración de la DIA (Duración de la acción de la insulina). Como todos los datos apuntan el día entero se desplazan las curvas fuera del área gris pueden no ser exactas.", + "Note that time shift is available only when viewing multiple days.": "Tenga en cuenta que el cambio de tiempo sólo está disponible cuando se visualiza varios días.", + "Please select a maximum of two weeks duration and click Show again.": "Por favor, seleccione un máximo de dos semanas de duración y haga clic en Mostrar de nuevo.", + "Show profiles table": "Mostrar tabla de perfiles", + "Show predictions": "Mostrar las predicciones", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Diferencia de horas entre comidas con más de %1 g de carbohidratos consumidos entre %2 y %3", + "Previous": "Anterior", + "Previous day": "Día anterior", + "Next day": "Día siguiente", + "Next": "Siguiente", + "Temp basal delta": "Delta basal temporal", + "Authorized by token": "Autorizado por token", + "Auth role": "Rol de autenticación", + "view without token": "ver sin token", + "Remove stored token": "Eliminar token almacenado", + "Weekly Distribution": "Distribución semanal", + "Failed authentication": "Autenticación fallida", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "Un dispositivo en la dirección IP %1 intentó autenticarse con Nightscout con credenciales incorrectas. Compruebe si tiene una configuración del cargador/uploader con API_SECRET o token incorrecto?", + "Default (with leading zero and U)": "Por defecto (con cero a la izquierda y U)", + "Concise (with U, without leading zero)": "Conciso (con U, sin cero a la izquierda)", + "Minimal (without leading zero and U)": "Mínimo (sin cero a la izquierda y U)", + "Small Bolus Display": "Visualización de bolo pequeño", + "Large Bolus Display": "Visualización de bolo grande", + "Bolus Display Threshold": "Umbral de visualización de bolo", + "%1 U and Over": "%1 U y más", + "Event repeated %1 times.": "Evento repetido %1 veces.", + "minutes": "minutos", + "Last recorded %1 %2 ago.": "Última grabación hace %1 %2.", + "Security issue": "Problema de seguridad", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Detectada API_SECRET débil. Por favor, utilice una mezcla de letras en minúscula y en mayúscula, números y caracteres no alfanuméricos como !#%&/ para reducir el riesgo de acceso no autorizado. La longitud mínima de la API_SECRET es de 12 caracteres.", + "less than 1": "menos que 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "La contraseña de MongoDB y la API_SECRET coinciden. Esto es una muy mala idea. Por favor, cambie ambas contraseñas y no reutilice contraseñas en el sistema." +} diff --git a/translations/fi_FI.json b/translations/fi_FI.json new file mode 100644 index 00000000000..bf2a37b4b90 --- /dev/null +++ b/translations/fi_FI.json @@ -0,0 +1,707 @@ +{ + "Listening on port": "Kuuntelen porttia", + "Mo": "Ma", + "Tu": "Ti", + "We": "Ke", + "Th": "To", + "Fr": "Pe", + "Sa": "La", + "Su": "Su", + "Monday": "Maanantai", + "Tuesday": "Tiistai", + "Wednesday": "Keskiviikko", + "Thursday": "Torstai", + "Friday": "Perjantai", + "Saturday": "Lauantai", + "Sunday": "Sunnuntai", + "Category": "Luokka", + "Subcategory": "Alaluokka", + "Name": "Nimi", + "Today": "Tänään", + "Last 2 days": "Edelliset 2 päivää", + "Last 3 days": "Edelliset 3 päivää", + "Last week": "Viime viikko", + "Last 2 weeks": "Viimeiset 2 viikkoa", + "Last month": "Viime kuu", + "Last 3 months": "Viimeiset 3 kuukautta", + "From": "Alkaen", + "To": "Asti", + "Notes": "Merkinnät", + "Food": "Ruoka", + "Insulin": "Insuliini", + "Carbs": "Hiilihydraatit", + "Notes contain": "Merkinnät sisältävät", + "Target BG range bottom": "Tavoitealueen alaraja", + "top": "yläraja", + "Show": "Näytä", + "Display": "Näyttö", + "Loading": "Lataan", + "Loading profile": "Lataan profiilia", + "Loading status": "Lataan tilaa", + "Loading food database": "Lataan ruokatietokantaa", + "not displayed": "ei näytetä", + "Loading CGM data of": "Lataan sensoritietoja", + "Loading treatments data of": "Lataan toimenpidetietoja", + "Processing data of": "Käsittelen tietoja: ", + "Portion": "Annos", + "Size": "Koko", + "(none)": "(tyhjä)", + "None": "Tyhjä", + "": "", + "Result is empty": "Ei tuloksia", + "Day to day": "Päivittäinen", + "Week to week": "Viikosta viikkoon", + "Daily Stats": "Päivittäiset tilastot", + "Percentile Chart": "Suhteellinen kuvaaja", + "Distribution": "Jakauma", + "Hourly stats": "Tunneittainen tilasto", + "netIOB stats": "netIOB tilasto", + "temp basals must be rendered to display this report": "tämä raportti vaatii, että basaalien piirto on päällä", + "No data available": "Tietoja ei saatavilla", + "Low": "Matala", + "In Range": "Tavoitealueella", + "Period": "Aikaväli", + "High": "Korkea", + "Average": "Keskiarvo", + "Low Quartile": "Alin neljäsosa", + "Upper Quartile": "Ylin neljäsosa", + "Quartile": "Neljäsosa", + "Date": "Päivämäärä", + "Normal": "Normaali", + "Median": "Mediaani", + "Readings": "Lukemia", + "StDev": "Keskijakauma", + "Daily stats report": "Päivittäinen tilasto", + "Glucose Percentile report": "Verensokeriarvojen jakauma", + "Glucose distribution": "Glukoosijakauma", + "days total": "päivän arvio", + "Total per day": "Päivän kokonaismäärä", + "Overall": "Yhteenveto", + "Range": "Alue", + "% of Readings": "% lukemista", + "# of Readings": "Lukemien määrä", + "Mean": "Keskiarvo", + "Standard Deviation": "Keskijakauma", + "Max": "Maks", + "Min": "Min", + "A1c estimation*": "A1c arvio*", + "Weekly Success": "Viikottainen tulos", + "There is not sufficient data to run this report. Select more days.": "Raporttia ei voida luoda liian vähäisen tiedon vuoksi. Valitse useampia päiviä.", + "Using stored API secret hash": "Tallennettu salainen API-tarkiste käytössä", + "No API secret hash stored yet. You need to enter API secret.": "Salainen API-tarkiste puuttuu. Syötä API tarkiste.", + "Database loaded": "Tietokanta ladattu", + "Error: Database failed to load": "Virhe: Tietokannan lataaminen epäonnistui", + "Error": "Virhe", + "Create new record": "Luo uusi tallenne", + "Save record": "Tallenna", + "Portions": "Annokset", + "Unit": "Yksikkö", + "GI": "GI", + "Edit record": "Muokkaa tallennetta", + "Delete record": "Tuhoa tallenne", + "Move to the top": "Siirrä ylimmäksi", + "Hidden": "Piilotettu", + "Hide after use": "Piilota käytön jälkeen", + "Your API secret must be at least 12 characters long": "API-avaimen tulee olla ainakin 12 merkin mittainen", + "Bad API secret": "Väärä API-avain", + "API secret hash stored": "API salaisuus talletettu", + "Status": "Tila", + "Not loaded": "Ei ladattu", + "Food Editor": "Muokkaa ruokia", + "Your database": "Tietokantasi", + "Filter": "Suodatin", + "Save": "Tallenna", + "Clear": "Tyhjennä", + "Record": "Tietue", + "Quick picks": "Nopeat valinnat", + "Show hidden": "Näytä piilotettu", + "Your API secret or token": "API salaisuus tai tunniste", + "Remember this device. (Do not enable this on public computers.)": "Muista tämä laite (Älä valitse julkisilla tietokoneilla)", + "Treatments": "Hoitotoimenpiteet", + "Time": "Aika", + "Event Type": "Tapahtumatyyppi", + "Blood Glucose": "Verensokeri", + "Entered By": "Tiedot syötti", + "Delete this treatment?": "Tuhoa tämä hoitotoimenpide?", + "Carbs Given": "Hiilihydraatit", + "Insulin Given": "Insuliiniannos", + "Event Time": "Aika", + "Please verify that the data entered is correct": "Varmista, että tiedot ovat oikein", + "BG": "VS", + "Use BG correction in calculation": "Käytä korjausannosta laskentaan", + "BG from CGM (autoupdated)": "VS sensorilta (päivitetty automaattisesti)", + "BG from meter": "VS mittarilta", + "Manual BG": "Käsin syötetty VS", + "Quickpick": "Pikavalinta", + "or": "tai", + "Add from database": "Lisää tietokannasta", + "Use carbs correction in calculation": "Käytä hiilihydraattikorjausta laskennassa", + "Use COB correction in calculation": "Käytä aktiivisia hiilihydraatteja laskennassa", + "Use IOB in calculation": "Käytä aktiviivista insuliinia laskennassa", + "Other correction": "Muu korjaus", + "Rounding": "Pyöristys", + "Enter insulin correction in treatment": "Syötä insuliinikorjaus", + "Insulin needed": "Insuliinitarve", + "Carbs needed": "Hiilihydraattitarve", + "Carbs needed if Insulin total is negative value": "Hiilihydraattitarve, jos yhteenlaskettu insuliini on negatiivinen", + "Basal rate": "Perusannos", + "60 minutes earlier": "60 minuuttia aiemmin", + "45 minutes earlier": "45 minuuttia aiemmin", + "30 minutes earlier": "30 minuuttia aiemmin", + "20 minutes earlier": "20 minuuttia aiemmin", + "15 minutes earlier": "15 minuuttia aiemmin", + "Time in minutes": "Aika minuuteissa", + "15 minutes later": "15 minuuttia myöhemmin", + "20 minutes later": "20 minuuttia myöhemmin", + "30 minutes later": "30 minuuttia myöhemmin", + "45 minutes later": "45 minuuttia myöhemmin", + "60 minutes later": "60 minuuttia myöhemmin", + "Additional Notes, Comments": "Lisähuomiot, kommentit", + "RETRO MODE": "VANHENTUNEET TIEDOT", + "Now": "Nyt", + "Other": "Muu", + "Submit Form": "Lähetä tiedot", + "Profile Editor": "Profiilin muokkaus", + "Reports": "Raportointityökalu", + "Add food from your database": "Lisää ruoka tietokannasta", + "Reload database": "Lataa tietokanta uudelleen", + "Add": "Lisää", + "Unauthorized": "Et ole autentikoitunut", + "Entering record failed": "Tiedon tallentaminen epäonnistui", + "Device authenticated": "Laite autentikoitu", + "Device not authenticated": "Laite ei ole autentikoitu", + "Authentication status": "Autentikoinnin tila", + "Authenticate": "Autentikoi", + "Remove": "Poista", + "Your device is not authenticated yet": "Laitettasi ei ole vielä autentikoitu", + "Sensor": "Sensori", + "Finger": "Sormi", + "Manual": "Manuaalinen", + "Scale": "Skaala", + "Linear": "Lineaarinen", + "Logarithmic": "Logaritminen", + "Logarithmic (Dynamic)": "Logaritminen (Dynaaminen)", + "Insulin-on-Board": "Aktiivinen Insuliini (IOB)", + "Carbs-on-Board": "Aktiivinen Hiilihydraatti (COB)", + "Bolus Wizard Preview": "Aterialaskurin Esikatselu (BWP)", + "Value Loaded": "Arvo ladattu", + "Cannula Age": "Kanyylin Ikä (CAGE)", + "Basal Profile": "Basaaliprofiili", + "Silence for 30 minutes": "Hiljennä 30 minuutiksi", + "Silence for 60 minutes": "Hiljennä tunniksi", + "Silence for 90 minutes": "Hiljennä 1.5 tunniksi", + "Silence for 120 minutes": "Hiljennä 2 tunniksi", + "Settings": "Asetukset", + "Units": "Yksikköä", + "Date format": "Aikamuoto", + "12 hours": "12 tuntia", + "24 hours": "24 tuntia", + "Log a Treatment": "Tallenna tapahtuma", + "BG Check": "Verensokerin tarkistus", + "Meal Bolus": "Ruokailubolus", + "Snack Bolus": "Ruokakorjaus", + "Correction Bolus": "Korjausbolus", + "Carb Correction": "Hiilihydraattikorjaus", + "Note": "Merkintä", + "Question": "Kysymys", + "Exercise": "Fyysinen harjoitus", + "Pump Site Change": "Kanyylin vaihto", + "CGM Sensor Start": "Sensorin aloitus", + "CGM Sensor Stop": "CGM Sensori Pysäytys", + "CGM Sensor Insert": "Sensorin vaihto", + "Sensor Code": "Sensorin koodi", + "Transmitter ID": "Lähettimen ID", + "Dexcom Sensor Start": "Sensorin aloitus", + "Dexcom Sensor Change": "Sensorin vaihto", + "Insulin Cartridge Change": "Insuliinisäiliön vaihto", + "D.A.D. Alert": "Diabeteskoirahälytys", + "Glucose Reading": "Verensokeri", + "Measurement Method": "Mittaustapa", + "Meter": "Sokerimittari", + "Amount in grams": "Määrä grammoissa", + "Amount in units": "Annos yksiköissä", + "View all treatments": "Katso kaikki hoitotoimenpiteet", + "Enable Alarms": "Aktivoi hälytykset", + "Pump Battery Change": "Pumpun patterin vaihto", + "Pump Battery Age": "Pumpun Patterin Ikä", + "Pump Battery Low Alarm": "Varoitus! Pumpun patteri loppumassa", + "Pump Battery change overdue!": "Pumpun patterin vaihto myöhässä!", + "When enabled an alarm may sound.": "Aktivointi mahdollistaa äänihälytykset", + "Urgent High Alarm": "Kriittinen korkea", + "High Alarm": "Korkea verensokeri", + "Low Alarm": "Matala verensokeri", + "Urgent Low Alarm": "Kriittinen matala", + "Stale Data: Warn": "Vanhat tiedot: varoitus", + "Stale Data: Urgent": "Vanhat tiedot: hälytys", + "mins": "minuuttia", + "Night Mode": "Yömoodi", + "When enabled the page will be dimmed from 10pm - 6am.": "Aktivoimalla sivu himmenee kello 22 ja 06 välillä", + "Enable": "Aktivoi", + "Show Raw BG Data": "Näytä raaka VS tieto", + "Never": "Ei koskaan", + "Always": "Aina", + "When there is noise": "Signaalihäiriöiden yhteydessä", + "When enabled small white dots will be displayed for raw BG data": "Aktivoituna raaka VS tieto piirtyy aikajanalle valkoisina pisteinä", + "Custom Title": "Omavalintainen otsikko", + "Theme": "Teema", + "Default": "Oletus", + "Colors": "Värit", + "Colorblind-friendly colors": "Värisokeille sopivat värit", + "Reset, and use defaults": "Palauta oletusasetukset", + "Calibrations": "Kalibraatiot", + "Alarm Test / Smartphone Enable": "Hälytyksien testaus / Älypuhelimien äänet päälle", + "Bolus Wizard": "Annosopas", + "in the future": "tulevaisuudessa", + "time ago": "aikaa sitten", + "hr ago": "tunti sitten", + "hrs ago": "tuntia sitten", + "min ago": "minuutti sitten", + "mins ago": "minuuttia sitten", + "day ago": "päivä sitten", + "days ago": "päivää sitten", + "long ago": "Pitkän aikaa sitten", + "Clean": "Puhdas", + "Light": "Kevyt", + "Medium": "Keskiverto", + "Heavy": "Raskas", + "Treatment type": "Hoidon tyyppi", + "Raw BG": "Raaka VS", + "Device": "Laite", + "Noise": "Kohina", + "Calibration": "Kalibraatio", + "Show Plugins": "Näytä pluginit", + "About": "Nightscoutista", + "Value in": "Arvo yksiköissä", + "Carb Time": "Syöntiaika", + "Language": "Kieli", + "Add new": "Lisää uusi", + "g": "g", + "ml": "ml", + "pcs": "kpl", + "Drag&drop food here": "Pudota ruoka tähän", + "Care Portal": "Hoidot", + "Medium/Unknown": "Keskiarvo/Ei tiedossa", + "IN THE FUTURE": "TULEVAISUUDESSA", + "Order": "Järjestys", + "oldest on top": "vanhin ylhäällä", + "newest on top": "uusin ylhäällä", + "All sensor events": "Kaikki sensorin tapahtumat", + "Remove future items from mongo database": "Poista tapahtumat mongo-tietokannasta", + "Find and remove treatments in the future": "Etsi ja poista tapahtumat joiden aikamerkintä on tulevaisuudessa", + "This task find and remove treatments in the future.": "Tämä työkalu poistaa tapahtumat joiden aikamerkintä on tulevaisuudessa.", + "Remove treatments in the future": "Poista tapahtumat", + "Find and remove entries in the future": "Etsi ja poista tapahtumat", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "Tämä työkalu etsii ja poistaa sensorimerkinnät joiden aikamerkintä sijaitsee tulevaisuudessa.", + "Remove entries in the future": "Poista tapahtumat", + "Loading database ...": "Lataan tietokantaa...", + "Database contains %1 future records": "Tietokanta sisältää %1 merkintää tulevaisuudessa", + "Remove %1 selected records?": "Poista %1 valittua merkintää?", + "Error loading database": "Ongelma tietokannan lataamisessa", + "Record %1 removed ...": "Merkintä %1 poistettu ...", + "Error removing record %1": "Virhe poistaessa merkintää numero %1", + "Deleting records ...": "Poistan merkintöjä...", + "%1 records deleted": "%1 tietuetta poistettu", + "Clean Mongo status database": "Siivoa statustietokanta", + "Delete all documents from devicestatus collection": "Poista kaikki tiedot statustietokannasta", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "Tämä työkalu poistaa kaikki tiedot statustietokannasta, mikä korjaa tilanteen, jossa puhelimen akun lataustilanne ei näy oikein.", + "Delete all documents": "Poista kaikki tiedot", + "Delete all documents from devicestatus collection?": "Poista tiedot statustietokannasta?", + "Database contains %1 records": "Tietokanta sisältää %1 merkintää", + "All records removed ...": "Kaikki merkinnät poistettu ...", + "Delete all documents from devicestatus collection older than 30 days": "Poista yli 30 päivää vanhat tietueet devicestatus kokoelmasta", + "Number of Days to Keep:": "Säilyttävien päivien lukumäärä:", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "Tämä työkalu poistaa kaikki yli 30 päivää vanhat tietueet devicestatus kokoelmasta.", + "Delete old documents from devicestatus collection?": "Poista vanhat tietueet devicestatus tietokannasta?", + "Clean Mongo entries (glucose entries) database": "Poista verensokeritiedot tietokannasta", + "Delete all documents from entries collection older than 180 days": "Poista yli 180 päivää vanhat verensokeritiedot", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Tämä työkalu poistaa yli 180 päivää vanhat verensokeritiedot.", + "Delete old documents": "Tuhoa vanhat dokumentit", + "Delete old documents from entries collection?": "Tuhoa vanhat verensokeritiedot?", + "%1 is not a valid number": "%1 ei ole numero", + "%1 is not a valid number - must be more than 2": "%1 ei ole kelvollinen numero - täytyy olla yli 2", + "Clean Mongo treatments database": "Poista hoitotiedot Mongo tietokannasta", + "Delete all documents from treatments collection older than 180 days": "Poista yli 180 päivää vanhat tiedot hoitotietokannasta", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Tämä työkalu poistaa kaikki yli 180 päivää vanhat hoitotietueet.", + "Delete old documents from treatments collection?": "Poista vanhat hoitotiedot?", + "Admin Tools": "Ylläpitotyökalut", + "Nightscout reporting": "Nightscout raportointi", + "Cancel": "Peruuta", + "Edit treatment": "Muuta merkintää", + "Duration": "Kesto", + "Duration in minutes": "Kesto minuuteissa", + "Temp Basal": "Tilapäinen basaali", + "Temp Basal Start": "Tilapäinen basaali alku", + "Temp Basal End": "Tilapäinen basaali loppu", + "Percent": "Prosentti", + "Basal change in %": "Basaalimuutos prosenteissa", + "Basal value": "Basaalin määrä", + "Absolute basal value": "Absoluuttinen basaalimäärä", + "Announcement": "Tiedote", + "Loading temp basal data": "Lataan tilapäisten basaalien tietoja", + "Save current record before changing to new?": "Tallenna nykyinen merkintä ennen vaihtoa uuteen?", + "Profile Switch": "Vaihda profiilia", + "Profile": "Profiili", + "General profile settings": "Yleiset profiiliasetukset", + "Title": "Otsikko", + "Database records": "Tietokantamerkintöjä", + "Add new record": "Lisää uusi merkintä", + "Remove this record": "Poista tämä merkintä", + "Clone this record to new": "Kopioi tämä merkintä uudeksi", + "Record valid from": "Merkintä voimassa alkaen", + "Stored profiles": "Tallennetut profiilit", + "Timezone": "Aikavyöhyke", + "Duration of Insulin Activity (DIA)": "Insuliinin vaikutusaika (DIA)", + "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.": "Kertoo insuliinin tyypillisen vaikutusajan. Vaihtelee potilaan ja insuliinin tyypin mukaan. Tyypillisesti 3-4 tuntia pumpuissa käytettävällä insuliinilla.", + "Insulin to carb ratio (I:C)": "Insuliiniannoksen hiilihydraattisuhde (I:HH)", + "Hours:": "Tunnit:", + "hours": "tuntia", + "g/hour": "g/tunti", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "g hiilihydraattia / yksikkö insuliinia. Suhde, joka kertoo montako grammaa hiilihydraattia vastaa yhtä yksikköä insuliinia.", + "Insulin Sensitivity Factor (ISF)": "Insuliiniherkkyys (ISF)", + "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "mg/dL tai mmol/L / 1 yksikkö insuliinia. Suhde, joka kertoo montako yksikköä verensokeria yksi yksikkö insuliinia laskee.", + "Carbs activity / absorption rate": "Hiilihydraattiaktiivisuus / imeytymisnopeus", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "grammaa / aika. Kertoo tyypillisen nopeuden, jolla hiilihydraatit imeytyvät syömisen jälkeen. Imeytyminen tunnetaan jokseenkin huonosti, mutta voidaan arvioida keskimääräisesti. Yksikkönä grammaa tunnissa (g/h).", + "Basal rates [unit/hour]": "Basaali [yksikköä/tunti]", + "Target BG range [mg/dL,mmol/L]": "Tavoitealue [mg/dL tai mmol/L]", + "Start of record validity": "Merkinnän alkupäivämäärä", + "Icicle": "Jääpuikko", + "Render Basal": "Näytä basaali", + "Profile used": "Käytetty profiili", + "Calculation is in target range.": "Laskettu arvo on tavoitealueella.", + "Loading profile records ...": "Ladataan profiileja ...", + "Values loaded.": "Arvot ladattu.", + "Default values used.": "Oletusarvot ladattu.", + "Error. Default values used.": "Virhe! Käytetään oletusarvoja.", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "Matalan ja korkean tavoitteen aikarajat eivät täsmää. Arvot on vaihdettu oletuksiin.", + "Valid from:": "Alkaen:", + "Save current record before switching to new?": "Tallenna nykyinen merkintä ennen vaihtamista uuteen?", + "Add new interval before": "Lisää uusi aikaväli ennen", + "Delete interval": "Poista aikaväli", + "I:C": "I:HH", + "ISF": "ISF", + "Combo Bolus": "Yhdistelmäbolus", + "Difference": "Ero", + "New time": "Uusi aika", + "Edit Mode": "Muokkausmoodi", + "When enabled icon to start edit mode is visible": "Muokkausmoodin ikoni tulee näkyviin kun laitat tämän päälle", + "Operation": "Operaatio", + "Move": "Liikuta", + "Delete": "Poista", + "Move insulin": "Liikuta insuliinia", + "Move carbs": "Liikuta hiilihydraatteja", + "Remove insulin": "Poista insuliini", + "Remove carbs": "Poista hiilihydraatit", + "Change treatment time to %1 ?": "Muuta hoidon aika? Uusi: %1", + "Change carbs time to %1 ?": "Muuta hiilihydraattien aika? Uusi: %1", + "Change insulin time to %1 ?": "Muuta insuliinin aika? Uusi: %1", + "Remove treatment ?": "Poista hoito?", + "Remove insulin from treatment ?": "Poista insuliini hoidosta?", + "Remove carbs from treatment ?": "Poista hiilihydraatit hoidosta?", + "Rendering": "Piirrän graafeja", + "Loading OpenAPS data of": "Lataan OpenAPS tietoja", + "Loading profile switch data": "Lataan profiilinvaihtotietoja", + "Redirecting you to the Profile Editor to create a new profile.": "Väärä profiiliasetus tai profiilia ei löydy.\nSiirrytään profiilin muokkaamiseen uuden profiilin luontia varten.", + "Pump": "Pumppu", + "Sensor Age": "Sensorin ikä", + "Insulin Age": "Insuliinin ikä", + "Temporary target": "Tilapäinen tavoite", + "Reason": "Syy", + "Eating soon": "Syödään pian", + "Top": "Ylä", + "Bottom": "Ala", + "Activity": "Aktiviteetti", + "Targets": "Tavoitteet", + "Bolus insulin:": "Bolusinsuliini:", + "Base basal insulin:": "Basaalin perusannos:", + "Positive temp basal insulin:": "Positiivinen tilapäisbasaali:", + "Negative temp basal insulin:": "Negatiivinen tilapäisbasaali:", + "Total basal insulin:": "Basaali yhteensä:", + "Total daily insulin:": "Päivän kokonaisinsuliiniannos:", + "Unable to save Role": "Roolin tallentaminen epäonnistui", + "Unable to delete Role": "Roolin poistaminen epäonnistui", + "Database contains %1 roles": "Tietokanta sisältää %1 roolia", + "Edit Role": "Muokkaa roolia", + "admin, school, family, etc": "ylläpitäjä, koulu, perhe jne", + "Permissions": "Oikeudet", + "Are you sure you want to delete: ": "Oletko varmat että haluat tuhota: ", + "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.": "Jokaisella roolilla on yksi tai useampia oikeuksia. * on jokeri (tunnistuu kaikkina oikeuksina), oikeudet ovat hierarkia joka käyttää : merkkiä erottimena.", + "Add new Role": "Lisää uusi rooli", + "Roles - Groups of People, Devices, etc": "Roolit - Ihmisten ja laitteiden muodostamia ryhmiä", + "Edit this role": "Muokkaa tätä roolia", + "Admin authorized": "Ylläpitäjä valtuutettu", + "Subjects - People, Devices, etc": "Käyttäjät (Ihmiset, laitteet jne)", + "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "Jokaisella käyttäjällä on uniikki pääsytunniste ja yksi tai useampi rooli. Klikkaa pääsytunnistetta nähdäksesi käyttäjän, jolloin saat jaettavan osoitteen tämän käyttäjän oikeuksilla.", + "Add new Subject": "Lisää uusi käyttäjä", + "Unable to save Subject": "Käyttäjän tallentaminen epäonnistui", + "Unable to delete Subject": "Käyttäjän poistaminen epäonnistui", + "Database contains %1 subjects": "Tietokanta sisältää %1 käyttäjää", + "Edit Subject": "Muokkaa käyttäjää", + "person, device, etc": "henkilö, laite jne", + "role1, role2": "rooli1, rooli2", + "Edit this subject": "Muokkaa tätä käyttäjää", + "Delete this subject": "Poista tämä käyttäjä", + "Roles": "Rooli", + "Access Token": "Pääsytunniste", + "hour ago": "tunti sitten", + "hours ago": "tuntia sitten", + "Silence for %1 minutes": "Hiljennä %1 minuutiksi", + "Check BG": "Tarkista VS", + "BASAL": "Basaali", + "Current basal": "Nykyinen basaali", + "Sensitivity": "Herkkyys", + "Current Carb Ratio": "Nykyinen hiilihydraattiherkkyys", + "Basal timezone": "Aikavyöhyke", + "Active profile": "Aktiivinen profiili", + "Active temp basal": "Aktiivinen tilapäisbasaali", + "Active temp basal start": "Aktiivisen tilapäisbasaalin aloitus", + "Active temp basal duration": "Aktiivisen tilapäisbasaalin kesto", + "Active temp basal remaining": "Aktiivista tilapäisbasaalia jäljellä", + "Basal profile value": "Basaaliprofiilin arvo", + "Active combo bolus": "Aktiivinen yhdistelmäbolus", + "Active combo bolus start": "Aktiivisen yhdistelmäboluksen alku", + "Active combo bolus duration": "Aktiivisen yhdistelmäboluksen kesto", + "Active combo bolus remaining": "Aktiivista yhdistelmäbolusta jäljellä", + "BG Delta": "VS muutos", + "Elapsed Time": "Kulunut aika", + "Absolute Delta": "Absoluuttinen muutos", + "Interpolated": "Laskettu", + "BWP": "Annoslaskuri", + "Urgent": "Kiireellinen", + "Warning": "Varoitus", + "Info": "Info", + "Lowest": "Matalin", + "Snoozing high alarm since there is enough IOB": "Korkean sokerin varoitus poistettu riittävän insuliinin vuoksi", + "Check BG, time to bolus?": "Tarkista VS, aika bolustaa?", + "Notice": "Huomio", + "required info missing": "tarvittava tieto puuttuu", + "Insulin on Board": "Aktiivinen insuliini", + "Current target": "Tämänhetkinen tavoite", + "Expected effect": "Oletettu vaikutus", + "Expected outcome": "Oletettu lopputulos", + "Carb Equivalent": "Hiilihydraattivastaavuus", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "Liikaa insuliinia: %1U enemmän kuin tarvitaan tavoitteeseen pääsyyn (huomioimatta hiilihydraatteja)", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "Liikaa insuliinia: %1U enemmän kuin tarvitaan tavoitteeseen pääsyyn, VARMISTA RIITTÄVÄ HIILIHYDRAATTIEN SAANTI", + "%1U reduction needed in active insulin to reach low target, too much basal?": "Pääset tavoitteesen vähentämällä %1U aktiivista insuliinia, liikaa basaalia?", + "basal adjustment out of range, give carbs?": "säätö liian suuri, anna hiilihydraatteja?", + "basal adjustment out of range, give bolus?": "säätö liian suuri, anna bolus?", + "above high": "yli korkean", + "below low": "alle matalan", + "Projected BG %1 target": "Laskettu VS %1 tavoitteen", + "aiming at": "tavoitellaan", + "Bolus %1 units": "Bolusta %1 yksikköä", + "or adjust basal": "tai säädä basaalia", + "Check BG using glucometer before correcting!": "Tarkista VS mittarilla ennen korjaamista!", + "Basal reduction to account %1 units:": "Basaalin vähennys saadaksesi %1 yksikön vaikutuksen:", + "30m temp basal": "30m tilapäinen basaali", + "1h temp basal": "1h tilapäinen basaali", + "Cannula change overdue!": "Kanyylin ikä yli määräajan!", + "Time to change cannula": "Aika vaihtaa kanyyli", + "Change cannula soon": "Vaihda kanyyli pian", + "Cannula age %1 hours": "Kanyylin ikä %1 tuntia", + "Inserted": "Asetettu", + "CAGE": "KIKÄ", + "COB": "AH", + "Last Carbs": "Viimeisimmät hiilihydraatit", + "IAGE": "IIKÄ", + "Insulin reservoir change overdue!": "Insuliinisäiliö vanhempi kuin määräaika!", + "Time to change insulin reservoir": "Aika vaihtaa insuliinisäiliö", + "Change insulin reservoir soon": "Vaihda insuliinisäiliö pian", + "Insulin reservoir age %1 hours": "Insuliinisäiliön ikä %1 tuntia", + "Changed": "Vaihdettu", + "IOB": "IOB", + "Careportal IOB": "Careportal IOB", + "Last Bolus": "Viimeisin bolus", + "Basal IOB": "Basaalin IOB", + "Source": "Lähde", + "Stale data, check rig?": "Tiedot vanhoja, tarkista lähetin?", + "Last received:": "Viimeksi vastaanotettu:", + "%1m ago": "%1m sitten", + "%1h ago": "%1h sitten", + "%1d ago": "%1d sitten", + "RETRO": "RETRO", + "SAGE": "SIKÄ", + "Sensor change/restart overdue!": "Sensorin vaihto/uudelleenkäynnistys yli määräajan!", + "Time to change/restart sensor": "Aika vaihtaa / käynnistää sensori uudelleen", + "Change/restart sensor soon": "Vaihda/käynnistä sensori uudelleen pian", + "Sensor age %1 days %2 hours": "Sensorin ikä %1 päivää, %2 tuntia", + "Sensor Insert": "Sensorin Vaihto", + "Sensor Start": "Sensorin Aloitus", + "days": "päivää", + "Insulin distribution": "Insuliinijakauma", + "To see this report, press SHOW while in this view": "Nähdäksesi tämän raportin, paina NÄYTÄ tässä näkymässä", + "AR2 Forecast": "AR2 Ennusteet", + "OpenAPS Forecasts": "OpenAPS Ennusteet", + "Temporary Target": "Tilapäinen tavoite", + "Temporary Target Cancel": "Peruuta tilapäinen tavoite", + "OpenAPS Offline": "OpenAPS poissa verkosta", + "Profiles": "Profiilit", + "Time in fluctuation": "Aika muutoksessa", + "Time in rapid fluctuation": "Aika nopeassa muutoksessa", + "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:": "Tämä on epätarkka arvio joka saattaa heittää huomattavasti mittaustuloksesta, eikä korvaa laboratoriotestiä. Laskentakaava on otettu artikkelista: ", + "Filter by hours": "Huomioi raportissa seuraavat tunnit", + "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.": "Aika Muutoksessa ja Aika Nopeassa Muutoksessa mittaa osuutta tarkkailtavasta aikaperiodista, jolloin glukoosi on ollut nopeassa tai hyvin nopeassa muutoksessa. Pienempi arvo on parempi.", + "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.": "Keskimääräinen Kokonaismuutos kertoo kerkimääräisen päivätason verensokerimuutoksien yhteenlasketun arvon. Pienempi arvo on parempi.", + "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "Keskimääräinen tunti kertoo keskimääräisen tuntitason verensokerimuutoksien yhteenlasketun arvon. Pienempi arvo on parempi.", + "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "Alueen ulkopuolella oleva RMS lasketaan siten, että kaikkien tavoitealueen ulkopuolisten glukoosilukemien etäisyys alueesta lasketaan toiseen potenssiin, luvut summataan, jaetaan niiden määrällä ja otetaan neliöjuuri. Tämä tieto on samankaltainen kuin lukemien osuus tavoitealueella, mutta painottaa lukemia kauempana alueen ulkopuolella. Matalampi arvo on parempi.", + "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">here.", + "Mean Total Daily Change": "Keskimääräinen Kokonaismuutos", + "Mean Hourly Change": "Keskimääräinen tuntimuutos", + "FortyFiveDown": "laskee hitaasti", + "FortyFiveUp": "nousee hitaasti", + "Flat": "tasainen", + "SingleUp": "nousussa", + "SingleDown": "laskussa", + "DoubleDown": "laskee nopeasti", + "DoubleUp": "nousee nopeasti", + "virtAsstUnknown": "Tämä arvo on tällä hetkellä tuntematon. Katso lisätietoja Nightscout-sivustostasi.", + "virtAsstTitleAR2Forecast": "AR2 Ennuste", + "virtAsstTitleCurrentBasal": "Nykyinen Basaali", + "virtAsstTitleCurrentCOB": "Tämänhetkinen COB", + "virtAsstTitleCurrentIOB": "Tämänhetkinen IOB", + "virtAsstTitleLaunch": "Tervetuloa Nightscoutiin", + "virtAsstTitleLoopForecast": "Loop ennuste", + "virtAsstTitleLastLoop": "Viimeisin Loop", + "virtAsstTitleOpenAPSForecast": "OpenAPS Ennuste", + "virtAsstTitlePumpReservoir": "Insuliinia jäljellä", + "virtAsstTitlePumpBattery": "Pumpun paristo", + "virtAsstTitleRawBG": "Nykyinen Raw BG", + "virtAsstTitleUploaderBattery": "Lähettimen akku", + "virtAsstTitleCurrentBG": "Nykyinen VS", + "virtAsstTitleFullStatus": "Täysi status", + "virtAsstTitleCGMMode": "CGM tila", + "virtAsstTitleCGMStatus": "CGM tila", + "virtAsstTitleCGMSessionAge": "CGM Istunnon Ikä", + "virtAsstTitleCGMTxStatus": "CGM Lähettimen Tila", + "virtAsstTitleCGMTxAge": "CGM Lähettimen Ikä", + "virtAsstTitleCGMNoise": "CGM Häiriöt", + "virtAsstTitleDelta": "Verensokerin muutos", + "virtAsstStatus": "%1 ja %2 alkaen %3.", + "virtAsstBasal": "%1 nykyinen basaali on %2 yksikköä tunnissa", + "virtAsstBasalTemp": "%1 tilapäinen basaali on %2 tunnissa, päättyy %3", + "virtAsstIob": "ja sinulla on %1 aktivista insuliinia.", + "virtAsstIobIntent": "Sinulla on %1 aktiivista insuliinia", + "virtAsstIobUnits": "%1 yksikköä", + "virtAsstLaunch": "Mitä haluat tarkistaa Nightscoutissa?", + "virtAsstPreamble": "Sinun", + "virtAsstPreamble3person": "%1 on ", + "virtAsstNoInsulin": "ei", + "virtAsstUploadBattery": "Lähettimen paristoa jäljellä %1", + "virtAsstReservoir": "%1 yksikköä insuliinia jäljellä", + "virtAsstPumpBattery": "Pumppu on %1 %2", + "virtAsstUploaderBattery": "Lähettimen pariston lataustaso on %1", + "virtAsstLastLoop": "Viimeisin onnistunut loop oli %1", + "virtAsstLoopNotAvailable": "Loop plugin ei ole aktivoitu", + "virtAsstLoopForecastAround": "Ennusteen mukaan olet around %1 seuraavan %2 ajan", + "virtAsstLoopForecastBetween": "Ennusteen mukaan olet between %1 and %2 seuraavan %3 ajan", + "virtAsstAR2ForecastAround": "AR2 ennusteen mukaan olet %1 seuraavan %2 aikana", + "virtAsstAR2ForecastBetween": "AR2 ennusteen mukaan olet %1 ja %2 välissä seuraavan %3 aikana", + "virtAsstForecastUnavailable": "Ennusteet eivät ole toiminnassa puuttuvan tiedon vuoksi", + "virtAsstRawBG": "Suodattamaton verensokeriarvo on %1", + "virtAsstOpenAPSForecast": "OpenAPS verensokeriarvio on %1", + "virtAsstCob3person": "%1 on %2 aktiivista hiilihydraattia", + "virtAsstCob": "Sinulla on %1 aktiivista hiilihydraattia", + "virtAsstCGMMode": "CGM moodi oli %1 %2 alkaen.", + "virtAsstCGMStatus": "CGM tila oli %1 %2 alkaen.", + "virtAsstCGMSessAge": "CGM istunto on ollut aktiivisena %1 päivää ja %2 tuntia.", + "virtAsstCGMSessNotStarted": "Tällä hetkellä ei ole aktiivista CGM-istuntoa.", + "virtAsstCGMTxStatus": "CGM lähettimen tila oli %1 hetkellä %2.", + "virtAsstCGMTxAge": "CGM lähetin on %1 päivää vanha.", + "virtAsstCGMNoise": "CGM kohina oli %1 hetkellä %2.", + "virtAsstCGMBattOne": "CGM akku oli %1 volttia hetkellä %2.", + "virtAsstCGMBattTwo": "CGM akun tasot olivat %1 volttia ja %2 volttia hetkellä %3.", + "virtAsstDelta": "Muutoksesi oli %1 %2 ja %3 välillä.", + "virtAsstDeltaEstimated": "Arvioitu muutos oli %1 välillä %2 ja %3.", + "virtAsstUnknownIntentTitle": "Tuntematon intentio", + "virtAsstUnknownIntentText": "Anteeksi, en tiedä mitä pyydät.", + "Fat [g]": "Rasva [g]", + "Protein [g]": "Proteiini [g]", + "Energy [kJ]": "Energia [kJ]", + "Clock Views:": "Kellonäkymä:", + "Clock": "Kello", + "Color": "Väri", + "Simple": "Yksinkertainen", + "TDD average": "Päivän kokonaisinsuliinin keskiarvo", + "Bolus average": "Boluksien keskiarvo", + "Basal average": "Basaalien keskiarvo", + "Base basal average:": "Perusbasaalin keskiarvo:", + "Carbs average": "Hiilihydraatit keskiarvo", + "Eating Soon": "Ruokailu pian", + "Last entry {0} minutes ago": "Edellinen verensokeri {0} minuuttia sitten", + "change": "muutos", + "Speech": "Puhe", + "Target Top": "Tavoite ylä", + "Target Bottom": "Tavoite ala", + "Canceled": "Peruutettu", + "Meter BG": "Mittarin VS", + "predicted": "ennuste", + "future": "tulevaisuudessa", + "ago": "sitten", + "Last data received": "Tietoa vastaanotettu viimeksi", + "Clock View": "Kellonäkymä", + "Protein": "Proteiini", + "Fat": "Rasva", + "Protein average": "Proteiini keskiarvo", + "Fat average": "Rasva keskiarvo", + "Total carbs": "Hiilihydraatit yhteensä", + "Total protein": "Proteiini yhteensä", + "Total fat": "Rasva yhteensä", + "Database Size": "Tietokannan koko", + "Database Size near its limits!": "Tietokannan koko lähellä rajaa!", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "Tietokannan koko on %1, raja on %2. Muista varmistaa tietokanta!", + "Database file size": "Tietokannan tiedoston koko", + "%1 MiB of %2 MiB (%3%)": "%1 MiB / %2 MiB (%3%)", + "Data size": "Tietojen koko", + "virtAsstDatabaseSize": "%1 MiB. Se on %2% saatavilla olevasta koosta.", + "virtAsstTitleDatabaseSize": "Tietokantatiedoston koko", + "Carbs/Food/Time": "Hiilihydraatit/Ruoka/Aika", + "You have administration messages": "Sinulle on ylläpitoviestejä", + "Admin messages in queue": "Jonossa olevat ylläpitoviestit", + "Queue empty": "Jono on tyhjä", + "There are no admin messages in queue": "Jonossa ei ole ylläpitoviestejä", + "Please sign in using the API_SECRET to see your administration messages": "Kirjaudu sisään käyttäen API_SECRET salasanaa nähdäksesi ylläpitoviestit", + "Reads enabled in default permissions": "Tietojen lukeminen käytössä oletuskäyttöoikeuksilla", + "Data reads enabled": "Tiedon lukeminen mahdollista", + "Data writes enabled": "Tiedon kirjoittaminen mahdollista", + "Data writes not enabled": "Tiedon kirjoittaminen estetty", + "Color prediction lines": "Värilliset ennusteviivat", + "Release Notes": "Nightscout versioiden kuvaukset", + "Check for Updates": "Tarkista päivityksen saatavuus", + "Open Source": "Avoin lähdekoodi", + "Nightscout Info": "Tietoa Nightscoutista", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "Loopalyzerin tarkoitus on visualisoida miten Loop-järjestelmä on toiminut. Visualisointi toimii jossain määrin myös muita järjestelmiä käyttävillä, mutta graafista saattaa puuttua tietoja ja se saattaa näyttää oudolta jos et käytä Loopia. Tarkista huolellisesti, että Loopalyzerin raportti näyttää toimivan.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer sisältää aikasiirto-ominaisuuden. Jos syöt esimerkiksi aamupalan yhtenä päivänä seitsemältä ja seuraavana kahdeksalta, näyttää päivien keskiarvoglukoosi harhaanjohtavaa käyrää. Aikasiirto huomaa eri ajan aamupalalle, ja siirtää automaattisesti päivien tiedot niin, että käyrät piirtävät aamupalan samalle hetkelle, jolloin päivien vertaaminen on helpompaa.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "Yllämainitussa esimerkissä ensimmäisen päivän tietoja siirrettäisiin 30 minuuttia eteenpäin ja toisen päivän tietoja 30 taaksepäin ajassa, ikään kuin molemmat aamupalat olisi syöty kello 7:30. Näin näet miten verensokeri on muuttunut aamupalojen jälkeen.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Aikasiirto näyttää insuliinin vaikutusajan verran tietoa aterioiden jälkeen. Koska kaikki tiedot koko päivän ajalla ovat siirtyneet, käyrä harmaan alueen ulkopuolella ei välttämättä ole tarkka.", + "Note that time shift is available only when viewing multiple days.": "Huomioi että aikasiirto toimii vain kun haet monen päivän tiedot samaan aikaan.", + "Please select a maximum of two weeks duration and click Show again.": "Valitse enintään kahden viikon tiedot kerrallaan, ja paina Näytä -nappia uudellen.", + "Show profiles table": "Näytä profiilitaulukko", + "Show predictions": "Näytä ennusteet", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Tee aikasiirto yli %1 hh aterioille jotka on syöty välillä %2 ja %3", + "Previous": "Edellinen", + "Previous day": "Edellinen päivä", + "Next day": "Seuraava päivä", + "Next": "Seuraava", + "Temp basal delta": "Tilapäisen basaalin muutos", + "Authorized by token": "Kirjautuminen tunnisteella", + "Auth role": "Authentikaatiorooli", + "view without token": "näytä ilman tunnistetta", + "Remove stored token": "Poista talletettu tunniste", + "Weekly Distribution": "Viikkojakauma", + "Failed authentication": "Sisäänkirjautuminen epäonnistui", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "Laita IP-osoitteessa %1 yritti kirjautua Nightscoutiin väärällä tunnisteella. Tarkista onko uploaderissasi oikea API_SECRET tai avain?", + "Default (with leading zero and U)": "Oletus (U ja 0 näytetään)", + "Concise (with U, without leading zero)": "Lyhyt (U näytetään, 0 ei)", + "Minimal (without leading zero and U)": "Minimi (U ja 0 piilossa)", + "Small Bolus Display": "Pienien boluksien näyttömuoto", + "Large Bolus Display": "Suurien boluksien näyttömuoto", + "Bolus Display Threshold": "Boluksen asetusraja", + "%1 U and Over": "%1 U ja yli", + "Event repeated %1 times.": "Tapahtuma toistunut %1 kertaa.", + "minutes": "minuuttia", + "Last recorded %1 %2 ago.": "Tapahtui viimeksi %1 %2 sitten.", + "Security issue": "Tietoturvaongelma", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Heikko API_SECRET havaittu. Ole hyvä ja käytä pieniä ja SUURIA kirjaimia, numeroita ja ei-aakkosnumeerisia merkkejä, kuten !#%&/ vähentääksesi luvattoman pääsyn riskiä. API_SECRET vähimmäispituus on 12 merkkiä.", + "less than 1": "alle 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "MongoDB salasana ja API_SECRET on asetettu samaksi. Tämä on tietoturvan kannalta erittäin huono idea. Vaihda molemmat ja älä uudelleenkäytä salasanoja järjestelmien välillä." +} diff --git a/translations/fr_FR.json b/translations/fr_FR.json new file mode 100644 index 00000000000..9744179c9db --- /dev/null +++ b/translations/fr_FR.json @@ -0,0 +1,707 @@ +{ + "Listening on port": "Écoute sur port", + "Mo": "Lu", + "Tu": "Ma", + "We": "Me", + "Th": "Je", + "Fr": "Ve", + "Sa": "Sa", + "Su": "Di", + "Monday": "Lundi", + "Tuesday": "Mardi", + "Wednesday": "Mercredi", + "Thursday": "Jeudi", + "Friday": "Vendredi", + "Saturday": "Samedi", + "Sunday": "Dimanche", + "Category": "Catégorie", + "Subcategory": "Sous-catégorie", + "Name": "Nom", + "Today": "Aujourd'hui", + "Last 2 days": "2 derniers jours", + "Last 3 days": "3 derniers jours", + "Last week": "Semaine dernière", + "Last 2 weeks": "2 dernières semaines", + "Last month": "Mois dernier", + "Last 3 months": "3 derniers mois", + "From": "Du", + "To": "Au", + "Notes": "Remarques", + "Food": "Nourriture", + "Insulin": "Insuline", + "Carbs": "Glucides", + "Notes contain": "Les notes contiennent", + "Target BG range bottom": "Limite inférieure glycémie", + "top": "supérieure", + "Show": "Montrer", + "Display": "Afficher", + "Loading": "Chargement", + "Loading profile": "Chargement du profil", + "Loading status": "Statut du chargement", + "Loading food database": "Chargement de la base de données alimentaire", + "not displayed": "non affiché", + "Loading CGM data of": "Chargement données CGM de", + "Loading treatments data of": "Chargement données traitement de", + "Processing data of": "Traitement des données de", + "Portion": "Portion", + "Size": "Taille", + "(none)": "(aucun)", + "None": "Aucun", + "": "", + "Result is empty": "Pas de résultat", + "Day to day": "Jour par jour", + "Week to week": "Semaine après semaine", + "Daily Stats": "Statistiques quotidiennes", + "Percentile Chart": "Percentiles", + "Distribution": "Distribution", + "Hourly stats": "Statistiques horaires", + "netIOB stats": "statistiques netiob", + "temp basals must be rendered to display this report": "la basale temporaire doit être activé pour afficher ce rapport", + "No data available": "Pas de données disponibles", + "Low": "Bas", + "In Range": "Dans la cible", + "Period": "Période", + "High": "Haut", + "Average": "Moyenne", + "Low Quartile": "Quartile inférieur", + "Upper Quartile": "Quartile supérieur", + "Quartile": "Quartile", + "Date": "Date", + "Normal": "Normal", + "Median": "Médiane", + "Readings": "Valeurs", + "StDev": "Déviation St.", + "Daily stats report": "Rapport quotidien", + "Glucose Percentile report": "Rapport percentiles Glycémie", + "Glucose distribution": "Distribution glycémies", + "days total": "jours totaux", + "Total per day": "Total journalier", + "Overall": "En général", + "Range": "Intervalle", + "% of Readings": "% de lectures", + "# of Readings": "Nombre de lectures", + "Mean": "Moyenne", + "Standard Deviation": "Déviation Standard", + "Max": "Maximum", + "Min": "Minimum", + "A1c estimation*": "Estimation HbA1c*", + "Weekly Success": "Réussite hebdomadaire", + "There is not sufficient data to run this report. Select more days.": "Il n'y a pas assez de données pour exécuter ce rapport. Sélectionnez plus de jours.", + "Using stored API secret hash": "Utilisation du hash API existant", + "No API secret hash stored yet. You need to enter API secret.": "Pas de secret API existant. Vous devez en entrer un.", + "Database loaded": "Base de données chargée", + "Error: Database failed to load": "Erreur: le chargement de la base de données a échoué", + "Error": "Erreur", + "Create new record": "Créer un nouvel enregistrement", + "Save record": "Sauvegarder l'enregistrement", + "Portions": "Portions", + "Unit": "Unités", + "GI": "IG", + "Edit record": "Modifier enregistrement", + "Delete record": "Effacer enregistrement", + "Move to the top": "Déplacer en haut", + "Hidden": "Caché", + "Hide after use": "Cacher après utilisation", + "Your API secret must be at least 12 characters long": "Votre secret API doit contenir au moins 12 caractères", + "Bad API secret": "Secret API erroné", + "API secret hash stored": "Hash API secret sauvegardé", + "Status": "Statut", + "Not loaded": "Non chargé", + "Food Editor": "Editeur aliments", + "Your database": "Votre base de données", + "Filter": "Filtre", + "Save": "Sauvegarder", + "Clear": "Effacer", + "Record": "Enregistrement", + "Quick picks": "Sélection rapide", + "Show hidden": "Montrer cachés", + "Your API secret or token": "Votre mot de passe API secret ou jeton", + "Remember this device. (Do not enable this on public computers.)": "Se souvenir de cet appareil. (Ne pas activer sur les ordinateurs publics.)", + "Treatments": "Traitements", + "Time": "Heure", + "Event Type": "Type d'événement", + "Blood Glucose": "Glycémie", + "Entered By": "Entré par", + "Delete this treatment?": "Effacer ce traitement?", + "Carbs Given": "Glucides donnés", + "Insulin Given": "Insuline donnée", + "Event Time": "Heure de l'événement", + "Please verify that the data entered is correct": "Veuillez vérifier que les données saisies sont correctes", + "BG": "Glycémie", + "Use BG correction in calculation": "Utiliser la correction de glycémie dans les calculs", + "BG from CGM (autoupdated)": "Glycémie à partir du CGM (automatique)", + "BG from meter": "Glycémie du glucomètre", + "Manual BG": "Glycémie manuelle", + "Quickpick": "Sélection rapide", + "or": "ou", + "Add from database": "Ajouter à partir de la base de données", + "Use carbs correction in calculation": "Utiliser la correction en glucides dans les calculs", + "Use COB correction in calculation": "Utiliser les glucides actifs dans les calculs", + "Use IOB in calculation": "Utiliser l'insuline active dans les calculs", + "Other correction": "Autre correction", + "Rounding": "Arrondi", + "Enter insulin correction in treatment": "Entrer correction insuline dans le traitement", + "Insulin needed": "Insuline nécessaire", + "Carbs needed": "Glucides nécessaires", + "Carbs needed if Insulin total is negative value": "Glucides nécessaires si insuline totale est un valeur négative", + "Basal rate": "Taux basal", + "60 minutes earlier": "60 min plus tôt", + "45 minutes earlier": "45 min plus tôt", + "30 minutes earlier": "30 min plus tôt", + "20 minutes earlier": "20 min plus tôt", + "15 minutes earlier": "15 min plus tôt", + "Time in minutes": "Durée en minutes", + "15 minutes later": "15 min plus tard", + "20 minutes later": "20 min plus tard", + "30 minutes later": "30 min plus tard", + "45 minutes later": "45 min plus tard", + "60 minutes later": "60 min plus tard", + "Additional Notes, Comments": "Notes additionnelles, commentaires", + "RETRO MODE": "MODE RETROSPECTIF", + "Now": "Maintenant", + "Other": "Autre", + "Submit Form": "Soumettre le formulaire", + "Profile Editor": "Éditeur de profil", + "Reports": "Outil de rapport", + "Add food from your database": "Ajouter aliment de votre base de données", + "Reload database": "Recharger la base de données", + "Add": "Ajouter", + "Unauthorized": "Non autorisé", + "Entering record failed": "Entrée enregistrement a échoué", + "Device authenticated": "Appareil authentifié", + "Device not authenticated": "Appareil non authentifié", + "Authentication status": "Status de l'authentification", + "Authenticate": "Authentifier", + "Remove": "Retirer", + "Your device is not authenticated yet": "Votre appareil n'est pas encore authentifié", + "Sensor": "Senseur", + "Finger": "Doigt", + "Manual": "Manuel", + "Scale": "Échelle", + "Linear": "Linéaire", + "Logarithmic": "Logarithmique", + "Logarithmic (Dynamic)": "Logarithmique (Dynamique)", + "Insulin-on-Board": "Insuline active", + "Carbs-on-Board": "Glucides actifs", + "Bolus Wizard Preview": "Aperçu de l'assistant de bolus", + "Value Loaded": "Valeur chargée", + "Cannula Age": "Age de la canule", + "Basal Profile": "Profil Basal", + "Silence for 30 minutes": "Silence pendant 30 minutes", + "Silence for 60 minutes": "Silence pendant 60 minutes", + "Silence for 90 minutes": "Silence pendant 90 minutes", + "Silence for 120 minutes": "Silence pendant 120 minutes", + "Settings": "Paramètres", + "Units": "Unités", + "Date format": "Format de la date", + "12 hours": "12 heures", + "24 hours": "24 heures", + "Log a Treatment": "Entrer un traitement", + "BG Check": "Contrôle glycémie", + "Meal Bolus": "Bolus repas", + "Snack Bolus": "Bolus en cas", + "Correction Bolus": "Bolus de correction", + "Carb Correction": "Ressucrage", + "Note": "Note", + "Question": "Question", + "Exercise": "Exercice physique", + "Pump Site Change": "Changement de zone d'insertion", + "CGM Sensor Start": "Démarrage senseur", + "CGM Sensor Stop": "GSC Sensor Arrêt", + "CGM Sensor Insert": "Changement senseur", + "Sensor Code": "Code du capteur", + "Transmitter ID": "ID du transmetteur", + "Dexcom Sensor Start": "Démarrage senseur Dexcom", + "Dexcom Sensor Change": "Changement senseur Dexcom", + "Insulin Cartridge Change": "Changement cartouche d'insuline", + "D.A.D. Alert": "Wouf! Wouf! Chien d'alerte diabète", + "Glucose Reading": "Valeur de glycémie", + "Measurement Method": "Méthode de mesure", + "Meter": "Glucomètre", + "Amount in grams": "Quantité en grammes", + "Amount in units": "Quantité en unités", + "View all treatments": "Voir tous les traitements", + "Enable Alarms": "Activer les alarmes", + "Pump Battery Change": "Changer les batteries de la pompe", + "Pump Battery Age": "Pump Battery Age", + "Pump Battery Low Alarm": "Alarme batterie de la pompe faible", + "Pump Battery change overdue!": "Changement de la batterie de la pompe nécessaire !", + "When enabled an alarm may sound.": "Si activée, un alarme peut sonner.", + "Urgent High Alarm": "Alarme hyperglycémie urgente", + "High Alarm": "Alarme hyperglycémie", + "Low Alarm": "Alarme hypoglycémie", + "Urgent Low Alarm": "Alarme hypoglycémie urgente", + "Stale Data: Warn": "Données échues: avertissement", + "Stale Data: Urgent": "Données échues: avertissement urgent", + "mins": "minutes", + "Night Mode": "Mode nocturne", + "When enabled the page will be dimmed from 10pm - 6am.": "Si activé, la page sera assombrie de 22:00 à 6:00", + "Enable": "Activer", + "Show Raw BG Data": "Montrer les données BG brutes", + "Never": "Jamais", + "Always": "Toujours", + "When there is noise": "Quand il y a du bruit", + "When enabled small white dots will be displayed for raw BG data": "Si activé, des points blancs représenteront les données brutes", + "Custom Title": "Titre personalisé", + "Theme": "Thème", + "Default": "Par défaut", + "Colors": "Couleurs", + "Colorblind-friendly colors": "Couleurs pour daltoniens", + "Reset, and use defaults": "Remettre à zéro et utiliser les valeurs par défaut", + "Calibrations": "Calibration", + "Alarm Test / Smartphone Enable": "Test alarme / Activer Smartphone", + "Bolus Wizard": "Calculateur de bolus", + "in the future": "dans le futur", + "time ago": "temps avant", + "hr ago": "heure avant", + "hrs ago": "heures avant", + "min ago": "minute avant", + "mins ago": "minutes avant", + "day ago": "jour avant", + "days ago": "jours avant", + "long ago": "il y a longtemps", + "Clean": "Propre", + "Light": "Léger", + "Medium": "Moyen", + "Heavy": "Important", + "Treatment type": "Type de traitement", + "Raw BG": "Glycémie brute", + "Device": "Appareil", + "Noise": "Bruit", + "Calibration": "Calibrage", + "Show Plugins": "Montrer Plugins", + "About": "À propos de", + "Value in": "Valeur en", + "Carb Time": "Moment de l'ingestion de Glucides", + "Language": "Langue", + "Add new": "Ajouter nouveau", + "g": "g", + "ml": "ml", + "pcs": "unités", + "Drag&drop food here": "Glisser et déposer repas ici ", + "Care Portal": "Portail de soins", + "Medium/Unknown": "Moyen/Inconnu", + "IN THE FUTURE": "DANS LE FUTUR", + "Order": "Mise en ordre", + "oldest on top": "plus vieux en tête de liste", + "newest on top": "nouveau en tête de liste", + "All sensor events": "Tous les événement du senseur", + "Remove future items from mongo database": "Effacer les éléments futurs de la base de données mongo", + "Find and remove treatments in the future": "Chercher et effacer les traitements dont la date est dans le futur", + "This task find and remove treatments in the future.": "Cette tâche cherche et efface les traitements dont la date est dans le futur.", + "Remove treatments in the future": "Efface les traitements ayant une date dans le futur", + "Find and remove entries in the future": "Cherche et efface les événements dans le futur", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "Cet tâche cherche et efface les valeurs CGM dont la date est dans le futur, créées par le téléphone avec une mauvaise date / heure.", + "Remove entries in the future": "Efface les événement dans le futur", + "Loading database ...": "Charge la base de données...", + "Database contains %1 future records": "La base de données contient %1 valeurs futures", + "Remove %1 selected records?": "Effacer %1 valeurs choisies?", + "Error loading database": "Erreur chargement de la base de données", + "Record %1 removed ...": "Enregistrement %1 effacé ...", + "Error removing record %1": "Échec d'effacement de l'enregistrement %1", + "Deleting records ...": "Effacement d'enregistrements...", + "%1 records deleted": "%1 enregistrements effacés", + "Clean Mongo status database": "Nettoyage de la base de données Mongo", + "Delete all documents from devicestatus collection": "Effacer tous les documents de la collection devicestatus", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "Efface tous les documents de la collection devicestatus. Utile lorsque l'indicateur de chargement de la batterie du Smartphone n'est pas affichée correctement.", + "Delete all documents": "Effacer toutes les données", + "Delete all documents from devicestatus collection?": "Effacer toutes les données de la collection devicestatus ?", + "Database contains %1 records": "La base de données contient %1 enregistrements", + "All records removed ...": "Tous les enregistrements ont été effacés ...", + "Delete all documents from devicestatus collection older than 30 days": "Effacer tout les documents de l'appareil plus vieux que 30 jours", + "Number of Days to Keep:": "Nombre de jours à conserver:", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "Cette tâche efface tout les documents au sujet de l'appareil qui sont âgés de plus de 30 jours. Soyez sûr que votre batterie est à pleine charge sinon votre synchronisation ne sera pas mise a jour.", + "Delete old documents from devicestatus collection?": "Effacer les vieux résultats de votre appareil?", + "Clean Mongo entries (glucose entries) database": "Nettoyer la base de données des entrées Mongo (entrées de glycémie)", + "Delete all documents from entries collection older than 180 days": "Effacer les résultats de plus de 180 jours", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Cette action efface tous les documents de la collection qui sont vieux de plus de 180 jours. Utile lorsque l'indicateur de chargement de la batterie n'est pas affichée correctement.", + "Delete old documents": "Effacer les anciens documents", + "Delete old documents from entries collection?": "Voulez vous effacer les plus anciens résultats?", + "%1 is not a valid number": "%1 n'est pas un nombre valide", + "%1 is not a valid number - must be more than 2": "%1 n'est pas un nombre valide - doit être supérieur à 2", + "Clean Mongo treatments database": "Nettoyage de la base de données des traitements Mongo", + "Delete all documents from treatments collection older than 180 days": "Effacer les données des traitements de plus de 180 jours", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Cette action efface tous les documents de la collection des traitements qui sont vieux de plus de 180 jours. Utile lorsque l'indicateur de chargement de la batterie n'est pas affiché correctement.", + "Delete old documents from treatments collection?": "Voulez vous effacer les plus vieux résultats?", + "Admin Tools": "Outils d'administration", + "Nightscout reporting": "Rapports Nightscout", + "Cancel": "Interrompre", + "Edit treatment": "Modifier un traitement", + "Duration": "Durée", + "Duration in minutes": "Durée en minutes", + "Temp Basal": "Débit basal temporaire", + "Temp Basal Start": "Début du débit basal temporaire", + "Temp Basal End": "Fin du débit basal temporaire", + "Percent": "Pourcent", + "Basal change in %": "Changement du débit basal en %", + "Basal value": "Valeur du débit basal", + "Absolute basal value": "Débit basal absolu", + "Announcement": "Annonce", + "Loading temp basal data": "Chargement des données de débit basal", + "Save current record before changing to new?": "Sauvegarder l'événement actuel avant d'avancer au suivant ?", + "Profile Switch": "Changement de profil", + "Profile": "Profil", + "General profile settings": "Réglages principaux du profil", + "Title": "Titre", + "Database records": "Entrées de la base de données", + "Add new record": "Ajouter une nouvelle entrée", + "Remove this record": "Supprimer cette entrée", + "Clone this record to new": "Dupliquer cette entrée", + "Record valid from": "Entrée valide à partir de", + "Stored profiles": "Profils sauvegardés", + "Timezone": "Zone horaire", + "Duration of Insulin Activity (DIA)": "Durée d'action de l'insuline (DIA)", + "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.": "Représente la durée d'action typique de l'insuline. Varie individuellement et selon le type d'insuline. Typiquement 3-4 heures pour la plupart des insulines utilisées dans les pompes et la plupart des patients. Appelé également durée de vie de l'insuline.", + "Insulin to carb ratio (I:C)": "Ratio Insuline-Glucides (I:C)", + "Hours:": "Heures:", + "hours": "heures", + "g/hour": "g/heure", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "g de glucides par Unité d'insuline. Ce rapport représente la quantité de glucides compensée par une unité d'insuline.", + "Insulin Sensitivity Factor (ISF)": "Facteur de sensibilité à l'insuline (ISF)", + "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "mg/dL ou mmol/l par unité d'insuline. Il s'agit du ratio représentant la modification de la glycémie résultant de l'administration d'une unité d'insuline corrective.", + "Carbs activity / absorption rate": "Activité glucidique / vitesse d'absorption", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "grammes par unité de temps. Représente le changement de COB (glucides actifs) par unité de temps et la quantité de glucides actifs durant cette période. L'absorption des glucides est imprécise et est évaluée en moyenne. L'unité est grammes par heure (g/h).", + "Basal rates [unit/hour]": "Débit basal [unités/ heure]", + "Target BG range [mg/dL,mmol/L]": "Cible d'intervalle de glycémie", + "Start of record validity": "Début de validité des données", + "Icicle": "Mode stalactite", + "Render Basal": "Afficher le débit basal", + "Profile used": "Profil utilisé", + "Calculation is in target range.": "La valeur calculée est dans l'intervalle cible", + "Loading profile records ...": "Chargement des profils...", + "Values loaded.": "Valeurs chargées.", + "Default values used.": "Valeurs par défaut utilisées.", + "Error. Default values used.": "Erreur! Valeurs par défaut utilisées.", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "Les intervalles de temps pour la cible glycémique supérieure et inférieure diffèrent. Les valeurs par défaut sont restaurées.", + "Valid from:": "Valide à partir de:", + "Save current record before switching to new?": "Sauvegarder cette entrée avant de procéder à l'entrée suivante?", + "Add new interval before": "Ajouter un intervalle de temps avant", + "Delete interval": "Effacer l'intervalle", + "I:C": "I:C", + "ISF": "ISF (Sensibilité à l'insuline)", + "Combo Bolus": "Bolus Duo/Combo", + "Difference": "Différence", + "New time": "Nouveau temps", + "Edit Mode": "Mode Édition", + "When enabled icon to start edit mode is visible": "Lorsque cette option est activée, l'icône du Mode Édition devient visible", + "Operation": "Opération", + "Move": "Déplacer", + "Delete": "Effacer", + "Move insulin": "Déplacer l'insuline", + "Move carbs": "Déplacer les glucides", + "Remove insulin": "Effacer l'insuline", + "Remove carbs": "Effacer les glucides", + "Change treatment time to %1 ?": "Modifier l'horaire du traitement à %1 ?", + "Change carbs time to %1 ?": "Modifier l'horaire des glucides à %1 ?", + "Change insulin time to %1 ?": "Modifier l'horaire de l'insuline à %1 ?", + "Remove treatment ?": "Effacer le traitement ?", + "Remove insulin from treatment ?": "Effacer l'insuline du traitement?", + "Remove carbs from treatment ?": "Effacer les glucides du traitement?", + "Rendering": "Représentation graphique", + "Loading OpenAPS data of": "Chargement des données OpenAPS de", + "Loading profile switch data": "Chargement de données de changement de profil", + "Redirecting you to the Profile Editor to create a new profile.": "Redirection vers l'éditeur de profil pour la création d'un nouveau profil.", + "Pump": "Pompe", + "Sensor Age": "Âge du senseur (SAGE)", + "Insulin Age": "Âge de l'insuline (IAGE)", + "Temporary target": "Cible temporaire", + "Reason": "Raison", + "Eating soon": "Repas sous peu", + "Top": "Haut", + "Bottom": "Bas", + "Activity": "Activité", + "Targets": "Cibles", + "Bolus insulin:": "Bolus d'Insuline:", + "Base basal insulin:": "Débit basal de base:", + "Positive temp basal insulin:": "Débit basal temporaire positif:", + "Negative temp basal insulin:": "Débit basal temporaire négatif:", + "Total basal insulin:": "Total insuline basale:", + "Total daily insulin:": "Insuline totale journalière:", + "Unable to save Role": "Impossible d'enregistrer le role", + "Unable to delete Role": "Effacement de rôle impossible", + "Database contains %1 roles": "La base de données contient %1 rôles", + "Edit Role": "Éditer le rôle", + "admin, school, family, etc": "administrateur, école, famille, etc", + "Permissions": "Autorisations", + "Are you sure you want to delete: ": "Êtes-vous sûr de vouloir effacer: ", + "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.": "Chaque rôle aura une ou plusieurs permissions. La permission * est un joker (permission universelle), les permissions sont une hiérarchie utilisant : comme séparateur.", + "Add new Role": "Ajouter un nouveau rôle", + "Roles - Groups of People, Devices, etc": "Rôles - Groupe de Personnes ou d'appareils", + "Edit this role": "Editer ce rôle", + "Admin authorized": "Administrateur autorisé", + "Subjects - People, Devices, etc": "Utilisateurs - Personnes, Appareils, etc", + "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "Chaque utilisateur aura un identificateur unique et un ou plusieurs rôles. Cliquez sur l'identificateur pour ouvrir une nouvelle vue avec l'utilisateur sélectionné, ce lien secret peut être partagé.", + "Add new Subject": "Ajouter un nouvel Utilisateur", + "Unable to save Subject": "Impossible d'enregistrer l'Utilisateur", + "Unable to delete Subject": "Impossible d'effacer l'Utilisateur", + "Database contains %1 subjects": "La base de données contient %1 utilisateurs", + "Edit Subject": "Éditer l'Utilisateur", + "person, device, etc": "personne, appareil, etc", + "role1, role2": "rôle1, rôle2", + "Edit this subject": "Éditer cet utilisateur", + "Delete this subject": "Effacer cet utilisateur:", + "Roles": "Rôles", + "Access Token": "Identificateur unique", + "hour ago": "heure avant", + "hours ago": "heures avant", + "Silence for %1 minutes": "Silence pour %1 minutes", + "Check BG": "Vérifier la glycémie", + "BASAL": "Basale", + "Current basal": "Débit basal actuel", + "Sensitivity": "Sensibilité à l'insuline (ISF)", + "Current Carb Ratio": "Rapport Insuline-glucides actuel (I:C)", + "Basal timezone": "Fuseau horaire", + "Active profile": "Profil actif", + "Active temp basal": "Débit basal temporaire actif", + "Active temp basal start": "Début du débit basal temporaire", + "Active temp basal duration": "Durée du débit basal temporaire", + "Active temp basal remaining": "Durée restante de débit basal temporaire", + "Basal profile value": "Valeur du débit basal", + "Active combo bolus": "Bolus Duo/Combo actif", + "Active combo bolus start": "Début de Bolus Duo/Combo", + "Active combo bolus duration": "Durée du Bolus Duo/Combo", + "Active combo bolus remaining": "Activité restante du Bolus Duo/Combo", + "BG Delta": "Différence de glycémie", + "Elapsed Time": "Temps écoulé", + "Absolute Delta": "Différence absolue", + "Interpolated": "Interpolé", + "BWP": "Calculateur de bolus (BWP)", + "Urgent": "Urgent", + "Warning": "Attention", + "Info": "Information", + "Lowest": "Valeur la plus basse", + "Snoozing high alarm since there is enough IOB": "Alarme haute ignorée car suffisamment d'insuline à bord (IOB)", + "Check BG, time to bolus?": "Vérifier la glycémie, bolus nécessaire ?", + "Notice": "Notification", + "required info missing": "Information nécessaire manquante", + "Insulin on Board": "Insuline à bord (IOB)", + "Current target": "Cible actuelle", + "Expected effect": "Effect escompté", + "Expected outcome": "Résultat escompté", + "Carb Equivalent": "Equivalent glucidique", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "Insuline en excès: %1U de plus que nécessaire pour atteindre la cible inférieure, sans prendre en compte les glucides", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "Insuline en excès: %1U de plus que nécessaire pour atteindre la cible inférieure, ASSUREZ UN APPORT SUFFISANT DE GLUCIDES", + "%1U reduction needed in active insulin to reach low target, too much basal?": "%1U réduction d'insuline active nécessaire pour atteindre la cible inférieure. Débit basal trop élevé ?", + "basal adjustment out of range, give carbs?": "ajustement de débit basal hors des limites, prenez des glucides?", + "basal adjustment out of range, give bolus?": "ajustement de débit basal hors des limites, injectez un bolus?", + "above high": "plus haut que la limite supérieure", + "below low": "plus bas que la limite inférieure", + "Projected BG %1 target": "Glycémie cible projetée %1", + "aiming at": "visant", + "Bolus %1 units": "Bolus %1 unités", + "or adjust basal": "ou ajuster le débit basal", + "Check BG using glucometer before correcting!": "Vérifier la glycémie avec un glucomètre avant de corriger!", + "Basal reduction to account %1 units:": "Réduction du débit basal pour obtenir l'effet d' %1 unité", + "30m temp basal": "débit basal temporaire de 30 min", + "1h temp basal": "débit basal temporaire de 1 heure", + "Cannula change overdue!": "Dépassement de date de changement de canule!", + "Time to change cannula": "Le moment est venu de changer de canule", + "Change cannula soon": "Changement de canule bientôt", + "Cannula age %1 hours": "Age de la canule %1 heures", + "Inserted": "Insérée", + "CAGE": "Age de la canule (ie dernier changement de cathéter)", + "COB": "COB glucides actifs", + "Last Carbs": "Derniers glucides", + "IAGE": "Age de l'insuline", + "Insulin reservoir change overdue!": "Changement de réservoir d'insuline en retard!", + "Time to change insulin reservoir": "Le moment est venu de changer de réservoir d'insuline", + "Change insulin reservoir soon": "Changement de réservoir d'insuline bientôt", + "Insulin reservoir age %1 hours": "Âge du réservoir d'insuline %1 heures", + "Changed": "Changé", + "IOB": "IOB Insuline Active", + "Careportal IOB": "Insuline active du careportal", + "Last Bolus": "Dernier Bolus", + "Basal IOB": "IOB du débit basal", + "Source": "Source", + "Stale data, check rig?": "Valeurs trop anciennes, vérifier l'uploadeur", + "Last received:": "Dernière réception:", + "%1m ago": "il y a %1 min", + "%1h ago": "%1 heures plus tôt", + "%1d ago": "%1 jours plus tôt", + "RETRO": "RETRO", + "SAGE": "Age du sensor", + "Sensor change/restart overdue!": "Changement/Redémarrage du senseur dépassé!", + "Time to change/restart sensor": "C'est le moment de changer/redémarrer le senseur", + "Change/restart sensor soon": "Changement/Redémarrage du senseur bientôt", + "Sensor age %1 days %2 hours": "Âge su senseur %1 jours et %2 heures", + "Sensor Insert": "Insertion du senseur", + "Sensor Start": "Démarrage du senseur", + "days": "jours", + "Insulin distribution": "Distribution de l'insuline", + "To see this report, press SHOW while in this view": "Pour voir le rapport, cliquer sur MONTRER dans cette fenêtre", + "AR2 Forecast": "Prédiction AR2", + "OpenAPS Forecasts": "Prédictions OpenAPS", + "Temporary Target": "Cible temporaire", + "Temporary Target Cancel": "Annuler la cible temporaire", + "OpenAPS Offline": "OpenAPS déconnecté", + "Profiles": "Profils", + "Time in fluctuation": "Temps passé en fluctuation", + "Time in rapid fluctuation": "Temps passé en fluctuation rapide", + "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:": "Ceci est seulement une estimation approximative qui peut être très imprécise et ne remplace pas une mesure sanguine. La formule utilisée provient de:", + "Filter by hours": "Filtrer par heures", + "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.": "Le temps passé en fluctuation et le temps passé en fluctuation rapide mesurent la part de temps durant la période examinée, pendant laquelle la glycémie a évolué relativement ou très rapidement. Les valeurs basses sont les meilleures.", + "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.": "La Variation Totale Journalière Moyenne est la somme de toute les excursions glycémiques absolues pour une période analysée, divisée par le nombre de jours. Les valeurs basses sont les meilleures.", + "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "La Variation Horaire Moyenne est la somme de toute les excursions glycémiques absolues pour une période analysée, divisée par le nombre d'heures dans la période. Les valeures basses sont les meilleures.", + "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "RMS hors limites de RMS est calculé en mettant au carré la distance en dehors des limites pour toutes les lectures de glucose pour la période examinée, les additionnant, en divisant par le nombre et en prenant la racine carrée. Cette métrique est similaire au pourcentage dans l'intervalle mais les lectures de poids sont loin en dehors de l'intervalle. Les valeurs inférieures sont meilleures.", + "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">ici.", + "Mean Total Daily Change": "Variation Totale Journalière Moyenne", + "Mean Hourly Change": "Variation Horaire Moyenne", + "FortyFiveDown": "en chute lente", + "FortyFiveUp": "en montée lente", + "Flat": "stable", + "SingleUp": "en montée", + "SingleDown": "en chute", + "DoubleDown": "en chute rapide", + "DoubleUp": "en montée rapide", + "virtAsstUnknown": "Cette valeur est inconnue pour le moment. Veuillez consulter votre site Nightscout pour plus de détails.", + "virtAsstTitleAR2Forecast": "Prévision AR2", + "virtAsstTitleCurrentBasal": "Débit basal actuel", + "virtAsstTitleCurrentCOB": "Glucides actuels", + "virtAsstTitleCurrentIOB": "Insuline actuelle", + "virtAsstTitleLaunch": "Bienvenue dans Nightscout", + "virtAsstTitleLoopForecast": "Prévision de Loop", + "virtAsstTitleLastLoop": "Dernière boucle", + "virtAsstTitleOpenAPSForecast": "Prédictions OpenAPS", + "virtAsstTitlePumpReservoir": "Insuline restante", + "virtAsstTitlePumpBattery": "Batterie Pompe", + "virtAsstTitleRawBG": "Glycémie actuelle", + "virtAsstTitleUploaderBattery": "Batterie du téléphone", + "virtAsstTitleCurrentBG": "Glycémie actuelle", + "virtAsstTitleFullStatus": "Statut complet", + "virtAsstTitleCGMMode": "Mode CGM", + "virtAsstTitleCGMStatus": "Statut CGM", + "virtAsstTitleCGMSessionAge": "L’âge de la session du CGM", + "virtAsstTitleCGMTxStatus": "Statut du transmetteur CGM", + "virtAsstTitleCGMTxAge": "Age du transmetteur", + "virtAsstTitleCGMNoise": "Bruit CGM", + "virtAsstTitleDelta": "Delta de glycémie", + "virtAsstStatus": "%1 et %2 à partir de %3.", + "virtAsstBasal": "%1 le Basal actuel est %2 unités par heure", + "virtAsstBasalTemp": "%1 basal temporaire de %2 unités par heure se terminera %3", + "virtAsstIob": "et vous avez %1 insuline active.", + "virtAsstIobIntent": "Vous avez %1 insuline active", + "virtAsstIobUnits": "%1 unités de", + "virtAsstLaunch": "Qu'est ce que vous voulez voir sur Nightscout?", + "virtAsstPreamble": "Vous", + "virtAsstPreamble3person": "%1 a un ", + "virtAsstNoInsulin": "non", + "virtAsstUploadBattery": "Votre appareil est chargé a %1", + "virtAsstReservoir": "Vous avez %1 unités non utilisé", + "virtAsstPumpBattery": "La batterie de votre pompe est à %1 %2", + "virtAsstUploaderBattery": "La batterie de votre téléphone est à %1", + "virtAsstLastLoop": "La dernière boucle effetive a été %1", + "virtAsstLoopNotAvailable": "Le plugin Loop ne semble pas être activé", + "virtAsstLoopForecastAround": "Selon les prévisions de Loop, vous devriez être aux alentours de %1 dans les prochaines %2", + "virtAsstLoopForecastBetween": "Selon les prévisions de Loop, vous devriez être entre %1 et %2 dans les prochaines %3", + "virtAsstAR2ForecastAround": "Selon les prévisions de l'AR2, vous devriez être aux alentours de %1 dans les prochaines %2", + "virtAsstAR2ForecastBetween": "Selon les prévisions de l'AR2, vous devriez être entre %1 et %2 dans les prochaines %3", + "virtAsstForecastUnavailable": "Impossible de prévoir avec les données disponibles", + "virtAsstRawBG": "Votre glycémie brut est %1", + "virtAsstOpenAPSForecast": "La glycémie éventuelle OpenAPS est %1", + "virtAsstCob3person": "%1 a %2 glucides actifs", + "virtAsstCob": "Vous avez %1 glucides actifs", + "virtAsstCGMMode": "Le mode du CGM était %1 à partir de %2.", + "virtAsstCGMStatus": "Le statut de votre CGM était de %1 sur %2.", + "virtAsstCGMSessAge": "Votre session CGM est active depuis %1 jours et %2 heures.", + "virtAsstCGMSessNotStarted": "Il n'y a pas de session CGM active pour le moment.", + "virtAsstCGMTxStatus": "Le statut de votre transmetteur CGM était %1 de %2.", + "virtAsstCGMTxAge": "Votre transmetteur CGM a %1 jours.", + "virtAsstCGMNoise": "Le bruit de votre CGM était de %1 sur %2.", + "virtAsstCGMBattOne": "Votre batterie du CGM était de %1 volts sur %2.", + "virtAsstCGMBattTwo": "Les batteries de votre CGM étaient de %1 volts et de %2 volts sur %3.", + "virtAsstDelta": "Votre delta estimé est %1 entre %2 et %3.", + "virtAsstDeltaEstimated": "Votre delta estimé est %1 entre %2 et %3.", + "virtAsstUnknownIntentTitle": "Intentions inconnues", + "virtAsstUnknownIntentText": "« Je suis désolée, je ne sais pas ce que vous demandez. ».", + "Fat [g]": "Graisses [g]", + "Protein [g]": "Protéines [g]", + "Energy [kJ]": "Énergie [kJ]", + "Clock Views:": "Vue Horloge:", + "Clock": "L'horloge", + "Color": "Couleur", + "Simple": "Simple", + "TDD average": "Moyenne TDD (dose journalière totale)", + "Bolus average": "Bolus moyen", + "Basal average": "Basale moyenne", + "Base basal average:": "Débit de base moyen:", + "Carbs average": "Glucides moyens", + "Eating Soon": "Repas à venir bientôt", + "Last entry {0} minutes ago": "Dernière entrée : il y a {0} minutes", + "change": "modifier", + "Speech": "Voix", + "Target Top": "Cible haute", + "Target Bottom": "Cible basse", + "Canceled": "Annulé", + "Meter BG": "Glucomètre", + "predicted": "prédiction", + "future": "futur", + "ago": "plus tôt", + "Last data received": "Dernières données reçues", + "Clock View": "Vue Horloge", + "Protein": "Protéines", + "Fat": "Matières grasses", + "Protein average": "Moyenne des protéines", + "Fat average": "Moyenne des matières grasses", + "Total carbs": "Glucides totaux", + "Total protein": "Protéines totales", + "Total fat": "Matières grasses totales", + "Database Size": "Taille de la base de données", + "Database Size near its limits!": "Taille de la base de données proche de ses limites !", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "La taille de la base de données est de %1 MiB sur %2 Mio. Veuillez sauvegarder et nettoyer la base de données !", + "Database file size": "Taille de la base de données", + "%1 MiB of %2 MiB (%3%)": "%1 MiB sur %2 Mio (%3%)", + "Data size": "Taille des données", + "virtAsstDatabaseSize": "%1 MiB. Cela représente %2% de l'espace disponible dans la base de données.", + "virtAsstTitleDatabaseSize": "Taille du fichier de la base de données", + "Carbs/Food/Time": "Glucides/Alimentation/Temps", + "You have administration messages": "Vous avez des messages d'administration", + "Admin messages in queue": "Messages de l'administrateur dans la file d'attente", + "Queue empty": "File d'attente vide", + "There are no admin messages in queue": "Il n'y a pas de messages d'administration dans la file d'attente", + "Please sign in using the API_SECRET to see your administration messages": "Veuillez vous connecter à l'aide de l'API_SECRET pour voir vos messages d'administration", + "Reads enabled in default permissions": "Lectures activées dans les autorisations par défaut", + "Data reads enabled": "Lectures des données activées", + "Data writes enabled": "Écriture de données activée", + "Data writes not enabled": "Les écritures de données ne sont pas activées", + "Color prediction lines": "Lignes de prédiction de couleurs", + "Release Notes": "Notes de version", + "Check for Updates": "Rechercher des mises à jour", + "Open Source": "Open source. Libre de droit", + "Nightscout Info": "Informations Nightscout", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "Le but principal de Loopalyzer est de visualiser comment le système de boucle fermée Loop fonctionne. Il peut aussi fonctionner avec d'autres configurations, à la fois en boucle fermée et ouverte, et sans boucle. Cependant, en fonction du système que vous utilisez, de la fréquence à laquelle il est capable de capter vos données et de les télécharger, et comment il est en mesure de compléter des données manquantes, certains graphiques peuvent avoir des lacunes ou même être complètement vides. Assurez vous toujours que les graphiques ont l'air raisonnables. Le mieux est de voir un jour à la fois et de faire défiler plusieurs jours d'abord pour voir.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer comprend une fonction de décalage de temps. Si vous prenez le petit déjeuner par exemple à 07h00 un jour et à 08h00 le jour suivant, la courbe de votre glycémie moyenne de ces deux jours sera probablement aplatie et ne montrera pas la tendance réelle après le petit déjeuner. Le décalage de temps calculera le temps moyen entre la consommation de ces repas, puis déplacera toutes les données (glucides, insuline, basal, etc.) pendant les deux jours à la différence de temps correspondante de sorte que les deux repas s'alignent sur une heure moyenne de début du repas.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "Dans cet exemple, toutes les données du premier jour sont avancées de 30 minutes dans le temps et toutes les données du deuxième jour sont repoussées de 30 minutes dans le temps, de sorte qu'il apparaît comme si vous aviez pris le petit déjeuner à 07h30 les deux jours. Cela vous permet de voir votre réponse glycémique moyenne réelle à partir d'un repas.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Le décalage de temps met en évidence en gris la période après le temps moyen de démarrage des repas, pour la durée de la DIA (Durée de l'action de l'insuline). Comme tous les points de données de la journée entière sont déplacés, les courbes en dehors de la zone grise peuvent ne pas être précises.", + "Note that time shift is available only when viewing multiple days.": "Notez que le décalage de temps n'est disponible que lors de l'affichage de plusieurs jours.", + "Please select a maximum of two weeks duration and click Show again.": "Veuillez sélectionner une durée maximale de deux semaines et cliquez à nouveau sur Afficher.", + "Show profiles table": "Afficher la table des profils", + "Show predictions": "Afficher les prédictions", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Décalage horaire pour les repas contenant plus de %1 g de glucides consommés entre %2 et %3", + "Previous": "Précédent", + "Previous day": "Jour précédent", + "Next day": "Jour suivant", + "Next": "Suivant", + "Temp basal delta": "Delta de basale temporaire", + "Authorized by token": "Autorisé par le jeton", + "Auth role": "Rôle d'authentification", + "view without token": "afficher sans jeton", + "Remove stored token": "Supprimer le jeton stocké", + "Weekly Distribution": "Distribution hebdomadaire", + "Failed authentication": "Échec de l'authentification", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "Un appareil à l'adresse IP %1 a tenté de s'authentifier avec Nightscout avec des informations d'identification erronées. Vérifiez si vous avez une configuration avec une mauvaise API_SECRET ou un mauvais jeton ?", + "Default (with leading zero and U)": "Standard (avec U et zéro non significatif)", + "Concise (with U, without leading zero)": "Concis (avec U, sans zéro non significatif)", + "Minimal (without leading zero and U)": "Minimal (sans zéro et U)", + "Small Bolus Display": "Petit affichage de Bolus", + "Large Bolus Display": "Grand affichage de Bolus", + "Bolus Display Threshold": "Seuil d'affichage du bolus", + "%1 U and Over": "%1 U et plus", + "Event repeated %1 times.": "Événement répété %1 fois.", + "minutes": "minutes", + "Last recorded %1 %2 ago.": "Dernier enregistrement il y a %1 %2.", + "Security issue": "Problème de sécurité", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "API_SECRET faible détectée. Veuillez utiliser un mélange de lettres minuscules et MAJUSCULES, de chiffres et de caractères non alphanumériques tels que! #% & / Pour réduire le risque d'accès non autorisé. La longueur minimale de l'API_SECRET est de 12 caractères.", + "less than 1": "moins que 1 minute", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "Le mot de passe MongoDB et API_SECRET sont identiques. C'est une très mauvaise idée. Veuillez changer les deux et ne pas réutiliser ces mots de passe dans ce système." +} diff --git a/translations/he_IL.json b/translations/he_IL.json new file mode 100644 index 00000000000..3b42fdf6582 --- /dev/null +++ b/translations/he_IL.json @@ -0,0 +1,707 @@ +{ + "Listening on port": "מקשיב לפורט", + "Mo": "ב'", + "Tu": "ג'", + "We": "ד'", + "Th": "ה'", + "Fr": "ו'", + "Sa": "ש'", + "Su": "א'", + "Monday": "שני", + "Tuesday": "שלישי", + "Wednesday": "רביעי", + "Thursday": "חמישי", + "Friday": "שישי", + "Saturday": "שבת", + "Sunday": "ראשון", + "Category": "קטגוריה", + "Subcategory": "תת-קטגוריה", + "Name": "שם", + "Today": "היום", + "Last 2 days": "יומיים אחרונים", + "Last 3 days": "שלושה ימים אחרונים", + "Last week": "שבוע אחרון", + "Last 2 weeks": "שבועיים אחרונים", + "Last month": "חודש אחרון", + "Last 3 months": "שלושה חודשים אחרונים", + "From": "מ-", + "To": "עד", + "Notes": "הערות", + "Food": "אוכל", + "Insulin": "אינסולין", + "Carbs": "פחמימות", + "Notes contain": "ההערות מכילות", + "Target BG range bottom": "טווח מטרה סף תחתון", + "top": "למעלה", + "Show": "הצג", + "Display": "תצוגה", + "Loading": "טוען", + "Loading profile": "טוען פרופיל", + "Loading status": "טוען סטטוס", + "Loading food database": "טוען נתוני אוכל", + "not displayed": "לא מוצג", + "Loading CGM data of": "טוען נתוני חיישן סוכר של", + "Loading treatments data of": "טוען נתוני טיפולים של", + "Processing data of": "מעבד נתונים של", + "Portion": "מנה", + "Size": "גודל", + "(none)": "(ללא)", + "None": "ללא", + "": "", + "Result is empty": "אין תוצאה", + "Day to day": "יום-יום", + "Week to week": "שבוע לשבוע", + "Daily Stats": "סטטיסטיקה יומית", + "Percentile Chart": "טבלת עשירונים", + "Distribution": "התפלגות", + "Hourly stats": "סטטיסטיקה שעתית", + "netIOB stats": "netIOB סטטיסטיקת", + "temp basals must be rendered to display this report": "חובה לאפשר רמה בזלית זמנית כדי לרות דוח זה", + "No data available": "אין מידע זמין", + "Low": "נמוך", + "In Range": "בטווח", + "Period": "תקופה", + "High": "גבוה", + "Average": "ממוצע", + "Low Quartile": "רבעון תחתון", + "Upper Quartile": "רבעון עליון", + "Quartile": "רבעון", + "Date": "תאריך", + "Normal": "נורמלי", + "Median": "חציון", + "Readings": "קריאות", + "StDev": "סטיית תקן", + "Daily stats report": "דוח סטטיסטיקה יומית", + "Glucose Percentile report": "דוח אחוזון סוכר", + "Glucose distribution": "התפלגות סוכר", + "days total": "מספר ימים", + "Total per day": "מספר ימים", + "Overall": "סה\"כ", + "Range": "טווח", + "% of Readings": "אחוז קריאות", + "# of Readings": "מספר קריאות", + "Mean": "ממוצע", + "Standard Deviation": "סטיית תקן", + "Max": "מקס'", + "Min": "מינ'", + "A1c estimation*": "משוער A1c", + "Weekly Success": "הצלחה שבועית", + "There is not sufficient data to run this report. Select more days.": "לא נמצא מספיק מידע ליצירת הדוח. בחרו ימים נוספים.", + "Using stored API secret hash": "משתמש בסיסמת ממשק תכנות יישומים הסודית ", + "No API secret hash stored yet. You need to enter API secret.": "הכנס את הסיסמא הסודית של ה API", + "Database loaded": "בסיס נתונים נטען", + "Error: Database failed to load": "שגיאה: לא ניתן לטעון בסיס נתונים", + "Error": "שגיאה", + "Create new record": "צור רשומה חדשה", + "Save record": "שמור רשומה", + "Portions": "מנות", + "Unit": "יחידות", + "GI": "אינדקס גליקמי", + "Edit record": "ערוך רשומה", + "Delete record": "מחק רשומה", + "Move to the top": "עבור למעלה", + "Hidden": "מוסתר", + "Hide after use": "הסתר לאחר שימוש", + "Your API secret must be at least 12 characters long": "הסיסמא חייבת להיות באורך 12 תווים לפחות", + "Bad API secret": "סיסמא שגויה", + "API secret hash stored": "סיסמא אוכסנה", + "Status": "מצב מערכת", + "Not loaded": "לא נטען", + "Food Editor": "עורך המזון", + "Your database": "בסיס הנתונים שלך", + "Filter": "סנן", + "Save": "שמור", + "Clear": "נקה", + "Record": "רשומה", + "Quick picks": "בחירה מהירה", + "Show hidden": "הצג נתונים מוסתרים", + "Your API secret or token": "Your API secret or token", + "Remember this device. (Do not enable this on public computers.)": "זכור מכשיר זה. (אין לאפשר במחשבים ציבוריים)", + "Treatments": "טיפולים", + "Time": "זמן", + "Event Type": "סוג אירוע", + "Blood Glucose": "סוכר בדם", + "Entered By": "הוזן על-ידי", + "Delete this treatment?": "למחוק רשומה זו?", + "Carbs Given": "פחמימות שנאכלו", + "Insulin Given": "אינסולין שניתן", + "Event Time": "זמן האירוע", + "Please verify that the data entered is correct": "נא לוודא שהמידע שהוזן הוא נכון ומדוייק", + "BG": "סוכר בדם", + "Use BG correction in calculation": "השתמש ברמת סוכר בדם לצורך החישוב", + "BG from CGM (autoupdated)": "רמת סוכר מהחיישן , מעודכן אוטומטית", + "BG from meter": "רמת סוכר ממד הסוכר", + "Manual BG": "רמת סוכר ידנית", + "Quickpick": "בחירה מהירה", + "or": "או", + "Add from database": "הוסף מבסיס נתונים", + "Use carbs correction in calculation": "השתמש בתיקון פחמימות במהלך החישוב", + "Use COB correction in calculation": "השתמש בתיקון פחמימות בגוף במהלך החישוב", + "Use IOB in calculation": "השתמש בתיקון אינסולין בגוף במהלך החישוב", + "Other correction": "תיקון אחר", + "Rounding": "עיגול", + "Enter insulin correction in treatment": "הזן תיקון אינסולין בטיפול", + "Insulin needed": "אינסולין נדרש", + "Carbs needed": "פחמימות נדרשות", + "Carbs needed if Insulin total is negative value": "פחמימות דרושות אם סך אינסולין הוא שלילי", + "Basal rate": "קצב בזלי", + "60 minutes earlier": "שישים דקות מוקדם יותר", + "45 minutes earlier": "ארבעים דקות מוקדם יותר", + "30 minutes earlier": "שלושים דקות מוקדם יותר", + "20 minutes earlier": "עשרים דקות מוקדם יותר", + "15 minutes earlier": "חמש עשרה דקות מוקדם יותר", + "Time in minutes": "זמן בדקות", + "15 minutes later": "רבע שעה מאוחר יותר", + "20 minutes later": "עשרים דקות מאוחר יותר", + "30 minutes later": "חצי שעה מאוחר יותר", + "45 minutes later": "שלושת רבעי שעה מאוחר יותר", + "60 minutes later": "שעה מאוחר יותר", + "Additional Notes, Comments": "הערות נוספות", + "RETRO MODE": "מצב רטרו", + "Now": "עכשיו", + "Other": "אחר", + "Submit Form": "שמור", + "Profile Editor": "ערוך פרופיל", + "Reports": "דוחות", + "Add food from your database": "הוסף אוכל מבסיס הנתונים שלך", + "Reload database": "טען בסיס נתונים שוב", + "Add": "הוסף", + "Unauthorized": "אין אישור", + "Entering record failed": "הוספת רשומה נכשלה", + "Device authenticated": "התקן מאושר", + "Device not authenticated": "התקן לא מאושר", + "Authentication status": "סטטוס אימות", + "Authenticate": "אמת", + "Remove": "הסר", + "Your device is not authenticated yet": "ההתקן שלך עדיין לא מאושר", + "Sensor": "חיישן סוכר", + "Finger": "אצבע", + "Manual": "ידני", + "Scale": "סקלה", + "Linear": "לינארי", + "Logarithmic": "לוגריתמי", + "Logarithmic (Dynamic)": "לוגריטמי - דינמי", + "Insulin-on-Board": "אינסולין בגוף", + "Carbs-on-Board": "פחמימות בגוף", + "Bolus Wizard Preview": "סקירת אשף הבולוס", + "Value Loaded": "ערך נטען", + "Cannula Age": "גיל הקנולה", + "Basal Profile": "פרופיל רמה בזלית", + "Silence for 30 minutes": "השתק לשלושים דקות", + "Silence for 60 minutes": "השתק לששים דקות", + "Silence for 90 minutes": "השתק לתשעים דקות", + "Silence for 120 minutes": "השתק לשעתיים", + "Settings": "הגדרות", + "Units": "יחידות", + "Date format": "פורמט תאריך", + "12 hours": "שתים עשרה שעות", + "24 hours": "עשרים וארבע שעות", + "Log a Treatment": "הזן רשומה", + "BG Check": "בדיקת סוכר", + "Meal Bolus": "בולוס ארוחה", + "Snack Bolus": "בולוס ארוחת ביניים", + "Correction Bolus": "בולוס תיקון", + "Carb Correction": "בולוס פחמימות", + "Note": "הערה", + "Question": "שאלה", + "Exercise": "פעילות גופנית", + "Pump Site Change": "החלפת צינורית משאבה", + "CGM Sensor Start": "אתחול חיישן סוכר", + "CGM Sensor Stop": "הפסקת חיישן סוכר", + "CGM Sensor Insert": "החלפת חיישן סוכר", + "Sensor Code": "קוד חיישן", + "Transmitter ID": "מספר זיהוי המשדר", + "Dexcom Sensor Start": "אתחול חיישן סוכר של דקסקום", + "Dexcom Sensor Change": "החלפת חיישן סוכר של דקסקום", + "Insulin Cartridge Change": "החלפת מחסנית אינסולין", + "D.A.D. Alert": "ווף! ווף! התראת גשג", + "Glucose Reading": "מדידת סוכר", + "Measurement Method": "אמצעי מדידה", + "Meter": "מד סוכר", + "Amount in grams": "כמות בגרמים", + "Amount in units": "כמות ביחידות", + "View all treatments": "הצג את כל הטיפולים", + "Enable Alarms": "הפעל התראות", + "Pump Battery Change": "החלפת סוללת משאבה", + "Pump Battery Age": "Pump Battery Age", + "Pump Battery Low Alarm": "התראת סוללת משאבה חלשה", + "Pump Battery change overdue!": "הגיע הזמן להחליף סוללת משאבה!", + "When enabled an alarm may sound.": "כשמופעל התראות יכולות להישמע.", + "Urgent High Alarm": "התראת גבוה דחופה", + "High Alarm": "התראת גבוה", + "Low Alarm": "התראת נמוך", + "Urgent Low Alarm": "התראת נמוך דחופה", + "Stale Data: Warn": "אזהרה-נתונים ישנים", + "Stale Data: Urgent": "דחוף-נתונים ישנים", + "mins": "דקות", + "Night Mode": "מצב לילה", + "When enabled the page will be dimmed from 10pm - 6am.": "במצב זה המסך יעומעם בין השעות עשר בלילה לשש בבוקר", + "Enable": "אפשר", + "Show Raw BG Data": "הראה את רמת הסוכר ללא עיבוד", + "Never": "אף פעם", + "Always": "תמיד", + "When there is noise": "בנוכחות רעש", + "When enabled small white dots will be displayed for raw BG data": "במצב זה,רמות סוכר לפני עיבוד יוצגו כנקודות לבנות קטנות", + "Custom Title": "כותרת מותאמת אישית", + "Theme": "נושא", + "Default": "בְּרִירַת מֶחדָל", + "Colors": "צבעים", + "Colorblind-friendly colors": "צבעים ידידותיים לעוורי צבעים", + "Reset, and use defaults": "איפוס ושימוש ברירות מחדל", + "Calibrations": "כיולים", + "Alarm Test / Smartphone Enable": "אזעקה מבחן / הפעל טלפון", + "Bolus Wizard": "אשף בולוס", + "in the future": "בעתיד", + "time ago": "פעם", + "hr ago": "לפני שעה", + "hrs ago": "לפני שעות", + "min ago": "לפני דקה", + "mins ago": "לפני דקות", + "day ago": "לפני יום", + "days ago": "לפני ימים", + "long ago": "לפני הרבה זמן", + "Clean": "נקה", + "Light": "אוֹר", + "Medium": "בינוני", + "Heavy": "כבד", + "Treatment type": "סוג הטיפול", + "Raw BG": "רמת סוכר גולמית", + "Device": "התקן", + "Noise": "רַעַשׁ", + "Calibration": "כִּיוּל", + "Show Plugins": "הצג תוספים", + "About": "על אודות", + "Value in": "ערך", + "Carb Time": "זמן פחמימה", + "Language": "שפה", + "Add new": "הוסף חדש", + "g": "גרמים", + "ml": "מיליטרים", + "pcs": "יחידות", + "Drag&drop food here": "גרור ושחרר אוכל כאן", + "Care Portal": "פורטל טיפולים", + "Medium/Unknown": "בינוני/לא ידוע", + "IN THE FUTURE": "בעתיד", + "Order": "סֵדֶר", + "oldest on top": "העתיק ביותר למעלה", + "newest on top": "החדש ביותר למעלה", + "All sensor events": "כל האירועים חיישן", + "Remove future items from mongo database": "הסרת פריטים עתידיים ממסד הנתונים מונגו", + "Find and remove treatments in the future": "מצא ולהסיר טיפולים בעתיד", + "This task find and remove treatments in the future.": "משימה זו למצוא ולהסיר טיפולים בעתיד", + "Remove treatments in the future": "הסר טיפולים בעתיד", + "Find and remove entries in the future": "מצא והסר רשומות בעתיד", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "משימה זו מוצאת נתונים של סנסור סוכר ומסירה אותם בעתיד, שנוצרו על ידי העלאת נתונים עם תאריך / שעה שגויים", + "Remove entries in the future": "הסר רשומות בעתיד", + "Loading database ...": "טוען מסד נתונים ... ", + "Database contains %1 future records": " מסד הנתונים מכיל% 1 רשומות עתידיות ", + "Remove %1 selected records?": "האם להסיר% 1 רשומות שנבחרו? ", + "Error loading database": "שגיאה בטעינת מסד הנתונים ", + "Record %1 removed ...": "רשומה% 1 הוסרה ... ", + "Error removing record %1": "שגיאה בהסרת הרשומה% 1 ", + "Deleting records ...": "מוחק רשומות ... ", + "%1 records deleted": "%1 רשומות נמחקו", + "Clean Mongo status database": "נקי מסד הנתונים מצב מונגו ", + "Delete all documents from devicestatus collection": "מחק את כל המסמכים מאוסף סטטוס המכשיר ", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "הפעולה הבאה מסירה את כל התיעוד ממכשיר האיסוף, פעולה זו שימושית כאשר מצב הסוללה לא מתעדכן כראוי.", + "Delete all documents": "מחק את כל המסמכים ", + "Delete all documents from devicestatus collection?": "מחק את כל המסמכים מרשימת סטטוס ההתקנים ", + "Database contains %1 records": "מסד נתונים מכיל %1 רשומות ", + "All records removed ...": "כל הרשומות נמחקו ", + "Delete all documents from devicestatus collection older than 30 days": "Delete all documents from devicestatus collection older than 30 days", + "Number of Days to Keep:": "מספר ימים לשמירה:", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "הפעולה הבאה מסירה את כל רשומות התיעוד ממכשיר האיסוף שגילן מעל 30 יום, פעולה זו שימושית כאשר מצב הסוללה לא מתעדכן כראוי.", + "Delete old documents from devicestatus collection?": "האם למחוק את כל המסמכים מרשימת סטטוס ההתקנים?", + "Clean Mongo entries (glucose entries) database": "ניקוי מסד נתוני רשומות Mongo (רשומות סוכר)", + "Delete all documents from entries collection older than 180 days": "מחיקת כל המסמכים מאוסף הרשומות שגילם מעל 180 יום", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.", + "Delete old documents": "מחק את כל המסמכים", + "Delete old documents from entries collection?": "למחוק את כל המסמכים מאוסף הרשומות?", + "%1 is not a valid number": "זה לא מיספר %1", + "%1 is not a valid number - must be more than 2": "%1 אינו מספר חוקי - עליו להיות גדול מ-2", + "Clean Mongo treatments database": "נקה את כל הטיפולים ממסד הנתונים מונגו", + "Delete all documents from treatments collection older than 180 days": "מחיקת כל המסמכים מאוסף הרשומות שגילם מעל 180 יום", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.", + "Delete old documents from treatments collection?": "Delete old documents from treatments collection?", + "Admin Tools": "כלי אדמיניסטרציה ", + "Nightscout reporting": "דוחות נייססקאוט", + "Cancel": "בטל ", + "Edit treatment": "ערוך טיפול ", + "Duration": "משך ", + "Duration in minutes": "משך בדקות ", + "Temp Basal": "רמה בזלית זמנית", + "Temp Basal Start": "התחלת רמה בזלית זמנית ", + "Temp Basal End": "סיום רמה בזלית זמנית", + "Percent": "אחוז ", + "Basal change in %": "שינוי קצב בזלי באחוזים ", + "Basal value": "ערך בזלי", + "Absolute basal value": "ערך בזלי מוחלט ", + "Announcement": "הודעה", + "Loading temp basal data": "טוען ערך בזלי זמני ", + "Save current record before changing to new?": "שמור רשומה נוכחית לפני שעוברים לרשומה חדשה? ", + "Profile Switch": "החלף פרופיל ", + "Profile": "פרופיל ", + "General profile settings": "הגדרות פרופיל כלליות", + "Title": "כותרת ", + "Database records": "רשומות ", + "Add new record": "הוסף רשומה חדשה ", + "Remove this record": "מחק רשומה זו ", + "Clone this record to new": "שכפל רשומה זו לרשומה חדשה ", + "Record valid from": "רשומה תקפה מ ", + "Stored profiles": "פרופילים מאוכסנים ", + "Timezone": "אזור זמן ", + "Duration of Insulin Activity (DIA)": "משך פעילות האינסולין ", + "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.": "מייצג את משך הטיפוסי שבו האינסולין נכנס לתוקף. משתנה לכל חולה וסוג האינסולין. בדרך כלל 3-4 שעות עבור רוב אינסולין שאיבה רוב המטופלים. לפעמים נקרא גם אורך חיי אינסולין. ", + "Insulin to carb ratio (I:C)": "יחס אינסולין פחמימות ", + "Hours:": "שעות:", + "hours": "שעות ", + "g/hour": "גרם לשעה ", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "היחס בין כמה גרם של פחמימות מקוזז על ידי כל יחידת אינסולין ", + "Insulin Sensitivity Factor (ISF)": "גורם רגישות לאינסולין ", + "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "כמה סוכר בדם משתנה עם כל יחידת אינסולין ", + "Carbs activity / absorption rate": "פעילות פחמימות / קצב קליטה ", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "גרם ליחידת זמן. מייצג הן את השינוי בפחמימות ליחידת זמן והן את כמות הפחמימות אשר אמורות להיכנס לתוקף במהלך אותה תקופה. ספיגת הפחמימות / פעילות הם פחות מובן מאשר פעילות האינסולין, אך ניתן להתקרב באמצעות עיכוב ראשוני ואחריו שיעור קבוע של קליטה (g / hr) ", + "Basal rates [unit/hour]": "קצב בסיסי (יחידה לשעה) ", + "Target BG range [mg/dL,mmol/L]": "יעד טווח גלוקוז בדם ", + "Start of record validity": "תחילת תוקף הרשומה ", + "Icicle": "קרחון ", + "Render Basal": "הראה רמה בזלית ", + "Profile used": "פרופיל בשימוש ", + "Calculation is in target range.": "חישוב הוא בטווח היעד ", + "Loading profile records ...": "טוען רשומות פרופיל ", + "Values loaded.": "ערכים נטענו ", + "Default values used.": "משתמשים בערכי בררת המחדל ", + "Error. Default values used.": "משתמשים בערכי בררת המחדל שגיאה - ", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "טווחי יעד נמוכים ויעדים גבוהים אינם תואמים. הערכים משוחזרים לברירות המחדל ", + "Valid from:": "בתוקף מ: ", + "Save current record before switching to new?": "שמור את הרשומה הנוכחית לפני המעבר ל חדש? ", + "Add new interval before": "הוסף מרווח חדש לפני ", + "Delete interval": "בטל מרווח ", + "I:C": "יחס אינסולין לפחמימות ", + "ISF": "ISF ", + "Combo Bolus": "בולוס קומבו ", + "Difference": "הבדל ", + "New time": "זמן חדש ", + "Edit Mode": "מצב עריכה ", + "When enabled icon to start edit mode is visible": "כאשר הסמל מופעל כדי להתחיל במצב עריכה גלוי ", + "Operation": "פעולה ", + "Move": "הזז ", + "Delete": "בטל ", + "Move insulin": "הזז אינסולין ", + "Move carbs": "הזז פחמימות ", + "Remove insulin": "בטל אינסולין ", + "Remove carbs": "בטל פחמימות ", + "Change treatment time to %1 ?": "שנה זמן לטיפול ל %1 ", + "Change carbs time to %1 ?": "שנה זמן פחמימות ל %1 ", + "Change insulin time to %1 ?": "שנה זמן אינסולין ל %1 ", + "Remove treatment ?": "בטל טיפול ", + "Remove insulin from treatment ?": "הסר אינסולין מהטיפול? ", + "Remove carbs from treatment ?": "הסר פחמימות מהטיפול? ", + "Rendering": "מציג... ", + "Loading OpenAPS data of": "טוען מידע מ ", + "Loading profile switch data": "טוען מידע החלפת פרופיל ", + "Redirecting you to the Profile Editor to create a new profile.": "הגדרת פרופיל שגוי. \n פרופיל מוגדר לזמן המוצג. מפנה מחדש לעורך פרופיל כדי ליצור פרופיל חדש. ", + "Pump": "משאבה ", + "Sensor Age": "גיל סנסור סוכר ", + "Insulin Age": "גיל אינסולין ", + "Temporary target": "מטרה זמנית ", + "Reason": "סיבה ", + "Eating soon": "אוכל בקרוב", + "Top": "למעלה ", + "Bottom": "למטה ", + "Activity": "פעילות ", + "Targets": "מטרות ", + "Bolus insulin:": "אינסולין בולוס ", + "Base basal insulin:": "אינסולין בזלי בסיס ", + "Positive temp basal insulin:": "אינסולין בזלי זמני חיובי ", + "Negative temp basal insulin:": "אינסולין בזלי זמני שלילי ", + "Total basal insulin:": "סך אינסולין בזלי ", + "Total daily insulin:": "סך אינסולין ביום ", + "Unable to save Role": "Unable to save Role", + "Unable to delete Role": "לא יכול לבטל תפקיד ", + "Database contains %1 roles": "בסיס הנתונים מכיל %1 תפקידים ", + "Edit Role": "ערוך תפקיד ", + "admin, school, family, etc": "מנהל, בית ספר, משפחה, וכו ", + "Permissions": "הרשאות ", + "Are you sure you want to delete: ": "אתה בטוח שאתה רוצה למחוק", + "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.": "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.", + "Add new Role": "הוסף תפקיד חדש ", + "Roles - Groups of People, Devices, etc": "תפקידים - קבוצות של אנשים, התקנים, וכו ", + "Edit this role": "ערוך תפקיד זה ", + "Admin authorized": "מנהל אושר ", + "Subjects - People, Devices, etc": "נושאים - אנשים, התקנים וכו ", + "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "לכל נושא תהיה אסימון גישה ייחודי ותפקיד אחד או יותר. לחץ על אסימון הגישה כדי לפתוח תצוגה חדשה עם הנושא הנבחר, קישור סודי זה יכול להיות משותף ", + "Add new Subject": "הוסף נושא חדש ", + "Unable to save Subject": "Unable to save Subject", + "Unable to delete Subject": "לא יכול לבטל נושא ", + "Database contains %1 subjects": "מסד נתונים מכיל %1 נושאים ", + "Edit Subject": "ערוך נושא ", + "person, device, etc": "אדם, מכשיר, וכו ", + "role1, role2": "תפקיד1, תפקיד2 ", + "Edit this subject": "ערוך נושא זה ", + "Delete this subject": "בטל נושא זה ", + "Roles": "תפקידים ", + "Access Token": "אסימון גישה ", + "hour ago": "לפני שעה ", + "hours ago": "לפני שעות ", + "Silence for %1 minutes": "שקט ל %1 דקות ", + "Check BG": "בדוק סוכר בדם ", + "BASAL": "רמה בזלית ", + "Current basal": "רמה בזלית נוכחית ", + "Sensitivity": "רגישות ", + "Current Carb Ratio": "וחס פחמימות לאינסולין נוכחי ", + "Basal timezone": "איזור זמן לרמה הבזלית ", + "Active profile": "פרופיל פעיל ", + "Active temp basal": "רמה בזלית זמנית פעילה ", + "Active temp basal start": "התחלה רמה בזלית זמנית ", + "Active temp basal duration": "משך רמה בזלית זמנית ", + "Active temp basal remaining": "זמן שנשאר ברמה בזלית זמנית ", + "Basal profile value": "רמה בזלית מפרופיל ", + "Active combo bolus": "בולוס קומבו פעיל ", + "Active combo bolus start": "התחלת בולוס קומבו פעיל ", + "Active combo bolus duration": "משך בולוס קומבו פעיל ", + "Active combo bolus remaining": "זמן שנשאר בבולוס קומבו פעיל ", + "BG Delta": "הפרש רמת סוכר ", + "Elapsed Time": "זמן שעבר ", + "Absolute Delta": "הפרש רמת סוכר אבסולוטית ", + "Interpolated": "אינטרפולציה ", + "BWP": "BWP", + "Urgent": "דחוף ", + "Warning": "אזהרה ", + "Info": "לידיעה ", + "Lowest": "הנמוך ביותר ", + "Snoozing high alarm since there is enough IOB": "נודניק את ההתראה הגבוהה מפני שיש מספיק אינסולין פעיל בגוף", + "Check BG, time to bolus?": "בדוק רמת סוכר. צריך להוסיף אינסולין? ", + "Notice": "הודעה ", + "required info missing": "חסרה אינפורמציה ", + "Insulin on Board": "אינסולין פעיל בגוף ", + "Current target": "מטרה נוכחית ", + "Expected effect": "אפקט צפוי ", + "Expected outcome": "תוצאת צפויה ", + "Carb Equivalent": "מקבילה בפחמימות ", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "עודף אינסולין שווה ערך ליחידה אחת%1 יותר מאשר הצורך להגיע ליעד נמוך, לא לוקח בחשבון פחמימות ", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "עודף אינסולין %1 נדרש כדי להגיע למטרה התחתונה. שים לב כי עליך לכסות אינסולין בגוף על ידי פחמימות ", + "%1U reduction needed in active insulin to reach low target, too much basal?": "צריך %1 פחות אינסולין כדי להגיע לגבול התחתון. האם הרמה הבזלית גבוהה מדי? ", + "basal adjustment out of range, give carbs?": "השינוי ברמה הבזלית גדול מדי. תן פחמימות? ", + "basal adjustment out of range, give bolus?": "השינוי ברמה הבזלית גדול מדי. תן אינסולין? ", + "above high": "מעל גבוה ", + "below low": "מתחת נמוך ", + "Projected BG %1 target": "תחזית רמת סןכר %1 ", + "aiming at": "מטרה ", + "Bolus %1 units": "בולוס %1 יחידות ", + "or adjust basal": "או שנה רמה בזלית ", + "Check BG using glucometer before correcting!": "מדוד רמת סוכר בדם באמצעות מד סוכר לפני תיקון ", + "Basal reduction to account %1 units:": "משנה רמה בזלית בשביל %1 יחידות ", + "30m temp basal": "שלושים דקות רמה בזלית זמנית ", + "1h temp basal": "שעה רמה בזלית זמנית ", + "Cannula change overdue!": "יש צורך בהחלפת קנולה! ", + "Time to change cannula": "הגיע הזמן להחליף קנולה ", + "Change cannula soon": "החלף קנולה בקרוב ", + "Cannula age %1 hours": "כיל הקנולה %1 שעות ", + "Inserted": "הוכנס ", + "CAGE": "גיל הקנולה ", + "COB": "COB ", + "Last Carbs": "פחמימות אחרונות ", + "IAGE": "גיל אינסולין ", + "Insulin reservoir change overdue!": "החלף מאגר אינסולין! ", + "Time to change insulin reservoir": "הגיע הזמן להחליף מאגר אינסולין ", + "Change insulin reservoir soon": "החלף מאגר אינסולין בקרוב ", + "Insulin reservoir age %1 hours": "גיל מאגר אינסולין %1 שעות ", + "Changed": "הוחלף ", + "IOB": "IOB ", + "Careportal IOB": "Careportal IOB ", + "Last Bolus": "בולוס אחרון ", + "Basal IOB": "IOB בזלי ", + "Source": "מקור ", + "Stale data, check rig?": "מידע ישן, בדוק את המערכת? ", + "Last received:": "התקבל לאחרונה: ", + "%1m ago": "לפני %1 דקות ", + "%1h ago": "לפני %1 שעות ", + "%1d ago": "לפני %1 ימים ", + "RETRO": "רטרו ", + "SAGE": "גיל הסנסור ", + "Sensor change/restart overdue!": "שנה או אתחל את הסנסור! ", + "Time to change/restart sensor": "הגיע הזמן לשנות או לאתחל את הסנסור ", + "Change/restart sensor soon": "שנה או אתחל את הסנסור בקרוב ", + "Sensor age %1 days %2 hours": "גיל הסנסור %1 ימים %2 שעות ", + "Sensor Insert": "הכנס סנסור ", + "Sensor Start": "סנסור התחיל ", + "days": "ימים ", + "Insulin distribution": "התפלגות אינסולין ", + "To see this report, press SHOW while in this view": "כדי להציג דוח זה, לחץ על\"הראה\" בתצוגה זו ", + "AR2 Forecast": "AR2 תחזית ", + "OpenAPS Forecasts": "תחזית OPENAPS ", + "Temporary Target": "מטרה זמנית ", + "Temporary Target Cancel": "בטל מטרה זמנית ", + "OpenAPS Offline": "OPENAPS לא פעיל ", + "Profiles": "פרופילים ", + "Time in fluctuation": "זמן בתנודות ", + "Time in rapid fluctuation": "זמן בתנודות מהירות ", + "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:": "זוהי רק הערכה גסה שיכולה להיות מאוד לא מדויקת ואינה מחליפה את בדיקת הדם בפועל. הנוסחה המשמשת נלקחת מ: ", + "Filter by hours": "סנן לפי שעות", + "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.": "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.", + "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.": "ממוצע השינוי היומי מחושב כך:\nהסכום של הערך המוחלט של ערכי הסוכר (גלוקוז) מחוץ לטווח עבור התקופה המבוקשת, חלקי מספר הימים בתקופה המבוקשת.\nתוצאה נמוכה יותר היא טובה יותר.", + "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "ממוצע השינוי השעתי מחושב כך:\nהסכום של הערך המוחלט של ערכי הסוכר (גלוקוז) מחוץ לטווח עבור התקופה המבוקשת, חלקי מספר השעות בתקופה המבוקשת.\nתוצאה נמוכה יותר היא טובה יותר.", + "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.", + "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">here.", + "Mean Total Daily Change": "שינוי יומי ממוצע ", + "Mean Hourly Change": "שינוי ממוצע לשעה ", + "FortyFiveDown": "slightly dropping", + "FortyFiveUp": "slightly rising", + "Flat": "holding", + "SingleUp": "עולה", + "SingleDown": "נופל", + "DoubleDown": "נופל במהירות", + "DoubleUp": "עולה במהירות", + "virtAsstUnknown": "הערך המבוקש אינו ידוע כרגע. בקרו באתר ה\"Nighscout\" שלכם למידע נוסף.", + "virtAsstTitleAR2Forecast": "תחזית AR2", + "virtAsstTitleCurrentBasal": "ערך באזלי נוכחי", + "virtAsstTitleCurrentCOB": "פחמ' פעילות כעת", + "virtAsstTitleCurrentIOB": "אינסולין פעיל כעת", + "virtAsstTitleLaunch": "ברוכים הבאים ל-Nightscout", + "virtAsstTitleLoopForecast": "Loop Forecast", + "virtAsstTitleLastLoop": "Last Loop", + "virtAsstTitleOpenAPSForecast": "תחזית OpenAPS", + "virtAsstTitlePumpReservoir": "אינסולין נותר", + "virtAsstTitlePumpBattery": "סוללת משאבה", + "virtAsstTitleRawBG": "רמת סוכר גולמית", + "virtAsstTitleUploaderBattery": "רמת סוללה במשדר", + "virtAsstTitleCurrentBG": "רמת סוכר נוכחית", + "virtAsstTitleFullStatus": "סטאטוס מלא", + "virtAsstTitleCGMMode": "CGM Mode", + "virtAsstTitleCGMStatus": "מצב חיישן", + "virtAsstTitleCGMSessionAge": "CGM Session Age", + "virtAsstTitleCGMTxStatus": "CGM Transmitter Status", + "virtAsstTitleCGMTxAge": "CGM Transmitter Age", + "virtAsstTitleCGMNoise": "רעש נתוני חיישן", + "virtAsstTitleDelta": "שינוי ברמת הסוכר", + "virtAsstStatus": "%1 ו-%2 החל מ-%3.", + "virtAsstBasal": "%1 מינון בזאלי נוכחי הוא %2 יח' לשעה", + "virtAsstBasalTemp": "%1 בזאלי זמני במינון %2 יח' לשעה יסתיים ב-%3", + "virtAsstIob": "and you have %1 insulin on board.", + "virtAsstIobIntent": "יש %1 יח' אינסולין פעיל", + "virtAsstIobUnits": "%1 יח' של", + "virtAsstLaunch": "מה תרצו לבדוק ב-Nightscout?", + "virtAsstPreamble": "שלך", + "virtAsstPreamble3person": "%1 has a ", + "virtAsstNoInsulin": "לא", + "virtAsstUploadBattery": "Your uploader battery is at %1", + "virtAsstReservoir": "You have %1 units remaining", + "virtAsstPumpBattery": "רמת סוללת המשאבה %1 %2", + "virtAsstUploaderBattery": "Your uploader battery is at %1", + "virtAsstLastLoop": "The last successful loop was %1", + "virtAsstLoopNotAvailable": "Loop plugin does not seem to be enabled", + "virtAsstLoopForecastAround": "According to the loop forecast you are expected to be around %1 over the next %2", + "virtAsstLoopForecastBetween": "According to the loop forecast you are expected to be between %1 and %2 over the next %3", + "virtAsstAR2ForecastAround": "According to the AR2 forecast you are expected to be around %1 over the next %2", + "virtAsstAR2ForecastBetween": "According to the AR2 forecast you are expected to be between %1 and %2 over the next %3", + "virtAsstForecastUnavailable": "Unable to forecast with the data that is available", + "virtAsstRawBG": "Your raw bg is %1", + "virtAsstOpenAPSForecast": "The OpenAPS Eventual BG is %1", + "virtAsstCob3person": "%1 has %2 carbohydrates on board", + "virtAsstCob": "You have %1 carbohydrates on board", + "virtAsstCGMMode": "Your CGM mode was %1 as of %2.", + "virtAsstCGMStatus": "Your CGM status was %1 as of %2.", + "virtAsstCGMSessAge": "Your CGM session has been active for %1 days and %2 hours.", + "virtAsstCGMSessNotStarted": "There is no active CGM session at the moment.", + "virtAsstCGMTxStatus": "Your CGM transmitter status was %1 as of %2.", + "virtAsstCGMTxAge": "Your CGM transmitter is %1 days old.", + "virtAsstCGMNoise": "Your CGM noise was %1 as of %2.", + "virtAsstCGMBattOne": "Your CGM battery was %1 volts as of %2.", + "virtAsstCGMBattTwo": "Your CGM battery levels were %1 volts and %2 volts as of %3.", + "virtAsstDelta": "Your delta was %1 between %2 and %3.", + "virtAsstDeltaEstimated": "Your estimated delta was %1 between %2 and %3.", + "virtAsstUnknownIntentTitle": "כוונה לא ידועה", + "virtAsstUnknownIntentText": "סליחה, אינני יודע מה אתה שואל.", + "Fat [g]": "[g] שמן", + "Protein [g]": "[g] חלבון", + "Energy [kJ]": "[kJ] אנרגיה", + "Clock Views:": "צגים השעון", + "Clock": "שעון", + "Color": "צבע", + "Simple": "פשוט", + "TDD average": "ממוצע מינון יומי כולל", + "Bolus average": "ממוצע בולוס", + "Basal average": "ממוצע בזאלי", + "Base basal average:": "ממוצע בזאלי בסיסי:", + "Carbs average": "פחמימות ממוצע", + "Eating Soon": "אוכל בקרוב", + "Last entry {0} minutes ago": "Last entry {0} minutes ago", + "change": "שינוי", + "Speech": "דיבור", + "Target Top": "ראש היעד", + "Target Bottom": "תחתית היעד", + "Canceled": "מבוטל", + "Meter BG": "סוכר הדם של מד", + "predicted": "חזה", + "future": "עתיד", + "ago": "לפני", + "Last data received": "הנתונים המקבל אחרונים", + "Clock View": "צג השעון", + "Protein": "חלבון", + "Fat": "שמן", + "Protein average": "חלבון ממוצע", + "Fat average": "שמן ממוצע", + "Total carbs": "כל פחמימות", + "Total protein": "כל חלבונים", + "Total fat": "כל שומנים", + "Database Size": "גודל מסד הנתונים", + "Database Size near its limits!": "Database Size near its limits!", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!", + "Database file size": "Database file size", + "%1 MiB of %2 MiB (%3%)": "%1 MiB מתוך %2 MiB (%3%)", + "Data size": "גודל נתונים", + "virtAsstDatabaseSize": "%1 MiB. That is %2% of available database space.", + "virtAsstTitleDatabaseSize": "גודל קובץ מסד נתונים", + "Carbs/Food/Time": "פחמ'\\אוכל\\זמן", + "You have administration messages": "You have administration messages", + "Admin messages in queue": "Admin messages in queue", + "Queue empty": "Queue empty", + "There are no admin messages in queue": "There are no admin messages in queue", + "Please sign in using the API_SECRET to see your administration messages": "Please sign in using the API_SECRET to see your administration messages", + "Reads enabled in default permissions": "קריאת נתונים מופעלת תחת הרשאות ברירת מחדל", + "Data reads enabled": "קריאת נתונים מופעלת", + "Data writes enabled": "רישום נתונים מופעל", + "Data writes not enabled": "רישום נתונים מופסק", + "Color prediction lines": "Color prediction lines", + "Release Notes": "Release Notes", + "Check for Updates": "Check for Updates", + "Open Source": "קוד פתוח", + "Nightscout Info": "מידע על Nightscout", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.", + "Note that time shift is available only when viewing multiple days.": "Note that time shift is available only when viewing multiple days.", + "Please select a maximum of two weeks duration and click Show again.": "Please select a maximum of two weeks duration and click Show again.", + "Show profiles table": "Show profiles table", + "Show predictions": "Show predictions", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Timeshift on meals larger than %1 g carbs consumed between %2 and %3", + "Previous": "Previous", + "Previous day": "Previous day", + "Next day": "Next day", + "Next": "Next", + "Temp basal delta": "Temp basal delta", + "Authorized by token": "Authorized by token", + "Auth role": "Auth role", + "view without token": "view without token", + "Remove stored token": "Remove stored token", + "Weekly Distribution": "Weekly Distribution", + "Failed authentication": "Failed authentication", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?", + "Default (with leading zero and U)": "ברירת מחדל (עם אפסים מקדימים ו U)", + "Concise (with U, without leading zero)": "Concise (with U, without leading zero)", + "Minimal (without leading zero and U)": "מינימלי (עם אפסים מקדימים ו U)", + "Small Bolus Display": "תצוגת בולוסים קטנים", + "Large Bolus Display": "תצודת בולוסים גדולים", + "Bolus Display Threshold": "בולוס מינימלי להצגה", + "%1 U and Over": "1% U ויותר", + "Event repeated %1 times.": "Event repeated %1 times.", + "minutes": "minutes", + "Last recorded %1 %2 ago.": "Last recorded %1 %2 ago.", + "Security issue": "Security issue", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.", + "less than 1": "less than 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system." +} diff --git a/translations/hi_IN.json b/translations/hi_IN.json new file mode 100644 index 00000000000..37e1d47e97d --- /dev/null +++ b/translations/hi_IN.json @@ -0,0 +1,707 @@ +{ + "Listening on port": "Listening on port", + "Mo": "Mo", + "Tu": "Tu", + "We": "We", + "Th": "Th", + "Fr": "Fr", + "Sa": "Sa", + "Su": "Su", + "Monday": "Monday", + "Tuesday": "Tuesday", + "Wednesday": "Wednesday", + "Thursday": "Thursday", + "Friday": "Friday", + "Saturday": "Saturday", + "Sunday": "Sunday", + "Category": "Category", + "Subcategory": "Subcategory", + "Name": "Name", + "Today": "Today", + "Last 2 days": "Last 2 days", + "Last 3 days": "Last 3 days", + "Last week": "Last week", + "Last 2 weeks": "Last 2 weeks", + "Last month": "Last month", + "Last 3 months": "Last 3 months", + "From": "From", + "To": "To", + "Notes": "Notes", + "Food": "Food", + "Insulin": "Insulin", + "Carbs": "Carbs", + "Notes contain": "Notes contain", + "Target BG range bottom": "Target BG range bottom", + "top": "top", + "Show": "Show", + "Display": "Display", + "Loading": "Loading", + "Loading profile": "Loading profile", + "Loading status": "Loading status", + "Loading food database": "Loading food database", + "not displayed": "not displayed", + "Loading CGM data of": "Loading CGM data of", + "Loading treatments data of": "Loading treatments data of", + "Processing data of": "Processing data of", + "Portion": "Portion", + "Size": "Size", + "(none)": "(none)", + "None": "None", + "": "", + "Result is empty": "Result is empty", + "Day to day": "Day to day", + "Week to week": "Week to week", + "Daily Stats": "Daily Stats", + "Percentile Chart": "Percentile Chart", + "Distribution": "Distribution", + "Hourly stats": "Hourly stats", + "netIOB stats": "netIOB stats", + "temp basals must be rendered to display this report": "temp basals must be rendered to display this report", + "No data available": "No data available", + "Low": "Low", + "In Range": "In Range", + "Period": "Period", + "High": "High", + "Average": "Average", + "Low Quartile": "Low Quartile", + "Upper Quartile": "Upper Quartile", + "Quartile": "Quartile", + "Date": "Date", + "Normal": "Normal", + "Median": "Median", + "Readings": "Readings", + "StDev": "StDev", + "Daily stats report": "Daily stats report", + "Glucose Percentile report": "Glucose Percentile report", + "Glucose distribution": "Glucose distribution", + "days total": "days total", + "Total per day": "Total per day", + "Overall": "Overall", + "Range": "Range", + "% of Readings": "% of Readings", + "# of Readings": "# of Readings", + "Mean": "Mean", + "Standard Deviation": "Standard Deviation", + "Max": "Max", + "Min": "Min", + "A1c estimation*": "A1c estimation*", + "Weekly Success": "Weekly Success", + "There is not sufficient data to run this report. Select more days.": "There is not sufficient data to run this report. Select more days.", + "Using stored API secret hash": "Using stored API secret hash", + "No API secret hash stored yet. You need to enter API secret.": "No API secret hash stored yet. You need to enter API secret.", + "Database loaded": "Database loaded", + "Error: Database failed to load": "Error: Database failed to load", + "Error": "Error", + "Create new record": "Create new record", + "Save record": "Save record", + "Portions": "Portions", + "Unit": "Unit", + "GI": "GI", + "Edit record": "Edit record", + "Delete record": "Delete record", + "Move to the top": "Move to the top", + "Hidden": "Hidden", + "Hide after use": "Hide after use", + "Your API secret must be at least 12 characters long": "Your API secret must be at least 12 characters long", + "Bad API secret": "Bad API secret", + "API secret hash stored": "API secret hash stored", + "Status": "Status", + "Not loaded": "Not loaded", + "Food Editor": "Food Editor", + "Your database": "Your database", + "Filter": "Filter", + "Save": "Save", + "Clear": "Clear", + "Record": "Record", + "Quick picks": "Quick picks", + "Show hidden": "Show hidden", + "Your API secret or token": "Your API secret or token", + "Remember this device. (Do not enable this on public computers.)": "Remember this device. (Do not enable this on public computers.)", + "Treatments": "Treatments", + "Time": "Time", + "Event Type": "Event Type", + "Blood Glucose": "Blood Glucose", + "Entered By": "Entered By", + "Delete this treatment?": "Delete this treatment?", + "Carbs Given": "Carbs Given", + "Insulin Given": "Insulin Given", + "Event Time": "Event Time", + "Please verify that the data entered is correct": "Please verify that the data entered is correct", + "BG": "BG", + "Use BG correction in calculation": "Use BG correction in calculation", + "BG from CGM (autoupdated)": "BG from CGM (autoupdated)", + "BG from meter": "BG from meter", + "Manual BG": "Manual BG", + "Quickpick": "Quickpick", + "or": "or", + "Add from database": "Add from database", + "Use carbs correction in calculation": "Use carbs correction in calculation", + "Use COB correction in calculation": "Use COB correction in calculation", + "Use IOB in calculation": "Use IOB in calculation", + "Other correction": "Other correction", + "Rounding": "Rounding", + "Enter insulin correction in treatment": "Enter insulin correction in treatment", + "Insulin needed": "Insulin needed", + "Carbs needed": "Carbs needed", + "Carbs needed if Insulin total is negative value": "Carbs needed if Insulin total is negative value", + "Basal rate": "Basal rate", + "60 minutes earlier": "60 minutes earlier", + "45 minutes earlier": "45 minutes earlier", + "30 minutes earlier": "30 minutes earlier", + "20 minutes earlier": "20 minutes earlier", + "15 minutes earlier": "15 minutes earlier", + "Time in minutes": "Time in minutes", + "15 minutes later": "15 minutes later", + "20 minutes later": "20 minutes later", + "30 minutes later": "30 minutes later", + "45 minutes later": "45 minutes later", + "60 minutes later": "60 minutes later", + "Additional Notes, Comments": "Additional Notes, Comments", + "RETRO MODE": "RETRO MODE", + "Now": "Now", + "Other": "Other", + "Submit Form": "Submit Form", + "Profile Editor": "Profile Editor", + "Reports": "Reports", + "Add food from your database": "Add food from your database", + "Reload database": "Reload database", + "Add": "Add", + "Unauthorized": "Unauthorized", + "Entering record failed": "Entering record failed", + "Device authenticated": "Device authenticated", + "Device not authenticated": "Device not authenticated", + "Authentication status": "Authentication status", + "Authenticate": "Authenticate", + "Remove": "Remove", + "Your device is not authenticated yet": "Your device is not authenticated yet", + "Sensor": "Sensor", + "Finger": "Finger", + "Manual": "Manual", + "Scale": "Scale", + "Linear": "Linear", + "Logarithmic": "Logarithmic", + "Logarithmic (Dynamic)": "Logarithmic (Dynamic)", + "Insulin-on-Board": "Insulin-on-Board", + "Carbs-on-Board": "Carbs-on-Board", + "Bolus Wizard Preview": "Bolus Wizard Preview", + "Value Loaded": "Value Loaded", + "Cannula Age": "Cannula Age", + "Basal Profile": "Basal Profile", + "Silence for 30 minutes": "Silence for 30 minutes", + "Silence for 60 minutes": "Silence for 60 minutes", + "Silence for 90 minutes": "Silence for 90 minutes", + "Silence for 120 minutes": "Silence for 120 minutes", + "Settings": "Settings", + "Units": "Units", + "Date format": "Date format", + "12 hours": "12 hours", + "24 hours": "24 hours", + "Log a Treatment": "Log a Treatment", + "BG Check": "BG Check", + "Meal Bolus": "Meal Bolus", + "Snack Bolus": "Snack Bolus", + "Correction Bolus": "Correction Bolus", + "Carb Correction": "Carb Correction", + "Note": "Note", + "Question": "Question", + "Exercise": "Exercise", + "Pump Site Change": "Pump Site Change", + "CGM Sensor Start": "CGM Sensor Start", + "CGM Sensor Stop": "CGM Sensor Stop", + "CGM Sensor Insert": "CGM Sensor Insert", + "Sensor Code": "Sensor Code", + "Transmitter ID": "Transmitter ID", + "Dexcom Sensor Start": "Dexcom Sensor Start", + "Dexcom Sensor Change": "Dexcom Sensor Change", + "Insulin Cartridge Change": "Insulin Cartridge Change", + "D.A.D. Alert": "D.A.D. Alert", + "Glucose Reading": "Glucose Reading", + "Measurement Method": "Measurement Method", + "Meter": "Meter", + "Amount in grams": "Amount in grams", + "Amount in units": "Amount in units", + "View all treatments": "View all treatments", + "Enable Alarms": "Enable Alarms", + "Pump Battery Change": "Pump Battery Change", + "Pump Battery Age": "Pump Battery Age", + "Pump Battery Low Alarm": "Pump Battery Low Alarm", + "Pump Battery change overdue!": "Pump Battery change overdue!", + "When enabled an alarm may sound.": "When enabled an alarm may sound.", + "Urgent High Alarm": "Urgent High Alarm", + "High Alarm": "High Alarm", + "Low Alarm": "Low Alarm", + "Urgent Low Alarm": "Urgent Low Alarm", + "Stale Data: Warn": "Stale Data: Warn", + "Stale Data: Urgent": "Stale Data: Urgent", + "mins": "mins", + "Night Mode": "Night Mode", + "When enabled the page will be dimmed from 10pm - 6am.": "When enabled the page will be dimmed from 10pm - 6am.", + "Enable": "Enable", + "Show Raw BG Data": "Show Raw BG Data", + "Never": "Never", + "Always": "Always", + "When there is noise": "When there is noise", + "When enabled small white dots will be displayed for raw BG data": "When enabled small white dots will be displayed for raw BG data", + "Custom Title": "Custom Title", + "Theme": "Theme", + "Default": "Default", + "Colors": "Colors", + "Colorblind-friendly colors": "Colorblind-friendly colors", + "Reset, and use defaults": "Reset, and use defaults", + "Calibrations": "Calibrations", + "Alarm Test / Smartphone Enable": "Alarm Test / Smartphone Enable", + "Bolus Wizard": "Bolus Wizard", + "in the future": "in the future", + "time ago": "time ago", + "hr ago": "hr ago", + "hrs ago": "hrs ago", + "min ago": "min ago", + "mins ago": "mins ago", + "day ago": "day ago", + "days ago": "days ago", + "long ago": "long ago", + "Clean": "Clean", + "Light": "Light", + "Medium": "Medium", + "Heavy": "Heavy", + "Treatment type": "Treatment type", + "Raw BG": "Raw BG", + "Device": "Device", + "Noise": "Noise", + "Calibration": "Calibration", + "Show Plugins": "Show Plugins", + "About": "About", + "Value in": "Value in", + "Carb Time": "Carb Time", + "Language": "Language", + "Add new": "Add new", + "g": "g", + "ml": "ml", + "pcs": "pcs", + "Drag&drop food here": "Drag&drop food here", + "Care Portal": "Care Portal", + "Medium/Unknown": "Medium/Unknown", + "IN THE FUTURE": "IN THE FUTURE", + "Order": "Order", + "oldest on top": "oldest on top", + "newest on top": "newest on top", + "All sensor events": "All sensor events", + "Remove future items from mongo database": "Remove future items from mongo database", + "Find and remove treatments in the future": "Find and remove treatments in the future", + "This task find and remove treatments in the future.": "This task find and remove treatments in the future.", + "Remove treatments in the future": "Remove treatments in the future", + "Find and remove entries in the future": "Find and remove entries in the future", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "This task find and remove CGM data in the future created by uploader with wrong date/time.", + "Remove entries in the future": "Remove entries in the future", + "Loading database ...": "Loading database ...", + "Database contains %1 future records": "Database contains %1 future records", + "Remove %1 selected records?": "Remove %1 selected records?", + "Error loading database": "Error loading database", + "Record %1 removed ...": "Record %1 removed ...", + "Error removing record %1": "Error removing record %1", + "Deleting records ...": "Deleting records ...", + "%1 records deleted": "%1 records deleted", + "Clean Mongo status database": "Clean Mongo status database", + "Delete all documents from devicestatus collection": "Delete all documents from devicestatus collection", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.", + "Delete all documents": "Delete all documents", + "Delete all documents from devicestatus collection?": "Delete all documents from devicestatus collection?", + "Database contains %1 records": "Database contains %1 records", + "All records removed ...": "All records removed ...", + "Delete all documents from devicestatus collection older than 30 days": "Delete all documents from devicestatus collection older than 30 days", + "Number of Days to Keep:": "Number of Days to Keep:", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.", + "Delete old documents from devicestatus collection?": "Delete old documents from devicestatus collection?", + "Clean Mongo entries (glucose entries) database": "Clean Mongo entries (glucose entries) database", + "Delete all documents from entries collection older than 180 days": "Delete all documents from entries collection older than 180 days", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.", + "Delete old documents": "Delete old documents", + "Delete old documents from entries collection?": "Delete old documents from entries collection?", + "%1 is not a valid number": "%1 is not a valid number", + "%1 is not a valid number - must be more than 2": "%1 is not a valid number - must be more than 2", + "Clean Mongo treatments database": "Clean Mongo treatments database", + "Delete all documents from treatments collection older than 180 days": "Delete all documents from treatments collection older than 180 days", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.", + "Delete old documents from treatments collection?": "Delete old documents from treatments collection?", + "Admin Tools": "Admin Tools", + "Nightscout reporting": "Nightscout reporting", + "Cancel": "Cancel", + "Edit treatment": "Edit treatment", + "Duration": "Duration", + "Duration in minutes": "Duration in minutes", + "Temp Basal": "Temp Basal", + "Temp Basal Start": "Temp Basal Start", + "Temp Basal End": "Temp Basal End", + "Percent": "Percent", + "Basal change in %": "Basal change in %", + "Basal value": "Basal value", + "Absolute basal value": "Absolute basal value", + "Announcement": "Announcement", + "Loading temp basal data": "Loading temp basal data", + "Save current record before changing to new?": "Save current record before changing to new?", + "Profile Switch": "Profile Switch", + "Profile": "Profile", + "General profile settings": "General profile settings", + "Title": "Title", + "Database records": "Database records", + "Add new record": "Add new record", + "Remove this record": "Remove this record", + "Clone this record to new": "Clone this record to new", + "Record valid from": "Record valid from", + "Stored profiles": "Stored profiles", + "Timezone": "Timezone", + "Duration of Insulin Activity (DIA)": "Duration of Insulin Activity (DIA)", + "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.": "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.", + "Insulin to carb ratio (I:C)": "Insulin to carb ratio (I:C)", + "Hours:": "Hours:", + "hours": "hours", + "g/hour": "g/hour", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.", + "Insulin Sensitivity Factor (ISF)": "Insulin Sensitivity Factor (ISF)", + "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.", + "Carbs activity / absorption rate": "Carbs activity / absorption rate", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).", + "Basal rates [unit/hour]": "Basal rates [unit/hour]", + "Target BG range [mg/dL,mmol/L]": "Target BG range [mg/dL,mmol/L]", + "Start of record validity": "Start of record validity", + "Icicle": "Icicle", + "Render Basal": "Render Basal", + "Profile used": "Profile used", + "Calculation is in target range.": "Calculation is in target range.", + "Loading profile records ...": "Loading profile records ...", + "Values loaded.": "Values loaded.", + "Default values used.": "Default values used.", + "Error. Default values used.": "Error. Default values used.", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "Time ranges of target_low and target_high don't match. Values are restored to defaults.", + "Valid from:": "Valid from:", + "Save current record before switching to new?": "Save current record before switching to new?", + "Add new interval before": "Add new interval before", + "Delete interval": "Delete interval", + "I:C": "I:C", + "ISF": "ISF", + "Combo Bolus": "Combo Bolus", + "Difference": "Difference", + "New time": "New time", + "Edit Mode": "Edit Mode", + "When enabled icon to start edit mode is visible": "When enabled icon to start edit mode is visible", + "Operation": "Operation", + "Move": "Move", + "Delete": "Delete", + "Move insulin": "Move insulin", + "Move carbs": "Move carbs", + "Remove insulin": "Remove insulin", + "Remove carbs": "Remove carbs", + "Change treatment time to %1 ?": "Change treatment time to %1 ?", + "Change carbs time to %1 ?": "Change carbs time to %1 ?", + "Change insulin time to %1 ?": "Change insulin time to %1 ?", + "Remove treatment ?": "Remove treatment ?", + "Remove insulin from treatment ?": "Remove insulin from treatment ?", + "Remove carbs from treatment ?": "Remove carbs from treatment ?", + "Rendering": "Rendering", + "Loading OpenAPS data of": "Loading OpenAPS data of", + "Loading profile switch data": "Loading profile switch data", + "Redirecting you to the Profile Editor to create a new profile.": "Redirecting you to the Profile Editor to create a new profile.", + "Pump": "Pump", + "Sensor Age": "Sensor Age", + "Insulin Age": "Insulin Age", + "Temporary target": "Temporary target", + "Reason": "Reason", + "Eating soon": "Eating soon", + "Top": "Top", + "Bottom": "Bottom", + "Activity": "Activity", + "Targets": "Targets", + "Bolus insulin:": "Bolus insulin:", + "Base basal insulin:": "Base basal insulin:", + "Positive temp basal insulin:": "Positive temp basal insulin:", + "Negative temp basal insulin:": "Negative temp basal insulin:", + "Total basal insulin:": "Total basal insulin:", + "Total daily insulin:": "Total daily insulin:", + "Unable to save Role": "Unable to save Role", + "Unable to delete Role": "Unable to delete Role", + "Database contains %1 roles": "Database contains %1 roles", + "Edit Role": "Edit Role", + "admin, school, family, etc": "admin, school, family, etc", + "Permissions": "Permissions", + "Are you sure you want to delete: ": "Are you sure you want to delete: ", + "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.": "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.", + "Add new Role": "Add new Role", + "Roles - Groups of People, Devices, etc": "Roles - Groups of People, Devices, etc", + "Edit this role": "Edit this role", + "Admin authorized": "Admin authorized", + "Subjects - People, Devices, etc": "Subjects - People, Devices, etc", + "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.", + "Add new Subject": "Add new Subject", + "Unable to save Subject": "Unable to save Subject", + "Unable to delete Subject": "Unable to delete Subject", + "Database contains %1 subjects": "Database contains %1 subjects", + "Edit Subject": "Edit Subject", + "person, device, etc": "person, device, etc", + "role1, role2": "role1, role2", + "Edit this subject": "Edit this subject", + "Delete this subject": "Delete this subject", + "Roles": "Roles", + "Access Token": "Access Token", + "hour ago": "hour ago", + "hours ago": "hours ago", + "Silence for %1 minutes": "Silence for %1 minutes", + "Check BG": "Check BG", + "BASAL": "BASAL", + "Current basal": "Current basal", + "Sensitivity": "Sensitivity", + "Current Carb Ratio": "Current Carb Ratio", + "Basal timezone": "Basal timezone", + "Active profile": "Active profile", + "Active temp basal": "Active temp basal", + "Active temp basal start": "Active temp basal start", + "Active temp basal duration": "Active temp basal duration", + "Active temp basal remaining": "Active temp basal remaining", + "Basal profile value": "Basal profile value", + "Active combo bolus": "Active combo bolus", + "Active combo bolus start": "Active combo bolus start", + "Active combo bolus duration": "Active combo bolus duration", + "Active combo bolus remaining": "Active combo bolus remaining", + "BG Delta": "BG Delta", + "Elapsed Time": "Elapsed Time", + "Absolute Delta": "Absolute Delta", + "Interpolated": "Interpolated", + "BWP": "BWP", + "Urgent": "Urgent", + "Warning": "Warning", + "Info": "Info", + "Lowest": "Lowest", + "Snoozing high alarm since there is enough IOB": "Snoozing high alarm since there is enough IOB", + "Check BG, time to bolus?": "Check BG, time to bolus?", + "Notice": "Notice", + "required info missing": "required info missing", + "Insulin on Board": "Insulin on Board", + "Current target": "Current target", + "Expected effect": "Expected effect", + "Expected outcome": "Expected outcome", + "Carb Equivalent": "Carb Equivalent", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS", + "%1U reduction needed in active insulin to reach low target, too much basal?": "%1U reduction needed in active insulin to reach low target, too much basal?", + "basal adjustment out of range, give carbs?": "basal adjustment out of range, give carbs?", + "basal adjustment out of range, give bolus?": "basal adjustment out of range, give bolus?", + "above high": "above high", + "below low": "below low", + "Projected BG %1 target": "Projected BG %1 target", + "aiming at": "aiming at", + "Bolus %1 units": "Bolus %1 units", + "or adjust basal": "or adjust basal", + "Check BG using glucometer before correcting!": "Check BG using glucometer before correcting!", + "Basal reduction to account %1 units:": "Basal reduction to account %1 units:", + "30m temp basal": "30m temp basal", + "1h temp basal": "1h temp basal", + "Cannula change overdue!": "Cannula change overdue!", + "Time to change cannula": "Time to change cannula", + "Change cannula soon": "Change cannula soon", + "Cannula age %1 hours": "Cannula age %1 hours", + "Inserted": "Inserted", + "CAGE": "CAGE", + "COB": "COB", + "Last Carbs": "Last Carbs", + "IAGE": "IAGE", + "Insulin reservoir change overdue!": "Insulin reservoir change overdue!", + "Time to change insulin reservoir": "Time to change insulin reservoir", + "Change insulin reservoir soon": "Change insulin reservoir soon", + "Insulin reservoir age %1 hours": "Insulin reservoir age %1 hours", + "Changed": "Changed", + "IOB": "IOB", + "Careportal IOB": "Careportal IOB", + "Last Bolus": "Last Bolus", + "Basal IOB": "Basal IOB", + "Source": "Source", + "Stale data, check rig?": "Stale data, check rig?", + "Last received:": "Last received:", + "%1m ago": "%1m ago", + "%1h ago": "%1h ago", + "%1d ago": "%1d ago", + "RETRO": "RETRO", + "SAGE": "SAGE", + "Sensor change/restart overdue!": "Sensor change/restart overdue!", + "Time to change/restart sensor": "Time to change/restart sensor", + "Change/restart sensor soon": "Change/restart sensor soon", + "Sensor age %1 days %2 hours": "Sensor age %1 days %2 hours", + "Sensor Insert": "Sensor Insert", + "Sensor Start": "Sensor Start", + "days": "days", + "Insulin distribution": "Insulin distribution", + "To see this report, press SHOW while in this view": "To see this report, press SHOW while in this view", + "AR2 Forecast": "AR2 Forecast", + "OpenAPS Forecasts": "OpenAPS Forecasts", + "Temporary Target": "Temporary Target", + "Temporary Target Cancel": "Temporary Target Cancel", + "OpenAPS Offline": "OpenAPS Offline", + "Profiles": "Profiles", + "Time in fluctuation": "Time in fluctuation", + "Time in rapid fluctuation": "Time in rapid fluctuation", + "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:": "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:", + "Filter by hours": "Filter by hours", + "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.": "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.", + "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.": "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.", + "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.", + "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.", + "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">can be found here.", + "Mean Total Daily Change": "Mean Total Daily Change", + "Mean Hourly Change": "Mean Hourly Change", + "FortyFiveDown": "slightly dropping", + "FortyFiveUp": "slightly rising", + "Flat": "holding", + "SingleUp": "rising", + "SingleDown": "dropping", + "DoubleDown": "rapidly dropping", + "DoubleUp": "rapidly rising", + "virtAsstUnknown": "That value is unknown at the moment. Please see your Nightscout site for more details.", + "virtAsstTitleAR2Forecast": "AR2 Forecast", + "virtAsstTitleCurrentBasal": "Current Basal", + "virtAsstTitleCurrentCOB": "Current COB", + "virtAsstTitleCurrentIOB": "Current IOB", + "virtAsstTitleLaunch": "Welcome to Nightscout", + "virtAsstTitleLoopForecast": "Loop Forecast", + "virtAsstTitleLastLoop": "Last Loop", + "virtAsstTitleOpenAPSForecast": "OpenAPS Forecast", + "virtAsstTitlePumpReservoir": "Insulin Remaining", + "virtAsstTitlePumpBattery": "Pump Battery", + "virtAsstTitleRawBG": "Current Raw BG", + "virtAsstTitleUploaderBattery": "Uploader Battery", + "virtAsstTitleCurrentBG": "Current BG", + "virtAsstTitleFullStatus": "Full Status", + "virtAsstTitleCGMMode": "CGM Mode", + "virtAsstTitleCGMStatus": "CGM Status", + "virtAsstTitleCGMSessionAge": "CGM Session Age", + "virtAsstTitleCGMTxStatus": "CGM Transmitter Status", + "virtAsstTitleCGMTxAge": "CGM Transmitter Age", + "virtAsstTitleCGMNoise": "CGM Noise", + "virtAsstTitleDelta": "Blood Glucose Delta", + "virtAsstStatus": "%1 and %2 as of %3.", + "virtAsstBasal": "%1 current basal is %2 units per hour", + "virtAsstBasalTemp": "%1 temp basal of %2 units per hour will end %3", + "virtAsstIob": "and you have %1 insulin on board.", + "virtAsstIobIntent": "You have %1 insulin on board", + "virtAsstIobUnits": "%1 units of", + "virtAsstLaunch": "What would you like to check on Nightscout?", + "virtAsstPreamble": "Your", + "virtAsstPreamble3person": "%1 has a ", + "virtAsstNoInsulin": "no", + "virtAsstUploadBattery": "Your uploader battery is at %1", + "virtAsstReservoir": "You have %1 units remaining", + "virtAsstPumpBattery": "Your pump battery is at %1 %2", + "virtAsstUploaderBattery": "Your uploader battery is at %1", + "virtAsstLastLoop": "The last successful loop was %1", + "virtAsstLoopNotAvailable": "Loop plugin does not seem to be enabled", + "virtAsstLoopForecastAround": "According to the loop forecast you are expected to be around %1 over the next %2", + "virtAsstLoopForecastBetween": "According to the loop forecast you are expected to be between %1 and %2 over the next %3", + "virtAsstAR2ForecastAround": "According to the AR2 forecast you are expected to be around %1 over the next %2", + "virtAsstAR2ForecastBetween": "According to the AR2 forecast you are expected to be between %1 and %2 over the next %3", + "virtAsstForecastUnavailable": "Unable to forecast with the data that is available", + "virtAsstRawBG": "Your raw bg is %1", + "virtAsstOpenAPSForecast": "The OpenAPS Eventual BG is %1", + "virtAsstCob3person": "%1 has %2 carbohydrates on board", + "virtAsstCob": "You have %1 carbohydrates on board", + "virtAsstCGMMode": "Your CGM mode was %1 as of %2.", + "virtAsstCGMStatus": "Your CGM status was %1 as of %2.", + "virtAsstCGMSessAge": "Your CGM session has been active for %1 days and %2 hours.", + "virtAsstCGMSessNotStarted": "There is no active CGM session at the moment.", + "virtAsstCGMTxStatus": "Your CGM transmitter status was %1 as of %2.", + "virtAsstCGMTxAge": "Your CGM transmitter is %1 days old.", + "virtAsstCGMNoise": "Your CGM noise was %1 as of %2.", + "virtAsstCGMBattOne": "Your CGM battery was %1 volts as of %2.", + "virtAsstCGMBattTwo": "Your CGM battery levels were %1 volts and %2 volts as of %3.", + "virtAsstDelta": "Your delta was %1 between %2 and %3.", + "virtAsstDeltaEstimated": "Your estimated delta was %1 between %2 and %3.", + "virtAsstUnknownIntentTitle": "Unknown Intent", + "virtAsstUnknownIntentText": "I'm sorry, I don't know what you're asking for.", + "Fat [g]": "Fat [g]", + "Protein [g]": "Protein [g]", + "Energy [kJ]": "Energy [kJ]", + "Clock Views:": "Clock Views:", + "Clock": "Clock", + "Color": "Color", + "Simple": "Simple", + "TDD average": "TDD average", + "Bolus average": "Bolus average", + "Basal average": "Basal average", + "Base basal average:": "Base basal average:", + "Carbs average": "Carbs average", + "Eating Soon": "Eating Soon", + "Last entry {0} minutes ago": "Last entry {0} minutes ago", + "change": "change", + "Speech": "Speech", + "Target Top": "Target Top", + "Target Bottom": "Target Bottom", + "Canceled": "Canceled", + "Meter BG": "Meter BG", + "predicted": "predicted", + "future": "future", + "ago": "ago", + "Last data received": "Last data received", + "Clock View": "Clock View", + "Protein": "Protein", + "Fat": "Fat", + "Protein average": "Protein average", + "Fat average": "Fat average", + "Total carbs": "Total carbs", + "Total protein": "Total protein", + "Total fat": "Total fat", + "Database Size": "Database Size", + "Database Size near its limits!": "Database Size near its limits!", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!", + "Database file size": "Database file size", + "%1 MiB of %2 MiB (%3%)": "%1 MiB of %2 MiB (%3%)", + "Data size": "Data size", + "virtAsstDatabaseSize": "%1 MiB. That is %2% of available database space.", + "virtAsstTitleDatabaseSize": "Database file size", + "Carbs/Food/Time": "Carbs/Food/Time", + "You have administration messages": "You have administration messages", + "Admin messages in queue": "Admin messages in queue", + "Queue empty": "Queue empty", + "There are no admin messages in queue": "There are no admin messages in queue", + "Please sign in using the API_SECRET to see your administration messages": "Please sign in using the API_SECRET to see your administration messages", + "Reads enabled in default permissions": "Reads enabled in default permissions", + "Data reads enabled": "Data reads enabled", + "Data writes enabled": "Data writes enabled", + "Data writes not enabled": "Data writes not enabled", + "Color prediction lines": "Color prediction lines", + "Release Notes": "Release Notes", + "Check for Updates": "Check for Updates", + "Open Source": "Open Source", + "Nightscout Info": "Nightscout Info", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.", + "Note that time shift is available only when viewing multiple days.": "Note that time shift is available only when viewing multiple days.", + "Please select a maximum of two weeks duration and click Show again.": "Please select a maximum of two weeks duration and click Show again.", + "Show profiles table": "Show profiles table", + "Show predictions": "Show predictions", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Timeshift on meals larger than %1 g carbs consumed between %2 and %3", + "Previous": "Previous", + "Previous day": "Previous day", + "Next day": "Next day", + "Next": "Next", + "Temp basal delta": "Temp basal delta", + "Authorized by token": "Authorized by token", + "Auth role": "Auth role", + "view without token": "view without token", + "Remove stored token": "Remove stored token", + "Weekly Distribution": "Weekly Distribution", + "Failed authentication": "Failed authentication", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?", + "Default (with leading zero and U)": "Default (with leading zero and U)", + "Concise (with U, without leading zero)": "Concise (with U, without leading zero)", + "Minimal (without leading zero and U)": "Minimal (without leading zero and U)", + "Small Bolus Display": "Small Bolus Display", + "Large Bolus Display": "Large Bolus Display", + "Bolus Display Threshold": "Bolus Display Threshold", + "%1 U and Over": "%1 U and Over", + "Event repeated %1 times.": "Event repeated %1 times.", + "minutes": "minutes", + "Last recorded %1 %2 ago.": "Last recorded %1 %2 ago.", + "Security issue": "Security issue", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.", + "less than 1": "less than 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system." +} diff --git a/translations/hr_HR.json b/translations/hr_HR.json new file mode 100644 index 00000000000..0ef7223a18f --- /dev/null +++ b/translations/hr_HR.json @@ -0,0 +1,707 @@ +{ + "Listening on port": "Slušanje na portu", + "Mo": "Pon", + "Tu": "Uto", + "We": "Sri", + "Th": "Čet", + "Fr": "Pet", + "Sa": "Sub", + "Su": "Ned", + "Monday": "Ponedjeljak", + "Tuesday": "Utorak", + "Wednesday": "Srijeda", + "Thursday": "Četvrtak", + "Friday": "Petak", + "Saturday": "Subota", + "Sunday": "Nedjelja", + "Category": "Kategorija", + "Subcategory": "Podkategorija", + "Name": "Ime", + "Today": "Danas", + "Last 2 days": "Posljednja 2 dana", + "Last 3 days": "Posljednja 3 dana", + "Last week": "Protekli tjedan", + "Last 2 weeks": "Protekla 2 tjedna", + "Last month": "Protekli mjesec", + "Last 3 months": "Protekla 3 mjeseca", + "From": "Od", + "To": "Do", + "Notes": "Bilješke", + "Food": "Hrana", + "Insulin": "Inzulin", + "Carbs": "Ugljikohidrati", + "Notes contain": "Sadržaj bilješki", + "Target BG range bottom": "Ciljna donja granica GUK-a", + "top": "Gornja", + "Show": "Prikaži", + "Display": "Prikaži", + "Loading": "Učitavanje", + "Loading profile": "Učitavanje profila", + "Loading status": "Učitavanje statusa", + "Loading food database": "Učitavanje baze podataka o hrani", + "not displayed": "Ne prikazuje se", + "Loading CGM data of": "Učitavanja podataka CGM-a", + "Loading treatments data of": "Učitavanje podataka o tretmanu", + "Processing data of": "Obrada podataka", + "Portion": "Dio", + "Size": "Veličina", + "(none)": "(Prazno)", + "None": "Prazno", + "": "", + "Result is empty": "Prazan rezultat", + "Day to day": "Svakodnevno", + "Week to week": "Tjedno", + "Daily Stats": "Dnevna statistika", + "Percentile Chart": "Percentili", + "Distribution": "Distribucija", + "Hourly stats": "Statistika po satu", + "netIOB stats": "netIOB statistika", + "temp basals must be rendered to display this report": "temp bazali moraju biti prikazani kako bi se vidio ovaj izvještaj", + "No data available": "Nema raspoloživih podataka", + "Low": "Nizak", + "In Range": "U rasponu", + "Period": "Razdoblje", + "High": "Visok", + "Average": "Prosjek", + "Low Quartile": "Donji kvartil", + "Upper Quartile": "Gornji kvartil", + "Quartile": "Kvartil", + "Date": "Datum", + "Normal": "Normalno", + "Median": "Srednje", + "Readings": "Vrijednosti", + "StDev": "Standardna devijacija", + "Daily stats report": "Izvješće o dnevnim statistikama", + "Glucose Percentile report": "Izvješće o postotku GUK-a", + "Glucose distribution": "Distribucija GUK-a", + "days total": "ukupno dana", + "Total per day": "Ukupno po danu", + "Overall": "Sveukupno", + "Range": "Raspon", + "% of Readings": "% očitanja", + "# of Readings": "broj očitanja", + "Mean": "Prosjek", + "Standard Deviation": "Standardna devijacija", + "Max": "Maksimalan", + "Min": "Minimalan", + "A1c estimation*": "Procjena HbA1c-a", + "Weekly Success": "Tjedni uspjeh", + "There is not sufficient data to run this report. Select more days.": "Nema dovoljno podataka za izvođenje izvještaja. Odaberite još dana.", + "Using stored API secret hash": "Koristi se pohranjeni API tajni hash", + "No API secret hash stored yet. You need to enter API secret.": "Nema pohranjenog API tajnog hasha. Unesite tajni API", + "Database loaded": "Baza podataka je učitana", + "Error: Database failed to load": "Greška: Baza podataka nije učitana", + "Error": "Greška", + "Create new record": "Kreiraj novi zapis", + "Save record": "Spremi zapis", + "Portions": "Dijelovi", + "Unit": "Jedinica", + "GI": "GI", + "Edit record": "Uredi zapis", + "Delete record": "Izbriši zapis", + "Move to the top": "Premjesti na vrh", + "Hidden": "Skriveno", + "Hide after use": "Sakrij nakon korištenja", + "Your API secret must be at least 12 characters long": "Vaš tajni API mora sadržavati barem 12 znakova", + "Bad API secret": "Neispravan tajni API", + "API secret hash stored": "API tajni hash je pohranjen", + "Status": "Status", + "Not loaded": "Nije učitano", + "Food Editor": "Editor hrane", + "Your database": "Vaša baza podataka", + "Filter": "Filter", + "Save": "Spremi", + "Clear": "Očisti", + "Record": "Zapis", + "Quick picks": "Brzi izbor", + "Show hidden": "Prikaži skriveno", + "Your API secret or token": "Vaš API tajni ključ ili token", + "Remember this device. (Do not enable this on public computers.)": "Zapamti ovaj uređaj. (Ne uključujte ovo na javnim računalima.)", + "Treatments": "Tretmani", + "Time": "Vrijeme", + "Event Type": "Vrsta događaja", + "Blood Glucose": "GUK", + "Entered By": "Unos izvršio", + "Delete this treatment?": "Izbriši ovaj tretman?", + "Carbs Given": "Količina UGH", + "Insulin Given": "Količina iznulina", + "Event Time": "Vrijeme događaja", + "Please verify that the data entered is correct": "Molim Vas provjerite jesu li uneseni podaci ispravni", + "BG": "GUK", + "Use BG correction in calculation": "Koristi korekciju GUK-a u izračunu", + "BG from CGM (autoupdated)": "GUK sa CGM-a (ažuriran automatski)", + "BG from meter": "GUK s glukometra", + "Manual BG": "Ručno unesen GUK", + "Quickpick": "Brzi izbor", + "or": "ili", + "Add from database": "Dodaj iz baze podataka", + "Use carbs correction in calculation": "Koristi korekciju za UH u izračunu", + "Use COB correction in calculation": "Koristi aktivne UGH u izračunu", + "Use IOB in calculation": "Koristi aktivni inzulin u izračunu", + "Other correction": "Druga korekcija", + "Rounding": "Zaokruživanje", + "Enter insulin correction in treatment": "Unesi korekciju inzulinom u tretman", + "Insulin needed": "Potrebno inzulina", + "Carbs needed": "Potrebno UGH", + "Carbs needed if Insulin total is negative value": "Potrebno UGH ako je ukupna vrijednost inzulina negativna", + "Basal rate": "Bazal", + "60 minutes earlier": "Prije 60 minuta", + "45 minutes earlier": "Prije 45 minuta", + "30 minutes earlier": "Prije 30 minuta", + "20 minutes earlier": "Prije 20 minuta", + "15 minutes earlier": "Prije 15 minuta", + "Time in minutes": "Vrijeme u minutama", + "15 minutes later": "15 minuta kasnije", + "20 minutes later": "20 minuta kasnije", + "30 minutes later": "30 minuta kasnije", + "45 minutes later": "45 minuta kasnije", + "60 minutes later": "60 minuta kasnije", + "Additional Notes, Comments": "Dodatne bilješke, komentari", + "RETRO MODE": "Retrospektivni način", + "Now": "Sad", + "Other": "Drugo", + "Submit Form": "Spremi", + "Profile Editor": "Editor profila", + "Reports": "Izvještaji", + "Add food from your database": "Dodajte hranu iz svoje baze podataka", + "Reload database": "Ponovo učitajte bazu podataka", + "Add": "Dodaj", + "Unauthorized": "Neautorizirano", + "Entering record failed": "Neuspjeli unos podataka", + "Device authenticated": "Uređaj autenticiran", + "Device not authenticated": "Uređaj nije autenticiran", + "Authentication status": "Status autentikacije", + "Authenticate": "Autenticirati", + "Remove": "Ukloniti", + "Your device is not authenticated yet": "Vaš uređaj još nije autenticiran", + "Sensor": "Senzor", + "Finger": "Prst", + "Manual": "Ručno", + "Scale": "Skala", + "Linear": "Linearno", + "Logarithmic": "Logaritamski", + "Logarithmic (Dynamic)": "Logaritamski (Dinamički)", + "Insulin-on-Board": "Aktivni inzulin", + "Carbs-on-Board": "Aktivni ugljikohidrati", + "Bolus Wizard Preview": "Pregled bolus čarobnjaka", + "Value Loaded": "Vrijednost učitana", + "Cannula Age": "Starost kanile", + "Basal Profile": "Bazalni profil", + "Silence for 30 minutes": "Tišina 30 minuta", + "Silence for 60 minutes": "Tišina 60 minuta", + "Silence for 90 minutes": "Tišina 90 minuta", + "Silence for 120 minutes": "Tišina 120 minuta", + "Settings": "Postavke", + "Units": "Jedinice", + "Date format": "Format datuma", + "12 hours": "12 sati", + "24 hours": "24 sata", + "Log a Treatment": "Evidencija tretmana", + "BG Check": "Kontrola GUK-a", + "Meal Bolus": "Bolus za obrok", + "Snack Bolus": "Bolus za užinu", + "Correction Bolus": "Korekcija", + "Carb Correction": "Bolus za hranu", + "Note": "Bilješka", + "Question": "Pitanje", + "Exercise": "Aktivnost", + "Pump Site Change": "Promjena seta", + "CGM Sensor Start": "Start senzora", + "CGM Sensor Stop": "Zaustavi CGM senzor", + "CGM Sensor Insert": "Promjena senzora", + "Sensor Code": "Sensor Code", + "Transmitter ID": "Transmitter ID", + "Dexcom Sensor Start": "Start Dexcom senzora", + "Dexcom Sensor Change": "Promjena Dexcom senzora", + "Insulin Cartridge Change": "Promjena spremnika inzulina", + "D.A.D. Alert": "Obavijest dijabetičkog psa", + "Glucose Reading": "Vrijednost GUK-a", + "Measurement Method": "Metoda mjerenja", + "Meter": "Glukometar", + "Amount in grams": "Količina u gramima", + "Amount in units": "Količina u jedinicama", + "View all treatments": "Prikaži sve tretmane", + "Enable Alarms": "Aktiviraj alarme", + "Pump Battery Change": "Zamjena baterije pumpe", + "Pump Battery Age": "Pump Battery Age", + "Pump Battery Low Alarm": "Upozorenje slabe baterije pumpe", + "Pump Battery change overdue!": "Prošao je rok za zamjenu baterije pumpe!", + "When enabled an alarm may sound.": "Kad je aktiviran, alarm se može oglasiti", + "Urgent High Alarm": "Hitni alarm za hiper", + "High Alarm": "Alarm za hiper", + "Low Alarm": "Alarm za hipo", + "Urgent Low Alarm": "Hitni alarm za hipo", + "Stale Data: Warn": "Pažnja: Stari podaci", + "Stale Data: Urgent": "Hitno: Stari podaci", + "mins": "min", + "Night Mode": "Noćni način", + "When enabled the page will be dimmed from 10pm - 6am.": "Kad je uključen, stranica će biti zatamnjena od 22-06", + "Enable": "Aktiviraj", + "Show Raw BG Data": "Prikazuj sirove podatke o GUK-u", + "Never": "Nikad", + "Always": "Uvijek", + "When there is noise": "Kad postoji šum", + "When enabled small white dots will be displayed for raw BG data": "Kad je omogućeno, male bijele točkice će prikazivati sirove podatke o GUK-u.", + "Custom Title": "Vlastiti naziv", + "Theme": "Tema", + "Default": "Predefinirano", + "Colors": "Boje", + "Colorblind-friendly colors": "Boje za daltoniste", + "Reset, and use defaults": "Resetiraj i koristi defaultne vrijednosti", + "Calibrations": "Kalibriranje", + "Alarm Test / Smartphone Enable": "Alarm test / Aktiviraj smartphone", + "Bolus Wizard": "Bolus wizard", + "in the future": "U budućnosti", + "time ago": "prije", + "hr ago": "sat unazad", + "hrs ago": "sati unazad", + "min ago": "minuta unazad", + "mins ago": "minuta unazad", + "day ago": "dan unazad", + "days ago": "dana unazad", + "long ago": "prije dosta vremena", + "Clean": "Čisto", + "Light": "Lagano", + "Medium": "Srednje", + "Heavy": "Teško", + "Treatment type": "Vrsta tretmana", + "Raw BG": "Sirovi podaci o GUK-u", + "Device": "Uređaj", + "Noise": "Šum", + "Calibration": "Kalibriranje", + "Show Plugins": "Prikaži plugine", + "About": "O aplikaciji", + "Value in": "Vrijednost u", + "Carb Time": "Vrijeme unosa UGH", + "Language": "Jezik", + "Add new": "Dodaj novi", + "g": "g", + "ml": "ml", + "pcs": "kom", + "Drag&drop food here": "Privuci hranu ovdje", + "Care Portal": "Care Portal", + "Medium/Unknown": "Srednji/Nepoznat", + "IN THE FUTURE": "U BUDUĆNOSTI", + "Order": "Sortiranje", + "oldest on top": "najstarije na vrhu", + "newest on top": "najnovije na vrhu", + "All sensor events": "Svi događaji senzora", + "Remove future items from mongo database": "Obriši buduće zapise iz baze podataka", + "Find and remove treatments in the future": "Nađi i obriši tretmane u budućnosti", + "This task find and remove treatments in the future.": "Ovo nalazi i briše tretmane u budućnosti", + "Remove treatments in the future": "Obriši tretmane u budućnosti", + "Find and remove entries in the future": "Nađi i obriši zapise u budućnosti", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "Ovo nalazi i briše podatke sa senzora u budućnosti nastalih s uploaderom sa krivim datumom/vremenom", + "Remove entries in the future": "Obriši zapise u budućnosti", + "Loading database ...": "Učitavanje podataka", + "Database contains %1 future records": "Baza sadrži %1 zapisa u budućnosti", + "Remove %1 selected records?": "Obriši %1 odabrani zapis?", + "Error loading database": "Greška pri učitavanju podataka", + "Record %1 removed ...": "Zapis %1 obrisan...", + "Error removing record %1": "Greška prilikom brisanja zapisa %1", + "Deleting records ...": "Brisanje zapisa", + "%1 records deleted": "obrisano %1 zapisa", + "Clean Mongo status database": "Obriši bazu statusa", + "Delete all documents from devicestatus collection": "Obriši sve zapise o statusima", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "Ovo briše sve zapise o statusima. Korisno kada se status baterije uploadera ne osvježava ispravno.", + "Delete all documents": "Obriši sve zapise", + "Delete all documents from devicestatus collection?": "Obriši sve zapise statusa?", + "Database contains %1 records": "Baza sadrži %1 zapisa", + "All records removed ...": "Svi zapisi obrisani", + "Delete all documents from devicestatus collection older than 30 days": "Obriši sve statuse starije od 30 dana", + "Number of Days to Keep:": "Broj dana za sačuvati:", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "Ovo uklanja sve statuse starije od 30 dana. Korisno kada se status baterije uploadera ne osvježava ispravno.", + "Delete old documents from devicestatus collection?": "Obriši stare statuse", + "Clean Mongo entries (glucose entries) database": "Obriši GUK zapise iz baze", + "Delete all documents from entries collection older than 180 days": "Obriši sve zapise starije od 180 dana", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Ovo briše sve zapise starije od 180 dana. Korisno kada se status baterije uploadera ne osvježava.", + "Delete old documents": "Obriši stare zapise", + "Delete old documents from entries collection?": "Obriši stare zapise?", + "%1 is not a valid number": "%1 nije valjan broj", + "%1 is not a valid number - must be more than 2": "%1 nije valjan broj - mora biti veći od 2", + "Clean Mongo treatments database": "Obriši tretmane iz baze", + "Delete all documents from treatments collection older than 180 days": "Obriši tretmane starije od 180 dana iz baze", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Ovo briše sve tretmane starije od 180 dana iz baze. Korisno kada se status baterije uploadera ne osvježava.", + "Delete old documents from treatments collection?": "Obriši stare tretmane?", + "Admin Tools": "Administracija", + "Nightscout reporting": "Nightscout izvješća", + "Cancel": "Odustani", + "Edit treatment": "Uredi tretman", + "Duration": "Trajanje", + "Duration in minutes": "Trajanje u minutama", + "Temp Basal": "Privremeni bazal", + "Temp Basal Start": "Početak privremenog bazala", + "Temp Basal End": "Kraj privremenog bazala", + "Percent": "Postotak", + "Basal change in %": "Promjena bazala u %", + "Basal value": "Vrijednost bazala", + "Absolute basal value": "Apsolutna vrijednost bazala", + "Announcement": "Objava", + "Loading temp basal data": "Učitavanje podataka o privremenom bazalu", + "Save current record before changing to new?": "Spremi trenutni zapis prije promjene na idući?", + "Profile Switch": "Promjena profila", + "Profile": "Profil", + "General profile settings": "Opće postavke profila", + "Title": "Naslov", + "Database records": "Zapisi u bazi", + "Add new record": "Dodaj zapis", + "Remove this record": "Obriši ovaj zapis", + "Clone this record to new": "Kloniraj zapis", + "Record valid from": "Zapis vrijedi od", + "Stored profiles": "Pohranjeni profili", + "Timezone": "Vremenska zona", + "Duration of Insulin Activity (DIA)": "Trajanje aktivnosti inzulina (DIA)", + "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.": "Predstavlja uobičajeno trajanje djelovanje inzulina. Varira po vrstama inzulina i osobama. Tipično je to 3-4 sata za inzuline u pumpama za većinu osoba. Ponekad se naziva i vijek inzulina", + "Insulin to carb ratio (I:C)": "Omjer UGH:Inzulin (I:C)", + "Hours:": "Sati:", + "hours": "sati", + "g/hour": "g/h", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "grama UGH po jedinici inzulina. Omjer koliko grama UGH pokriva jedna jedinica inzulina.", + "Insulin Sensitivity Factor (ISF)": "Faktor inzulinske osjetljivosti (ISF)", + "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "md/dL ili mmol/L po jedinici inzulina. Omjer koliko se GUK mijenja sa jednom jedinicom korekcije inzulina.", + "Carbs activity / absorption rate": "UGH aktivnost / omjer apsorpcije", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "grama po jedinici vremena. Predstavlja promjenu aktivnih UGH u jedinici vremena, kao i količinu UGH koja bi trebala utjecati kroz to vrijeme.", + "Basal rates [unit/hour]": "Bazali [jedinica/sat]", + "Target BG range [mg/dL,mmol/L]": "Ciljani raspon GUK [mg/dL,mmol/L]", + "Start of record validity": "Trenutak važenja zapisa", + "Icicle": "Padajuće", + "Render Basal": "Iscrtaj bazale", + "Profile used": "Korišteni profil", + "Calculation is in target range.": "Izračun je u ciljanom rasponu.", + "Loading profile records ...": "Učitavanje profila...", + "Values loaded.": "Vrijednosti učitane.", + "Default values used.": "Koriste se zadane vrijednosti.", + "Error. Default values used.": "Pogreška. Koristiti će se zadane vrijednosti.", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "Vremenski rasponi donje ciljane i gornje ciljane vrijednosti nisu ispravni. Vrijednosti vraćene na zadano.", + "Valid from:": "Vrijedi od:", + "Save current record before switching to new?": "Spremi trenutni zapis prije prelaska na novi?", + "Add new interval before": "Dodaj novi interval iznad", + "Delete interval": "Obriši interval", + "I:C": "I:C", + "ISF": "ISF", + "Combo Bolus": "Dual bolus", + "Difference": "Razlika", + "New time": "Novo vrijeme", + "Edit Mode": "Uređivanje", + "When enabled icon to start edit mode is visible": "Kada je omogućeno, mod uređivanje je omogućen", + "Operation": "Operacija", + "Move": "Pomakni", + "Delete": "Obriši", + "Move insulin": "Premjesti inzulin", + "Move carbs": "Premejsti UGH", + "Remove insulin": "Obriši inzulin", + "Remove carbs": "Obriši UGH", + "Change treatment time to %1 ?": "Promijeni vrijeme tretmana na %1?", + "Change carbs time to %1 ?": "Promijeni vrijeme UGH na %1?", + "Change insulin time to %1 ?": "Promijeni vrijeme inzulina na %1?", + "Remove treatment ?": "Obriši tretman?", + "Remove insulin from treatment ?": "Obriši inzulin iz tretmana?", + "Remove carbs from treatment ?": "Obriši UGH iz tretmana?", + "Rendering": "Iscrtavanje", + "Loading OpenAPS data of": "Učitavanje OpenAPS podataka od", + "Loading profile switch data": "Učitavanje podataka promjene profila", + "Redirecting you to the Profile Editor to create a new profile.": "Krive postavke profila.\nNiti jedan profil nije definiran za prikazano vrijeme.\nPreusmjeravanje u editor profila kako biste stvorili novi.", + "Pump": "Pumpa", + "Sensor Age": "Starost senzora", + "Insulin Age": "Starost inzulina", + "Temporary target": "Privremeni cilj", + "Reason": "Razlog", + "Eating soon": "Uskoro jelo", + "Top": "Vrh", + "Bottom": "Dno", + "Activity": "Aktivnost", + "Targets": "Ciljevi", + "Bolus insulin:": "Bolus:", + "Base basal insulin:": "Osnovni bazal:", + "Positive temp basal insulin:": "Pozitivni temp bazal:", + "Negative temp basal insulin:": "Negativni temp bazal:", + "Total basal insulin:": "Ukupno bazali:", + "Total daily insulin:": "Ukupno dnevni inzulin:", + "Unable to save Role": "Nije moguće spremanje", + "Unable to delete Role": "Ne mogu obrisati ulogu", + "Database contains %1 roles": "baza sadrži %1 uloga", + "Edit Role": "Uredi ulogu", + "admin, school, family, etc": "admin, škola, obitelj, itd.", + "Permissions": "Prava", + "Are you sure you want to delete: ": "Sigurno želite obrisati?", + "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.": "Svaka uloga ima 1 ili više prava. Pravo * je univerzalno, a prava su hijerarhija koja koristi znak : kao graničnik.", + "Add new Role": "Dodaj novu ulogu", + "Roles - Groups of People, Devices, etc": "Uloge - Grupe ljudi, uređaja, itd.", + "Edit this role": "Uredi ovu ulogu", + "Admin authorized": "Administrator ovlašten", + "Subjects - People, Devices, etc": "Subjekti - Ljudi, uređaji, itd.", + "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "Svaki subjekt će dobiti jedinstveni pristupni token i jednu ili više uloga. Kliknite na pristupni token kako bi se otvorio novi pogled sa odabranim subjektom, a tada se tajni link može podijeliti.", + "Add new Subject": "Dodaj novi subjekt", + "Unable to save Subject": "Nije moguće spremiti Predmet", + "Unable to delete Subject": "Ne mogu obrisati subjekt", + "Database contains %1 subjects": "Baza sadrži %1 subjekata", + "Edit Subject": "Uredi subjekt", + "person, device, etc": "osoba, uređaj, itd.", + "role1, role2": "uloga1, uloga2", + "Edit this subject": "Uredi ovaj subjekt", + "Delete this subject": "Obriši ovaj subjekt", + "Roles": "Uloge", + "Access Token": "Pristupni token", + "hour ago": "sat ranije", + "hours ago": "sati ranije", + "Silence for %1 minutes": "Utišaj na %1 minuta", + "Check BG": "Provjeri GUK", + "BASAL": "Bazal", + "Current basal": "Trenutni bazal", + "Sensitivity": "Osjetljivost", + "Current Carb Ratio": "Trenutni I:C", + "Basal timezone": "Vremenska zona bazala", + "Active profile": "Aktivni profil", + "Active temp basal": "Aktivni temp bazal", + "Active temp basal start": "Početak aktivnog tamp bazala", + "Active temp basal duration": "Trajanje aktivnog temp bazala", + "Active temp basal remaining": "Prestali aktivni temp bazal", + "Basal profile value": "Profilna vrijednost bazala", + "Active combo bolus": "Aktivni dual bolus", + "Active combo bolus start": "Početak aktivnog dual bolusa", + "Active combo bolus duration": "Trajanje aktivnog dual bolusa", + "Active combo bolus remaining": "Preostali aktivni dual bolus", + "BG Delta": "GUK razlika", + "Elapsed Time": "Proteklo vrijeme", + "Absolute Delta": "Apsolutna razlika", + "Interpolated": "Interpolirano", + "BWP": "Čarobnjak bolusa", + "Urgent": "Hitno", + "Warning": "Upozorenje", + "Info": "Info", + "Lowest": "Najniže", + "Snoozing high alarm since there is enough IOB": "Stišan alarm za hiper pošto ima dovoljno aktivnog inzulina", + "Check BG, time to bolus?": "Provjeri GUK, vrijeme je za bolus?", + "Notice": "Poruka", + "required info missing": "nedostaju potrebne informacije", + "Insulin on Board": "Aktivni inzulín", + "Current target": "Trenutni cilj", + "Expected effect": "Očekivani efekt", + "Expected outcome": "Očekivani ishod", + "Carb Equivalent": "Ekvivalent u UGH", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "Višak inzulina je %1U više nego li je potrebno da se postigne donja ciljana granica, ne uzevši u obzir UGH", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "Višak inzulina je %1U više nego li je potrebno da se postigne donja ciljana granica, OBAVEZNO POKRIJTE SA UGH", + "%1U reduction needed in active insulin to reach low target, too much basal?": "Potrebno je smanjiti aktivni inzulin za %1U kako bi se dostigla donja ciljana granica, previše bazala? ", + "basal adjustment out of range, give carbs?": "prilagodba bazala je izvan raspona, dodati UGH?", + "basal adjustment out of range, give bolus?": "prilagodna bazala je izvan raspona, dati bolus?", + "above high": "iznad gornje granice", + "below low": "ispod donje granice", + "Projected BG %1 target": "Procjena GUK %1 cilja", + "aiming at": "ciljano", + "Bolus %1 units": "Bolus %1 jedinica", + "or adjust basal": "ili prilagodba bazala", + "Check BG using glucometer before correcting!": "Provjeri GUK glukometrom prije korekcije!", + "Basal reduction to account %1 units:": "Smanjeni bazal da uračuna %1 jedinica:", + "30m temp basal": "30m temp bazal", + "1h temp basal": "1h temp bazal", + "Cannula change overdue!": "Prošao rok za zamjenu kanile!", + "Time to change cannula": "Vrijeme za zamjenu kanile", + "Change cannula soon": "Zamijena kanile uskoro", + "Cannula age %1 hours": "Staros kanile %1 sati", + "Inserted": "Postavljanje", + "CAGE": "Starost kanile", + "COB": "Aktivni UGH", + "Last Carbs": "Posljednji UGH", + "IAGE": "Starost inzulina", + "Insulin reservoir change overdue!": "Prošao rok za zamjenu spremnika!", + "Time to change insulin reservoir": "Vrijeme za zamjenu spremnika", + "Change insulin reservoir soon": "Zamjena spremnika uskoro", + "Insulin reservoir age %1 hours": "Spremnik zamijenjen prije %1 sati", + "Changed": "Promijenjeno", + "IOB": "Aktivni inzulin", + "Careportal IOB": "Careportal IOB", + "Last Bolus": "Prethodni bolus", + "Basal IOB": "Bazalni aktivni inzulin", + "Source": "Izvor", + "Stale data, check rig?": "Nedostaju podaci, provjera opreme?", + "Last received:": "Zadnji podaci od:", + "%1m ago": "prije %1m", + "%1h ago": "prije %1 sati", + "%1d ago": "prije %1 dana", + "RETRO": "RETRO", + "SAGE": "Starost senzora", + "Sensor change/restart overdue!": "Prošao rok za zamjenu/restart senzora!", + "Time to change/restart sensor": "Vrijeme za zamjenu/restart senzora", + "Change/restart sensor soon": "Zamijena/restart senzora uskoro", + "Sensor age %1 days %2 hours": "Starost senzora %1 dana i %2 sati", + "Sensor Insert": "Postavljanje senzora", + "Sensor Start": "Pokretanje senzora", + "days": "dana", + "Insulin distribution": "Raspodjela inzulina", + "To see this report, press SHOW while in this view": "Za prikaz ovog izvješća, pritisnite PRIKAŽI na ovom prozoru", + "AR2 Forecast": "AR2 procjena", + "OpenAPS Forecasts": "OpenAPS prognoze", + "Temporary Target": "Privremeni cilj", + "Temporary Target Cancel": "Otkaz privremenog cilja", + "OpenAPS Offline": "OpenAPS odspojen", + "Profiles": "Profili", + "Time in fluctuation": "Vrijeme u fluktuaciji", + "Time in rapid fluctuation": "Vrijeme u brzoj fluktuaciji", + "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:": "Ovo je samo gruba procjena koja može biti neprecizna i ne mijenja testiranje iz krvi. Formula je uzeta iz:", + "Filter by hours": "Filter po satima", + "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.": "Vrijeme u fluktuaciji i vrijeme u brzoj fluktuaciji mjere % vremena u gledanom periodu, tijekom kojeg se GUK mijenja relativno brzo ili brzo. Niže vrijednosti su bolje.", + "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.": "Srednja ukupna dnevna promjena je suma apsolutnih vrijednosti svih pomaka u gledanom periodu, podijeljeno s brojem dana. Niže vrijednosti su bolje.", + "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "Srednja ukupna promjena po satu je suma apsolutnih vrijednosti svih pomaka u gledanom periodu, podijeljeno s brojem sati. Niže vrijednosti su bolje.", + "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.", + "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">ovdje.", + "Mean Total Daily Change": "Srednja ukupna dnevna promjena", + "Mean Hourly Change": "Srednja ukupna promjena po satu", + "FortyFiveDown": "sporo padajuće", + "FortyFiveUp": "sporo rastuće", + "Flat": "ravno", + "SingleUp": "rastuće", + "SingleDown": "padajuće", + "DoubleDown": "brzo padajuće", + "DoubleUp": "brzo rastuće", + "virtAsstUnknown": "Ova vrijednost je trenutno nepoznata. Molimo provjerite Nightscout stranicu za više detalja.", + "virtAsstTitleAR2Forecast": "AR2 procjena", + "virtAsstTitleCurrentBasal": "Trenutni Bazal", + "virtAsstTitleCurrentCOB": "Trenutni COB", + "virtAsstTitleCurrentIOB": "Trenutni IOB", + "virtAsstTitleLaunch": "Dobrodošli na Nightscout", + "virtAsstTitleLoopForecast": "Loop Forecast", + "virtAsstTitleLastLoop": "Last Loop", + "virtAsstTitleOpenAPSForecast": "OpenAPS prognoza", + "virtAsstTitlePumpReservoir": "Preostali inzulin", + "virtAsstTitlePumpBattery": "Baterija pumpe", + "virtAsstTitleRawBG": "Current Raw BG", + "virtAsstTitleUploaderBattery": "Uploader Battery", + "virtAsstTitleCurrentBG": "Current BG", + "virtAsstTitleFullStatus": "Full Status", + "virtAsstTitleCGMMode": "CGM Mode", + "virtAsstTitleCGMStatus": "CGM Status", + "virtAsstTitleCGMSessionAge": "CGM Session Age", + "virtAsstTitleCGMTxStatus": "CGM Transmitter Status", + "virtAsstTitleCGMTxAge": "CGM Transmitter Age", + "virtAsstTitleCGMNoise": "CGM Noise", + "virtAsstTitleDelta": "Blood Glucose Delta", + "virtAsstStatus": "%1 i %2 od %3.", + "virtAsstBasal": "%1 trenutni bazal je %2 jedinica(e) po satu", + "virtAsstBasalTemp": "%1 temp basal of %2 units per hour will end %3", + "virtAsstIob": "and you have %1 insulin on board.", + "virtAsstIobIntent": "You have %1 insulin on board", + "virtAsstIobUnits": "%1 units of", + "virtAsstLaunch": "What would you like to check on Nightscout?", + "virtAsstPreamble": "Vaš", + "virtAsstPreamble3person": "%1 has a ", + "virtAsstNoInsulin": "no", + "virtAsstUploadBattery": "Your uploader battery is at %1", + "virtAsstReservoir": "You have %1 units remaining", + "virtAsstPumpBattery": "Your pump battery is at %1 %2", + "virtAsstUploaderBattery": "Your uploader battery is at %1", + "virtAsstLastLoop": "The last successful loop was %1", + "virtAsstLoopNotAvailable": "Loop plugin does not seem to be enabled", + "virtAsstLoopForecastAround": "According to the loop forecast you are expected to be around %1 over the next %2", + "virtAsstLoopForecastBetween": "According to the loop forecast you are expected to be between %1 and %2 over the next %3", + "virtAsstAR2ForecastAround": "According to the AR2 forecast you are expected to be around %1 over the next %2", + "virtAsstAR2ForecastBetween": "According to the AR2 forecast you are expected to be between %1 and %2 over the next %3", + "virtAsstForecastUnavailable": "Unable to forecast with the data that is available", + "virtAsstRawBG": "Your raw bg is %1", + "virtAsstOpenAPSForecast": "The OpenAPS Eventual BG is %1", + "virtAsstCob3person": "%1 has %2 carbohydrates on board", + "virtAsstCob": "You have %1 carbohydrates on board", + "virtAsstCGMMode": "Your CGM mode was %1 as of %2.", + "virtAsstCGMStatus": "Your CGM status was %1 as of %2.", + "virtAsstCGMSessAge": "Your CGM session has been active for %1 days and %2 hours.", + "virtAsstCGMSessNotStarted": "There is no active CGM session at the moment.", + "virtAsstCGMTxStatus": "Your CGM transmitter status was %1 as of %2.", + "virtAsstCGMTxAge": "Your CGM transmitter is %1 days old.", + "virtAsstCGMNoise": "Your CGM noise was %1 as of %2.", + "virtAsstCGMBattOne": "Your CGM battery was %1 volts as of %2.", + "virtAsstCGMBattTwo": "Your CGM battery levels were %1 volts and %2 volts as of %3.", + "virtAsstDelta": "Your delta was %1 between %2 and %3.", + "virtAsstDeltaEstimated": "Your estimated delta was %1 between %2 and %3.", + "virtAsstUnknownIntentTitle": "Unknown Intent", + "virtAsstUnknownIntentText": "I'm sorry, I don't know what you're asking for.", + "Fat [g]": "Masnoće [g]", + "Protein [g]": "Proteini [g]", + "Energy [kJ]": "Energija [kJ]", + "Clock Views:": "Satovi:", + "Clock": "Sat", + "Color": "Boja", + "Simple": "Jednostavan", + "TDD average": "Srednji TDD", + "Bolus average": "Bolus average", + "Basal average": "Basal average", + "Base basal average:": "Base basal average:", + "Carbs average": "Prosjek UGH", + "Eating Soon": "Uskoro obrok", + "Last entry {0} minutes ago": "Posljednji zapis prije {0} minuta", + "change": "promjena", + "Speech": "Govor", + "Target Top": "Gornja granica", + "Target Bottom": "Donja granica", + "Canceled": "Otkazano", + "Meter BG": "GUK iz krvi", + "predicted": "prognozirano", + "future": "budućnost", + "ago": "prije", + "Last data received": "Podaci posljednji puta primljeni", + "Clock View": "Prikaz sata", + "Protein": "Proteini", + "Fat": "Masti", + "Protein average": "Prosjek proteina", + "Fat average": "Prosjek masti", + "Total carbs": "Ukupno ugh", + "Total protein": "Ukupno proteini", + "Total fat": "Ukupno masti", + "Database Size": "Database Size", + "Database Size near its limits!": "Database Size near its limits!", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!", + "Database file size": "Database file size", + "%1 MiB of %2 MiB (%3%)": "%1 MiB of %2 MiB (%3%)", + "Data size": "Data size", + "virtAsstDatabaseSize": "%1 MiB. That is %2% of available database space.", + "virtAsstTitleDatabaseSize": "Database file size", + "Carbs/Food/Time": "Carbs/Food/Time", + "You have administration messages": "You have administration messages", + "Admin messages in queue": "Admin messages in queue", + "Queue empty": "Queue empty", + "There are no admin messages in queue": "There are no admin messages in queue", + "Please sign in using the API_SECRET to see your administration messages": "Please sign in using the API_SECRET to see your administration messages", + "Reads enabled in default permissions": "Reads enabled in default permissions", + "Data reads enabled": "Data reads enabled", + "Data writes enabled": "Data writes enabled", + "Data writes not enabled": "Data writes not enabled", + "Color prediction lines": "Color prediction lines", + "Release Notes": "Release Notes", + "Check for Updates": "Check for Updates", + "Open Source": "Open Source", + "Nightscout Info": "Nightscout Info", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.", + "Note that time shift is available only when viewing multiple days.": "Note that time shift is available only when viewing multiple days.", + "Please select a maximum of two weeks duration and click Show again.": "Please select a maximum of two weeks duration and click Show again.", + "Show profiles table": "Show profiles table", + "Show predictions": "Show predictions", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Timeshift on meals larger than %1 g carbs consumed between %2 and %3", + "Previous": "Previous", + "Previous day": "Previous day", + "Next day": "Next day", + "Next": "Next", + "Temp basal delta": "Temp basal delta", + "Authorized by token": "Authorized by token", + "Auth role": "Auth role", + "view without token": "view without token", + "Remove stored token": "Remove stored token", + "Weekly Distribution": "Weekly Distribution", + "Failed authentication": "Failed authentication", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?", + "Default (with leading zero and U)": "Default (with leading zero and U)", + "Concise (with U, without leading zero)": "Concise (with U, without leading zero)", + "Minimal (without leading zero and U)": "Minimal (without leading zero and U)", + "Small Bolus Display": "Small Bolus Display", + "Large Bolus Display": "Large Bolus Display", + "Bolus Display Threshold": "Bolus Display Threshold", + "%1 U and Over": "%1 U and Over", + "Event repeated %1 times.": "Event repeated %1 times.", + "minutes": "minutes", + "Last recorded %1 %2 ago.": "Last recorded %1 %2 ago.", + "Security issue": "Security issue", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.", + "less than 1": "less than 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system." +} diff --git a/translations/hu_HU.json b/translations/hu_HU.json new file mode 100644 index 00000000000..7698dc7dc36 --- /dev/null +++ b/translations/hu_HU.json @@ -0,0 +1,707 @@ +{ + "Listening on port": "Port figyelése", + "Mo": "H", + "Tu": "K", + "We": "Sze", + "Th": "Cs", + "Fr": "P", + "Sa": "Szo", + "Su": "V", + "Monday": "Hétfő", + "Tuesday": "Kedd", + "Wednesday": "Szerda", + "Thursday": "Csütörtök", + "Friday": "Péntek", + "Saturday": "Szombat", + "Sunday": "Vasárnap", + "Category": "Kategória", + "Subcategory": "Alkategória", + "Name": "Név", + "Today": "Ma", + "Last 2 days": "Elmúlt 2 nap", + "Last 3 days": "Elmúlt 3 nap", + "Last week": "Elmúlt hét", + "Last 2 weeks": "Elmúlt 2 hét", + "Last month": "Elmúlt hónap", + "Last 3 months": "Elmúlt 3 hónap", + "From": "Ettől", + "To": "Eddig", + "Notes": "Megjegyzések", + "Food": "Étel", + "Insulin": "Inzulin", + "Carbs": "Szénhidrát", + "Notes contain": "Jegyzet tartalmazza", + "Target BG range bottom": "Céltartomány alja", + "top": "teteje", + "Show": "Mutasd", + "Display": "Megjelenítés", + "Loading": "Betöltés", + "Loading profile": "Profil betöltése", + "Loading status": "Állapot betöltése", + "Loading food database": "Étel adatbázis betöltése", + "not displayed": "nincs megjelenítve", + "Loading CGM data of": "CGM adatok betöltése tőle", + "Loading treatments data of": "Kezelési adatok betöltése tőle", + "Processing data of": "Adatok feldolgozása tőle", + "Portion": "Adag", + "Size": "Méret", + "(none)": "(nincs)", + "None": "Semmi", + "": "", + "Result is empty": "Az eredmény üres", + "Day to day": "Napi", + "Week to week": "Heti", + "Daily Stats": "Napi statisztika", + "Percentile Chart": "Percentilis", + "Distribution": "Eloszlás", + "Hourly stats": "Óránkénti statisztika", + "netIOB stats": "netIOB statisztika", + "temp basals must be rendered to display this report": "Az átmeneti bazálnak meg kell lennie jelenítve az adott jelentls megtekintéséhez", + "No data available": "Nincs elérhető adat", + "Low": "Alacsony", + "In Range": "Tartományon belül", + "Period": "Időszak", + "High": "Magas", + "Average": "Átlag", + "Low Quartile": "Alacsony kvartilis", + "Upper Quartile": "Magas kvartilis", + "Quartile": "Kvartilis", + "Date": "Dátum", + "Normal": "Céltartományban", + "Median": "Medián", + "Readings": "Értékek", + "StDev": "Szórás", + "Daily stats report": "Napi statisztika jelentés", + "Glucose Percentile report": "Szenzorglükóz percentilis jelentés", + "Glucose distribution": "Szenzorglükóz eloszlás", + "days total": "nap összesen", + "Total per day": "Napi összes", + "Overall": "Összesen", + "Range": "Tartomány", + "% of Readings": "Értékek %-a", + "# of Readings": "Értékek száma", + "Mean": "Középérték", + "Standard Deviation": "Szórás", + "Max": "Max", + "Min": "Min", + "A1c estimation*": "HbA1c becslés*", + "Weekly Success": "Heti eloszlás", + "There is not sufficient data to run this report. Select more days.": "Nincs elég adat a jelentés elkészítéséhez. Válassz több napot!", + "Using stored API secret hash": "Az elmentett API hash jelszót használom", + "No API secret hash stored yet. You need to enter API secret.": "Még nem lett a titkos API hash elmentve. Add meg a titkos API jelszót", + "Database loaded": "Adatbázis betöltve", + "Error: Database failed to load": "Hiba: adatbázis betöltése sikertelen", + "Error": "Hiba", + "Create new record": "Bejegyzés létrehozása", + "Save record": "Bejegyzés mentése", + "Portions": "Adag", + "Unit": "Mértékegység", + "GI": "GI", + "Edit record": "Bejegyzés szerkesztése", + "Delete record": "Bejegyzés törlése", + "Move to the top": "Mozgasd legfelülre", + "Hidden": "Rejtett", + "Hide after use": "Elrejtés használat után", + "Your API secret must be at least 12 characters long": "Az API_SECRET több mint 12 karakterből kell hogy álljon", + "Bad API secret": "Helytelen API_SECRET", + "API secret hash stored": "API_SECRET hash elmentve", + "Status": "Állapot", + "Not loaded": "Nincs betöltve", + "Food Editor": "Ételszerkesztő", + "Your database": "Saját adatbázis", + "Filter": "Szűrő", + "Save": "Mentés", + "Clear": "Törlés", + "Record": "Bejegyzés", + "Quick picks": "Gyors választások", + "Show hidden": "Rejtettek mutatása", + "Your API secret or token": "Saját API_secret vagy token", + "Remember this device. (Do not enable this on public computers.)": "Eszköz megjegyzése (ne jelöld be nyilvános eszközökön)", + "Treatments": "Kezelések", + "Time": "Idő", + "Event Type": "Esemény típusa", + "Blood Glucose": "Szenzorglükóz", + "Entered By": "Rögzítette", + "Delete this treatment?": "Kezelés törlése?", + "Carbs Given": "Szénhidrát", + "Insulin Given": "Inzulin", + "Event Time": "Esemény időpontja", + "Please verify that the data entered is correct": "Kérlek ellenőrizd az adatok helyességét", + "BG": "SzG", + "Use BG correction in calculation": "Használj SzG korrekciót a számításban", + "BG from CGM (autoupdated)": "SzG a CGM-től (auto. frissítve)", + "BG from meter": "VC a mérőtől", + "Manual BG": "Kézi VC", + "Quickpick": "Gyors választás", + "or": "vagy", + "Add from database": "Hozzáadás adatbázisból", + "Use carbs correction in calculation": "Használj szénhidrát korrekciót a számításban", + "Use COB correction in calculation": "Használj COB korrekciót a számításban", + "Use IOB in calculation": "Használd az IOB-t a számításban", + "Other correction": "Egyéb korrekció", + "Rounding": "Kerekítés", + "Enter insulin correction in treatment": "A korrekciós inzulint a kezeléseknél add meg", + "Insulin needed": "Inzulin szükséges", + "Carbs needed": "Szénhidrát szükséges", + "Carbs needed if Insulin total is negative value": "Szénhidrát szükséges ha a teljes inzulin negatív", + "Basal rate": "Bázisinzulin", + "60 minutes earlier": "60 perccel korábban", + "45 minutes earlier": "45 perccel korábban", + "30 minutes earlier": "30 perccel korábban", + "20 minutes earlier": "20 perccel korábban", + "15 minutes earlier": "15 perccel korábban", + "Time in minutes": "perc-ben", + "15 minutes later": "15 perccel később", + "20 minutes later": "20 perccel később", + "30 minutes later": "30 perccel később", + "45 minutes later": "45 perccel később", + "60 minutes later": "60 perccel később", + "Additional Notes, Comments": "További megjegyzések, kommentárok", + "RETRO MODE": "RETRO MÓD", + "Now": "Most", + "Other": "Egyéb:", + "Submit Form": "Ok", + "Profile Editor": "Profilszerkesztő", + "Reports": "Jelentések", + "Add food from your database": "Étel hozzáadása saját adatbázisból", + "Reload database": "Adatbázis újratöltése", + "Add": "Hozzáadni", + "Unauthorized": "Nem hitelesített", + "Entering record failed": "Bejegyzés hozzáadása sikertelen", + "Device authenticated": "Eszköz hitelesítve", + "Device not authenticated": "Nem hitelesített eszköz", + "Authentication status": "Hitelesítés állapota", + "Authenticate": "Hitelesít", + "Remove": "Eltávolítani", + "Your device is not authenticated yet": "Az eszköz még nincs hitelesítve", + "Sensor": "Szenzor", + "Finger": "Ujj", + "Manual": "Kézi", + "Scale": "Skála", + "Linear": "Lineáris", + "Logarithmic": "Logaritmikus", + "Logarithmic (Dynamic)": "Logaritmikus (dinamikus)", + "Insulin-on-Board": "Aktív inzulin (IOB)", + "Carbs-on-Board": "Aktív szénhidrát (COB)", + "Bolus Wizard Preview": "Bolus Varázsló", + "Value Loaded": "Érték betöltve", + "Cannula Age": "Kanül kora", + "Basal Profile": "Bázisprofil", + "Silence for 30 minutes": "Némítás 30 percre", + "Silence for 60 minutes": "Némítás 60 percre", + "Silence for 90 minutes": "Némítás 90 percre", + "Silence for 120 minutes": "Némítás 120 percre", + "Settings": "Beállítások", + "Units": "Mértékegység", + "Date format": "Időformátum", + "12 hours": "12 óra", + "24 hours": "24 óra", + "Log a Treatment": "Kezelés rögzítése", + "BG Check": "VC ellenőrzés", + "Meal Bolus": "Étkezési bólus", + "Snack Bolus": "Kis étkezési bólus", + "Correction Bolus": "Korrekciós bólus", + "Carb Correction": "Korrekciós szénhidrát", + "Note": "Jegyzet", + "Question": "Kérdés", + "Exercise": "Edzés", + "Pump Site Change": "Kanülcsere", + "CGM Sensor Start": "CGM szenzor indítás", + "CGM Sensor Stop": "CGM szenzor leállítás", + "CGM Sensor Insert": "CGM szenzor behelyezés", + "Sensor Code": "Szenzor kód", + "Transmitter ID": "Transzmitter ID", + "Dexcom Sensor Start": "Dexcom szenzor indítás", + "Dexcom Sensor Change": "Dexcom szenzor csere", + "Insulin Cartridge Change": "Inzulintartály-csere", + "D.A.D. Alert": "D.A.D riasztás", + "Glucose Reading": "Cukorszint", + "Measurement Method": "Mérés módja", + "Meter": "Vércukormérő", + "Amount in grams": "gramm-ban", + "Amount in units": "Egység-ben", + "View all treatments": "Összes kezelés", + "Enable Alarms": "Riasztások bekapcsolása", + "Pump Battery Change": "Pumpaelem kora", + "Pump Battery Age": "Pumpaelem kora", + "Pump Battery Low Alarm": "Pumpa elem merül riasztás", + "Pump Battery change overdue!": "Pumpa elem cserére szorul!", + "When enabled an alarm may sound.": "Bekapcsoláskor hang figyelmeztetés várható", + "Urgent High Alarm": "Nagyon magas cukorszint figyelmeztetés", + "High Alarm": "Magas riasztás", + "Low Alarm": "Alacsony riasztás", + "Urgent Low Alarm": "Nagyon alacsony cukorszint figyelmeztetés", + "Stale Data: Warn": "Figyelmeztetés: Az adatok öregnek tűnnek", + "Stale Data: Urgent": "Figyelmeztetés: Az adatok nagyon öregnek tűnnek", + "mins": "perc", + "Night Mode": "Éjszakai mód", + "When enabled the page will be dimmed from 10pm - 6am.": "Ezt bekapcsolva a képernyő halványabb lesz 22-től 6-ig", + "Enable": "Bekapcsolva", + "Show Raw BG Data": "Nyers SzG értékek megjelenítése", + "Never": "Soha", + "Always": "Mindig", + "When there is noise": "Ha zajos a mérés", + "When enabled small white dots will be displayed for raw BG data": "Ha be van kapcsolva, kis fehér pontok jelezik a nyers SzG értékeket", + "Custom Title": "Egyéni Cím", + "Theme": "Téma", + "Default": "Alapértelmezett", + "Colors": "Színes", + "Colorblind-friendly colors": "Beállítás színvakok számára", + "Reset, and use defaults": "Visszaállítás a kiinduló állapotba", + "Calibrations": "Kalibrációk", + "Alarm Test / Smartphone Enable": "Figyelmeztetés teszt / Mobiltelefon aktiválása", + "Bolus Wizard": "Bólus varázsló", + "in the future": "a jövőben", + "time ago": "idővel ezelőtt", + "hr ago": "órája", + "hrs ago": "órája", + "min ago": "perce", + "mins ago": "perce", + "day ago": "napja", + "days ago": "napja", + "long ago": "nagyon régen", + "Clean": "Tiszta", + "Light": "Könnyű", + "Medium": "Közepes", + "Heavy": "Nehéz", + "Treatment type": "Kezelés típusa", + "Raw BG": "Nyers SzG", + "Device": "Készülék", + "Noise": "Zaj", + "Calibration": "Kalibráció", + "Show Plugins": "Bővítmények", + "About": "Az alkalmazásról", + "Value in": "Érték", + "Carb Time": "Étkezés ideje", + "Language": "Nyelv", + "Add new": "Új hozzáadása", + "g": "g", + "ml": "ml", + "pcs": "db", + "Drag&drop food here": "Húzd és ejtsd ide az ételt", + "Care Portal": "Care portál", + "Medium/Unknown": "Átlagos/Ismeretlen", + "IN THE FUTURE": "A JÖVŐBEN", + "Order": "Rendezés", + "oldest on top": "legrégebbi elől", + "newest on top": "legújabb elől", + "All sensor events": "Ősszes szenzor esemény", + "Remove future items from mongo database": "Töröld az összes jövőben lévő adatot az adatbázisból", + "Find and remove treatments in the future": "Töröld az összes kezelést a jövőben az adatbázisból", + "This task find and remove treatments in the future.": "Ez a feladat megkeresi és eltávolítja az összes jövőben lévő kezelést", + "Remove treatments in the future": "Jövőbeli kerelések eltávolítésa", + "Find and remove entries in the future": "Jövőbeli bejegyzések eltávolítása", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "Ez a feladat megkeresi és eltávolítja az összes CGM adatot amit a feltöltő rossz idővel-dátummal töltött fel", + "Remove entries in the future": "Jövőbeli bejegyzések törlése", + "Loading database ...": "Adatbázis betöltése ...", + "Database contains %1 future records": "Az adatbázis %1 jövöbeli adatot tartalmaz", + "Remove %1 selected records?": "Kitöröljük a %1 kiválasztott adatot?", + "Error loading database": "Hiba az adatbázis betöltése közben", + "Record %1 removed ...": "A %1 bejegyzés törölve...", + "Error removing record %1": "Hiba lépett fel a %1 bejegyzés törlése közben", + "Deleting records ...": "Bejegyzések törlése ...", + "%1 records deleted": "%1 bejegyzés törölve", + "Clean Mongo status database": "Mongo állapot (status) adatbázis tisztítása", + "Delete all documents from devicestatus collection": "Az összes \"devicestatus\" dokumentum törlése", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "Ez a feladat kitörli az összes \"devicestatus\" dokumentumot. Hasznos ha a feltöltő elem állapota nem jelenik meg helyesen.", + "Delete all documents": "Az összes dokumentum törlése", + "Delete all documents from devicestatus collection?": "Az összes dokumentum törlése a \"devicestatus\" gyűjteményből?", + "Database contains %1 records": "Az adatbázis %1 bejegyzést tartalmaz", + "All records removed ...": "Az összes bejegyzés törölve...", + "Delete all documents from devicestatus collection older than 30 days": "Az összes \"devicestatus\" dokumentum törlése ami 30 napnál öregebb", + "Number of Days to Keep:": "Mentés ennyi napra:", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "Ez a feladat törli az összes \"devicestatus\" dokumentumot a gyűjteményből ami 30 napnál öregebb. Hasznos ha a feltöltő elem állapota nem jelenik meg rendesen. ", + "Delete old documents from devicestatus collection?": "Kitorli az öreg dokumentumokat a \"devicestatus\" gyűjteményből?", + "Clean Mongo entries (glucose entries) database": "Mongo bejegyzés adatbázis tisztítása", + "Delete all documents from entries collection older than 180 days": "Az összes bejegyzés gyűjtemény törlése ami 180 napnál öregebb", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "A feladat kitörli az összes bejegyzésekből álló dokumentumot ami 180 napnál öregebb. Hasznos ha a feltöltő elem állapota nem jelenik meg helyesen.", + "Delete old documents": "Öreg dokumentumok törlése", + "Delete old documents from entries collection?": "Az öreg dokumentumok törlése a bejegyzések gyűjteményéből?", + "%1 is not a valid number": "A %1 nem érvényes szám", + "%1 is not a valid number - must be more than 2": "A %1 nem érvényes szám - nagyobb számnak kell lennie mint a 2", + "Clean Mongo treatments database": "Mondo kezelési datbázisának törlése", + "Delete all documents from treatments collection older than 180 days": "Töröld az összes 180 napnál öregebb kezelési dokumentumot", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "A feladat eltávolítja az összes kezelési dokumentumot ami öregebb 180 napnál. Hasznos ha a feltöltő elem állapota nem jelenik meg helyesen.", + "Delete old documents from treatments collection?": "Törölni az összes doumentumot a kezelési gyűjteményből?", + "Admin Tools": "Adminisztrációs eszközök", + "Nightscout reporting": "Nightscout jelentések", + "Cancel": "Vissza", + "Edit treatment": "Kezelés szerkesztése", + "Duration": "Behelyezés óta eltelt idő", + "Duration in minutes": "Idő percekben", + "Temp Basal": "Átmeneti bazál", + "Temp Basal Start": "Átmeneti bazál Kezdete", + "Temp Basal End": "Átmeneti bazál Vége", + "Percent": "Százalék", + "Basal change in %": "Bazál változása %", + "Basal value": "Bazál értéke", + "Absolute basal value": "Abszolút bazál érték", + "Announcement": "Közlemény", + "Loading temp basal data": "Az étmeneti bazál adatainak betöltése", + "Save current record before changing to new?": "Elmentsem az aktuális adatokat mielőtt újra váltunk?", + "Profile Switch": "Profil csere", + "Profile": "Profil", + "General profile settings": "Általános profil beállítások", + "Title": "Elnevezés", + "Database records": "Adatbázis bejegyzések", + "Add new record": "Új bejegyzés hozzáadása", + "Remove this record": "Bejegyzés törlése", + "Clone this record to new": "A kiválasztott bejegyzés másolása", + "Record valid from": "Bejegyzés érvényessége", + "Stored profiles": "Tárolt profilok", + "Timezone": "Időzóna", + "Duration of Insulin Activity (DIA)": "Inzulin aktivitás időtartama (DIA)", + "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.": "Kimutatja hogy általában meddig hat az inzulin. Változó különböző pácienseknél és inzulinoknál. Általában 3-4 óra között mozog. Néha inzulin élettartalomnak is nevezik.", + "Insulin to carb ratio (I:C)": "Inzulin-szénhidrát arány", + "Hours:": "Óra:", + "hours": "óra", + "g/hour": "g/óra", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "g szénhidrát per egység inzulin. Az arány, hogy hány gramm szénhidrát fed le bizonyos egységnyi inzulint", + "Insulin Sensitivity Factor (ISF)": "Inzulin Érzékenységi Faktor (ISF)", + "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "mg/dL vagy mmol/L per inzulin egység. Az aránya annak hogy mennyire változik a cukorszint bizonyos egység inzulintól", + "Carbs activity / absorption rate": "Szénhidrátok felszívódásának gyorsasága", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "gramm per idő egység. Kifejezi a COB változását es a szénhidrátok felszívódását bizonyos idő elteltével. A szénhidrát felszívódásának tengelye nehezebben értelmezhető mint az inzulin aktivitás (IOB), de hasonló lehet a kezdeti késedelemhez és a felszívódáshoz (g/óra). ", + "Basal rates [unit/hour]": "Bazál [egység/óra]", + "Target BG range [mg/dL,mmol/L]": "Cukorszint választott tartomány [mg/dL,mmol/L]", + "Start of record validity": "Bejegyzés kezdetének érvényessége", + "Icicle": "Inverzió", + "Render Basal": "Bazál megjelenítése", + "Profile used": "Használatban lévő profil", + "Calculation is in target range.": "A számítás a cél tartományban található", + "Loading profile records ...": "Profil bejegyzéseinek betöltése...", + "Values loaded.": "Értékek betöltése.", + "Default values used.": "Alap értékek használva.", + "Error. Default values used.": "Hiba: Alap értékek használva", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "A cukorszint-cél időtartománya nem egyezik. Visszaállítás az alapértékekre", + "Valid from:": "Érvényes:", + "Save current record before switching to new?": "Elmentsem az aktuális adatokat mielőtt újra válunk?", + "Add new interval before": "Új intervallum hozzáadása elötte", + "Delete interval": "Intervallum törlése", + "I:C": "I:C", + "ISF": "ISF", + "Combo Bolus": "Kombinált bólus", + "Difference": "Különbség", + "New time": "Új idő:", + "Edit Mode": "Szerkesztési mód", + "When enabled icon to start edit mode is visible": "Engedélyezés után a szerkesztési ikon látható", + "Operation": "Operáció", + "Move": "Áthelyezés", + "Delete": "Törlés", + "Move insulin": "Inzulin áthelyezése", + "Move carbs": "Szénhidrát áthelyezése", + "Remove insulin": "Inzulin törlése", + "Remove carbs": "Szénhidrát törlése", + "Change treatment time to %1 ?": "A kezelés időpontjának áthelyezése %1?", + "Change carbs time to %1 ?": "Szénhidrát időpontjának áthelyezése %1", + "Change insulin time to %1 ?": "Inzulin időpont áthelyezése %1", + "Remove treatment ?": "Kezelés törlése?", + "Remove insulin from treatment ?": "Inzulin törlése a kezelésből?", + "Remove carbs from treatment ?": "Szénhidrát törlése a kezelésből?", + "Rendering": "Kirajzolás", + "Loading OpenAPS data of": "OpenAPS adatainak betöltése innen", + "Loading profile switch data": "Profil változás adatainak betöltése", + "Redirecting you to the Profile Editor to create a new profile.": "Átirányítás a profil szerkesztőre, hogy egy új profilt készítsen", + "Pump": "Pumpa", + "Sensor Age": "Szenzor élettartalma (SAGE)", + "Insulin Age": "Inzulin élettartalma (IAGE)", + "Temporary target": "Átmeneti cél", + "Reason": "Indok", + "Eating soon": "Hamarosan eszem", + "Top": "Felső", + "Bottom": "Alsó", + "Activity": "Aktivitás", + "Targets": "Célok", + "Bolus insulin:": "Bólus inzulin", + "Base basal insulin:": "Teljes bázis inzulin:", + "Positive temp basal insulin:": "Pozitív átmeneti bazál inzulin", + "Negative temp basal insulin:": "Negatív átmeneti bazál inzulin", + "Total basal insulin:": "Teljes bazál inzulin", + "Total daily insulin:": "Teljes napi inzulin", + "Unable to save Role": "Szerep mentése sikertelen", + "Unable to delete Role": "Nem lehetett a Szerepet törölni", + "Database contains %1 roles": "Az adatbázis %1 szerepet tartalmaz", + "Edit Role": "Szerep szerkesztése", + "admin, school, family, etc": "admin, iskola, család, stb", + "Permissions": "Engedély", + "Are you sure you want to delete: ": "Biztos, hogy törölni szeretnéd: ", + "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.": "Minden szerepnek egy vagy több engedélye van. A * engedély helyettesítő engedély amely a hierarchiához : használja elválasztásnak.", + "Add new Role": "Új szerep hozzáadása", + "Roles - Groups of People, Devices, etc": "Szerepek - Emberek csoportja, berendezések, stb.", + "Edit this role": "Szerep szerkesztése", + "Admin authorized": "Adminisztrátor engedélyezve", + "Subjects - People, Devices, etc": "Semélyek - Emberek csoportja, berendezések, stb.", + "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "Mindegyik személynek egy egyedi hozzáférése lesz 1 vagy több szereppel. Kattints a tokenre, hogy egy új nézetet kapj - a kapott linket megoszthatod velük.", + "Add new Subject": "Új személy hozzáadása", + "Unable to save Subject": "Személy mentése sikertelen", + "Unable to delete Subject": "A személyt nem sikerült törölni", + "Database contains %1 subjects": "Az adatbázis %1 személyt tartalmaz", + "Edit Subject": "Személy szerkesztése", + "person, device, etc": "személy, berendezés, stb.", + "role1, role2": "szerep1, szerep2", + "Edit this subject": "A kiválasztott személy szerkesztése", + "Delete this subject": "A kiválasztott személy törlése", + "Roles": "Szerepek", + "Access Token": "Hozzáférési token", + "hour ago": "órája", + "hours ago": "órája", + "Silence for %1 minutes": "Lehalkítás %1 percre", + "Check BG": "Ellenőrizd a cukorszintet", + "BASAL": "BAZÁL", + "Current basal": "Aktuális bazál", + "Sensitivity": "Inzulin érzékenység", + "Current Carb Ratio": "Aktuális szénhidrát arány", + "Basal timezone": "Bazál időzóna", + "Active profile": "Aktív profil", + "Active temp basal": "Aktív átmeneti bazál", + "Active temp basal start": "Aktív átmeneti bazál kezdete", + "Active temp basal duration": "Aktív átmeneti bazál időtartalma", + "Active temp basal remaining": "Átmeneti bazál visszamaradó ideje", + "Basal profile value": "Bazál profil értéke", + "Active combo bolus": "Aktív kombinált bólus", + "Active combo bolus start": "Aktív kombinált bólus kezdete", + "Active combo bolus duration": "Aktív kombinált bólus időtartalma", + "Active combo bolus remaining": "Aktív kombinált bólus fennmaradó idő", + "BG Delta": "Cukorszint változása", + "Elapsed Time": "Eltelt idő", + "Absolute Delta": "Abszolút külonbség", + "Interpolated": "Interpolált", + "BWP": "BWP", + "Urgent": "Sűrgős", + "Warning": "Figyelmeztetés", + "Info": "Információ", + "Lowest": "Legalacsonyabb", + "Snoozing high alarm since there is enough IOB": "Magas cukor riasztás késleltetése mivel elegendő inzulin van kiadva (IOB)", + "Check BG, time to bolus?": "Ellenőrizd a cukorszintet. Ideje bóluszt adni?", + "Notice": "Megjegyzés", + "required info missing": "Szükséges információ hiányos", + "Insulin on Board": "Aktív inzulin (IOB)", + "Current target": "Jelenlegi cél", + "Expected effect": "Elvárt efektus", + "Expected outcome": "Elvárt eredmény", + "Carb Equivalent": "Szénhidrát megfelelője", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "Felesleges inzulin megegyező %1U egységgel az alacsony cél eléréséhez, nem számolva a szénhidrátokkal", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "Felesleges inzulin megegyező %1U egységgel az alacsony cél eléréséhez. FONTOS, HOGY A IOB LEGYEN SZÉNHIDRÁTTAL TAKARVA", + "%1U reduction needed in active insulin to reach low target, too much basal?": "%1U egységnyi inzulin redukció szükséges az alacsony cél eléréséhez, túl magas a bazál?", + "basal adjustment out of range, give carbs?": "bazál változtatása az arányokon kívül esik, szénhidrát bevitele?", + "basal adjustment out of range, give bolus?": "bazál változtatása az arányokon kívül esik, bólusz beadása?", + "above high": "magas felett", + "below low": "alacsony alatt", + "Projected BG %1 target": "Kiszámított BG cél %1", + "aiming at": "cél", + "Bolus %1 units": "Bólus %1 egységet", + "or adjust basal": "vagy a bazál változtatása", + "Check BG using glucometer before correcting!": "Ellenőrizd a cukorszintet mérővel korrekció előtt!", + "Basal reduction to account %1 units:": "A bazál csökkentése %1 egység kiszámításához:", + "30m temp basal": "30p általános bazál", + "1h temp basal": "10 általános bazál", + "Cannula change overdue!": "Kanil cseréjének ideje elmúlt", + "Time to change cannula": "Ideje kicserélni a kanilt", + "Change cannula soon": "Hamarosan cseréld ki a kanilt", + "Cannula age %1 hours": "Kamil életkora %1 óra", + "Inserted": "Behelyezve", + "CAGE": "Kanil Ideje", + "COB": "COB", + "Last Carbs": "Utolsó szénhidrátok", + "IAGE": "IAGE", + "Insulin reservoir change overdue!": "Inzulin tartály cseréjének ideje elmúlt", + "Time to change insulin reservoir": "Itt az ideje az inzulin tartály cseréjének", + "Change insulin reservoir soon": "Hamarosan cseréld ki az inzulin tartályt", + "Insulin reservoir age %1 hours": "Az inzulin tartály %1 órája volt cserélve", + "Changed": "Cserélve", + "IOB": "IOB", + "Careportal IOB": "Careportal IOB érték", + "Last Bolus": "Utolsó bólus", + "Basal IOB": "Bazál IOB", + "Source": "Forrás", + "Stale data, check rig?": "Öreg adatok, ellenőrizd a feltöltőt", + "Last received:": "Utóljára fogadott:", + "%1m ago": "%1p ezelőtt", + "%1h ago": "%1ó ezelőtt", + "%1d ago": "%1n ezelőtt", + "RETRO": "RETRO", + "SAGE": "SAGE", + "Sensor change/restart overdue!": "Szenzor cseréjének / újraindításának ideje lejárt", + "Time to change/restart sensor": "Ideje a szenzort cserélni / újraindítani", + "Change/restart sensor soon": "Hamarosan indítsd újra vagy cseréld ki a szenzort", + "Sensor age %1 days %2 hours": "Szenzor ideje %1 nap és %2 óra", + "Sensor Insert": "Szenzor behelyezve", + "Sensor Start": "Szenzor indítása", + "days": "napok", + "Insulin distribution": "Inzulin disztribúció", + "To see this report, press SHOW while in this view": "A jelentés megtekintéséhez kattints a MUTASD gombra", + "AR2 Forecast": "AR2 előrejelzés", + "OpenAPS Forecasts": "OpenAPS előrejelzés", + "Temporary Target": "Átmeneti cél", + "Temporary Target Cancel": "Átmeneti cél törlése", + "OpenAPS Offline": "OpenAPS nem elérhető (offline)", + "Profiles": "Profilok", + "Time in fluctuation": "Kilengésben töltött idő", + "Time in rapid fluctuation": "Magas kilengésekben töltött idő", + "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:": "Ez egy nagyon durva számítás ami nem pontos és nem helyettesíti a cukorszint mérését. A képlet a következő helyről lett véve:", + "Filter by hours": "Megszűrni órák alapján", + "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.": "A sima és magas kilengésnél mért idő százalékban kifelyezve, ahol a cukorszint aránylag nagyokat változott. A kisebb értékek jobbak ebben az esetben", + "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.": "Az átlagos napi változás az abszolút értékek összege elosztva a napok számával. A kisebb érték jobb ebben az esetben.", + "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "Az átlagos óránkénti változás az abszút értékek összege elosztva a napok számával. A kisebb érték jobb ebben az esetben.", + "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "Tartományon kívüli RMS számítása: a vizsgált időszak összes glükózértékének tartományon kívüli távolságát négyzetre emelik, összegzik, elosztják a glükózértékek számával, és négyzetgyököt vonnak belőle. Ez a mutató hasonló a \"tartományon belül töltött százalék\"-hoz, de jobban súlyozza a tartománytól távolabbi értékeket. Az alacsonyabb érték jobb.", + "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">itt találhatóak.", + "Mean Total Daily Change": "Áltagos napi változás", + "Mean Hourly Change": "Átlagos óránkénti változás", + "FortyFiveDown": "lassan csökken", + "FortyFiveUp": "lassan növekszik", + "Flat": "stabil", + "SingleUp": "emelkedik", + "SingleDown": "csökken", + "DoubleDown": "gyorsan csökken", + "DoubleUp": "gyorsan emelkedik", + "virtAsstUnknown": "Az adat ismeretlen. Kérem nézd meg a Nightscout oldalt részletekért", + "virtAsstTitleAR2Forecast": "AR2 Előrejelzés", + "virtAsstTitleCurrentBasal": "Jelenlegi Bazál", + "virtAsstTitleCurrentCOB": "Jelenlegi COB", + "virtAsstTitleCurrentIOB": "Jelenlegi IOB", + "virtAsstTitleLaunch": "Üdvözöllek a Nightscouton", + "virtAsstTitleLoopForecast": "Loop Előrejelzés", + "virtAsstTitleLastLoop": "Utolsó Loop", + "virtAsstTitleOpenAPSForecast": "OpenAPS Előrejelzés", + "virtAsstTitlePumpReservoir": "Fennmaradó inzulin", + "virtAsstTitlePumpBattery": "Pumpa töltöttsége", + "virtAsstTitleRawBG": "Jelenlegi nyers cukorszint", + "virtAsstTitleUploaderBattery": "Feltöltő töltöttsége", + "virtAsstTitleCurrentBG": "Jelenlegi Cukorszint", + "virtAsstTitleFullStatus": "Teljes Státusz", + "virtAsstTitleCGMMode": "CGM Mód", + "virtAsstTitleCGMStatus": "CGM Státusz", + "virtAsstTitleCGMSessionAge": "CGM életkora", + "virtAsstTitleCGMTxStatus": "CGM kapcsolat státusza", + "virtAsstTitleCGMTxAge": "CGM Transmitter kora", + "virtAsstTitleCGMNoise": "CGM Zaj", + "virtAsstTitleDelta": "Csukoszint delta", + "virtAsstStatus": "%1 es %2 %3-tól.", + "virtAsstBasal": "%1 a jelenlegi bazál %2 egység óránként", + "virtAsstBasalTemp": "%1 átmeneti bazál %2 egység óránként ami %3 -kor jár le", + "virtAsstIob": "és neked %1 inzulin van a testedben.", + "virtAsstIobIntent": "Neked %1 inzulin van a testedben", + "virtAsstIobUnits": "%1 egység", + "virtAsstLaunch": "Mit szeretnél ellenőrizni a Nightscout oldalon?", + "virtAsstPreamble": "A tied", + "virtAsstPreamble3person": "%1 -nak van ", + "virtAsstNoInsulin": "semmilyen", + "virtAsstUploadBattery": "A felöltőd töltöttsége %1", + "virtAsstReservoir": "%1 egység maradt hátra", + "virtAsstPumpBattery": "A pumpád töltöttsége %1 %2", + "virtAsstUploaderBattery": "A feltöltőd töltöttsége %1", + "virtAsstLastLoop": "Az utolsó sikeres loop %1-kor volt", + "virtAsstLoopNotAvailable": "A loop kiegészítés valószínűleg nincs bekapcsolva", + "virtAsstLoopForecastAround": "A loop előrejelzése alapján a követlező %2 időszakban körülbelül %1 lesz", + "virtAsstLoopForecastBetween": "A loop előrejelzése alapján a követlező %3 időszakban %1 és %2 között leszel", + "virtAsstAR2ForecastAround": "Az AR2ües előrejelzés alapján a követlező %2 időszakban körülbelül %1 lesz", + "virtAsstAR2ForecastBetween": "Az AR2 előrejelzése alapján a követlező %3 időszakban %1 és %2 között leszel", + "virtAsstForecastUnavailable": "Nem tudok előrejelzést készíteni hiányos adatokból", + "virtAsstRawBG": "A nyers cukorszinted %1", + "virtAsstOpenAPSForecast": "Az OpenAPS cukorszinted %1", + "virtAsstCob3person": "%1 -nak %2 szénhodrátja van a testében", + "virtAsstCob": "Neked %1 szénhidrát van a testedben", + "virtAsstCGMMode": "A CGM módod %1 volt %2 -kor.", + "virtAsstCGMStatus": "A CGM státuszod %1 volt %2 -kor.", + "virtAsstCGMSessAge": "A CGM kapcsolatod %1 napja és %2 órája aktív", + "virtAsstCGMSessNotStarted": "Jelenleg nincs aktív CGM kapcsolatod", + "virtAsstCGMTxStatus": "A CGM jeladód státusza %1 volt %2-kor", + "virtAsstCGMTxAge": "A CGM jeladód %1 napos.", + "virtAsstCGMNoise": "A CGM jeladó zaja %1 volt %2-kor", + "virtAsstCGMBattOne": "A CGM töltöttsége %1 VOLT volt %2-kor", + "virtAsstCGMBattTwo": "A CGM töltöttsége %1 és %2 VOLT volt %3-kor", + "virtAsstDelta": "A deltád %1 volt %2 és %3 között", + "virtAsstDeltaEstimated": "A becsült deltád %1 volt %2 és %3 között.", + "virtAsstUnknownIntentTitle": "Ismeretlen szándék", + "virtAsstUnknownIntentText": "Sajnálom, nem tudom mit szeretnél tőlem.", + "Fat [g]": "Zsír [g]", + "Protein [g]": "Fehérje [g]", + "Energy [kJ]": "Energia [kJ]", + "Clock Views:": "Óra:", + "Clock": "Óra:", + "Color": "Szinek", + "Simple": "Csak cukor", + "TDD average": "Átlagos napi adag (TDD)", + "Bolus average": "Átlag bólus", + "Basal average": "Átlag bázis", + "Base basal average:": "Átlag bázis inzulin:", + "Carbs average": "Szenhidrát átlag", + "Eating Soon": "Hamarosan evés", + "Last entry {0} minutes ago": "Utolsó bejegyzés {0} volt", + "change": "változás", + "Speech": "Beszéd", + "Target Top": "Felsó cél", + "Target Bottom": "Alsó cél", + "Canceled": "Megszüntetett", + "Meter BG": "Cukorszint a mérőből", + "predicted": "előrejelzés", + "future": "jövő", + "ago": "ezelött", + "Last data received": "Utólsó adatok fogadva", + "Clock View": "Idő", + "Protein": "Fehérje", + "Fat": "Zsír", + "Protein average": "Protein átlag", + "Fat average": "Zsír átlag", + "Total carbs": "Összes szénhidrát", + "Total protein": "Összes protein", + "Total fat": "Összes zsír", + "Database Size": "Adatbázis mérete", + "Database Size near its limits!": "Az adatbázis majdnem megtelt!", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "Az adatbázis mérete %1 MiB a rendelkezésre álló %2 MiB-ból. Készítsen biztonsági másolatot!", + "Database file size": "Adatbázis file mérete", + "%1 MiB of %2 MiB (%3%)": "%1 MiB %2 MiB-ból (%3%)", + "Data size": "Adatok mérete", + "virtAsstDatabaseSize": "%1 MiB ami %2% a rendelkezésre álló méretből", + "virtAsstTitleDatabaseSize": "Adatbázis file méret", + "Carbs/Food/Time": "Szénhidrát/étel/idő", + "You have administration messages": "Új rendszergazda-üzenetek", + "Admin messages in queue": "Sorban álló rendszergazda-üzenetek", + "Queue empty": "Várólista üres", + "There are no admin messages in queue": "Nincs sorban álló rendszergazda-üzenet", + "Please sign in using the API_SECRET to see your administration messages": "Jelentkezz be API_SECRET-tel, hogy láthasd a rendszergazda-üzeneteket", + "Reads enabled in default permissions": "Olvasások bekapcsolva az alapértelmezett engedélyeknél", + "Data reads enabled": "Adatok olvasása bekapcsolva", + "Data writes enabled": "Adatok írása bekapcsolva", + "Data writes not enabled": "Adatok írása nincs bekapcsolva", + "Color prediction lines": "Színes prognózis vonalak", + "Release Notes": "Kiadási megjegyzések", + "Check for Updates": "Frissítés ellenőrzése", + "Open Source": "Nyílt forráskódú", + "Nightscout Info": "Nightscout Info", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "A Loopalyzer elsődleges célja a zárt hurkú rendszer működésének megjelenítése. Működhet más beállításokkal is: zárt és nyitott hurokkal, és hurok nélkül is. Azonban attól függően, hogy milyen feltöltőt használsz, az milyen gyakorisággal képes rögzíteni és feltölteni az adataidat, valamint hogy képes pótolni a hiányzó adatokat, néhány grafikonon hiányos vagy akár teljesen üres részek is lehetnek. Mindig győződjön meg arról, hogy a grafikonok megfelelőek-e. A legjobb, ha egyszerre egy napot jelenítesz meg, és több napon görgetsz végig.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "A Loopalyzer tartalmaz egy időeltolás funkciót. Ha például egy nap 07:00-kor, másnap 08:00-kor reggelizel, a két nap átlagában valószínűleg lapos lesz a vércukorszint-görbéd, és nem látszik a tényleges reggeli utáni hatás. Az időeltolás funkció kiszámítja az étkezések átlagos időpontját, majd mindkét nap az összes adatot (szénhidrát, inzulin, bázisok, stb.) eltolja a megfelelő időeltolódással, hogy mindkét étkezés igazodjon az étkezések átlagos kezdési időpontjához.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "Ebben a példában az első nap összes adata 30 perccel előre lett tolva, a második nap összes adata pedig 30 perccel hátra lett tolva, tehát úgy tűnik, mintha mindkét nap 07:30-kor reggeliztél volna. Ez láthatóvá teszi az étkezés tényleges átlagos vércukorra gyakorolt hatását.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Az időeltolás az étkezés átlagos kezdési időpontja utáni időszakot szürke színnel emeli ki, a DIA (inzulin aktivitás időtartama) alatt. Mivel egész nap az összes adatpont eltolódik, előfordulhat, hogy a görbék a szürke területen kívül nem pontosak.", + "Note that time shift is available only when viewing multiple days.": "Ne feledd: az időeltolás csak több nap megtekintése esetén érhető el.", + "Please select a maximum of two weeks duration and click Show again.": "Válassz legfeljebb két hét időtartamot, majd kattints újra a Megjelenítés gombra.", + "Show profiles table": "Profil táblázat megjelenítése", + "Show predictions": "Prognózis megjelenítése", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Időeltolás %1 g-nál nagyobb szénhidrátú étkezéseknél %2 és %3 között", + "Previous": "Előző", + "Previous day": "Előző nap", + "Next day": "Következő nap", + "Next": "Következő", + "Temp basal delta": "Átmeneti bázis delta", + "Authorized by token": "Tokennel engedélyezve", + "Auth role": "Hitelesítési szerep", + "view without token": "megtekintés token nélkül", + "Remove stored token": "Tárolt token eltávolítása", + "Weekly Distribution": "Heti eloszlás", + "Failed authentication": "Sikertelen hitelesítés", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "A(z) %1 IP-címmel rendelkező eszköz hibás adatokkal próbálta meg a hitelesítést a Nightscout-tal. Ellenőrizd, hogy van-e rossz API_SECRET-tel vagy tokennel rendelkező feltöltő.", + "Default (with leading zero and U)": "Alapért. (kezdő nullával és E-gel)", + "Concise (with U, without leading zero)": "Tömör (E-gel, kezdő nulla nélkül)", + "Minimal (without leading zero and U)": "Minimalista (kezdő nulla és E nélkül)", + "Small Bolus Display": "Kis bólus megjelenítése", + "Large Bolus Display": "Nagy bólus megjelenítése", + "Bolus Display Threshold": "Kis/nagy bólus határ", + "%1 U and Over": "%1 E és felette", + "Event repeated %1 times.": "Az esemény %1 alkalommal ismétlődött meg.", + "minutes": "perc", + "Last recorded %1 %2 ago.": "Legutóbb rögzítve: %1 %2", + "Security issue": "Biztonsági probléma", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Gyenge API_SECRET észlelve! Kérjük, használj kis- és nagybetűk, számok és nem-alfanumerikus karakterek, például !#%&/ keverékét az illetéktelen hozzáférés kockázatának csökkentésére. Az API_SECRET minimális hossza 12 karakter.", + "less than 1": "kisebb, mint 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "A MongoDB jelszó és az API_SECRET egyezik. Ez nagyon rossz ötlet. Kérjük, változtasd meg mindkettőt, és ne használj meglévő jelszavakat a rendszerben." +} diff --git a/translations/it_IT.json b/translations/it_IT.json new file mode 100644 index 00000000000..1f5d0ab4ffc --- /dev/null +++ b/translations/it_IT.json @@ -0,0 +1,707 @@ +{ + "Listening on port": "Porta in ascolto", + "Mo": "Lun", + "Tu": "Mar", + "We": "Mer", + "Th": "Gio", + "Fr": "Ven", + "Sa": "Sab", + "Su": "Dom", + "Monday": "Lunedì", + "Tuesday": "Martedì", + "Wednesday": "Mercoledì", + "Thursday": "Giovedì", + "Friday": "Venerdì", + "Saturday": "Sabato", + "Sunday": "Domenica", + "Category": "Categoria", + "Subcategory": "Sottocategoria", + "Name": "Nome", + "Today": "Oggi", + "Last 2 days": "Ultimi 2 giorni", + "Last 3 days": "Ultimi 3 giorni", + "Last week": "Settimana scorsa", + "Last 2 weeks": "Ultime 2 settimane", + "Last month": "Mese scorso", + "Last 3 months": "Ultimi 3 mesi", + "From": "Da", + "To": "A", + "Notes": "Note", + "Food": "Cibo", + "Insulin": "Insulina", + "Carbs": "Carboidrati", + "Notes contain": "Contiene note", + "Target BG range bottom": "Limite inferiore della glicemia", + "top": "Superiore", + "Show": "Mostra", + "Display": "Schermo", + "Loading": "Carico", + "Loading profile": "Carico il profilo", + "Loading status": "Stato di caricamento", + "Loading food database": "Carico database alimenti", + "not displayed": "Non visualizzato", + "Loading CGM data of": "Carico dati CGM", + "Loading treatments data of": "Carico dati dei trattamenti", + "Processing data of": "Elaborazione dei dati", + "Portion": "Porzione", + "Size": "Formato", + "(none)": "(Nessuno)", + "None": "Nessuno", + "": "", + "Result is empty": "Risultato vuoto", + "Day to day": "Giorno per giorno", + "Week to week": "Da settimana a settimana", + "Daily Stats": "Statistiche giornaliere", + "Percentile Chart": "Grafico percentile", + "Distribution": "Distribuzione", + "Hourly stats": "Statistiche per ore", + "netIOB stats": "netIOB statistiche", + "temp basals must be rendered to display this report": "le basali temp devono essere renderizzate per visualizzare questo report", + "No data available": "Dati non disponibili", + "Low": "Basso", + "In Range": "Nell'intervallo", + "Period": "Periodo", + "High": "Alto", + "Average": "Media", + "Low Quartile": "Quartile basso", + "Upper Quartile": "Quartile alto", + "Quartile": "Quartile", + "Date": "Data", + "Normal": "Normale", + "Median": "Mediana", + "Readings": "Letture", + "StDev": "Dev.std", + "Daily stats report": "Report delle statistiche giornaliere", + "Glucose Percentile report": "Report Percentuali Glicemie", + "Glucose distribution": "Distribuzione glicemie", + "days total": "Giorni totali", + "Total per day": "Totale al giorno", + "Overall": "Generale", + "Range": "Intervallo", + "% of Readings": "% delle letture", + "# of Readings": "# delle letture", + "Mean": "Media", + "Standard Deviation": "Deviazione Standard", + "Max": "Max", + "Min": "Min", + "A1c estimation*": "Stima glicata", + "Weekly Success": "Risultati settimanali", + "There is not sufficient data to run this report. Select more days.": "Non ci sono dati sufficienti per eseguire questo report. Selezionare più giorni.", + "Using stored API secret hash": "Stai utilizzando API hash segreta", + "No API secret hash stored yet. You need to enter API secret.": "API hash segreto non è ancora memorizzato. È necessario inserire API segreto.", + "Database loaded": "Database caricato", + "Error: Database failed to load": "Errore: database non è stato caricato", + "Error": "Errore", + "Create new record": "Crea nuovo registro", + "Save record": "Salva Registro", + "Portions": "Porzioni", + "Unit": "Unità", + "GI": "IG-Ind.Glic.", + "Edit record": "Modifica registro", + "Delete record": "Cancella registro", + "Move to the top": "Spostare verso l'alto", + "Hidden": "Nascosto", + "Hide after use": "Nascondi dopo l'uso", + "Your API secret must be at least 12 characters long": "Il tuo API segreto deve essere lungo almeno 12 caratteri", + "Bad API secret": "API segreto non corretto", + "API secret hash stored": "Hash API segreto memorizzato", + "Status": "Stato", + "Not loaded": "Non caricato", + "Food Editor": "Database Alimenti", + "Your database": "Il tuo database", + "Filter": "Filtro", + "Save": "Salva", + "Clear": "Pulisci", + "Record": "Registro", + "Quick picks": "Scelta rapida", + "Show hidden": "Mostra nascosto", + "Your API secret or token": "Il tuo API segreto o token", + "Remember this device. (Do not enable this on public computers.)": "Ricorda questo dispositivo. (Da non abilitare su computer condivisi con altri.)", + "Treatments": "Somministrazioni", + "Time": "Tempo", + "Event Type": "Tipo di evento", + "Blood Glucose": "Glicemie", + "Entered By": "inserito da", + "Delete this treatment?": "Eliminare questa somministrazione?", + "Carbs Given": "Carboidrati", + "Insulin Given": "Insulina", + "Event Time": "Ora Evento", + "Please verify that the data entered is correct": "Verificare che i dati inseriti siano corretti", + "BG": "Glicemie", + "Use BG correction in calculation": "Utilizza la correzione delle Glicemia nel calcolo", + "BG from CGM (autoupdated)": "Glicemie da sensore (aggiornamento automatico)", + "BG from meter": "Glicemie da glucometro", + "Manual BG": "Inserisci Glicemia", + "Quickpick": "Scelta rapida", + "or": "o", + "Add from database": "Aggiungi dal database", + "Use carbs correction in calculation": "Utilizza la correzione dei carboidrati nel calcolo", + "Use COB correction in calculation": "Utilizzare la correzione COB nel calcolo", + "Use IOB in calculation": "Utilizza l'IOB nel calcolo", + "Other correction": "Altre correzioni", + "Rounding": "Arrotondamento", + "Enter insulin correction in treatment": "Inserisci la correzione d'insulina in somministrazioni", + "Insulin needed": "Insulina necessaria", + "Carbs needed": "Carboidrati necessari", + "Carbs needed if Insulin total is negative value": "Carboidrati necessari se l'insulina totale è un valore negativo", + "Basal rate": "Velocità basale", + "60 minutes earlier": "60 minuti prima", + "45 minutes earlier": "45 minuti prima", + "30 minutes earlier": "30 minuti prima", + "20 minutes earlier": "20 minuti prima", + "15 minutes earlier": "15 minuti prima", + "Time in minutes": "Tempo in minuti", + "15 minutes later": "15 minuti più tardi", + "20 minutes later": "20 minuti più tardi", + "30 minutes later": "30 minuti più tardi", + "45 minutes later": "45 minuti più tardi", + "60 minutes later": "60 minuti più tardi", + "Additional Notes, Comments": "Note aggiuntive, commenti", + "RETRO MODE": "Modalità retrospettiva", + "Now": "Ora", + "Other": "Altro", + "Submit Form": "Invia il modulo", + "Profile Editor": "Editor dei profili", + "Reports": "Statistiche", + "Add food from your database": "Aggiungere cibo al database", + "Reload database": "Ricarica database", + "Add": "Aggiungere", + "Unauthorized": "Non Autorizzato", + "Entering record failed": "Inserimento nel registro fallito", + "Device authenticated": "Disp. autenticato", + "Device not authenticated": "Disp. non autenticato", + "Authentication status": "Stato di autenticazione", + "Authenticate": "Autenticare", + "Remove": "Rimuovere", + "Your device is not authenticated yet": "Il tuo dispositivo non è ancora stato autenticato", + "Sensor": "Sensore", + "Finger": "Dito", + "Manual": "Manuale", + "Scale": "Scala", + "Linear": "Lineare", + "Logarithmic": "Logaritmica", + "Logarithmic (Dynamic)": "Logaritmica (Dinamica)", + "Insulin-on-Board": "Insulina attiva", + "Carbs-on-Board": "Carboidrati attivi", + "Bolus Wizard Preview": "Calcolatore di bolo", + "Value Loaded": "Valori Caricati", + "Cannula Age": "Cambio Ago", + "Basal Profile": "Profilo Basale", + "Silence for 30 minutes": "Silenzia per 30 minuti", + "Silence for 60 minutes": "Silenzia per 60 minuti", + "Silence for 90 minutes": "Silenzia per 90 minuti", + "Silence for 120 minutes": "Silenzia per 120 minuti", + "Settings": "Impostazioni", + "Units": "Unità", + "Date format": "Formato data", + "12 hours": "12 ore", + "24 hours": "24 ore", + "Log a Treatment": "Inserisci una somministrazione", + "BG Check": "Controllo Glicemia", + "Meal Bolus": "Bolo Pasto", + "Snack Bolus": "Bolo Merenda", + "Correction Bolus": "Bolo Correttivo", + "Carb Correction": "Carboidrati Correttivi", + "Note": "Nota", + "Question": "Domanda", + "Exercise": "Esercizio Fisico", + "Pump Site Change": "Cambio Ago", + "CGM Sensor Start": "Avvio sensore CGM", + "CGM Sensor Stop": "Arresto Sensore CGM", + "CGM Sensor Insert": "Cambio sensore CGM", + "Sensor Code": "Sensor Code", + "Transmitter ID": "Transmitter ID", + "Dexcom Sensor Start": "Avvio sensore Dexcom", + "Dexcom Sensor Change": "Cambio sensore Dexcom", + "Insulin Cartridge Change": "Cambio Cartuccia Insulina", + "D.A.D. Alert": "Allarme Cane da allerta Diabete", + "Glucose Reading": "Lettura glicemia", + "Measurement Method": "Metodo di misurazione", + "Meter": "Glucometro", + "Amount in grams": "Quantità in grammi", + "Amount in units": "Quantità in unità", + "View all treatments": "Visualizza tutti le somministrazioni", + "Enable Alarms": "Attiva Allarmi", + "Pump Battery Change": "Cambio Batteria Microinfusore", + "Pump Battery Age": "Pump Battery Age", + "Pump Battery Low Alarm": "Allarme Batteria Microinfusore Bassa", + "Pump Battery change overdue!": "Sostituzione Batteria del Microinfusore in ritardo!", + "When enabled an alarm may sound.": "Quando è abilitato, può suonare un allarme.", + "Urgent High Alarm": "Urgente Glicemia Alta", + "High Alarm": "Glicemia Alta", + "Low Alarm": "Glicemia bassa", + "Urgent Low Alarm": "Urgente Glicemia Bassa", + "Stale Data: Warn": "Avviso: Dati Obsoleti", + "Stale Data: Urgent": "Urgente: Dati Obsoleti", + "mins": "min", + "Night Mode": "Modalità Notte", + "When enabled the page will be dimmed from 10pm - 6am.": "Attivandola, la pagina sarà oscurata dalle 22.00 - 06.00.", + "Enable": "Attivare", + "Show Raw BG Data": "Mostra dati Grezzi Glicemia", + "Never": "Mai", + "Always": "Sempre", + "When there is noise": "Quando i dati sono disturbati", + "When enabled small white dots will be displayed for raw BG data": "Quando è abilitata, vengono visualizzati piccoli punti bianchi per i dati grezzi della glicemia", + "Custom Title": "Titolo personalizzato", + "Theme": "Tema", + "Default": "Predefinito", + "Colors": "Colori", + "Colorblind-friendly colors": "Colori per daltonici", + "Reset, and use defaults": "Reimposta i valori predefiniti", + "Calibrations": "Calibrazioni", + "Alarm Test / Smartphone Enable": "Test Allarme / Abilita Smartphone", + "Bolus Wizard": "Calcolatore di Bolo", + "in the future": "nel futuro", + "time ago": "tempo fa", + "hr ago": "ora fa", + "hrs ago": "ore fa", + "min ago": "minuto fa", + "mins ago": "minuti fa", + "day ago": "giorno fa", + "days ago": "giorni fa", + "long ago": "molto tempo fa", + "Clean": "Pulito", + "Light": "Leggero", + "Medium": "Medio", + "Heavy": "Pesante", + "Treatment type": "Tipo di somministrazione", + "Raw BG": "Glicemia Grezza", + "Device": "Dispositivo", + "Noise": "Rumore", + "Calibration": "Calibrazione", + "Show Plugins": "Mostra Plugin", + "About": "Informazioni", + "Value in": "Valore in", + "Carb Time": "Tempo Assorbimento Carboidrati", + "Language": "Lingua", + "Add new": "Aggiungi nuovo", + "g": "g", + "ml": "ml", + "pcs": "pz", + "Drag&drop food here": "Trascina&rilascia cibo qui", + "Care Portal": "Somministrazioni", + "Medium/Unknown": "Media/Sconosciuto", + "IN THE FUTURE": "NEL FUTURO", + "Order": "Ordina", + "oldest on top": "più vecchio in alto", + "newest on top": "più recente in alto", + "All sensor events": "Tutti gli eventi del sensore", + "Remove future items from mongo database": "Rimuovi gli elementi futuri dal database mongo", + "Find and remove treatments in the future": "Trova e rimuovi i trattamenti in futuro", + "This task find and remove treatments in the future.": "Trovare e rimuovere le somministrazioni in futuro", + "Remove treatments in the future": "Rimuovere somministrazioni in futuro", + "Find and remove entries in the future": "Trovare e rimuovere le voci in futuro", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "Trovare e rimuovere i dati CGM in futuro creato da uploader/xdrip con data/ora sbagliato.", + "Remove entries in the future": "Rimuovere le voci in futuro", + "Loading database ...": "Caricamento Database ...", + "Database contains %1 future records": "Il Database contiene %1 record futuri", + "Remove %1 selected records?": "Rimuovere i %1 registri selezionati?", + "Error loading database": "Errore di caricamento del database", + "Record %1 removed ...": "Registro %1 rimosso ...", + "Error removing record %1": "Errore rimozione registro %1", + "Deleting records ...": "Elimino registro ...", + "%1 records deleted": "%1Registro Cancellato", + "Clean Mongo status database": "Pulisci database di Mongo", + "Delete all documents from devicestatus collection": "Eliminare tutti i documenti dal registro \"devicestatus\"", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "Questa attività elimina tutti i documenti dalla collezione \"devicestatus\". Utile quando lo stato della batteria uploader/xdrip non si aggiorna.", + "Delete all documents": "Eliminare tutti i documenti", + "Delete all documents from devicestatus collection?": "Eliminare tutti i documenti dalla collezione devicestatus?", + "Database contains %1 records": "Il Database contiene %1 registri", + "All records removed ...": "Tutti i registri rimossi ...", + "Delete all documents from devicestatus collection older than 30 days": "Eliminare tutti i documenti della collezione \"devicestatus\" più vecchi di 30 giorni", + "Number of Days to Keep:": "Numero di Giorni da osservare:", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "Questa attività elimina tutti i documenti dalla collezione \"devicestatus\". Utile quando lo stato della batteria uploader/xdrip non si aggiorna.", + "Delete old documents from devicestatus collection?": "Eliminare tutti i documenti dalla collezione devicestatus?", + "Clean Mongo entries (glucose entries) database": "Pulisci il database Mongo entries (glicemie sensore)", + "Delete all documents from entries collection older than 180 days": "Eliminare tutti i documenti della collezione \"devicestatus\" più vecchi di 180 giorni", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Questa attività elimina tutti i documenti dalla collezione \"devicestatus\". Utile quando lo stato della batteria uploader/xdrip non si aggiorna.", + "Delete old documents": "Eliminare tutti i documenti", + "Delete old documents from entries collection?": "Eliminare tutti i documenti dalla collezione devicestatus?", + "%1 is not a valid number": "%1 non è un numero valido", + "%1 is not a valid number - must be more than 2": "%1 non è un numero valido - deve essere più di 2", + "Clean Mongo treatments database": "Pulisci database \"treatments\" di Mongo", + "Delete all documents from treatments collection older than 180 days": "Eliminare tutti i documenti dal registro delle somministrazioni più vecchi di 180 giorni", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Questa attività elimina tutti i documenti dalla collezione \"devicestatus\". Utile quando lo stato della batteria uploader/xdrip non si aggiorna.", + "Delete old documents from treatments collection?": "Eliminare tutti i documenti dalla collezione devicestatus?", + "Admin Tools": "Dati Mongo", + "Nightscout reporting": "Nightscout - Statistiche", + "Cancel": "Cancellare", + "Edit treatment": "Modifica Somministrazione", + "Duration": "Tempo", + "Duration in minutes": "Tempo in minuti", + "Temp Basal": "Basale Temp", + "Temp Basal Start": "Inizio Basale Temp", + "Temp Basal End": "Fine Basale Temp", + "Percent": "Percentuale", + "Basal change in %": "Variazione basale in %", + "Basal value": "Valore Basale", + "Absolute basal value": "Valore Basale Assoluto", + "Announcement": "Annuncio", + "Loading temp basal data": "Caricamento basale temp", + "Save current record before changing to new?": "Salvare i dati correnti prima di cambiarli?", + "Profile Switch": "Cambio profilo", + "Profile": "Profilo", + "General profile settings": "Impostazioni generali profilo", + "Title": "Titolo", + "Database records": "Registro del database", + "Add new record": "Aggiungi un nuovo registro", + "Remove this record": "Rimuovi questo registro", + "Clone this record to new": "Clona questo registro in uno nuovo", + "Record valid from": "Registro valido da", + "Stored profiles": "Profili salvati", + "Timezone": "Fuso orario", + "Duration of Insulin Activity (DIA)": "Durata Attività Insulinica (DIA)", + "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.": "Rappresenta la durata tipica nel quale l'insulina ha effetto. Varia in base al paziente ed al tipo d'insulina. Tipicamente 3-4 ore per la maggior parte dei microinfusori e dei pazienti. Chiamata anche durata d'azione insulinica.", + "Insulin to carb ratio (I:C)": "Rapporto Insulina-Carboidrati (I:C)", + "Hours:": "Ore:", + "hours": "ore", + "g/hour": "g/ora", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "g carboidrati per U di insulina. Il rapporto tra quanti grammi di carboidrati sono compensati da ogni U di insulina.", + "Insulin Sensitivity Factor (ISF)": "Fattore di Sensibilità Insulinica (ISF)", + "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "mg/dL o mmol/L per U insulina. Il rapporto di quanto la glicemia varia per ogni U di correzione insulinica.", + "Carbs activity / absorption rate": "Attività carboidrati / Velocità di assorbimento", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "grammi per unità di tempo. Rappresentano sia il cambio di COB per unità di tempo, sia la quantità di carboidrati che faranno effetto nel tempo. Assorbimento di carboidrati / curva di attività sono meno conosciute rispetto all'attività insulinica, ma possono essere approssimate usando un ritardo iniziale seguito da un rapporto costante di assorbimento (g/hr).", + "Basal rates [unit/hour]": "Basale [unità/ora]", + "Target BG range [mg/dL,mmol/L]": "Obiettivo dell'intervallo glicemico [mg/dL,mmol/L]", + "Start of record validity": "Inizio di validità del dato", + "Icicle": "Inverso", + "Render Basal": "Grafico Basale", + "Profile used": "Profilo usato", + "Calculation is in target range.": "Calcolo all'interno dell'intervallo", + "Loading profile records ...": "Caricamento dati del profilo ...", + "Values loaded.": "Valori caricati.", + "Default values used.": "Usati Valori standard.", + "Error. Default values used.": "Errore. Valori standard usati.", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "Intervalli di tempo della glicemia obiettivo inferiore e superiore non corretti. Valori ripristinati a quelli standard.", + "Valid from:": "Valido da:", + "Save current record before switching to new?": "Salvare il dato corrente prima di passare ad uno nuovo?", + "Add new interval before": "Aggiungere prima un nuovo intervallo", + "Delete interval": "Elimina intervallo", + "I:C": "Insulina:Carboidrati", + "ISF": "Sensibilità insulinica", + "Combo Bolus": "Combo Bolo", + "Difference": "Differenza", + "New time": "Nuovo Orario", + "Edit Mode": "Modalità di Modifica", + "When enabled icon to start edit mode is visible": "Quando abilitata, l'icona della Modalità di Modifica è visibile", + "Operation": "Operazione", + "Move": "Sposta", + "Delete": "Elimina", + "Move insulin": "Sposta Insulina", + "Move carbs": "Sposta carboidrati", + "Remove insulin": "Rimuovi insulina", + "Remove carbs": "Rimuovi carboidrati", + "Change treatment time to %1 ?": "Cambiare tempo alla somministrazione a %1 ?", + "Change carbs time to %1 ?": "Cambiare durata carboidrati a %1 ?", + "Change insulin time to %1 ?": "Cambiare durata insulina a %1 ?", + "Remove treatment ?": "Rimuovere somministrazione ?", + "Remove insulin from treatment ?": "Rimuovere insulina dalla somministrazione ?", + "Remove carbs from treatment ?": "Rimuovere carboidrati dalla somministrazione ?", + "Rendering": "Rendering", + "Loading OpenAPS data of": "Caricamento dei dati OpenAPS di", + "Loading profile switch data": "Caricamento dei dati cambio profilo", + "Redirecting you to the Profile Editor to create a new profile.": "Reindirizzamento all'editor dei profili per creare un nuovo profilo.", + "Pump": "Microinfusore", + "Sensor Age": "Durata Sensore", + "Insulin Age": "Durata Insulina", + "Temporary target": "Target Temporaneo", + "Reason": "Ragionare", + "Eating soon": "Pasto a breve", + "Top": "Superiore", + "Bottom": "Inferiore", + "Activity": "Attività", + "Targets": "Obiettivi", + "Bolus insulin:": "Bolo insulina:", + "Base basal insulin:": "Insulina Basale:", + "Positive temp basal insulin:": "Insulina basale temp positiva:", + "Negative temp basal insulin:": "Insulina basale Temp negativa:", + "Total basal insulin:": "Insulina Basale Totale:", + "Total daily insulin:": "Totale giornaliero d'insulina:", + "Unable to save Role": "Impossibile salvare il ruolo", + "Unable to delete Role": "Impossibile eliminare il Ruolo", + "Database contains %1 roles": "Database contiene %1 ruolo", + "Edit Role": "Modifica ruolo", + "admin, school, family, etc": "amministrazione, scuola, famiglia, etc", + "Permissions": "Permessi", + "Are you sure you want to delete: ": "Sei sicuro di voler eliminare:", + "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.": "Ogni ruolo avrà un 1 o più autorizzazioni. Il * il permesso è un jolly, i permessi sono una gerarchia utilizzando : come separatore.", + "Add new Role": "Aggiungere un nuovo ruolo", + "Roles - Groups of People, Devices, etc": "Ruoli - gruppi di persone, dispositivi, etc", + "Edit this role": "Modifica questo ruolo", + "Admin authorized": "Amministratore autorizzato", + "Subjects - People, Devices, etc": "Soggetti - persone, dispositivi, etc", + "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "Ogni soggetto avrà un gettone d'accesso unico e 1 o più ruoli. Fare clic sul gettone d'accesso per aprire una nuova vista con il soggetto selezionato, questo legame segreto può quindi essere condiviso.", + "Add new Subject": "Aggiungere un nuovo Soggetto", + "Unable to save Subject": "Unable to save Subject", + "Unable to delete Subject": "Impossibile eliminare Soggetto", + "Database contains %1 subjects": "Database contiene %1 soggetti", + "Edit Subject": "Modifica Oggetto", + "person, device, etc": "persona, dispositivo, ecc", + "role1, role2": "ruolo1, ruolo2", + "Edit this subject": "Modifica questo argomento", + "Delete this subject": "Eliminare questo argomento", + "Roles": "Ruoli", + "Access Token": "Gettone d'accesso", + "hour ago": "ora fa", + "hours ago": "ore fa", + "Silence for %1 minutes": "Silenzio per %1 minuti", + "Check BG": "Controlla Glicemia", + "BASAL": "BASALE", + "Current basal": "Basale corrente", + "Sensitivity": "Sensibilità", + "Current Carb Ratio": "Attuale rapporto I:C", + "Basal timezone": "fuso orario basale", + "Active profile": "Profilo Attivo", + "Active temp basal": "Basale Temporanea Attiva", + "Active temp basal start": "Avvio Basale temporanea attiva", + "Active temp basal duration": "Durata basale temporanea Attiva", + "Active temp basal remaining": "Residuo basale temporanea Attiva", + "Basal profile value": "Valore profilo basale", + "Active combo bolus": "Combo bolo Attivo", + "Active combo bolus start": "Avvio Combo bolo Attivo", + "Active combo bolus duration": "Durata Combo bolo Attivo", + "Active combo bolus remaining": "Residuo Combo bolo Attivo", + "BG Delta": "Differenza di Glicemia", + "Elapsed Time": "Tempo Trascorso", + "Absolute Delta": "Delta Assoluto", + "Interpolated": "Interpolata", + "BWP": "Calcolatore di Bolo", + "Urgent": "Urgente", + "Warning": "Avviso", + "Info": "Informazioni", + "Lowest": "Minore", + "Snoozing high alarm since there is enough IOB": "Addormenta allarme alto poiché non vi è sufficiente Insulina attiva", + "Check BG, time to bolus?": "Controllare Glicemia, ora di bolo?", + "Notice": "Preavviso", + "required info missing": "richiesta informazioni mancanti", + "Insulin on Board": "Insulina Attiva", + "Current target": "Obiettivo attuale", + "Expected effect": "Effetto Previsto", + "Expected outcome": "Risultato previsto", + "Carb Equivalent": "Carb equivalenti", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "L'eccesso d'insulina equivalente %1U più che necessari per raggiungere l'obiettivo basso, non rappresentano i carboidrati.", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "L' eccesso d'insulina equivale a %1U in più di quanto necessario per raggiungere l'obiettivo basso, ASSICURARSI CHE L'INSULINA ATTIVA SIA COPERTA DAI CARBOIDRATI", + "%1U reduction needed in active insulin to reach low target, too much basal?": "Riduzione %1U necessaria dell'insulina attiva per raggiungere l'obiettivo basso, troppa basale?", + "basal adjustment out of range, give carbs?": "regolazione basale fuori intervallo, dare carboidrati?", + "basal adjustment out of range, give bolus?": "regolazione basale fuori campo, dare bolo?", + "above high": "sopra alto", + "below low": "sotto bassa", + "Projected BG %1 target": "Proiezione Glicemia %1 obiettivo", + "aiming at": "puntare a", + "Bolus %1 units": "Bolo %1 unità", + "or adjust basal": "o regolare basale", + "Check BG using glucometer before correcting!": "Controllare Glicemia utilizzando glucometro prima di correggere!", + "Basal reduction to account %1 units:": "Riduzione basale per conto %1 unità:", + "30m temp basal": "30m basale temp", + "1h temp basal": "1h basale temp", + "Cannula change overdue!": "Cambio Cannula in ritardo!", + "Time to change cannula": "Tempo di cambiare la cannula", + "Change cannula soon": "Cambio cannula prossimamente", + "Cannula age %1 hours": "Durata Cannula %1 ore", + "Inserted": "Inserito", + "CAGE": "Cambio Ago", + "COB": "Carboidrati Attivi", + "Last Carbs": "Ultimi carboidrati", + "IAGE": "Età Insulina", + "Insulin reservoir change overdue!": "Cambio serbatoio d'insulina in ritardo!", + "Time to change insulin reservoir": "Momento di cambiare serbatoio d'insulina", + "Change insulin reservoir soon": "Cambiare serbatoio d'insulina prossimamente", + "Insulin reservoir age %1 hours": "IAGE - Durata Serbatoio d'insulina %1 ore", + "Changed": "Cambiato", + "IOB": "Insulina Attiva", + "Careportal IOB": "IOB Somministrazioni", + "Last Bolus": "Ultimo bolo", + "Basal IOB": "Basale IOB", + "Source": "Fonte", + "Stale data, check rig?": "dati non aggiornati, controllare il telefono?", + "Last received:": "Ultime ricevute:", + "%1m ago": "%1m fa", + "%1h ago": "%1h fa", + "%1d ago": "%1d fa", + "RETRO": "RETRO", + "SAGE": "Età Sensore", + "Sensor change/restart overdue!": "Cambio/riavvio del sensore in ritardo!", + "Time to change/restart sensor": "Tempo di cambiare/riavvio sensore", + "Change/restart sensor soon": "Modifica/riavvio sensore prossimamente", + "Sensor age %1 days %2 hours": "Durata Sensore %1 giorni %2 ore", + "Sensor Insert": "SAGE - inserimento sensore", + "Sensor Start": "SAGE - partenza sensore", + "days": "giorni", + "Insulin distribution": "Distribuzione di insulina", + "To see this report, press SHOW while in this view": "Per guardare questo report, premere MOSTRA all'interno della finestra", + "AR2 Forecast": "Previsione AR2", + "OpenAPS Forecasts": "Previsione OpenAPS", + "Temporary Target": "Obiettivo temporaneo", + "Temporary Target Cancel": "Obiettivo temporaneo cancellato", + "OpenAPS Offline": "OpenAPS disconnesso", + "Profiles": "Profili", + "Time in fluctuation": "Tempo in fluttuazione", + "Time in rapid fluctuation": "Tempo in rapida fluttuazione", + "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:": "Questa è solo un'approssimazione che può essere molto inaccurata e che non sostituisce la misurazione capillare. La formula usata è presa da:", + "Filter by hours": "Filtra per ore", + "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.": "Tempo in fluttuazione e Tempo in rapida fluttuazione misurano la % di tempo durante il periodo esaminato, durante il quale la glicemia stà variando velocemente o rapidamente. Bassi valori sono migliori.", + "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.": "Media Totale Giornaliera Variazioni è la somma dei valori assoluti di tutte le escursioni glicemiche per il periodo esaminato, diviso per il numero di giorni. Bassi valori sono migliori.", + "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "Media Oraria Variazioni è la somma del valore assoluto di tutte le escursioni glicemiche per il periodo esaminato, diviso per il numero di ore. Bassi valori sono migliori.", + "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "Il RMS fuori gamma è calcolato facendo quadrare la distanza fuori campo per tutte le letture di glucosio per il periodo esaminato, sommando loro, dividendo per il conteggio e prendendo la radice quadrata. Questa metrica è simile alla percentuale dell'intervallo ma le letture dei pesi sono molto più alte. I valori più bassi sono migliori.", + "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">qui.", + "Mean Total Daily Change": "Media Totale Giornaliera Variazioni", + "Mean Hourly Change": "Media Oraria Variazioni", + "FortyFiveDown": "leggera diminuzione", + "FortyFiveUp": "leggero aumento", + "Flat": "stabile", + "SingleUp": "aumento", + "SingleDown": "diminuzione", + "DoubleDown": "rapida diminuzione", + "DoubleUp": "rapido aumento", + "virtAsstUnknown": "Questo valore al momento non è noto. Per maggiori dettagli consulta il tuo sito Nightscout.", + "virtAsstTitleAR2Forecast": "Previsione AR2", + "virtAsstTitleCurrentBasal": "Basale corrente", + "virtAsstTitleCurrentCOB": "COB Corrente", + "virtAsstTitleCurrentIOB": "IOB Corrente", + "virtAsstTitleLaunch": "Benvenuto in Nightscout", + "virtAsstTitleLoopForecast": "Previsione Ciclo", + "virtAsstTitleLastLoop": "Ultimo Ciclo", + "virtAsstTitleOpenAPSForecast": "Previsione OpenAPS", + "virtAsstTitlePumpReservoir": "Insulina Rimanente", + "virtAsstTitlePumpBattery": "Batteria Microinfusore", + "virtAsstTitleRawBG": "Glicemia Grezza Corrente", + "virtAsstTitleUploaderBattery": "Batteria del Caricatore", + "virtAsstTitleCurrentBG": "Glicemia Corrente", + "virtAsstTitleFullStatus": "Stato Completo", + "virtAsstTitleCGMMode": "Modalità CGM", + "virtAsstTitleCGMStatus": "Stato CGM", + "virtAsstTitleCGMSessionAge": "Età Sessione Sensore", + "virtAsstTitleCGMTxStatus": "Stato Trasmettitore Sensore", + "virtAsstTitleCGMTxAge": "Età Trasmettitore del Sensore", + "virtAsstTitleCGMNoise": "Disturbo Sensore", + "virtAsstTitleDelta": "Delta Glicemia", + "virtAsstStatus": "%1 e %2 come %3.", + "virtAsstBasal": "%1 basale attuale è %2 unità per ora", + "virtAsstBasalTemp": "%1 basale temporanea di %2 unità per ora finirà %3", + "virtAsstIob": "e tu hai %1 insulina attiva.", + "virtAsstIobIntent": "Tu hai %1 insulina attiva", + "virtAsstIobUnits": "%1 unità di", + "virtAsstLaunch": "Cosa vorresti controllare su Nightscout?", + "virtAsstPreamble": "Tuo", + "virtAsstPreamble3person": "%1 ha un ", + "virtAsstNoInsulin": "no", + "virtAsstUploadBattery": "La batteria del caricatore è a %1", + "virtAsstReservoir": "Hai %1 unità rimanenti", + "virtAsstPumpBattery": "La batteria del microinsusore è a %1 %2", + "virtAsstUploaderBattery": "La batteria del caricatore è a %1", + "virtAsstLastLoop": "L'ultimo successo del ciclo è stato %1", + "virtAsstLoopNotAvailable": "Il plugin del ciclo non sembra essere abilitato", + "virtAsstLoopForecastAround": "Secondo le previsioni del ciclo ci si aspetta che ci siano circa %1 nei prossimi %2", + "virtAsstLoopForecastBetween": "Secondo le previsioni di ciclo ci si aspetta che siano tra %1 e %2 per i prossimi %3", + "virtAsstAR2ForecastAround": "Secondo le previsioni AR2 ci si aspetta che ci siano circa %1 nei prossimi %2", + "virtAsstAR2ForecastBetween": "Secondo le previsioni AR2 ci si aspetta che siano tra %1 e %2 nei prossimi %3", + "virtAsstForecastUnavailable": "Impossibile prevedere con i dati disponibili", + "virtAsstRawBG": "La tua Glicemia grezza è %1", + "virtAsstOpenAPSForecast": "L'eventuale Glicemia OpenAPS è %1", + "virtAsstCob3person": "%1 ha %2 carboidrati attivi", + "virtAsstCob": "Hai %1 carboidrati attivi", + "virtAsstCGMMode": "La modalità del tuo Sensore era %1 a partire da %2.", + "virtAsstCGMStatus": "Il stato del tuo Sensore era %1 a partire da %2.", + "virtAsstCGMSessAge": "La tua sessione del Sensore e' attiva da %1 giorni e %2 ore.", + "virtAsstCGMSessNotStarted": "Al momento non c'è una sessione attiva del Sensore.", + "virtAsstCGMTxStatus": "Lo stato del trasmettitore del tuo Sensore era %1 a partire da %2.", + "virtAsstCGMTxAge": "Il trasmettitore del tuo sensore ha %1 giorni.", + "virtAsstCGMNoise": "Il rumore del tuo sensore era %1 a partire da %2.", + "virtAsstCGMBattOne": "La batteria del tuo Sensore era %1 volt da %2.", + "virtAsstCGMBattTwo": "I livelli della batteria del Sensore erano %1 volt e %2 volt a partire da %3.", + "virtAsstDelta": "Il tuo delta era %1 tra %2 e %3.", + "virtAsstDeltaEstimated": "Il tuo delta stimato era %1 tra %2 e %3.", + "virtAsstUnknownIntentTitle": "Intenzioni Sconosciute", + "virtAsstUnknownIntentText": "Mi dispiace, non so cosa state chiedendo.", + "Fat [g]": "Grassi [g]", + "Protein [g]": "Proteine [g]", + "Energy [kJ]": "Energia [kJ]", + "Clock Views:": "Vista orologio:", + "Clock": "Orologio", + "Color": "Colore", + "Simple": "Semplice", + "TDD average": "Totale Dose Giornaliera media (TDD)", + "Bolus average": "Media bolo", + "Basal average": "Media basale", + "Base basal average:": "Media basale originale:", + "Carbs average": "Media carboidrati", + "Eating Soon": "Mangiare presto", + "Last entry {0} minutes ago": "Ultimo inserimento {0} minuti fa", + "change": "cambio", + "Speech": "Voce", + "Target Top": "Limite superiore", + "Target Bottom": "Limite inferiore", + "Canceled": "Cancellato", + "Meter BG": "Glicemia Capillare", + "predicted": "predetto", + "future": "futuro", + "ago": "fa", + "Last data received": "Ultimo dato ricevuto", + "Clock View": "Vista orologio", + "Protein": "Proteine", + "Fat": "Grasso", + "Protein average": "Media delle proteine", + "Fat average": "Media dei grassi", + "Total carbs": "Carboidrati Totali", + "Total protein": "Proteine Totali", + "Total fat": "Grasso Totale", + "Database Size": "Dimensione Del Database", + "Database Size near its limits!": "Dimensione del database vicino ai suoi limiti!", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "La dimensione del database è %1 MiB su %2 MiB. Si prega di eseguire il backup e ripulire il database!", + "Database file size": "Dimensione file database", + "%1 MiB of %2 MiB (%3%)": "%1 MiB di %2 MiB (%3%)", + "Data size": "Dimensione dati", + "virtAsstDatabaseSize": "%1 MiB. Questo è il %2% dello spazio del database disponibile.", + "virtAsstTitleDatabaseSize": "Dimensione file database", + "Carbs/Food/Time": "Carboidrati/Cibo/Tempo", + "You have administration messages": "Hai messaggi di amministrazione", + "Admin messages in queue": "Messaggi di amministrazione in coda", + "Queue empty": "Coda vuota", + "There are no admin messages in queue": "Non ci sono messaggi di amministrazione in coda", + "Please sign in using the API_SECRET to see your administration messages": "Effettua il login utilizzando API_SECRET per vedere i messaggi di amministrazione", + "Reads enabled in default permissions": "Letture abilitate nelle autorizzazioni predefinite", + "Data reads enabled": "Lettura dati abilitata", + "Data writes enabled": "Scrittura dati abilitata", + "Data writes not enabled": "Scrittura dati non abilitata", + "Color prediction lines": "Colore linee di previsione", + "Release Notes": "Note sulla versione", + "Check for Updates": "Cerca aggiornamenti", + "Open Source": "Open Source", + "Nightscout Info": "Info su Nightscout", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "Lo scopo principale del Loopalyzer è quello di visualizzare le prestazioni del sistema closed loop. Può funzionare anche con altri setup, sia closed che open loop, e senza loop. Tuttavia, a seconda di quale uploader si utilizza, quanto spesso è in grado di raccogliere i dati e caricare, e come è in grado di riempire i dati mancanti alcuni grafici possono avere lacune o anche essere completamente vuoti. Assicuratevi sempre che i grafici siano accettabili. Il modo migliore è quello di visualizzare un giorno alla volta e di scorrere un certo numero di giorni prima di vederli.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Il Loopalyzer include una funzione di cambio di orario. Se ad esempio fate colazione alle 07:00 e alle 08:00 il giorno dopo, la curva glicemica media di questi due giorni probabilmente risulterà appiattita e non mostrerà la risposta effettiva dopo la colazione. Il cambio orario calcolerà il tempo medio in cui questi pasti sono stati consumati e poi sposterà tutti i dati (carboidrati, insulina, basale, ecc.) in entrambi i giorni della corrispondente differenza di tempo, in modo che entrambi i pasti siano allineati con l'ora media di inizio del pasto.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "In questo esempio tutti i dati del primo giorno sono spostati di 30 minuti in avanti e tutti i dati del secondo giorno di 30 minuti indietro, in modo da sembrare come se aveste fatto colazione alle 07:30 in entrambi i giorni. In questo modo è possibile vedere la risposta media effettiva della glicemia da un pasto.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Il cambio di orario evidenzia in grigio il periodo dopo l'ora media di inizio del pasto, per la durata della DIA (Durata Azione dell'Insulina). Poiché tutti i dati vengono spostati per l'intera giornata, le curve al di fuori dell'area grigia potrebbero non essere precise.", + "Note that time shift is available only when viewing multiple days.": "Nota che il cambio di orario è disponibile solo quando si visualizzano più giorni.", + "Please select a maximum of two weeks duration and click Show again.": "Seleziona un periodo massimo di due settimane e fai clic su Mostra di nuovo.", + "Show profiles table": "Mostra tabella profili", + "Show predictions": "Visualizza previsioni", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Timeshift on meals larger than %1 g carbs consumed between %2 and %3", + "Previous": "Precendente", + "Previous day": "Giorno precedente", + "Next day": "Giorno seguente", + "Next": "Seguente", + "Temp basal delta": "Differenza basale temporanea", + "Authorized by token": "Autorizzato da token", + "Auth role": "Auth role", + "view without token": "visualizza senza token", + "Remove stored token": "Rimuovi token memorizzato", + "Weekly Distribution": "Distribuzione settimanale", + "Failed authentication": "Autenticazione non riuscita", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "Un dispositivo all'indirizzo IP %1 ha tentato di autenticarsi con Nightscout con credenziali errate. Controlla se hai una configurazione di uploader con API_SECRET o token errati.", + "Default (with leading zero and U)": "Default (with leading zero and U)", + "Concise (with U, without leading zero)": "Concise (with U, without leading zero)", + "Minimal (without leading zero and U)": "Minimal (without leading zero and U)", + "Small Bolus Display": "Small Bolus Display", + "Large Bolus Display": "Large Bolus Display", + "Bolus Display Threshold": "Bolus Display Threshold", + "%1 U and Over": "%1 U and Over", + "Event repeated %1 times.": "Event repeated %1 times.", + "minutes": "minutes", + "Last recorded %1 %2 ago.": "Last recorded %1 %2 ago.", + "Security issue": "Security issue", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.", + "less than 1": "less than 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system." +} diff --git a/translations/ja_JP.json b/translations/ja_JP.json new file mode 100644 index 00000000000..7b53b4aee78 --- /dev/null +++ b/translations/ja_JP.json @@ -0,0 +1,707 @@ +{ + "Listening on port": "接続可能", + "Mo": "月", + "Tu": "火", + "We": "水", + "Th": "木", + "Fr": "金", + "Sa": "土", + "Su": "日", + "Monday": "月曜日", + "Tuesday": "火曜日", + "Wednesday": "水曜日", + "Thursday": "木曜日", + "Friday": "金曜日", + "Saturday": "土曜日", + "Sunday": "日曜日", + "Category": "カテゴリー", + "Subcategory": "サブカテゴリー", + "Name": "名前", + "Today": "今日", + "Last 2 days": "直近の2日間", + "Last 3 days": "直近の3日間", + "Last week": "直近の1週間", + "Last 2 weeks": "直近の2週間", + "Last month": "直近の1ヶ月", + "Last 3 months": "直近の3ヶ月", + "From": "開始日", + "To": "終了日", + "Notes": "メモ", + "Food": "食事", + "Insulin": "インスリン", + "Carbs": "炭水化物", + "Notes contain": "メモ内容", + "Target BG range bottom": "目標血糖値 下限", + "top": "上限", + "Show": "作成", + "Display": "表示", + "Loading": "ロード中", + "Loading profile": "プロフィールロード中", + "Loading status": "ステータスロード中", + "Loading food database": "食事データベースロード中", + "not displayed": "表示できません", + "Loading CGM data of": "CGMデータロード中", + "Loading treatments data of": "治療データロード中", + "Processing data of": "データ処理中の日付:", + "Portion": "一食分", + "Size": "量", + "(none)": "(データなし)", + "None": "データなし", + "": "<データなし>", + "Result is empty": "結果がありません", + "Day to day": "日々", + "Week to week": "Week to week", + "Daily Stats": "1日統計", + "Percentile Chart": "パーセント図", + "Distribution": "配分", + "Hourly stats": "1時間統計", + "netIOB stats": "体内残存インスリン量", + "temp basals must be rendered to display this report": "このレポートを表示する為には日々レポートを先に表示する必要があります。", + "No data available": "利用できるデータがありません", + "Low": "目標血糖値低値", + "In Range": "目標血糖値範囲内", + "Period": "期間", + "High": "目標血糖値高値", + "Average": "平均値", + "Low Quartile": "下四分位値", + "Upper Quartile": "高四分位値", + "Quartile": "四分位値", + "Date": "日付", + "Normal": "通常", + "Median": "中央値", + "Readings": "読み込み", + "StDev": "標準偏差", + "Daily stats report": "1日ごとの統計のレポート", + "Glucose Percentile report": "グルコース(%)レポート", + "Glucose distribution": "血糖値の分布", + "days total": "合計日数", + "Total per day": "日毎の合計", + "Overall": "総合", + "Range": "範囲", + "% of Readings": "%精度", + "# of Readings": "#精度", + "Mean": "意味", + "Standard Deviation": "標準偏差", + "Max": "最大値", + "Min": "最小値", + "A1c estimation*": "予想HbA1c", + "Weekly Success": "週間達成度", + "There is not sufficient data to run this report. Select more days.": "レポートするためのデータが足りません。もっと多くの日を選択してください。", + "Using stored API secret hash": "保存されたAPI secret hashを使用する", + "No API secret hash stored yet. You need to enter API secret.": "API secret hashがまだ保存されていません。API secretの入力が必要です。", + "Database loaded": "データベースロード完了", + "Error: Database failed to load": "エラー:データベースを読み込めません", + "Error": "エラー", + "Create new record": "新しい記録を作る", + "Save record": "保存", + "Portions": "一食分", + "Unit": "単位", + "GI": "GI", + "Edit record": "記録編集", + "Delete record": "記録削除", + "Move to the top": "トップ画面へ", + "Hidden": "隠す", + "Hide after use": "使用後に隠す", + "Your API secret must be at least 12 characters long": "APIシークレットは12文字以上の長さが必要です", + "Bad API secret": "APIシークレットは正しくありません", + "API secret hash stored": "APIシークレットを保存出来ました", + "Status": "統計", + "Not loaded": "読み込めません", + "Food Editor": "食事編集", + "Your database": "あなたのデータベース", + "Filter": "フィルター", + "Save": "保存", + "Clear": "クリア", + "Record": "記録", + "Quick picks": "クイック選択", + "Show hidden": "表示する", + "Your API secret or token": "Your API secret or token", + "Remember this device. (Do not enable this on public computers.)": "Remember this device. (Do not enable this on public computers.)", + "Treatments": "治療", + "Time": "時間", + "Event Type": "イベント", + "Blood Glucose": "血糖値", + "Entered By": "入力者", + "Delete this treatment?": "この治療データを削除しますか?", + "Carbs Given": "摂取糖質量", + "Insulin Given": "投与されたインスリン", + "Event Time": "イベント時間", + "Please verify that the data entered is correct": "入力したデータが正しいか確認をお願いします。", + "BG": "血糖", + "Use BG correction in calculation": "ボーラス計算機能使用", + "BG from CGM (autoupdated)": "CGMグルコース値", + "BG from meter": "血糖測定器使用グルコース値", + "Manual BG": "手動入力グルコース値", + "Quickpick": "クイック選択", + "or": "または", + "Add from database": "データベースから追加", + "Use carbs correction in calculation": "糖質量計算機能を使用", + "Use COB correction in calculation": "COB補正計算を使用", + "Use IOB in calculation": "IOB計算を使用", + "Other correction": "その他の補正", + "Rounding": "端数処理", + "Enter insulin correction in treatment": "治療にインスリン補正を入力する。", + "Insulin needed": "必要インスリン単位", + "Carbs needed": "必要糖質量", + "Carbs needed if Insulin total is negative value": "インスリン合計値がマイナスであればカーボ値入力が必要です。", + "Basal rate": "基礎インスリン割合", + "60 minutes earlier": "60分前", + "45 minutes earlier": "45分前", + "30 minutes earlier": "30分前", + "20 minutes earlier": "20分前", + "15 minutes earlier": "15分前", + "Time in minutes": "Time in minutes", + "15 minutes later": "15分後", + "20 minutes later": "20分後", + "30 minutes later": "30分後", + "45 minutes later": "45分後", + "60 minutes later": "60分後", + "Additional Notes, Comments": "追加メモ、コメント", + "RETRO MODE": "振り返りモード", + "Now": "今", + "Other": "他の", + "Submit Form": "フォームを投稿する", + "Profile Editor": "プロフィール編集", + "Reports": "報告", + "Add food from your database": "データベースから食べ物を追加", + "Reload database": "データベース再読み込み", + "Add": "追加", + "Unauthorized": "認証されていません", + "Entering record failed": "入力されたものは記録できませんでした", + "Device authenticated": "機器は認証されました。", + "Device not authenticated": "機器は認証されていません。", + "Authentication status": "認証ステータス", + "Authenticate": "認証", + "Remove": "除く", + "Your device is not authenticated yet": "機器はまだ承認されていません。", + "Sensor": "センサー", + "Finger": "指", + "Manual": "手動入力", + "Scale": "グラフ縦軸", + "Linear": "線形軸表示", + "Logarithmic": "対数軸表示", + "Logarithmic (Dynamic)": "対数軸(動的)表示", + "Insulin-on-Board": "IOB・残存インスリン", + "Carbs-on-Board": "COB・残存カーボ", + "Bolus Wizard Preview": "BWP・ボーラスウィザード参照", + "Value Loaded": "数値読み込み完了", + "Cannula Age": "CAGE・カニューレ使用日数", + "Basal Profile": "ベーサルプロフィール", + "Silence for 30 minutes": "30分静かにする", + "Silence for 60 minutes": "60分静かにする", + "Silence for 90 minutes": "90分静かにする", + "Silence for 120 minutes": "120分静かにする", + "Settings": "設定", + "Units": "単位", + "Date format": "日数初期化", + "12 hours": "12時間制", + "24 hours": "24時間制", + "Log a Treatment": "治療を記録", + "BG Check": "BG測定", + "Meal Bolus": "食事ボーラス", + "Snack Bolus": "間食ボーラス", + "Correction Bolus": "補正ボーラス", + "Carb Correction": "カーボ治療", + "Note": "メモ", + "Question": "質問", + "Exercise": "運動", + "Pump Site Change": "CAGE・ポンプ注入場所変更", + "CGM Sensor Start": "CGMセンサー開始", + "CGM Sensor Stop": "CGM センサー停止", + "CGM Sensor Insert": "CGMセンサー挿入", + "Sensor Code": "Sensor Code", + "Transmitter ID": "Transmitter ID", + "Dexcom Sensor Start": "Dexcomセンサー開始", + "Dexcom Sensor Change": "Dexcomセンサー挿入", + "Insulin Cartridge Change": "インスリンリザーバー交換", + "D.A.D. Alert": "メディカルアラート犬(DAD)の知らせ", + "Glucose Reading": "血糖値測定", + "Measurement Method": "測定方法", + "Meter": "血糖測定器", + "Amount in grams": "グラム換算", + "Amount in units": "単位換算", + "View all treatments": "全治療内容を参照", + "Enable Alarms": "アラームを有効にする", + "Pump Battery Change": "ポンプバッテリー交換", + "Pump Battery Age": "Pump Battery Age", + "Pump Battery Low Alarm": "ポンプバッテリーが低下", + "Pump Battery change overdue!": "ポンプバッテリー交換期限切れてます!", + "When enabled an alarm may sound.": "有効にすればアラームが鳴動します。", + "Urgent High Alarm": "緊急高血糖アラーム", + "High Alarm": "高血糖アラーム", + "Low Alarm": "低血糖アラーム", + "Urgent Low Alarm": "緊急低血糖アラーム", + "Stale Data: Warn": "注意:古いデータ", + "Stale Data: Urgent": "緊急:古いデータ", + "mins": "分", + "Night Mode": "夜間モード", + "When enabled the page will be dimmed from 10pm - 6am.": "有効にすると、ページは 夜22時から 朝6時まで単色表示になります。", + "Enable": "有効", + "Show Raw BG Data": "素のBGデータを表示する", + "Never": "決して", + "Always": "いつも", + "When there is noise": "測定不良があった時", + "When enabled small white dots will be displayed for raw BG data": "有効にすると、小さい白ドットが素のBGデータ用に表示されます", + "Custom Title": "カスタムタイトル", + "Theme": "テーマ", + "Default": "デフォルト", + "Colors": "色付き", + "Colorblind-friendly colors": "色覚異常の方向けの色", + "Reset, and use defaults": "リセットしてデフォルト設定を使用", + "Calibrations": "較生", + "Alarm Test / Smartphone Enable": "アラームテスト/スマートフォンを有効にする", + "Bolus Wizard": "ボーラスウィザード", + "in the future": "先の時間", + "time ago": "時間前", + "hr ago": "時間前", + "hrs ago": "時間前", + "min ago": "分前", + "mins ago": "分前", + "day ago": "日前", + "days ago": "日前", + "long ago": "前の期間", + "Clean": "なし", + "Light": "軽い", + "Medium": "中間", + "Heavy": "重たい", + "Treatment type": "治療タイプ", + "Raw BG": "Raw BG", + "Device": "機器", + "Noise": "測定不良", + "Calibration": "較正", + "Show Plugins": "プラグイン表示", + "About": "約", + "Value in": "数値", + "Carb Time": "カーボ時間", + "Language": "言語", + "Add new": "新たに加える", + "g": "g", + "ml": "ml", + "pcs": "pcs", + "Drag&drop food here": "Drag&drop food here", + "Care Portal": "ケアポータル", + "Medium/Unknown": "Medium/Unknown", + "IN THE FUTURE": "IN THE FUTURE", + "Order": "Order", + "oldest on top": "古いものを先頭に", + "newest on top": "新しいものを先頭に", + "All sensor events": "全てのセンサーのイベント", + "Remove future items from mongo database": "Remove future items from mongo database", + "Find and remove treatments in the future": "先の時間の治療を見つけて削除する", + "This task find and remove treatments in the future.": "このタスクで先の時間の治療を見つけて削除する", + "Remove treatments in the future": "先の時間の治療を削除する", + "Find and remove entries in the future": "先の時間の記入を見つけて削除する", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "このタスクでアップローダーによって、間違った日時で作られた先の時間のCGMデータを見つけて削除します。", + "Remove entries in the future": "先の時間の記入を削除する", + "Loading database ...": "データベース読み込み。。。", + "Database contains %1 future records": "データベースは %1件今後の記録を含みます", + "Remove %1 selected records?": "%1件の選択した記録を削除しますか?", + "Error loading database": "データベースの読み込み時にエラーが発生しました", + "Record %1 removed ...": "Record %1 removed ...", + "Error removing record %1": "Error removing record %1", + "Deleting records ...": "記録を削除します。。。", + "%1 records deleted": "%1件の記録を削除しました", + "Clean Mongo status database": "Clean Mongo status database", + "Delete all documents from devicestatus collection": "Delete all documents from devicestatus collection", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.", + "Delete all documents": "Delete all documents", + "Delete all documents from devicestatus collection?": "Delete all documents from devicestatus collection?", + "Database contains %1 records": "Database contains %1 records", + "All records removed ...": "All records removed ...", + "Delete all documents from devicestatus collection older than 30 days": "Delete all documents from devicestatus collection older than 30 days", + "Number of Days to Keep:": "Number of Days to Keep:", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.", + "Delete old documents from devicestatus collection?": "Delete old documents from devicestatus collection?", + "Clean Mongo entries (glucose entries) database": "Clean Mongo entries (glucose entries) database", + "Delete all documents from entries collection older than 180 days": "Delete all documents from entries collection older than 180 days", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.", + "Delete old documents": "Delete old documents", + "Delete old documents from entries collection?": "Delete old documents from entries collection?", + "%1 is not a valid number": "%1 is not a valid number", + "%1 is not a valid number - must be more than 2": "%1 is not a valid number - must be more than 2", + "Clean Mongo treatments database": "Clean Mongo treatments database", + "Delete all documents from treatments collection older than 180 days": "Delete all documents from treatments collection older than 180 days", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.", + "Delete old documents from treatments collection?": "Delete old documents from treatments collection?", + "Admin Tools": "Admin Tools", + "Nightscout reporting": "Nightscout reporting", + "Cancel": "中止", + "Edit treatment": "Edit treatment", + "Duration": "Duration", + "Duration in minutes": "Duration in minutes", + "Temp Basal": "Temp Basal", + "Temp Basal Start": "Temp Basal Start", + "Temp Basal End": "Temp Basal End", + "Percent": "Percent", + "Basal change in %": "Basal change in %", + "Basal value": "Basal value", + "Absolute basal value": "Absolute basal value", + "Announcement": "Announcement", + "Loading temp basal data": "Loading temp basal data", + "Save current record before changing to new?": "Save current record before changing to new?", + "Profile Switch": "Profile Switch", + "Profile": "Profile", + "General profile settings": "General profile settings", + "Title": "Title", + "Database records": "Database records", + "Add new record": "新しい記録を加える", + "Remove this record": "この記録を除く", + "Clone this record to new": "Clone this record to new", + "Record valid from": "Record valid from", + "Stored profiles": "Stored profiles", + "Timezone": "Timezone", + "Duration of Insulin Activity (DIA)": "Duration of Insulin Activity (DIA)", + "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.": "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.", + "Insulin to carb ratio (I:C)": "Insulin to carb ratio (I:C)", + "Hours:": "Hours:", + "hours": "hours", + "g/hour": "g/hour", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.", + "Insulin Sensitivity Factor (ISF)": "Insulin Sensitivity Factor (ISF)", + "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.", + "Carbs activity / absorption rate": "Carbs activity / absorption rate", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).", + "Basal rates [unit/hour]": "Basal rates [unit/hour]", + "Target BG range [mg/dL,mmol/L]": "Target BG range [mg/dL,mmol/L]", + "Start of record validity": "Start of record validity", + "Icicle": "Icicle", + "Render Basal": "Render Basal", + "Profile used": "Profile used", + "Calculation is in target range.": "Calculation is in target range.", + "Loading profile records ...": "Loading profile records ...", + "Values loaded.": "Values loaded.", + "Default values used.": "Default values used.", + "Error. Default values used.": "Error. Default values used.", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "Time ranges of target_low and target_high don't match. Values are restored to defaults.", + "Valid from:": "Valid from:", + "Save current record before switching to new?": "Save current record before switching to new?", + "Add new interval before": "Add new interval before", + "Delete interval": "Delete interval", + "I:C": "I:C", + "ISF": "ISF", + "Combo Bolus": "Combo Bolus", + "Difference": "Difference", + "New time": "New time", + "Edit Mode": "編集モード", + "When enabled icon to start edit mode is visible": "When enabled icon to start edit mode is visible", + "Operation": "Operation", + "Move": "Move", + "Delete": "削除", + "Move insulin": "Move insulin", + "Move carbs": "Move carbs", + "Remove insulin": "Remove insulin", + "Remove carbs": "Remove carbs", + "Change treatment time to %1 ?": "Change treatment time to %1 ?", + "Change carbs time to %1 ?": "Change carbs time to %1 ?", + "Change insulin time to %1 ?": "Change insulin time to %1 ?", + "Remove treatment ?": "Remove treatment ?", + "Remove insulin from treatment ?": "Remove insulin from treatment ?", + "Remove carbs from treatment ?": "Remove carbs from treatment ?", + "Rendering": "Rendering", + "Loading OpenAPS data of": "Loading OpenAPS data of", + "Loading profile switch data": "Loading profile switch data", + "Redirecting you to the Profile Editor to create a new profile.": "Redirecting you to the Profile Editor to create a new profile.", + "Pump": "Pump", + "Sensor Age": "Sensor Age", + "Insulin Age": "Insulin Age", + "Temporary target": "Temporary target", + "Reason": "Reason", + "Eating soon": "Eating soon", + "Top": "Top", + "Bottom": "Bottom", + "Activity": "Activity", + "Targets": "Targets", + "Bolus insulin:": "Bolus insulin:", + "Base basal insulin:": "Base basal insulin:", + "Positive temp basal insulin:": "Positive temp basal insulin:", + "Negative temp basal insulin:": "Negative temp basal insulin:", + "Total basal insulin:": "Total basal insulin:", + "Total daily insulin:": "Total daily insulin:", + "Unable to save Role": "Unable to save Role", + "Unable to delete Role": "Unable to delete Role", + "Database contains %1 roles": "Database contains %1 roles", + "Edit Role": "Edit Role", + "admin, school, family, etc": "admin, school, family, etc", + "Permissions": "Permissions", + "Are you sure you want to delete: ": "Are you sure you want to delete: ", + "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.": "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.", + "Add new Role": "Add new Role", + "Roles - Groups of People, Devices, etc": "Roles - Groups of People, Devices, etc", + "Edit this role": "Edit this role", + "Admin authorized": "Admin authorized", + "Subjects - People, Devices, etc": "Subjects - People, Devices, etc", + "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.", + "Add new Subject": "Add new Subject", + "Unable to save Subject": "Unable to save Subject", + "Unable to delete Subject": "Unable to delete Subject", + "Database contains %1 subjects": "Database contains %1 subjects", + "Edit Subject": "Edit Subject", + "person, device, etc": "person, device, etc", + "role1, role2": "role1, role2", + "Edit this subject": "Edit this subject", + "Delete this subject": "Delete this subject", + "Roles": "Roles", + "Access Token": "Access Token", + "hour ago": "hour ago", + "hours ago": "hours ago", + "Silence for %1 minutes": "Silence for %1 minutes", + "Check BG": "Check BG", + "BASAL": "BASAL", + "Current basal": "Current basal", + "Sensitivity": "Sensitivity", + "Current Carb Ratio": "Current Carb Ratio", + "Basal timezone": "Basal timezone", + "Active profile": "Active profile", + "Active temp basal": "Active temp basal", + "Active temp basal start": "Active temp basal start", + "Active temp basal duration": "Active temp basal duration", + "Active temp basal remaining": "Active temp basal remaining", + "Basal profile value": "Basal profile value", + "Active combo bolus": "Active combo bolus", + "Active combo bolus start": "Active combo bolus start", + "Active combo bolus duration": "Active combo bolus duration", + "Active combo bolus remaining": "Active combo bolus remaining", + "BG Delta": "BG Delta", + "Elapsed Time": "Elapsed Time", + "Absolute Delta": "Absolute Delta", + "Interpolated": "Interpolated", + "BWP": "BWP", + "Urgent": "緊急", + "Warning": "Warning", + "Info": "Info", + "Lowest": "Lowest", + "Snoozing high alarm since there is enough IOB": "Snoozing high alarm since there is enough IOB", + "Check BG, time to bolus?": "Check BG, time to bolus?", + "Notice": "Notice", + "required info missing": "required info missing", + "Insulin on Board": "Insulin on Board", + "Current target": "Current target", + "Expected effect": "Expected effect", + "Expected outcome": "Expected outcome", + "Carb Equivalent": "Carb Equivalent", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS", + "%1U reduction needed in active insulin to reach low target, too much basal?": "%1U reduction needed in active insulin to reach low target, too much basal?", + "basal adjustment out of range, give carbs?": "basal adjustment out of range, give carbs?", + "basal adjustment out of range, give bolus?": "basal adjustment out of range, give bolus?", + "above high": "above high", + "below low": "below low", + "Projected BG %1 target": "Projected BG %1 target", + "aiming at": "aiming at", + "Bolus %1 units": "Bolus %1 units", + "or adjust basal": "or adjust basal", + "Check BG using glucometer before correcting!": "Check BG using glucometer before correcting!", + "Basal reduction to account %1 units:": "Basal reduction to account %1 units:", + "30m temp basal": "30m temp basal", + "1h temp basal": "1h temp basal", + "Cannula change overdue!": "Cannula change overdue!", + "Time to change cannula": "Time to change cannula", + "Change cannula soon": "Change cannula soon", + "Cannula age %1 hours": "Cannula age %1 hours", + "Inserted": "Inserted", + "CAGE": "CAGE", + "COB": "COB", + "Last Carbs": "Last Carbs", + "IAGE": "IAGE", + "Insulin reservoir change overdue!": "Insulin reservoir change overdue!", + "Time to change insulin reservoir": "Time to change insulin reservoir", + "Change insulin reservoir soon": "Change insulin reservoir soon", + "Insulin reservoir age %1 hours": "Insulin reservoir age %1 hours", + "Changed": "Changed", + "IOB": "IOB", + "Careportal IOB": "Careportal IOB", + "Last Bolus": "Last Bolus", + "Basal IOB": "Basal IOB", + "Source": "Source", + "Stale data, check rig?": "Stale data, check rig?", + "Last received:": "Last received:", + "%1m ago": "%1m ago", + "%1h ago": "%1h ago", + "%1d ago": "%1d ago", + "RETRO": "RETRO", + "SAGE": "SAGE", + "Sensor change/restart overdue!": "Sensor change/restart overdue!", + "Time to change/restart sensor": "Time to change/restart sensor", + "Change/restart sensor soon": "Change/restart sensor soon", + "Sensor age %1 days %2 hours": "Sensor age %1 days %2 hours", + "Sensor Insert": "Sensor Insert", + "Sensor Start": "Sensor Start", + "days": "days", + "Insulin distribution": "Insulin distribution", + "To see this report, press SHOW while in this view": "To see this report, press SHOW while in this view", + "AR2 Forecast": "AR2 Forecast", + "OpenAPS Forecasts": "OpenAPS Forecasts", + "Temporary Target": "Temporary Target", + "Temporary Target Cancel": "Temporary Target Cancel", + "OpenAPS Offline": "OpenAPS Offline", + "Profiles": "Profiles", + "Time in fluctuation": "Time in fluctuation", + "Time in rapid fluctuation": "Time in rapid fluctuation", + "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:": "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:", + "Filter by hours": "Filter by hours", + "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.": "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.", + "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.": "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.", + "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.", + "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.", + "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">can be found here.", + "Mean Total Daily Change": "Mean Total Daily Change", + "Mean Hourly Change": "Mean Hourly Change", + "FortyFiveDown": "slightly dropping", + "FortyFiveUp": "slightly rising", + "Flat": "holding", + "SingleUp": "rising", + "SingleDown": "dropping", + "DoubleDown": "rapidly dropping", + "DoubleUp": "rapidly rising", + "virtAsstUnknown": "That value is unknown at the moment. Please see your Nightscout site for more details.", + "virtAsstTitleAR2Forecast": "AR2 Forecast", + "virtAsstTitleCurrentBasal": "Current Basal", + "virtAsstTitleCurrentCOB": "Current COB", + "virtAsstTitleCurrentIOB": "Current IOB", + "virtAsstTitleLaunch": "Welcome to Nightscout", + "virtAsstTitleLoopForecast": "Loop Forecast", + "virtAsstTitleLastLoop": "Last Loop", + "virtAsstTitleOpenAPSForecast": "OpenAPS Forecast", + "virtAsstTitlePumpReservoir": "Insulin Remaining", + "virtAsstTitlePumpBattery": "Pump Battery", + "virtAsstTitleRawBG": "Current Raw BG", + "virtAsstTitleUploaderBattery": "Uploader Battery", + "virtAsstTitleCurrentBG": "Current BG", + "virtAsstTitleFullStatus": "Full Status", + "virtAsstTitleCGMMode": "CGM Mode", + "virtAsstTitleCGMStatus": "CGM Status", + "virtAsstTitleCGMSessionAge": "CGM Session Age", + "virtAsstTitleCGMTxStatus": "CGM Transmitter Status", + "virtAsstTitleCGMTxAge": "CGM Transmitter Age", + "virtAsstTitleCGMNoise": "CGM Noise", + "virtAsstTitleDelta": "Blood Glucose Delta", + "virtAsstStatus": "%1 and %2 as of %3.", + "virtAsstBasal": "%1 current basal is %2 units per hour", + "virtAsstBasalTemp": "%1 temp basal of %2 units per hour will end %3", + "virtAsstIob": "and you have %1 insulin on board.", + "virtAsstIobIntent": "You have %1 insulin on board", + "virtAsstIobUnits": "%1 units of", + "virtAsstLaunch": "What would you like to check on Nightscout?", + "virtAsstPreamble": "Your", + "virtAsstPreamble3person": "%1 has a ", + "virtAsstNoInsulin": "no", + "virtAsstUploadBattery": "Your uploader battery is at %1", + "virtAsstReservoir": "You have %1 units remaining", + "virtAsstPumpBattery": "Your pump battery is at %1 %2", + "virtAsstUploaderBattery": "Your uploader battery is at %1", + "virtAsstLastLoop": "The last successful loop was %1", + "virtAsstLoopNotAvailable": "Loop plugin does not seem to be enabled", + "virtAsstLoopForecastAround": "According to the loop forecast you are expected to be around %1 over the next %2", + "virtAsstLoopForecastBetween": "According to the loop forecast you are expected to be between %1 and %2 over the next %3", + "virtAsstAR2ForecastAround": "According to the AR2 forecast you are expected to be around %1 over the next %2", + "virtAsstAR2ForecastBetween": "According to the AR2 forecast you are expected to be between %1 and %2 over the next %3", + "virtAsstForecastUnavailable": "Unable to forecast with the data that is available", + "virtAsstRawBG": "Your raw bg is %1", + "virtAsstOpenAPSForecast": "The OpenAPS Eventual BG is %1", + "virtAsstCob3person": "%1 has %2 carbohydrates on board", + "virtAsstCob": "You have %1 carbohydrates on board", + "virtAsstCGMMode": "Your CGM mode was %1 as of %2.", + "virtAsstCGMStatus": "Your CGM status was %1 as of %2.", + "virtAsstCGMSessAge": "Your CGM session has been active for %1 days and %2 hours.", + "virtAsstCGMSessNotStarted": "There is no active CGM session at the moment.", + "virtAsstCGMTxStatus": "Your CGM transmitter status was %1 as of %2.", + "virtAsstCGMTxAge": "Your CGM transmitter is %1 days old.", + "virtAsstCGMNoise": "Your CGM noise was %1 as of %2.", + "virtAsstCGMBattOne": "Your CGM battery was %1 volts as of %2.", + "virtAsstCGMBattTwo": "Your CGM battery levels were %1 volts and %2 volts as of %3.", + "virtAsstDelta": "Your delta was %1 between %2 and %3.", + "virtAsstDeltaEstimated": "Your estimated delta was %1 between %2 and %3.", + "virtAsstUnknownIntentTitle": "Unknown Intent", + "virtAsstUnknownIntentText": "I'm sorry, I don't know what you're asking for.", + "Fat [g]": "Fat [g]", + "Protein [g]": "Protein [g]", + "Energy [kJ]": "Energy [kJ]", + "Clock Views:": "Clock Views:", + "Clock": "Clock", + "Color": "Color", + "Simple": "Simple", + "TDD average": "TDD average", + "Bolus average": "Bolus average", + "Basal average": "Basal average", + "Base basal average:": "Base basal average:", + "Carbs average": "Carbs average", + "Eating Soon": "Eating Soon", + "Last entry {0} minutes ago": "Last entry {0} minutes ago", + "change": "change", + "Speech": "Speech", + "Target Top": "Target Top", + "Target Bottom": "Target Bottom", + "Canceled": "Canceled", + "Meter BG": "Meter BG", + "predicted": "predicted", + "future": "future", + "ago": "ago", + "Last data received": "Last data received", + "Clock View": "Clock View", + "Protein": "Protein", + "Fat": "Fat", + "Protein average": "Protein average", + "Fat average": "Fat average", + "Total carbs": "Total carbs", + "Total protein": "Total protein", + "Total fat": "Total fat", + "Database Size": "Database Size", + "Database Size near its limits!": "Database Size near its limits!", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!", + "Database file size": "Database file size", + "%1 MiB of %2 MiB (%3%)": "%1 MiB of %2 MiB (%3%)", + "Data size": "Data size", + "virtAsstDatabaseSize": "%1 MiB. That is %2% of available database space.", + "virtAsstTitleDatabaseSize": "Database file size", + "Carbs/Food/Time": "Carbs/Food/Time", + "You have administration messages": "You have administration messages", + "Admin messages in queue": "Admin messages in queue", + "Queue empty": "Queue empty", + "There are no admin messages in queue": "There are no admin messages in queue", + "Please sign in using the API_SECRET to see your administration messages": "Please sign in using the API_SECRET to see your administration messages", + "Reads enabled in default permissions": "Reads enabled in default permissions", + "Data reads enabled": "Data reads enabled", + "Data writes enabled": "Data writes enabled", + "Data writes not enabled": "Data writes not enabled", + "Color prediction lines": "Color prediction lines", + "Release Notes": "Release Notes", + "Check for Updates": "Check for Updates", + "Open Source": "Open Source", + "Nightscout Info": "Nightscout Info", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.", + "Note that time shift is available only when viewing multiple days.": "Note that time shift is available only when viewing multiple days.", + "Please select a maximum of two weeks duration and click Show again.": "Please select a maximum of two weeks duration and click Show again.", + "Show profiles table": "Show profiles table", + "Show predictions": "Show predictions", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Timeshift on meals larger than %1 g carbs consumed between %2 and %3", + "Previous": "Previous", + "Previous day": "Previous day", + "Next day": "Next day", + "Next": "Next", + "Temp basal delta": "Temp basal delta", + "Authorized by token": "Authorized by token", + "Auth role": "Auth role", + "view without token": "view without token", + "Remove stored token": "Remove stored token", + "Weekly Distribution": "Weekly Distribution", + "Failed authentication": "Failed authentication", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?", + "Default (with leading zero and U)": "Default (with leading zero and U)", + "Concise (with U, without leading zero)": "Concise (with U, without leading zero)", + "Minimal (without leading zero and U)": "Minimal (without leading zero and U)", + "Small Bolus Display": "Small Bolus Display", + "Large Bolus Display": "Large Bolus Display", + "Bolus Display Threshold": "Bolus Display Threshold", + "%1 U and Over": "%1 U and Over", + "Event repeated %1 times.": "Event repeated %1 times.", + "minutes": "minutes", + "Last recorded %1 %2 ago.": "Last recorded %1 %2 ago.", + "Security issue": "Security issue", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.", + "less than 1": "less than 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system." +} diff --git a/translations/ko_KR.json b/translations/ko_KR.json new file mode 100644 index 00000000000..6404a9b6bc3 --- /dev/null +++ b/translations/ko_KR.json @@ -0,0 +1,707 @@ +{ + "Listening on port": "포트에서 수신", + "Mo": "월", + "Tu": "화", + "We": "수", + "Th": "목", + "Fr": "금", + "Sa": "토", + "Su": "일", + "Monday": "월요일", + "Tuesday": "화요일", + "Wednesday": "수요일", + "Thursday": "목요일", + "Friday": "금요일", + "Saturday": "토요일", + "Sunday": "일요일", + "Category": "분류", + "Subcategory": "세부 분류", + "Name": "프로파일 명", + "Today": "오늘", + "Last 2 days": "지난 2일", + "Last 3 days": "지난 3일", + "Last week": "지난주", + "Last 2 weeks": "지난 2주", + "Last month": "지난달", + "Last 3 months": "지난 3달", + "From": "시작일", + "To": "종료일", + "Notes": "메모", + "Food": "음식", + "Insulin": "인슐린", + "Carbs": "탄수화물", + "Notes contain": "메모 포함", + "Target BG range bottom": "최저 목표 혈당 범위", + "top": "최고치", + "Show": "확인", + "Display": "출력", + "Loading": "로딩", + "Loading profile": "프로파일 로딩", + "Loading status": "상태 로딩", + "Loading food database": "음식 데이터 베이스 로딩", + "not displayed": "출력되지 않음", + "Loading CGM data of": "CGM 데이터 로딩", + "Loading treatments data of": "처리 데이터 로딩", + "Processing data of": "데이터 처리 중", + "Portion": "부분", + "Size": "크기", + "(none)": "(없음)", + "None": "없음", + "": "<없음>", + "Result is empty": "결과 없음", + "Day to day": "일별 그래프", + "Week to week": "주별 그래프", + "Daily Stats": "일간 통계", + "Percentile Chart": "백분위 그래프", + "Distribution": "분포", + "Hourly stats": "시간대별 통계", + "netIOB stats": "netIOB stats", + "temp basals must be rendered to display this report": "temp basals must be rendered to display this report", + "No data available": "활용할 수 있는 데이터 없음", + "Low": "낮음", + "In Range": "범위 안 ", + "Period": "기간 ", + "High": "높음", + "Average": "평균", + "Low Quartile": "낮은 4분위", + "Upper Quartile": "높은 4분위", + "Quartile": "4분위", + "Date": "날짜", + "Normal": "보통", + "Median": "중간값", + "Readings": "혈당", + "StDev": "표준 편차", + "Daily stats report": "일간 통계 보고서", + "Glucose Percentile report": "혈당 백분위 보고서", + "Glucose distribution": "혈당 분포", + "days total": "일 전체", + "Total per day": "하루 총량", + "Overall": "전체", + "Range": "범위", + "% of Readings": "수신된 혈당 비율(%)", + "# of Readings": "수신된 혈당 개수(#)", + "Mean": "평균", + "Standard Deviation": "표준 편차", + "Max": "최대값", + "Min": "최소값", + "A1c estimation*": "예상 당화혈 색소", + "Weekly Success": "주간 통계", + "There is not sufficient data to run this report. Select more days.": "이 보고서를 실행하기 위한 데이터가 충분하지 않습니다. 더 많은 날들을 선택해 주세요.", + "Using stored API secret hash": "저장된 API secret hash를 사용 중", + "No API secret hash stored yet. You need to enter API secret.": "API secret hash가 아직 저장되지 않았습니다. API secret를 입력해 주세요.", + "Database loaded": "데이터베이스 로드", + "Error: Database failed to load": "에러: 데이터베이스 로드 실패", + "Error": "Error", + "Create new record": "새입력", + "Save record": "저장", + "Portions": "부분", + "Unit": "단위", + "GI": "혈당 지수", + "Edit record": "편집기록", + "Delete record": "삭제기록", + "Move to the top": "맨처음으로 이동", + "Hidden": "숨김", + "Hide after use": "사용 후 숨김", + "Your API secret must be at least 12 characters long": "API secret는 최소 12자 이상이여야 합니다.", + "Bad API secret": "잘못된 API secret", + "API secret hash stored": "API secret hash가 저장 되었습니다.", + "Status": "상태", + "Not loaded": "로드되지 않음", + "Food Editor": "음식 편집", + "Your database": "당신의 데이터베이스", + "Filter": "필터", + "Save": "저장", + "Clear": "취소", + "Record": "기록", + "Quick picks": "빠른 선택", + "Show hidden": "숨김 보기", + "Your API secret or token": "Your API secret or token", + "Remember this device. (Do not enable this on public computers.)": "Remember this device. (Do not enable this on public computers.)", + "Treatments": "관리", + "Time": "시간", + "Event Type": "입력 유형", + "Blood Glucose": "혈당", + "Entered By": "입력 내용", + "Delete this treatment?": "이 대처를 지울까요?", + "Carbs Given": "탄수화물 요구량", + "Insulin Given": "인슐린 요구량", + "Event Time": "입력 시간", + "Please verify that the data entered is correct": "입력한 데이터가 정확한지 확인해 주세요.", + "BG": "혈당", + "Use BG correction in calculation": "계산에 보정된 혈당을 사용하세요.", + "BG from CGM (autoupdated)": "CGM 혈당(자동 업데이트)", + "BG from meter": "혈당 측정기에서의 혈당", + "Manual BG": "수동 입력 혈당", + "Quickpick": "빠른 선택", + "or": "또는", + "Add from database": "데이터베이스로 부터 추가", + "Use carbs correction in calculation": "계산에 보정된 탄수화물을 사용하세요.", + "Use COB correction in calculation": "계산에 보정된 COB를 사용하세요.", + "Use IOB in calculation": "계산에 IOB를 사용하세요.", + "Other correction": "다른 보정", + "Rounding": "라운딩", + "Enter insulin correction in treatment": "대처를 위해 보정된 인슐린을 입력하세요.", + "Insulin needed": "인슐린 필요", + "Carbs needed": "탄수화물 필요", + "Carbs needed if Insulin total is negative value": "인슐린 전체가 마이너스 값이면 탄수화물이 필요합니다.", + "Basal rate": "Basal 단위", + "60 minutes earlier": "60분 더 일찍", + "45 minutes earlier": "45분 더 일찍", + "30 minutes earlier": "30분 더 일찍", + "20 minutes earlier": "20분 더 일찍", + "15 minutes earlier": "15분 더 일찍", + "Time in minutes": "분", + "15 minutes later": "15분 더 나중에", + "20 minutes later": "20분 더 나중에", + "30 minutes later": "30분 더 나중에", + "45 minutes later": "45분 더 나중에", + "60 minutes later": "60분 더 나중에", + "Additional Notes, Comments": "추가 메모", + "RETRO MODE": "PETRO MODE", + "Now": "현재", + "Other": "다른", + "Submit Form": "양식 제출", + "Profile Editor": "프로파일 편집", + "Reports": "보고서", + "Add food from your database": "데이터베이스에서 음식을 추가하세요.", + "Reload database": "데이터베이스 재로드", + "Add": "추가", + "Unauthorized": "미인증", + "Entering record failed": "입력 실패", + "Device authenticated": "기기 인증", + "Device not authenticated": "미인증 기기", + "Authentication status": "인증 상태", + "Authenticate": "인증", + "Remove": "삭제", + "Your device is not authenticated yet": "당신의 기기는 아직 인증되지 않았습니다.", + "Sensor": "센서", + "Finger": "손가락", + "Manual": "수", + "Scale": "스케일", + "Linear": "Linear", + "Logarithmic": "Logarithmic", + "Logarithmic (Dynamic)": "다수(동적인)", + "Insulin-on-Board": "IOB", + "Carbs-on-Board": "COB", + "Bolus Wizard Preview": "Bolus 마법사 미리보기", + "Value Loaded": "데이터가 로드됨", + "Cannula Age": "캐뉼라 사용기간", + "Basal Profile": "Basal 프로파일", + "Silence for 30 minutes": "30분간 무음", + "Silence for 60 minutes": "60분간 무음", + "Silence for 90 minutes": "90분간 무음", + "Silence for 120 minutes": "120분간 무음", + "Settings": "설정", + "Units": "단위", + "Date format": "날짜 형식", + "12 hours": "12 시간", + "24 hours": "24 시간", + "Log a Treatment": "Treatment 로그", + "BG Check": "혈당 체크", + "Meal Bolus": "식사 인슐린", + "Snack Bolus": "스넥 인슐린", + "Correction Bolus": "수정 인슐린", + "Carb Correction": "탄수화물 수정", + "Note": "메모", + "Question": "질문", + "Exercise": "운동", + "Pump Site Change": "펌프 위치 변경", + "CGM Sensor Start": "CGM 센서 시작", + "CGM Sensor Stop": "CGM Sensor Stop", + "CGM Sensor Insert": "CGM 센서 삽입", + "Sensor Code": "Sensor Code", + "Transmitter ID": "Transmitter ID", + "Dexcom Sensor Start": "Dexcom 센서 시작", + "Dexcom Sensor Change": "Dexcom 센서 교체", + "Insulin Cartridge Change": "인슐린 카트리지 교체", + "D.A.D. Alert": "D.A.D(Diabetes Alert Dog) 알림", + "Glucose Reading": "혈당 읽기", + "Measurement Method": "측정 방법", + "Meter": "혈당 측정기", + "Amount in grams": "합계(grams)", + "Amount in units": "합계(units)", + "View all treatments": "모든 treatments 보기", + "Enable Alarms": "알람 켜기", + "Pump Battery Change": "Pump Battery Change", + "Pump Battery Age": "Pump Battery Age", + "Pump Battery Low Alarm": "Pump Battery Low Alarm", + "Pump Battery change overdue!": "Pump Battery change overdue!", + "When enabled an alarm may sound.": "알림을 활성화 하면 알람이 울립니다.", + "Urgent High Alarm": "긴급 고혈당 알람", + "High Alarm": "고혈당 알람", + "Low Alarm": "저혈당 알람", + "Urgent Low Alarm": "긴급 저혈당 알람", + "Stale Data: Warn": "손실 데이터 : 경고", + "Stale Data: Urgent": "손실 데이터 : 긴급", + "mins": "분", + "Night Mode": "나이트 모드", + "When enabled the page will be dimmed from 10pm - 6am.": "페이지를 켜면 오후 10시 부터 오전 6시까지 비활성화 될 것이다.", + "Enable": "활성화", + "Show Raw BG Data": "Raw 혈당 데이터 보기", + "Never": "보지 않기", + "Always": "항상", + "When there is noise": "노이즈가 있을 때", + "When enabled small white dots will be displayed for raw BG data": "활성화 하면 작은 흰점들이 raw 혈당 데이터를 표시하게 될 것이다.", + "Custom Title": "사용자 정의 제목", + "Theme": "테마", + "Default": "초기설정", + "Colors": "색상", + "Colorblind-friendly colors": "색맹 친화적인 색상", + "Reset, and use defaults": "초기화 그리고 초기설정으로 사용", + "Calibrations": "보정", + "Alarm Test / Smartphone Enable": "알람 테스트 / 스마트폰 활성화", + "Bolus Wizard": "Bolus 마법사", + "in the future": "미래", + "time ago": "시간 전", + "hr ago": "시간 전", + "hrs ago": "시간 전", + "min ago": "분 전", + "mins ago": "분 전", + "day ago": "일 전", + "days ago": "일 전", + "long ago": "기간 전", + "Clean": "Clean", + "Light": "Light", + "Medium": "보통", + "Heavy": "심한", + "Treatment type": "Treatment 타입", + "Raw BG": "Raw 혈당", + "Device": "기기", + "Noise": "노이즈", + "Calibration": "보정", + "Show Plugins": "플러그인 보기", + "About": "정보", + "Value in": "값", + "Carb Time": "탄수화물 시간", + "Language": "언어", + "Add new": "새입력", + "g": "g", + "ml": "ml", + "pcs": "조각 바로 가기(pieces shortcut)", + "Drag&drop food here": "음식을 여기에 드래그&드랍 해주세요.", + "Care Portal": "Care Portal", + "Medium/Unknown": "보통/알려지지 않은", + "IN THE FUTURE": "미래", + "Order": "순서", + "oldest on top": "오래된 것 부터", + "newest on top": "새로운 것 부터", + "All sensor events": "모든 센서 이벤트", + "Remove future items from mongo database": "mongo DB에서 미래 항목들을 지우세요.", + "Find and remove treatments in the future": "미래에 treatments를 검색하고 지우세요.", + "This task find and remove treatments in the future.": "이 작업은 미래에 treatments를 검색하고 지우는 것입니다.", + "Remove treatments in the future": "미래 treatments 지우기", + "Find and remove entries in the future": "미래에 입력을 검색하고 지우세요.", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "이 작업은 잘못된 날짜/시간으로 업로드 되어 생성된 미래의 CGM 데이터를 검색하고 지우는 것입니다.", + "Remove entries in the future": "미래의 입력 지우기", + "Loading database ...": "데이터베이스 로딩", + "Database contains %1 future records": "데이터베이스는 미래 기록을 %1 포함하고 있습니다.", + "Remove %1 selected records?": "선택된 기록 %1를 지우시겠습니까?", + "Error loading database": "데이터베이스 로딩 에러", + "Record %1 removed ...": "기록 %1가 삭제되었습니다.", + "Error removing record %1": "기록 %1을 삭제하는 중에 에러가 발생했습니다.", + "Deleting records ...": "기록 삭제 중", + "%1 records deleted": "%1 records deleted", + "Clean Mongo status database": "Mongo 상태 데이터베이스를 지우세요.", + "Delete all documents from devicestatus collection": "devicestatus 수집에서 모든 문서들을 지우세요", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "이 작업은 모든 문서를 devicestatus 수집에서 지웁니다. 업로더 배터리 상태가 적절하게 업데이트 되지 않을 때 유용합니다.", + "Delete all documents": "모든 문서들을 지우세요", + "Delete all documents from devicestatus collection?": "devicestatus 수집의 모든 문서들을 지우세요.", + "Database contains %1 records": "데이터베이스는 %1 기록을 포함합니다.", + "All records removed ...": "모든 기록들이 지워졌습니다.", + "Delete all documents from devicestatus collection older than 30 days": "Delete all documents from devicestatus collection older than 30 days", + "Number of Days to Keep:": "Number of Days to Keep:", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.", + "Delete old documents from devicestatus collection?": "Delete old documents from devicestatus collection?", + "Clean Mongo entries (glucose entries) database": "Clean Mongo entries (glucose entries) database", + "Delete all documents from entries collection older than 180 days": "Delete all documents from entries collection older than 180 days", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.", + "Delete old documents": "Delete old documents", + "Delete old documents from entries collection?": "Delete old documents from entries collection?", + "%1 is not a valid number": "%1 is not a valid number", + "%1 is not a valid number - must be more than 2": "%1 is not a valid number - must be more than 2", + "Clean Mongo treatments database": "Clean Mongo treatments database", + "Delete all documents from treatments collection older than 180 days": "Delete all documents from treatments collection older than 180 days", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.", + "Delete old documents from treatments collection?": "Delete old documents from treatments collection?", + "Admin Tools": "관리 도구", + "Nightscout reporting": "Nightscout 보고서", + "Cancel": "취소", + "Edit treatment": "Treatments 편집", + "Duration": "기간", + "Duration in minutes": "분당 지속 기간", + "Temp Basal": "임시 basal", + "Temp Basal Start": "임시 basal 시작", + "Temp Basal End": "임시 basal 종료", + "Percent": "퍼센트", + "Basal change in %": "% 이내의 basal 변경", + "Basal value": "Basal", + "Absolute basal value": "절대적인 basal", + "Announcement": "공지", + "Loading temp basal data": "임시 basal 로딩", + "Save current record before changing to new?": "새 데이터로 변경하기 전에 현재의 기록을 저장하시겠습니까?", + "Profile Switch": "프로파일 변경", + "Profile": "프로파일", + "General profile settings": "일반 프로파일 설정", + "Title": "제목", + "Database records": "데이터베이스 기록", + "Add new record": "새 기록 추가", + "Remove this record": "이 기록 삭", + "Clone this record to new": "이 기록을 새기록으로 복제하기", + "Record valid from": "기록을 시작한 날짜", + "Stored profiles": "저장된 프로파일", + "Timezone": "타임존", + "Duration of Insulin Activity (DIA)": "활성 인슐린 지속 시간(DIA)", + "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.": "인슐린이 작용하는 지속시간을 나타냅니다. 사람마다 그리고 인슐린 종류에 따라 다르고 일반적으로 3~4시간간 동안 지속되며 인슐린 작용 시간(Insulin lifetime)이라고 불리기도 합니다.", + "Insulin to carb ratio (I:C)": "인슐린에 대한 탄수화물 비율(I:C)", + "Hours:": "시간:", + "hours": "시간", + "g/hour": "g/시간", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "인슐린 단위 당 탄수화물 g. 인슐린 단위에 대한 탄수화물의 양의 비율을 나타냅니다.", + "Insulin Sensitivity Factor (ISF)": "인슐린 민감도(ISF)", + "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "인슐린 단위당 mg/dL 또는 mmol/L. 인슐린 단위당 얼마나 많은 혈당 변화가 있는지의 비율을 나타냅니다.", + "Carbs activity / absorption rate": "활성 탄수화물/흡수율", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "단위 시간당 그램. 시간당 작용하는 탄수화물의 총량 뿐 아니라 시간 단위당 COB의 변화를 나타냅니다. 탄수화물 흡수율/활성도 곡선은 인슐린 활성도보다 이해가 잘 되지는 않지만 지속적인 흡수율(g/hr)에 따른 초기 지연을 사용하여 근사치를 구할 수 있습니다.", + "Basal rates [unit/hour]": "Basal 비율[unit/hour]", + "Target BG range [mg/dL,mmol/L]": "목표 혈당 범위 [mg/dL,mmol/L]", + "Start of record validity": "기록 유효기간의 시작일", + "Icicle": "고드름 방향", + "Render Basal": "Basal 사용하기", + "Profile used": "프로파일이 사용됨", + "Calculation is in target range.": "계산은 목표 범위 안에 있습니다.", + "Loading profile records ...": "프로파일 기록 로딩", + "Values loaded.": "값이 로드됨", + "Default values used.": "초기 설정 값이 사용됨", + "Error. Default values used.": "에러. 초기 설정 값이 사용됨", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "설정한 저혈당과 고혈당의 시간 범위와 일치하지 않습니다. 값은 초기 설정값으로 다시 저장 될 것입니다.", + "Valid from:": "유효", + "Save current record before switching to new?": "새 데이터로 변환하기 전에 현재의 기록을 저장하겠습니까?", + "Add new interval before": "새로운 구간을 추가하세요", + "Delete interval": "구간을 지우세요.", + "I:C": "I:C", + "ISF": "ISF", + "Combo Bolus": "Combo Bolus", + "Difference": "차이", + "New time": "새로운 시간", + "Edit Mode": "편집 모드", + "When enabled icon to start edit mode is visible": "편집모드를 시작하기 위해 아이콘을 활성화하면 볼 수 있습니다.", + "Operation": "동작", + "Move": "이동", + "Delete": "삭제", + "Move insulin": "인슐린을 이동하세요.", + "Move carbs": "탄수화물을 이동하세요.", + "Remove insulin": "인슐린을 지우세요.", + "Remove carbs": "탄수화물을 지우세요.", + "Change treatment time to %1 ?": "%1 treatment을 변경하세요.", + "Change carbs time to %1 ?": "%1로 탄수화물 시간을 변경하세요.", + "Change insulin time to %1 ?": "%1로 인슐린 시간을 변경하세요.", + "Remove treatment ?": "Treatment를 지우세요.", + "Remove insulin from treatment ?": "Treatment에서 인슐린을 지우세요.", + "Remove carbs from treatment ?": "Treatment에서 탄수화물을 지우세요.", + "Rendering": "랜더링", + "Loading OpenAPS data of": "OpenAPS 데이터 로딩", + "Loading profile switch data": "프로파일 변환 데이터 로딩", + "Redirecting you to the Profile Editor to create a new profile.": "잘못된 프로파일 설정. \n프로파일이 없어서 표시된 시간으로 정의됩니다. 새 프로파일을 생성하기 위해 프로파일 편집기로 리다이렉팅", + "Pump": "펌프", + "Sensor Age": "센서 사용 기간", + "Insulin Age": "인슐린 사용 기간", + "Temporary target": "임시 목표", + "Reason": "근거", + "Eating soon": "편집 중", + "Top": "최고", + "Bottom": "최저", + "Activity": "활성도", + "Targets": "목표", + "Bolus insulin:": "Bolus 인슐린", + "Base basal insulin:": "기본 basal 인슐린", + "Positive temp basal insulin:": "초과된 임시 basal 인슐린", + "Negative temp basal insulin:": "남은 임시 basal 인슐린", + "Total basal insulin:": "전체 basal 인슐린", + "Total daily insulin:": "하루 인슐린 총량", + "Unable to save Role": "Unable to save Role", + "Unable to delete Role": "삭제로 비활성", + "Database contains %1 roles": "데이터베이스가 %1 포함", + "Edit Role": "편집 모드", + "admin, school, family, etc": "관리자, 학교, 가족 등", + "Permissions": "허가", + "Are you sure you want to delete: ": "정말로 삭제하시겠습니까: ", + "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.": "각각은 1 또는 그 이상의 허가를 가지고 있습니다. 허가는 예측이 안되고 구분자로 : 사용한 계층이 있습니다", + "Add new Role": "새 역할 추가", + "Roles - Groups of People, Devices, etc": "역할 - 그룹, 기기, 등", + "Edit this role": "이 역할 편집", + "Admin authorized": "인증된 관리자", + "Subjects - People, Devices, etc": "주제 - 사람, 기기 등", + "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "각 주제는 유일한 access token을 가지고 1 또는 그 이상의 역할을 가질 것이다. 선택된 주제와 새로운 뷰를 열기 위해 access token을 클릭하세요. 이 비밀 링크는 공유되어질 수 있다.", + "Add new Subject": "새 주제 추가", + "Unable to save Subject": "Unable to save Subject", + "Unable to delete Subject": "주제를 지우기 위해 비활성화", + "Database contains %1 subjects": "데이터베이스는 %1 주제를 포함", + "Edit Subject": "주제 편집", + "person, device, etc": "사람, 기기 등", + "role1, role2": "역할1, 역할2", + "Edit this subject": "이 주제 편집", + "Delete this subject": "이 주제 삭제", + "Roles": "역할", + "Access Token": "Access Token", + "hour ago": "시간 후", + "hours ago": "시간 후", + "Silence for %1 minutes": "%1 분 동안 무음", + "Check BG": "혈당 체크", + "BASAL": "BASAL", + "Current basal": "현재 basal", + "Sensitivity": "인슐린 민감도(ISF)", + "Current Carb Ratio": "현재 탄수화물 비율(ICR)", + "Basal timezone": "Basal 타임존", + "Active profile": "활성 프로파일", + "Active temp basal": "활성 임시 basal", + "Active temp basal start": "활성 임시 basal 시작", + "Active temp basal duration": "활성 임시 basal 시간", + "Active temp basal remaining": "남아 있는 활성 임시 basal", + "Basal profile value": "Basal 프로파일 값", + "Active combo bolus": "활성 콤보 bolus", + "Active combo bolus start": "활성 콤보 bolus 시작", + "Active combo bolus duration": "활성 콤보 bolus 기간", + "Active combo bolus remaining": "남아 있는 활성 콤보 bolus", + "BG Delta": "혈당 차이", + "Elapsed Time": "경과 시간", + "Absolute Delta": "절대적인 차이", + "Interpolated": "삽입됨", + "BWP": "BWP", + "Urgent": "긴급", + "Warning": "경고", + "Info": "정보", + "Lowest": "가장 낮은", + "Snoozing high alarm since there is enough IOB": "충분한 IOB가 남아 있기 때문에 고혈당 알람을 스누즈", + "Check BG, time to bolus?": "Bolus를 주입할 시간입니다. 혈당 체크 하시겠습니까?", + "Notice": "알림", + "required info missing": "요청한 정보 손실", + "Insulin on Board": "활성 인슐린(IOB)", + "Current target": "현재 목표", + "Expected effect": "예상 효과", + "Expected outcome": "예상 결과", + "Carb Equivalent": "탄수화물 양", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "낮은 혈당 목표에 도달하기 위해 필요한 인슐린양보다 %1U의 인슐린 양이 초과 되었고 탄수화물 양이 초과되지 않았습니다.", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "낮은 혈당 목표에 도달하기 위해 필요한 인슐린양보다 %1U의 인슐린 양이 초과 되었습니다. 탄수화물로 IOB를 커버하세요.", + "%1U reduction needed in active insulin to reach low target, too much basal?": "낮은 혈당 목표에 도달하기 위해 활성 인슐린 양을 %1U 줄일 필요가 있습니다. basal양이 너무 많습니까?", + "basal adjustment out of range, give carbs?": "적정 basal 양의 범위를 초과했습니다. 탄수화물 보충 하시겠습니까?", + "basal adjustment out of range, give bolus?": "적정 basal 양의 범위를 초과했습니다. bolus를 추가하시겠습니까?", + "above high": "고혈당 초과", + "below low": "저혈당 미만", + "Projected BG %1 target": "목표된 혈당 %1", + "aiming at": "목표", + "Bolus %1 units": "Bolus %1 단위", + "or adjust basal": "또는 조절 basal", + "Check BG using glucometer before correcting!": "수정하기 전에 혈당체크기를 사용하여 혈당을 체크하세요!", + "Basal reduction to account %1 units:": "%1 단위로 계산하기 위해 Basal 감소", + "30m temp basal": "30분 임시 basal", + "1h temp basal": "1시간 임시 basal", + "Cannula change overdue!": "주입세트(cannula) 기한이 지났습니다. 변경하세요!", + "Time to change cannula": "주입세트(cannula)를 변경할 시간", + "Change cannula soon": "주입세트(cannula)를 곧 변경하세요.", + "Cannula age %1 hours": "주입세트(cannula) %1시간 사용", + "Inserted": "삽입된", + "CAGE": "주입세트사용기간", + "COB": "COB", + "Last Carbs": "마지막 탄수화물", + "IAGE": "인슐린사용기간", + "Insulin reservoir change overdue!": "레저보(펌프 주사기)의 사용기한이 지났습니다. 변경하세요!", + "Time to change insulin reservoir": "레저보(펌프 주사기)를 변경할 시간", + "Change insulin reservoir soon": "레저보(펌프 주사기)안의 인슐린을 곧 변경하세요.", + "Insulin reservoir age %1 hours": "레저보(펌프 주사기) %1시간 사용", + "Changed": "변경됨", + "IOB": "IOB", + "Careportal IOB": "케어포털 IOB", + "Last Bolus": "마지막 Bolus", + "Basal IOB": "Basal IOB", + "Source": "출처", + "Stale data, check rig?": "오래된 데이터입니다. 확인해 보시겠습니까?", + "Last received:": "마지막 수신", + "%1m ago": "%1분 전", + "%1h ago": "%1시간 전", + "%1d ago": "%1일 전", + "RETRO": "RETRO", + "SAGE": "센서사용기간", + "Sensor change/restart overdue!": "센서 사용기한이 지났습니다. 센서를 교체/재시작 하세요!", + "Time to change/restart sensor": "센서 교체/재시작 시간", + "Change/restart sensor soon": "센서를 곧 교체/재시작 하세요", + "Sensor age %1 days %2 hours": "센서사용기간 %1일 %2시간", + "Sensor Insert": "센서삽입", + "Sensor Start": "센서시작", + "days": "일", + "Insulin distribution": "인슐린주입", + "To see this report, press SHOW while in this view": "이 보고서를 보려면 \"확인\"을 누르세요", + "AR2 Forecast": "AR2 예측", + "OpenAPS Forecasts": "OpenAPS 예측", + "Temporary Target": "임시목표", + "Temporary Target Cancel": "임시목표취소", + "OpenAPS Offline": "OpenAPS Offline", + "Profiles": "프로파일", + "Time in fluctuation": "변동시간", + "Time in rapid fluctuation": "빠른변동시간", + "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:": "이것은 대충 예측한 것이기 때문에 부정확할 수 있고 실제 혈당으로 대체되지 않습니다. 사용된 공식:", + "Filter by hours": "시간으로 정렬", + "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.": "변동시간과 빠른 변동시간은 조사된 기간 동안 %의 시간으로 측정되었습니다.혈당은 비교적 빠르게 변화되었습니다. 낮을수록 좋습니다.", + "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.": "전체 일일 변동 평균은 조사된 기간동안 전체 혈당 절대값의 합을 전체 일수로 나눈 값입니다. 낮을수록 좋습니다.", + "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "시간당 변동 평균은 조사된 기간 동안 전체 혈당 절대값의 합을 기간의 시간으로 나눈 값입니다.낮을수록 좋습니다.", + "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.", + "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">here.", + "Mean Total Daily Change": "전체 일일 변동 평균", + "Mean Hourly Change": "시간당 변동 평균", + "FortyFiveDown": "slightly dropping", + "FortyFiveUp": "slightly rising", + "Flat": "holding", + "SingleUp": "rising", + "SingleDown": "dropping", + "DoubleDown": "rapidly dropping", + "DoubleUp": "rapidly rising", + "virtAsstUnknown": "That value is unknown at the moment. Please see your Nightscout site for more details.", + "virtAsstTitleAR2Forecast": "AR2 Forecast", + "virtAsstTitleCurrentBasal": "Current Basal", + "virtAsstTitleCurrentCOB": "Current COB", + "virtAsstTitleCurrentIOB": "Current IOB", + "virtAsstTitleLaunch": "Welcome to Nightscout", + "virtAsstTitleLoopForecast": "Loop Forecast", + "virtAsstTitleLastLoop": "Last Loop", + "virtAsstTitleOpenAPSForecast": "OpenAPS Forecast", + "virtAsstTitlePumpReservoir": "Insulin Remaining", + "virtAsstTitlePumpBattery": "Pump Battery", + "virtAsstTitleRawBG": "Current Raw BG", + "virtAsstTitleUploaderBattery": "Uploader Battery", + "virtAsstTitleCurrentBG": "Current BG", + "virtAsstTitleFullStatus": "Full Status", + "virtAsstTitleCGMMode": "CGM Mode", + "virtAsstTitleCGMStatus": "CGM Status", + "virtAsstTitleCGMSessionAge": "CGM Session Age", + "virtAsstTitleCGMTxStatus": "CGM Transmitter Status", + "virtAsstTitleCGMTxAge": "CGM Transmitter Age", + "virtAsstTitleCGMNoise": "CGM Noise", + "virtAsstTitleDelta": "Blood Glucose Delta", + "virtAsstStatus": "%1 and %2 as of %3.", + "virtAsstBasal": "%1 current basal is %2 units per hour", + "virtAsstBasalTemp": "%1 temp basal of %2 units per hour will end %3", + "virtAsstIob": "and you have %1 insulin on board.", + "virtAsstIobIntent": "You have %1 insulin on board", + "virtAsstIobUnits": "%1 units of", + "virtAsstLaunch": "What would you like to check on Nightscout?", + "virtAsstPreamble": "Your", + "virtAsstPreamble3person": "%1 has a ", + "virtAsstNoInsulin": "no", + "virtAsstUploadBattery": "Your uploader battery is at %1", + "virtAsstReservoir": "You have %1 units remaining", + "virtAsstPumpBattery": "Your pump battery is at %1 %2", + "virtAsstUploaderBattery": "Your uploader battery is at %1", + "virtAsstLastLoop": "The last successful loop was %1", + "virtAsstLoopNotAvailable": "Loop plugin does not seem to be enabled", + "virtAsstLoopForecastAround": "According to the loop forecast you are expected to be around %1 over the next %2", + "virtAsstLoopForecastBetween": "According to the loop forecast you are expected to be between %1 and %2 over the next %3", + "virtAsstAR2ForecastAround": "According to the AR2 forecast you are expected to be around %1 over the next %2", + "virtAsstAR2ForecastBetween": "According to the AR2 forecast you are expected to be between %1 and %2 over the next %3", + "virtAsstForecastUnavailable": "Unable to forecast with the data that is available", + "virtAsstRawBG": "Your raw bg is %1", + "virtAsstOpenAPSForecast": "The OpenAPS Eventual BG is %1", + "virtAsstCob3person": "%1 has %2 carbohydrates on board", + "virtAsstCob": "You have %1 carbohydrates on board", + "virtAsstCGMMode": "Your CGM mode was %1 as of %2.", + "virtAsstCGMStatus": "Your CGM status was %1 as of %2.", + "virtAsstCGMSessAge": "Your CGM session has been active for %1 days and %2 hours.", + "virtAsstCGMSessNotStarted": "There is no active CGM session at the moment.", + "virtAsstCGMTxStatus": "Your CGM transmitter status was %1 as of %2.", + "virtAsstCGMTxAge": "Your CGM transmitter is %1 days old.", + "virtAsstCGMNoise": "Your CGM noise was %1 as of %2.", + "virtAsstCGMBattOne": "Your CGM battery was %1 volts as of %2.", + "virtAsstCGMBattTwo": "Your CGM battery levels were %1 volts and %2 volts as of %3.", + "virtAsstDelta": "Your delta was %1 between %2 and %3.", + "virtAsstDeltaEstimated": "Your estimated delta was %1 between %2 and %3.", + "virtAsstUnknownIntentTitle": "Unknown Intent", + "virtAsstUnknownIntentText": "I'm sorry, I don't know what you're asking for.", + "Fat [g]": "Fat [g]", + "Protein [g]": "Protein [g]", + "Energy [kJ]": "Energy [kJ]", + "Clock Views:": "시계 보기", + "Clock": "시계모드", + "Color": "색상모드", + "Simple": "간편 모드", + "TDD average": "TDD average", + "Bolus average": "Bolus average", + "Basal average": "Basal average", + "Base basal average:": "Base basal average:", + "Carbs average": "Carbs average", + "Eating Soon": "Eating Soon", + "Last entry {0} minutes ago": "Last entry {0} minutes ago", + "change": "change", + "Speech": "Speech", + "Target Top": "Target Top", + "Target Bottom": "Target Bottom", + "Canceled": "Canceled", + "Meter BG": "Meter BG", + "predicted": "predicted", + "future": "future", + "ago": "ago", + "Last data received": "Last data received", + "Clock View": "Clock View", + "Protein": "Protein", + "Fat": "Fat", + "Protein average": "Protein average", + "Fat average": "Fat average", + "Total carbs": "Total carbs", + "Total protein": "Total protein", + "Total fat": "Total fat", + "Database Size": "Database Size", + "Database Size near its limits!": "Database Size near its limits!", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!", + "Database file size": "Database file size", + "%1 MiB of %2 MiB (%3%)": "%1 MiB of %2 MiB (%3%)", + "Data size": "Data size", + "virtAsstDatabaseSize": "%1 MiB. That is %2% of available database space.", + "virtAsstTitleDatabaseSize": "Database file size", + "Carbs/Food/Time": "Carbs/Food/Time", + "You have administration messages": "You have administration messages", + "Admin messages in queue": "Admin messages in queue", + "Queue empty": "Queue empty", + "There are no admin messages in queue": "There are no admin messages in queue", + "Please sign in using the API_SECRET to see your administration messages": "Please sign in using the API_SECRET to see your administration messages", + "Reads enabled in default permissions": "Reads enabled in default permissions", + "Data reads enabled": "Data reads enabled", + "Data writes enabled": "Data writes enabled", + "Data writes not enabled": "Data writes not enabled", + "Color prediction lines": "Color prediction lines", + "Release Notes": "Release Notes", + "Check for Updates": "Check for Updates", + "Open Source": "Open Source", + "Nightscout Info": "Nightscout Info", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.", + "Note that time shift is available only when viewing multiple days.": "Note that time shift is available only when viewing multiple days.", + "Please select a maximum of two weeks duration and click Show again.": "Please select a maximum of two weeks duration and click Show again.", + "Show profiles table": "Show profiles table", + "Show predictions": "Show predictions", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Timeshift on meals larger than %1 g carbs consumed between %2 and %3", + "Previous": "Previous", + "Previous day": "Previous day", + "Next day": "Next day", + "Next": "Next", + "Temp basal delta": "Temp basal delta", + "Authorized by token": "Authorized by token", + "Auth role": "Auth role", + "view without token": "view without token", + "Remove stored token": "Remove stored token", + "Weekly Distribution": "Weekly Distribution", + "Failed authentication": "Failed authentication", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?", + "Default (with leading zero and U)": "Default (with leading zero and U)", + "Concise (with U, without leading zero)": "Concise (with U, without leading zero)", + "Minimal (without leading zero and U)": "Minimal (without leading zero and U)", + "Small Bolus Display": "Small Bolus Display", + "Large Bolus Display": "Large Bolus Display", + "Bolus Display Threshold": "Bolus Display Threshold", + "%1 U and Over": "%1 U and Over", + "Event repeated %1 times.": "Event repeated %1 times.", + "minutes": "minutes", + "Last recorded %1 %2 ago.": "Last recorded %1 %2 ago.", + "Security issue": "Security issue", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.", + "less than 1": "less than 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system." +} diff --git a/translations/nb_NO.json b/translations/nb_NO.json new file mode 100644 index 00000000000..2bfcdb15c36 --- /dev/null +++ b/translations/nb_NO.json @@ -0,0 +1,707 @@ +{ + "Listening on port": "Lytter på port", + "Mo": "Man", + "Tu": "Tir", + "We": "Ons", + "Th": "Tors", + "Fr": "Fre", + "Sa": "Lør", + "Su": "Søn", + "Monday": "Mandag", + "Tuesday": "Tirsdag", + "Wednesday": "Onsdag", + "Thursday": "Torsdag", + "Friday": "Fredag", + "Saturday": "Lørdag", + "Sunday": "Søndag", + "Category": "Kategori", + "Subcategory": "Underkategori", + "Name": "Navn", + "Today": "I dag", + "Last 2 days": "Siste 2 dager", + "Last 3 days": "Siste 3 dager", + "Last week": "Siste uke", + "Last 2 weeks": "Siste 2 uker", + "Last month": "Siste måned", + "Last 3 months": "Siste 3 måneder", + "From": "Fra", + "To": "Til", + "Notes": "Notater", + "Food": "Mat", + "Insulin": "Insulin", + "Carbs": "Karbohydrater", + "Notes contain": "Notater inneholder", + "Target BG range bottom": "Nedre grense for blodsukkerverdier", + "top": "topp", + "Show": "Vis", + "Display": "Vis", + "Loading": "Leser inn", + "Loading profile": "Leser inn profil", + "Loading status": "Leser inn status", + "Loading food database": "Leser inn matdatabase", + "not displayed": "vises ikke", + "Loading CGM data of": "Leser CGM-data for", + "Loading treatments data of": "Leser behandlingsdata for", + "Processing data of": "Behandler data for", + "Portion": "Porsjon", + "Size": "Størrelse", + "(none)": "(ingen)", + "None": "Ingen", + "": "", + "Result is empty": "Tomt resultat", + "Day to day": "Dag for dag", + "Week to week": "Uke for uke", + "Daily Stats": "Daglig statistikk", + "Percentile Chart": "Prosentildiagram", + "Distribution": "Distribusjon", + "Hourly stats": "Timestatistikk", + "netIOB stats": "netIOB statistikk", + "temp basals must be rendered to display this report": "midlertidig basal må være synlig for å vise denne rapporten", + "No data available": "Ingen data tilgjengelig", + "Low": "Lav", + "In Range": "Innenfor intervallet", + "Period": "Periode", + "High": "Høy", + "Average": "Gjennomsnitt", + "Low Quartile": "Nedre kvartil", + "Upper Quartile": "Øvre kvartil", + "Quartile": "Kvartil", + "Date": "Dato", + "Normal": "Normal", + "Median": "Median", + "Readings": "Avlesninger", + "StDev": "Standardavvik", + "Daily stats report": "Daglig statistikkrapport", + "Glucose Percentile report": "Persentildiagram for blodsukker", + "Glucose distribution": "Glukosefordeling", + "days total": "dager", + "Total per day": "Totalt per dag", + "Overall": "Totalt", + "Range": "Intervall", + "% of Readings": "% av avlesningene", + "# of Readings": "Antall avlesninger", + "Mean": "Gjennomsnitt", + "Standard Deviation": "Standardavvik", + "Max": "Maks", + "Min": "Minimum", + "A1c estimation*": "Estimert HbA1c", + "Weekly Success": "Ukentlig suksess", + "There is not sufficient data to run this report. Select more days.": "Det er ikke nok data til å lage rapporten. Velg flere dager.", + "Using stored API secret hash": "Bruker lagret tilgangsnøkkel", + "No API secret hash stored yet. You need to enter API secret.": "Mangler tilgangsnøkkel. Du må skrive inn API_SECRET.", + "Database loaded": "Database lest", + "Error: Database failed to load": "Feil: Database kunne ikke leses", + "Error": "Feil", + "Create new record": "Opprett ny registrering", + "Save record": "Lagre registrering", + "Portions": "Porsjoner", + "Unit": "Enhet", + "GI": "GI", + "Edit record": "Editere registrering", + "Delete record": "Slette registrering", + "Move to the top": "Gå til toppen", + "Hidden": "Skjult", + "Hide after use": "Skjul etter bruk", + "Your API secret must be at least 12 characters long": "API_SECRET må være minst 12 tegn", + "Bad API secret": "Ugyldig API-hemmelighet", + "API secret hash stored": "Tilgangsnøkkel lagret", + "Status": "Status", + "Not loaded": "Ikke lest", + "Food Editor": "Mat-editor", + "Your database": "Din database", + "Filter": "Filter", + "Save": "Lagre", + "Clear": "Tøm", + "Record": "Registrering", + "Quick picks": "Hurtigvalg", + "Show hidden": "Vis skjulte", + "Your API secret or token": "API-hemmelighet eller tilgangsnøkkel", + "Remember this device. (Do not enable this on public computers.)": "Husk denne enheten (Ikke velg dette på offentlige eller delte datamaskiner)", + "Treatments": "Behandlinger", + "Time": "Tid", + "Event Type": "Hendelsestype", + "Blood Glucose": "Blodsukker", + "Entered By": "Lagt inn av", + "Delete this treatment?": "Slett denne hendelsen?", + "Carbs Given": "Karbohydrat", + "Insulin Given": "Insulin", + "Event Time": "Tidspunkt", + "Please verify that the data entered is correct": "Vennligst verifiser at inntastet data er korrekt", + "BG": "BS", + "Use BG correction in calculation": "Bruk blodsukkerkorrigering i beregningen", + "BG from CGM (autoupdated)": "BS fra CGM (automatisk)", + "BG from meter": "BS fra blodsukkerapparat", + "Manual BG": "Manuelt BS", + "Quickpick": "Hurtigvalg", + "or": "eller", + "Add from database": "Legg til fra database", + "Use carbs correction in calculation": "Bruk karbohydratkorrigering i beregningen", + "Use COB correction in calculation": "Bruk aktive karbohydrater i beregningen", + "Use IOB in calculation": "Bruk aktivt insulin i beregningen", + "Other correction": "Annen korrigering", + "Rounding": "Avrunding", + "Enter insulin correction in treatment": "Angi insulinkorrigering", + "Insulin needed": "Insulin nødvendig", + "Carbs needed": "Karbohydrater nødvendig", + "Carbs needed if Insulin total is negative value": "Karbohydrater er nødvendige når total insulinmengde er negativ", + "Basal rate": "Basal", + "60 minutes earlier": "60 min tidligere", + "45 minutes earlier": "45 min tidligere", + "30 minutes earlier": "30 min tidigere", + "20 minutes earlier": "20 min tidligere", + "15 minutes earlier": "15 min tidligere", + "Time in minutes": "Tid i minutter", + "15 minutes later": "15 min senere", + "20 minutes later": "20 min senere", + "30 minutes later": "30 min senere", + "45 minutes later": "45 min senere", + "60 minutes later": "60 min senere", + "Additional Notes, Comments": "Notater", + "RETRO MODE": "Retro-modus", + "Now": "Nå", + "Other": "Annet", + "Submit Form": "Lagre", + "Profile Editor": "Profileditor", + "Reports": "Rapporter", + "Add food from your database": "Legg til mat fra din database", + "Reload database": "Last inn databasen på nytt", + "Add": "Legg til", + "Unauthorized": "Uautorisert", + "Entering record failed": "Lagring feilet", + "Device authenticated": "Enhet godkjent", + "Device not authenticated": "Enhet ikke godkjent", + "Authentication status": "Autentiseringsstatus", + "Authenticate": "Autentiser", + "Remove": "Slett", + "Your device is not authenticated yet": "Din enhet er ikke godkjent enda", + "Sensor": "Sensor", + "Finger": "Finger", + "Manual": "Manuell", + "Scale": "Skala", + "Linear": "Lineær", + "Logarithmic": "Logaritmisk", + "Logarithmic (Dynamic)": "Logaritmisk (Dynamisk)", + "Insulin-on-Board": "Aktivt insulin (iob)", + "Carbs-on-Board": "Aktive karbo (cob)", + "Bolus Wizard Preview": "Boluskalk (bwp)", + "Value Loaded": "Verdi lastet", + "Cannula Age": "Nålalder (cage)", + "Basal Profile": "Basalprofil (basal)", + "Silence for 30 minutes": "Stille i 30 min", + "Silence for 60 minutes": "Stille i 60 min", + "Silence for 90 minutes": "Stille i 90 min", + "Silence for 120 minutes": "Stile i 120 min", + "Settings": "Innstillinger", + "Units": "Enheter", + "Date format": "Datoformat", + "12 hours": "12 timer", + "24 hours": "24 timer", + "Log a Treatment": "Logg en hendelse", + "BG Check": "Blodsukkerkontroll", + "Meal Bolus": "Måltidsbolus", + "Snack Bolus": "Mellommåltidsbolus", + "Correction Bolus": "Korreksjonsbolus", + "Carb Correction": "Karbohydratkorrigering", + "Note": "Notat", + "Question": "Spørsmål", + "Exercise": "Trening", + "Pump Site Change": "Pumpebytte", + "CGM Sensor Start": "Sensorstart", + "CGM Sensor Stop": "CGM Sensor Stopp", + "CGM Sensor Insert": "Sensorbytte", + "Sensor Code": "Sensorkode", + "Transmitter ID": "Sender-ID", + "Dexcom Sensor Start": "Dexcom sensor start", + "Dexcom Sensor Change": "Dexcom sensor bytte", + "Insulin Cartridge Change": "Skifte insulin beholder", + "D.A.D. Alert": "Diabeteshundalarm", + "Glucose Reading": "Blodsukkermåling", + "Measurement Method": "Målemetode", + "Meter": "Måleapparat", + "Amount in grams": "Antall gram", + "Amount in units": "Antall enheter", + "View all treatments": "Vis behandlinger", + "Enable Alarms": "Aktiver alarmer", + "Pump Battery Change": "Bytte av pumpebatteri", + "Pump Battery Age": "Pumpebatteri alder", + "Pump Battery Low Alarm": "Pumpebatteri: Lav alarm", + "Pump Battery change overdue!": "Pumpebatteriet må byttes!", + "When enabled an alarm may sound.": "Når aktivert kan en alarm lyde.", + "Urgent High Alarm": "Kritisk høy alarm", + "High Alarm": "Høy alarm", + "Low Alarm": "Lav alarm", + "Urgent Low Alarm": "Kritisk lav alarm", + "Stale Data: Warn": "Gamle data: Advarsel etter", + "Stale Data: Urgent": "Kritisk gamle data: Advarsel etter", + "mins": "min", + "Night Mode": "Nattmodus", + "When enabled the page will be dimmed from 10pm - 6am.": "Når aktivert vil denne siden nedtones fra 22:00-06:00", + "Enable": "Aktiver", + "Show Raw BG Data": "Vis rådata", + "Never": "Aldri", + "Always": "Alltid", + "When there is noise": "Når det er støy", + "When enabled small white dots will be displayed for raw BG data": "Ved aktivering vil små hvite prikker bli vist for ubehandlede BG-data", + "Custom Title": "Egen tittel", + "Theme": "Tema", + "Default": "Standard", + "Colors": "Farger", + "Colorblind-friendly colors": "Fargeblindvennlige farger", + "Reset, and use defaults": "Gjenopprett standardinnstillinger", + "Calibrations": "Kalibreringer", + "Alarm Test / Smartphone Enable": "Alarmtest / Smartphone aktivering", + "Bolus Wizard": "Boluskalkulator", + "in the future": "fremtiden", + "time ago": "tid siden", + "hr ago": "t siden", + "hrs ago": "t siden", + "min ago": "min siden", + "mins ago": "min siden", + "day ago": "dag siden", + "days ago": "dager siden", + "long ago": "lenge siden", + "Clean": "Rydd", + "Light": "Lite", + "Medium": "Middels", + "Heavy": "Mye", + "Treatment type": "Behandlingstype", + "Raw BG": "RAW-BS", + "Device": "Enhet", + "Noise": "Støy", + "Calibration": "Kalibrering", + "Show Plugins": "Vis plugins", + "About": "Om", + "Value in": "Verdi i", + "Carb Time": "Karbohydrattid", + "Language": "Språk", + "Add new": "Legg til ny", + "g": "g", + "ml": "mL", + "pcs": "stk", + "Drag&drop food here": "Dra og slipp mat her", + "Care Portal": "Omsorgsportal (careportal)", + "Medium/Unknown": "Medium/ukjent", + "IN THE FUTURE": "I fremtiden", + "Order": "Sortering", + "oldest on top": "Eldste først", + "newest on top": "Nyeste først", + "All sensor events": "Alle sensorhendelser", + "Remove future items from mongo database": "Slett fremtidige elementer fra Mongo databasen", + "Find and remove treatments in the future": "Finn og slett fremtidige behandlinger", + "This task find and remove treatments in the future.": "Denne funksjonen finner og sletter fremtidige behandlinger.", + "Remove treatments in the future": "Slett fremtidige behandlinger", + "Find and remove entries in the future": "Finn og slett fremtidige hendelser", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "Denne funksjonen finner og sletter fremtidige CGM data som er lastet opp med feil dato/tid.", + "Remove entries in the future": "Slett fremtidige hendelser", + "Loading database ...": "Leser database ...", + "Database contains %1 future records": "Databasen inneholder %1 fremtidige hendelser", + "Remove %1 selected records?": "Slette %1 valgte elementer?", + "Error loading database": "Feil under lasting av database", + "Record %1 removed ...": "Element %1 slettet ...", + "Error removing record %1": "Feil under sletting av registrering %1", + "Deleting records ...": "Sletter registreringer...", + "%1 records deleted": "%1 registreringer slettet", + "Clean Mongo status database": "Rydd i Mongo-databasen for \"device status\"", + "Delete all documents from devicestatus collection": "Slett alle dokumenter fra \"devicestatus\" samlingen", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "Denne funksjonen sletter alle dokumenter fra \"devicestatus\" samlingen. Nyttig når status for opplaster-batteri ikke blir oppdatert.", + "Delete all documents": "Slett alle dokumenter", + "Delete all documents from devicestatus collection?": "Slette alle dokumenter fra \"devicestatus\" samlingen?", + "Database contains %1 records": "Databasen inneholder %1 registreringer", + "All records removed ...": "Alle elementer er slettet ...", + "Delete all documents from devicestatus collection older than 30 days": "Slett alle dokumenter fra \"devicestatus\" samlingen som er eldre enn 30 dager", + "Number of Days to Keep:": "Antall dager å beholde:", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "Denne funksjonen sletter alle dokumenter fra \"devicestatus\" samlingen som er eldre enn 30 dager. Nyttig når status for opplaster-batteri ikke blir oppdatert.", + "Delete old documents from devicestatus collection?": "Slett gamle dokumenter fra \"devicestatus\" samlingen?", + "Clean Mongo entries (glucose entries) database": "Rydd i Mongo-databasen for blodsukkerregistreringer", + "Delete all documents from entries collection older than 180 days": "Slett alle dokumenter fra \"entries\" samlingen som er eldre enn 180 dager", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Denne funksjonen sletter alle dokumenter fra \"entries\" samlingen som er eldre enn 180 dager. Nyttig når status for opplaster-batteri ikke blir oppdatert.", + "Delete old documents": "Slett eldre dokumenter", + "Delete old documents from entries collection?": "Slett gamle dokumenter fra \"entries\" samlingen?", + "%1 is not a valid number": "%1 er ikke et gyldig tall", + "%1 is not a valid number - must be more than 2": "%1 er ikke et gyldig tall - må være mer enn 2", + "Clean Mongo treatments database": "Rydd i Mongo-databasen for behandlinger", + "Delete all documents from treatments collection older than 180 days": "Slett alle dokumenter fra \"treatments\" samlingen som er eldre enn 180 dager", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Denne funksjonen sletter alle dokumenter fra \"treatments\" samlingen som er eldre enn 180 dager. Nyttig når status for opplaster-batteri ikke blir oppdatert.", + "Delete old documents from treatments collection?": "Slett gamle dokumenter fra \"treatments\" samlingen?", + "Admin Tools": "Administrasjonsverktøy", + "Nightscout reporting": "Rapporter", + "Cancel": "Avbryt", + "Edit treatment": "Editer behandling", + "Duration": "Varighet", + "Duration in minutes": "Varighet i minutter", + "Temp Basal": "Midlertidig basal", + "Temp Basal Start": "Midlertidig basal start", + "Temp Basal End": "Midlertidig basal stopp", + "Percent": "Prosent", + "Basal change in %": "Basal-endring i %", + "Basal value": "Basalverdi", + "Absolute basal value": "Absolutt basalverdi", + "Announcement": "Kunngjøring", + "Loading temp basal data": "Laster verdier for midlertidig basal", + "Save current record before changing to new?": "Lagre før bytte til ny?", + "Profile Switch": "Bytt profil", + "Profile": "Profil", + "General profile settings": "Profilinstillinger", + "Title": "Tittel", + "Database records": "Databaseverdier", + "Add new record": "Legg til ny rad", + "Remove this record": "Fjern denne raden", + "Clone this record to new": "Kopier til ny rad", + "Record valid from": "Oppføring gyldig fra", + "Stored profiles": "Lagrede profiler", + "Timezone": "Tidssone", + "Duration of Insulin Activity (DIA)": "Insulin-varighet (DIA)", + "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.": "Representerer typisk insulinvarighet. Varierer per pasient og per insulintype. Vanligvis 3-4 timer for de fleste typer insulin og de fleste pasientene. Noen ganger også kalt insulin-levetid eller Duration of Insulin Activity, DIA.", + "Insulin to carb ratio (I:C)": "IKH forhold", + "Hours:": "Timer:", + "hours": "timer", + "g/hour": "g/time", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "g karbohydrater per enhet insulin. Beskriver hvor mange gram karbohydrater som hånderes av en enhet insulin.", + "Insulin Sensitivity Factor (ISF)": "Insulinfølsomhetsfaktor (ISF)", + "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "mg/dl eller mmol/L per enhet insulin. Beskriver hvor mye blodsukkeret senkes per enhet insulin.", + "Carbs activity / absorption rate": "Karbohydrattid", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "gram per tidsenhet. Representerer både endringen i COB per tidsenhet, såvel som mengden av karbohydrater som blir tatt opp i løpet av den tiden. Carb absorpsjon / virkningskurver er mindre forstått enn insulinaktivitet, men kan tilnærmes ved hjelp av en forsinkelse fulgt av en konstant hastighet av absorpsjon ( g / time ) .", + "Basal rates [unit/hour]": "Basal [enhet/time]", + "Target BG range [mg/dL,mmol/L]": "Ønsket blodsukkerintervall [mg/dL, mmol/L]", + "Start of record validity": "Starttidspunkt for gyldighet", + "Icicle": "Istapp", + "Render Basal": "Basalgraf", + "Profile used": "Brukt profil", + "Calculation is in target range.": "Innenfor målområde", + "Loading profile records ...": "Leser profiler", + "Values loaded.": "Verdier lastet", + "Default values used.": "Standardverdier brukt", + "Error. Default values used.": "Feil. Standardverdier brukt.", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "Tidsintervall for målområde lav og høy stemmer ikke. Standardverdier er brukt.", + "Valid from:": "Gyldig fra:", + "Save current record before switching to new?": "Lagre før bytte til ny?", + "Add new interval before": "Legg til nytt intervall før", + "Delete interval": "Slett intervall", + "I:C": "IK", + "ISF": "ISF", + "Combo Bolus": "Kombinasjonsbolus", + "Difference": "Forskjell", + "New time": "Ny tid", + "Edit Mode": "Editeringsmodus", + "When enabled icon to start edit mode is visible": "Ikon vises når editeringsmodus er aktivert", + "Operation": "Operasjon", + "Move": "Flytt", + "Delete": "Slett", + "Move insulin": "Flytt insulin", + "Move carbs": "Flytt karbohydrater", + "Remove insulin": "Slett insulin", + "Remove carbs": "Slett karbohydrater", + "Change treatment time to %1 ?": "Endre behandlingstid til %1 ?", + "Change carbs time to %1 ?": "Endre karbohydrattid til %1 ?", + "Change insulin time to %1 ?": "Endre insulintid til %1 ?", + "Remove treatment ?": "Slette behandling ?", + "Remove insulin from treatment ?": "Slette insulin fra behandling?", + "Remove carbs from treatment ?": "Slette karbohydrater fra behandling ?", + "Rendering": "Tegner grafikk", + "Loading OpenAPS data of": "Laster OpenAPS data for", + "Loading profile switch data": "Laster nye profildata", + "Redirecting you to the Profile Editor to create a new profile.": "Feil profilinstilling.\nIngen profil valgt for valgt tid.\nVideresender for å lage ny profil.", + "Pump": "Pumpe", + "Sensor Age": "Sensoralder (sage)", + "Insulin Age": "Insulinalder (iage)", + "Temporary target": "Mildertidig mål", + "Reason": "Årsak", + "Eating soon": "Snart tid for mat", + "Top": "Øverst", + "Bottom": "Nederst", + "Activity": "Aktivitet", + "Targets": "Mål", + "Bolus insulin:": "Bolusinsulin:", + "Base basal insulin:": "Basalinsulin:", + "Positive temp basal insulin:": "Positiv midlertidig basalinsulin:", + "Negative temp basal insulin:": "Negativ midlertidig basalinsulin:", + "Total basal insulin:": "Total daglig basalinsulin:", + "Total daily insulin:": "Total daglig insulin", + "Unable to save Role": "Kan ikke lagre rolle", + "Unable to delete Role": "Kan ikke ta bort rolle", + "Database contains %1 roles": "Databasen inneholder %1 roller", + "Edit Role": "Editer rolle", + "admin, school, family, etc": "Administrator, skole, familie osv", + "Permissions": "Rettigheter", + "Are you sure you want to delete: ": "Er du sikker på at du vil slette:", + "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.": "Hver enkelt rolle vil ha en eller flere rettigheter. *-rettigheten er wildcard. Rettigheter settes hierarkisk med : som separator.", + "Add new Role": "Legg til ny rolle", + "Roles - Groups of People, Devices, etc": "Roller - Grupper av brukere, enheter osv", + "Edit this role": "Editer denne rollen", + "Admin authorized": "Administratorgodkjent", + "Subjects - People, Devices, etc": "Ressurser - Brukere, enheter osv", + "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "Hver enkelt ressurs får en unik tilgangsnøkkel og en eller flere roller. Klikk på tilgangsnøkkelen for å åpne valgte ressurs, denne hemmelige lenken kan så deles.", + "Add new Subject": "Legg til ny ressurs", + "Unable to save Subject": "Kan ikke lagre emne", + "Unable to delete Subject": "Kan ikke slette ressurs", + "Database contains %1 subjects": "Databasen inneholder %1 ressurser", + "Edit Subject": "Editer ressurs", + "person, device, etc": "person, enhet osv", + "role1, role2": "rolle1, rolle2", + "Edit this subject": "Editer ressurs", + "Delete this subject": "Slett ressurs", + "Roles": "Roller", + "Access Token": "Tilgangsnøkkel", + "hour ago": "time siden", + "hours ago": "timer siden", + "Silence for %1 minutes": "Stille i %1 minutter", + "Check BG": "Sjekk blodsukker", + "BASAL": "BASAL", + "Current basal": "Gjeldende basal", + "Sensitivity": "Insulinsensitivitet (ISF)", + "Current Carb Ratio": "Gjeldende karbohydratforhold", + "Basal timezone": "Basal tidssone", + "Active profile": "Aktiv profil", + "Active temp basal": "Aktiv midlertidig basal", + "Active temp basal start": "Aktiv midlertidig basal start", + "Active temp basal duration": "Aktiv midlertidig basal varighet", + "Active temp basal remaining": "Gjenstående tid for midlertidig basal", + "Basal profile value": "Basalprofil verdi", + "Active combo bolus": "Kombinasjonsbolus", + "Active combo bolus start": "Kombinasjonsbolus start", + "Active combo bolus duration": "Kombinasjonsbolus varighet", + "Active combo bolus remaining": "Gjenstående kombinasjonsbolus", + "BG Delta": "BS deltaverdi", + "Elapsed Time": "Forløpt tid", + "Absolute Delta": "Absolutt forskjell", + "Interpolated": "Interpolert", + "BWP": "Boluskalk", + "Urgent": "Akutt", + "Warning": "Advarsel", + "Info": "Informasjon", + "Lowest": "Laveste", + "Snoozing high alarm since there is enough IOB": "Utsetter høy alarm siden det er nok aktivt insulin", + "Check BG, time to bolus?": "Sjekk blodsukker, på tide med bolus?", + "Notice": "NB", + "required info missing": "Nødvendig informasjon mangler", + "Insulin on Board": "Aktivt insulin (IOB)", + "Current target": "Gjeldende mål", + "Expected effect": "Forventet effekt", + "Expected outcome": "Forventet resultat", + "Carb Equivalent": "Karbohydratekvivalent", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "Insulin tilsvarende %1U mer enn det trengs for å nå lavt mål, karbohydrater ikke medregnet", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "Insulin tilsvarende %1U mer enn det trengs for å nå lavt mål, PASS PÅ AT AKTIVT INSULIN ER DEKKET OPP MED KARBOHYDRATER", + "%1U reduction needed in active insulin to reach low target, too much basal?": "%1U reduksjon trengs i aktivt insulin for å nå lavt mål, for høy basal?", + "basal adjustment out of range, give carbs?": "basaljustering utenfor tillatt område, gi karbohydrater?", + "basal adjustment out of range, give bolus?": "basaljustering utenfor tillatt område, gi bolus?", + "above high": "over høy grense", + "below low": "under lav grense", + "Projected BG %1 target": "Predikert BS %1 mål", + "aiming at": "sikter på", + "Bolus %1 units": "Bolus %1 enheter", + "or adjust basal": "eller justere basal", + "Check BG using glucometer before correcting!": "Sjekk blodsukker før korrigering!", + "Basal reduction to account %1 units:": "Basalredusering for å nå %1 enheter", + "30m temp basal": "30 minutters midlertidig basal", + "1h temp basal": "60 minutters midlertidig basal", + "Cannula change overdue!": "Byttetid for infusjonssett overskredet", + "Time to change cannula": "På tide å bytte infusjonssett", + "Change cannula soon": "Bytt infusjonssett snart", + "Cannula age %1 hours": "Nålalder %1 timer", + "Inserted": "Satt inn", + "CAGE": "Nålalder", + "COB": "Aktive karbo", + "Last Carbs": "Siste karbohydrater", + "IAGE": "Insulinalder", + "Insulin reservoir change overdue!": "Insulinbyttetid overskrevet", + "Time to change insulin reservoir": "På tide å bytte insulinreservoar", + "Change insulin reservoir soon": "Bytt insulinreservoar snart", + "Insulin reservoir age %1 hours": "Insulinreservoaralder %1 timer", + "Changed": "Byttet", + "IOB": "Aktivt insulin", + "Careportal IOB": "Aktivt insulin i Careportal", + "Last Bolus": "Siste Bolus", + "Basal IOB": "Basal Aktivt Insulin", + "Source": "Kilde", + "Stale data, check rig?": "Gamle data, sjekk rigg?", + "Last received:": "Sist mottatt:", + "%1m ago": "%1m siden", + "%1h ago": "%1t siden", + "%1d ago": "%1d siden", + "RETRO": "GAMMELT", + "SAGE": "Sensoralder", + "Sensor change/restart overdue!": "Sensor bytte/omstart overskredet!", + "Time to change/restart sensor": "På tide å bytte/restarte sensoren", + "Change/restart sensor soon": "Bytt/restart sensoren snart", + "Sensor age %1 days %2 hours": "Sensoralder %1 dager %2 timer", + "Sensor Insert": "Sensor satt inn", + "Sensor Start": "Sensorstart", + "days": "dager", + "Insulin distribution": "Insulinfordeling", + "To see this report, press SHOW while in this view": "Klikk på \"VIS\" for å se denne rapporten", + "AR2 Forecast": "AR2-prediksjon", + "OpenAPS Forecasts": "OpenAPS-prediksjon", + "Temporary Target": "Midlertidig mål", + "Temporary Target Cancel": "Avslutt midlertidig mål", + "OpenAPS Offline": "OpenAPS offline", + "Profiles": "Profiler", + "Time in fluctuation": "Tid i fluktuasjon", + "Time in rapid fluctuation": "Tid i hurtig fluktuasjon", + "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:": "Dette er kun et grovt estimat som kan være misvisende. Det erstatter ikke en blodprøve. Formelen er hentet fra:", + "Filter by hours": "Filtrer per time", + "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.": "Tid i fluktuasjon og tid i hurtig fluktuasjon måler % av tiden i den aktuelle perioden der blodsukkeret har endret seg relativt raskt. Lave verdier er best.", + "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.": "Gjennomsnitt total daglig endring er summen av absolutverdier av alle glukoseendringer i den aktuelle perioden, divideret med antall dager. Lave verdier er best.", + "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "Gjennomsnitt endring per time er summen av absoluttverdier av alle glukoseendringer i den aktuelle perioden divideret med antall timer. Lave verdier er best.", + "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "Out of Range RMS er beregnet ved å ta kvadratet av avstanden utenfor målområdet for alle blodsukkerverdier i den aktuelle perioden, summere dem, dele på antallet, og ta kvadratroten av resultatet. Dette målet er lignende som prodentvis tid i målområdet, men vekter målinger som ligger langt utenfor målområdet høyere. Lave verdier er best.", + "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">her.", + "Mean Total Daily Change": "Gjennomsnitt total daglig endring", + "Mean Hourly Change": "Gjennomsnitt endring per time", + "FortyFiveDown": "svakt fallende", + "FortyFiveUp": "svakt stigende", + "Flat": "stabilt", + "SingleUp": "stigende", + "SingleDown": "fallende", + "DoubleDown": "hurtig fallende", + "DoubleUp": "hurtig stigende", + "virtAsstUnknown": "Den verdien er ukjent for øyeblikket. Vennligst se Nightscout siden for mer informasjon.", + "virtAsstTitleAR2Forecast": "AR2 Prognose", + "virtAsstTitleCurrentBasal": "Gjeldende Basal", + "virtAsstTitleCurrentCOB": "Nåværende COB", + "virtAsstTitleCurrentIOB": "Nåværende IOB", + "virtAsstTitleLaunch": "Velkommen til Nightscout", + "virtAsstTitleLoopForecast": "Loop Prognose", + "virtAsstTitleLastLoop": "Siste Loop", + "virtAsstTitleOpenAPSForecast": "OpenAPS Prognose", + "virtAsstTitlePumpReservoir": "Insulin som gjenstår", + "virtAsstTitlePumpBattery": "Pumpebatteri", + "virtAsstTitleRawBG": "Nåværende Raw BG", + "virtAsstTitleUploaderBattery": "Opplaster-batteri", + "virtAsstTitleCurrentBG": "Nåværende BS", + "virtAsstTitleFullStatus": "Fullstendig status", + "virtAsstTitleCGMMode": "CGM modus", + "virtAsstTitleCGMStatus": "CGM status", + "virtAsstTitleCGMSessionAge": "CGM øktalder", + "virtAsstTitleCGMTxStatus": "CGM sender-status", + "virtAsstTitleCGMTxAge": "CMG Alder på sender", + "virtAsstTitleCGMNoise": "CGM støy", + "virtAsstTitleDelta": "Blodglukose Delta", + "virtAsstStatus": "%1 og %2 fra %3.", + "virtAsstBasal": "%1 gjeldende basalenhet er %2 enheter per time", + "virtAsstBasalTemp": "%1 midlertidig basal av %2 enheter per time vil avslutte %3", + "virtAsstIob": "og du har %1 insulin i kroppen.", + "virtAsstIobIntent": "Og du har %1 insulin i kroppen", + "virtAsstIobUnits": "%1 enheter av", + "virtAsstLaunch": "Hva vil du sjekke på Nightscout?", + "virtAsstPreamble": "Din", + "virtAsstPreamble3person": "%1 har en ", + "virtAsstNoInsulin": "nei", + "virtAsstUploadBattery": "Opplaster-batteriet er %1", + "virtAsstReservoir": "Du har %1 enheter igjen", + "virtAsstPumpBattery": "Pumpebatteriet er %1 %2", + "virtAsstUploaderBattery": "Opplaster-batteriet er %1", + "virtAsstLastLoop": "Siste vellykkede loop var %1", + "virtAsstLoopNotAvailable": "Programtillegg for Loop ser ikke ut til å være aktivert", + "virtAsstLoopForecastAround": "Ifølge loop-prognosen forventes du å være rundt %1 i løpet av den neste %2", + "virtAsstLoopForecastBetween": "I følge loop-prognosen forventes du å være mellom %1 og %2 i løpet av den neste %3", + "virtAsstAR2ForecastAround": "I følge prognose fra AR2 forventes du å være rundt %1 i løpet av den neste %2", + "virtAsstAR2ForecastBetween": "I følge AR2-prognosen forventes du å være mellom %1 og %2 i løpet av de neste %3", + "virtAsstForecastUnavailable": "Kan ikke forutsi med dataene som er tilgjengelig", + "virtAsstRawBG": "Din raw bg er %1", + "virtAsstOpenAPSForecast": "OpenAPS forventer at blodsukkeret er %1", + "virtAsstCob3person": "%1 har %2 karbohydrater i bruk", + "virtAsstCob": "Du har %1 karbohydrater i bruk", + "virtAsstCGMMode": "CGM-modusen din var %1 fra %2.", + "virtAsstCGMStatus": "CGM statusen din var %1 fra %2.", + "virtAsstCGMSessAge": "CGM økten har vært aktiv i %1 dager og %2 timer.", + "virtAsstCGMSessNotStarted": "Det er ingen aktiv CGM økt for øyeblikket.", + "virtAsstCGMTxStatus": "CGM sender status var %1 fra %2.", + "virtAsstCGMTxAge": "CGM-sender er %1 dager gammel.", + "virtAsstCGMNoise": "CGM statusen din var %1 fra %2.", + "virtAsstCGMBattOne": "CGM-batteriet ditt var %1 volt som av %2.", + "virtAsstCGMBattTwo": "CGM batterinivåene dine var %1 volt og %2 volt som av %3.", + "virtAsstDelta": "Din delta var %1 mellom %2 og %3.", + "virtAsstDeltaEstimated": "Din estimerte delta var %1 mellom %2 og %3.", + "virtAsstUnknownIntentTitle": "Ukjent hensikt", + "virtAsstUnknownIntentText": "Beklager, jeg vet ikke hva du ber om.", + "Fat [g]": "Fett [g]", + "Protein [g]": "Protein [g]", + "Energy [kJ]": "Energi [kJ]", + "Clock Views:": "Klokkevisning:", + "Clock": "Klokke", + "Color": "Farge", + "Simple": "Enkel", + "TDD average": "Gjennomsnitt TDD", + "Bolus average": "Gjennomsnitt bolus", + "Basal average": "Gjennomsnitt basal", + "Base basal average:": "Programmert gj.snitt basal", + "Carbs average": "Gjennomsnitt karbohydrater", + "Eating Soon": "Spiser snart", + "Last entry {0} minutes ago": "Siste registrering var for {0} minutter siden", + "change": "endre", + "Speech": "Tale", + "Target Top": "Høyt mål", + "Target Bottom": "Lavt mål", + "Canceled": "Avbrutt", + "Meter BG": "Blodsukkermåler BS", + "predicted": "predikert", + "future": "Fremtid", + "ago": "Siden", + "Last data received": "Siste data mottatt", + "Clock View": "Klokkevisning", + "Protein": "Protein", + "Fat": "Fett", + "Protein average": "Gjennomsnitt protein", + "Fat average": "Gjennomsnitt fett", + "Total carbs": "Totale karbohydrater", + "Total protein": "Totalt protein", + "Total fat": "Totalt fett", + "Database Size": "Databasestørrelse (dbsize)", + "Database Size near its limits!": "Databasestørrelsen nærmer seg grensene!", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "Databasestørrelsen er %1 MiB av %2 MiB. Vennligst ta backup og rydd i databasen!", + "Database file size": "Database filstørrelse", + "%1 MiB of %2 MiB (%3%)": "%1 MiB av %2 MiB (%3%)", + "Data size": "Datastørrelse", + "virtAsstDatabaseSize": "%1 MiB. Dette er %2% av tilgjengelig databaseplass.", + "virtAsstTitleDatabaseSize": "Database filstørrelse", + "Carbs/Food/Time": "Karbo/Mat/Abs.tid", + "You have administration messages": "Du har administrasjonsmeldinger", + "Admin messages in queue": "Admin meldinger i køen", + "Queue empty": "Tom kø", + "There are no admin messages in queue": "Det er ingen admin meldinger i køen", + "Please sign in using the API_SECRET to see your administration messages": "Vennligst logg inn med API_SECRET for å se administrasjonsmeldingene dine", + "Reads enabled in default permissions": "Lesetilgang er aktivert i innstillingene", + "Data reads enabled": "Lesetilgang aktivert", + "Data writes enabled": "Skrivetilgang aktivert", + "Data writes not enabled": "Skrivetilgang ikke aktivert", + "Color prediction lines": "Fargede prediksjonslinjer", + "Release Notes": "Utgivelsesnotater", + "Check for Updates": "Se etter oppdateringer", + "Open Source": "Åpen kildekode", + "Nightscout Info": "Dokumentasjon for Nightscout", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "Det primære formålet med Loopalyzer er å visualisere hvordan Loop opererer i lukket loop. Den kan også virke med andre oppsett, både lukket og åpen loop, og uten loop. Men avhengig av hvilken opplaster du bruker, hvor ofte den kan samle og laste opp data, og hvordan det kan laste opp manglende data i ettertid, kan noen grafer ha tomrom eller til og med være helt fraværende. Sørg alltid for at grafene ser rimelige ut. For å sjekke at dataene er komplette, er det best å se på én dag om gangen, og bla gjennom noen dager slik at mangler kan oppdages.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer har en tidsforskyvnings-funksjon. Hvis du for eksempel spiser frokost kl. 07:00 én dag og kl 08:00 dagen etter, vil den gjennomsnittlige blodsukkerkurven for disse to dagene mest sannsynlig se utflatet ut, og skjule den faktiske responsen av måltidet. Tidsforskyvningen beregner det gjennomsnittlige starttidspunktet for måltidene, og forskyver deretter alle data (karbohydrat, insulin, basaldata osv.) for begge dagene slik at måltidene sammenfaller med gjennomsnittlig starttid.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "I dette eksemplet skyves alle data fra første dag 30 minutter fremover i tid, og alle data fra andre dag 30 minutter bakover i tid. Det vil da fremstå som om du spiste frokost klokken 07:30 begge dager. Dette gjør at du kan se din faktiske gjennomsnittlige blodglukoserespons fra et måltid.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Tidsforskyvningen blir uthevet med grått for perioden etter gjennomsnittlig starttid for måltidet, med varighet lik DIA (Duration of Insulin Action). Siden alle datapunktene er forskjøvet for hele dagen, kan kurvene utenfor det grå området være unøyaktige.", + "Note that time shift is available only when viewing multiple days.": "Merk at tidsforskyvning kun er tilgjengelig når du ser på flere dager.", + "Please select a maximum of two weeks duration and click Show again.": "Velg maksimalt to ukers varighet og klikk på Vis igjen.", + "Show profiles table": "Vis profiler som tabell", + "Show predictions": "Vis prediksjoner", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Tidsforskyvning for måltider som er større enn %1 g karbohydrater mellom kl %2 og kl %3", + "Previous": "Forrige", + "Previous day": "Forrige dag", + "Next day": "Neste dag", + "Next": "Neste", + "Temp basal delta": "Midlertidig basal delta", + "Authorized by token": "Autorisert med tilgangsnøkkel", + "Auth role": "Autorisert", + "view without token": "vis uten tilgangsnøkkel", + "Remove stored token": "Fjern lagret tilgangsnøkkel", + "Weekly Distribution": "Ukentlige resultat", + "Failed authentication": "Autentisering mislykket", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "En enhet med IP-adresse %1 forsøkte å autentisere Nightscout med feil legitimasjon. Sjekk om du har en opplaster-app med feil API_SECRET eller tilgangsnøkkel.", + "Default (with leading zero and U)": "Standard (med foranstilt null og E)", + "Concise (with U, without leading zero)": "Konsis (med E, uten foranstilt null)", + "Minimal (without leading zero and U)": "Minimal (uten foranstilt null og E)", + "Small Bolus Display": "Liten markør for bolus", + "Large Bolus Display": "Stor markør for bolus", + "Bolus Display Threshold": "Vis bolus større enn eller lik", + "%1 U and Over": "%1 E", + "Event repeated %1 times.": "Hendelse gjentatt %1 ganger.", + "minutes": "minutt", + "Last recorded %1 %2 ago.": "Sist registrert %1 %2 siden.", + "Security issue": "Sikkerhetsproblem", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Svakt API_SECRET oppdaget. Vennligst bruk en blanding av små og STORE bokstaver, tall og ikke-alfanumeriske tegn, som !#%&/ for å redusere risikoen for uautorisert tilgang. Minimumslengden på API_SECRET er 12 tegn.", + "less than 1": "mindre enn 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "MongoDB passord og API_SECRET samsvarer. Dette er en veldig dårlig idé. Vennligst endre begge og ikke gjenbruk samme passord over alt i hele systemet." +} diff --git a/translations/nl_NL.json b/translations/nl_NL.json new file mode 100644 index 00000000000..ef0094d9a2b --- /dev/null +++ b/translations/nl_NL.json @@ -0,0 +1,707 @@ +{ + "Listening on port": "Luistert op poort", + "Mo": "Ma", + "Tu": "Di", + "We": "Wo", + "Th": "Do", + "Fr": "Vr", + "Sa": "Za", + "Su": "Zo", + "Monday": "Maandag", + "Tuesday": "Dinsdag", + "Wednesday": "Woensdag", + "Thursday": "Donderdag", + "Friday": "Vrijdag", + "Saturday": "Zaterdag", + "Sunday": "Zondag", + "Category": "Categorie", + "Subcategory": "Subcategorie", + "Name": "Naam", + "Today": "Vandaag", + "Last 2 days": "Afgelopen 2 dagen", + "Last 3 days": "Afgelopen 3 dagen", + "Last week": "Afgelopen week", + "Last 2 weeks": "Afgelopen 2 weken", + "Last month": "Afgelopen maand", + "Last 3 months": "Afgelopen 3 maanden", + "From": "Van", + "To": "Tot", + "Notes": "Notities", + "Food": "Voeding", + "Insulin": "Insuline", + "Carbs": "Koolhydraten", + "Notes contain": "Notities bevatten", + "Target BG range bottom": "Ondergrens doelbereik glucose", + "top": "Top", + "Show": "Laat zien", + "Display": "Weergeven", + "Loading": "Laden", + "Loading profile": "Profiel laden", + "Loading status": "Laadstatus", + "Loading food database": "Voeding database laden", + "not displayed": "Niet weergegeven", + "Loading CGM data of": "CGM data laden van", + "Loading treatments data of": "Behandel gegevens laden van", + "Processing data of": "Gegevens verwerken van", + "Portion": "Portie", + "Size": "Grootte", + "(none)": "(geen)", + "None": "geen", + "": "", + "Result is empty": "Geen resultaat", + "Day to day": "Dag tot Dag", + "Week to week": "Week tot week", + "Daily Stats": "Dagelijkse statistiek", + "Percentile Chart": "Procentuele grafiek", + "Distribution": "Verdeling", + "Hourly stats": "Statistieken per uur", + "netIOB stats": "netIOB statistieken", + "temp basals must be rendered to display this report": "tijdelijk basaal moet zichtbaar zijn voor dit rapport", + "No data available": "Geen gegevens beschikbaar", + "Low": "Laag", + "In Range": "Binnen bereik", + "Period": "Periode", + "High": "Hoog", + "Average": "Gemiddeld", + "Low Quartile": "Eerste kwartiel", + "Upper Quartile": "Derde kwartiel", + "Quartile": "Kwartiel", + "Date": "Datum", + "Normal": "Normaal", + "Median": "Mediaan", + "Readings": "Metingen", + "StDev": "Std. deviatie", + "Daily stats report": "Dagelijkse statistieken", + "Glucose Percentile report": "Glucose percentiel rapport", + "Glucose distribution": "Glucose verdeling", + "days total": "Totaal dagen", + "Total per day": "Totaal dagen", + "Overall": "Totaal", + "Range": "Bereik", + "% of Readings": "% metingen", + "# of Readings": "Aantal metingen", + "Mean": "Gemiddeld", + "Standard Deviation": "Standaard deviatie", + "Max": "Max", + "Min": "Min", + "A1c estimation*": "Geschatte HbA1C", + "Weekly Success": "Wekelijks succes", + "There is not sufficient data to run this report. Select more days.": "Er zijn niet genoeg gegevens voor dit rapport, selecteer meer dagen.", + "Using stored API secret hash": "Gebruik opgeslagen geheime API Hash", + "No API secret hash stored yet. You need to enter API secret.": "Er is nog geen geheime API Hash opgeslagen. U moet eerst een geheime API code invoeren.", + "Database loaded": "Database geladen", + "Error: Database failed to load": "FOUT: Database niet geladen", + "Error": "Fout", + "Create new record": "Opslaan", + "Save record": "Sla op", + "Portions": "Porties", + "Unit": "Eenheid", + "GI": "Glycemische index ", + "Edit record": "Bewerk invoer", + "Delete record": "Verwijder invoer", + "Move to the top": "Ga naar boven", + "Hidden": "Verborgen", + "Hide after use": "Verberg na gebruik", + "Your API secret must be at least 12 characters long": "Uw API wachtwoord dient tenminste 12 karakters lang te zijn", + "Bad API secret": "Onjuist API wachtwoord", + "API secret hash stored": "API wachtwoord opgeslagen", + "Status": "Status", + "Not loaded": "Niet geladen", + "Food Editor": "Voeding beheer", + "Your database": "Uw database", + "Filter": "Filter", + "Save": "Opslaan", + "Clear": "Leeg maken", + "Record": "Toevoegen", + "Quick picks": "Snelkeuze", + "Show hidden": "Laat verborgen zien", + "Your API secret or token": "Je API geheim of token", + "Remember this device. (Do not enable this on public computers.)": "Onthoud dit apparaat. (Dit niet inschakelen op openbare computers.)", + "Treatments": "Behandelingen", + "Time": "Tijd", + "Event Type": "Soort", + "Blood Glucose": "Bloed glucose", + "Entered By": "Ingevoerd door", + "Delete this treatment?": "Verwijder", + "Carbs Given": "Aantal koolhydraten", + "Insulin Given": "Toegediende insuline", + "Event Time": "Tijdstip", + "Please verify that the data entered is correct": "Controleer uw invoer", + "BG": "BG", + "Use BG correction in calculation": "Gebruik BG in berekeningen", + "BG from CGM (autoupdated)": "BG van CGM (automatische invoer)", + "BG from meter": "BG van meter", + "Manual BG": "Handmatige BG", + "Quickpick": "Snelkeuze", + "or": "of", + "Add from database": "Toevoegen uit database", + "Use carbs correction in calculation": "Gebruik KH correctie in berekening", + "Use COB correction in calculation": "Gebruik ingenomen KH in berekening", + "Use IOB in calculation": "Gebruik IOB in berekening", + "Other correction": "Andere correctie", + "Rounding": "Afgerond", + "Enter insulin correction in treatment": "Voer insuline correctie toe aan behandeling", + "Insulin needed": "Benodigde insuline", + "Carbs needed": "Benodigde koolhydraten", + "Carbs needed if Insulin total is negative value": "Benodigde KH als insuline een negatieve waarde geeft", + "Basal rate": "Basaal snelheid", + "60 minutes earlier": "60 minuten eerder", + "45 minutes earlier": "45 minuten eerder", + "30 minutes earlier": "30 minuten eerder", + "20 minutes earlier": "20 minuten eerder", + "15 minutes earlier": "15 minuten eerder", + "Time in minutes": "Tijd in minuten", + "15 minutes later": "15 minuten later", + "20 minutes later": "20 minuten later", + "30 minutes later": "30 minuten later", + "45 minutes later": "45 minuten later", + "60 minutes later": "60 minuten later", + "Additional Notes, Comments": "Extra aantekeningen", + "RETRO MODE": "Retro mode", + "Now": "Nu", + "Other": "Andere", + "Submit Form": "Formulier opslaan", + "Profile Editor": "Profiel beheer", + "Reports": "Rapporten", + "Add food from your database": "Voeg voeding toe uit uw database", + "Reload database": "Database opnieuw laden", + "Add": "Toevoegen", + "Unauthorized": "Ongeauthoriseerd", + "Entering record failed": "Toevoegen mislukt", + "Device authenticated": "Apparaat geauthenticeerd", + "Device not authenticated": "Apparaat niet geauthenticeerd", + "Authentication status": "Authenticatie status", + "Authenticate": "Authenticatie", + "Remove": "Verwijder", + "Your device is not authenticated yet": "Uw apparaat is nog niet geauthenticeerd", + "Sensor": "Sensor", + "Finger": "Vinger", + "Manual": "Handmatig", + "Scale": "Schaal", + "Linear": "Lineair", + "Logarithmic": "Logaritmisch", + "Logarithmic (Dynamic)": "Logaritmisch (Dynamisch)", + "Insulin-on-Board": "Actieve insuline (IOB)", + "Carbs-on-Board": "Actieve koolhydraten (COB)", + "Bolus Wizard Preview": "Bolus Wizard Preview (BWP)", + "Value Loaded": "Waarde geladen", + "Cannula Age": "Canule leeftijd (CAGE)", + "Basal Profile": "Basaal profiel", + "Silence for 30 minutes": "Sluimer 30 minuten", + "Silence for 60 minutes": "Sluimer 60 minuten", + "Silence for 90 minutes": "Sluimer 90 minuten", + "Silence for 120 minutes": "Sluimer 2 uur", + "Settings": "Instellingen", + "Units": "Eenheden", + "Date format": "Datum formaat", + "12 hours": "12 uur", + "24 hours": "24 uur", + "Log a Treatment": "Registreer een behandeling", + "BG Check": "Bloedglucose check", + "Meal Bolus": "Maaltijd bolus", + "Snack Bolus": "Snack bolus", + "Correction Bolus": "Correctie bolus", + "Carb Correction": "Koolhydraat correctie", + "Note": "Notitie", + "Question": "Vraag", + "Exercise": "Beweging / sport", + "Pump Site Change": "Nieuwe pomp infuus", + "CGM Sensor Start": "CGM Sensor start", + "CGM Sensor Stop": "CGM Sensor Stop", + "CGM Sensor Insert": "CGM sensor wissel", + "Sensor Code": "Sensor Code", + "Transmitter ID": "Zender ID", + "Dexcom Sensor Start": "Dexcom sensor start", + "Dexcom Sensor Change": "Dexcom sensor wissel", + "Insulin Cartridge Change": "Insuline cartridge wissel", + "D.A.D. Alert": "Hulphond waarschuwing", + "Glucose Reading": "Glucose meting", + "Measurement Method": "Meetmethode", + "Meter": "Glucosemeter", + "Amount in grams": "Hoeveelheid in gram", + "Amount in units": "Aantal in eenheden", + "View all treatments": "Bekijk alle behandelingen", + "Enable Alarms": "Alarmen aan!", + "Pump Battery Change": "Pompbatterij vervangen", + "Pump Battery Age": "Pomp Batterij Leeftijd", + "Pump Battery Low Alarm": "Pompbatterij bijna leeg Alarm", + "Pump Battery change overdue!": "Pompbatterij moet vervangen worden!", + "When enabled an alarm may sound.": "Als ingeschakeld kan alarm klinken", + "Urgent High Alarm": "Urgent Alarm Hoge BG", + "High Alarm": "Alarm hoge BG", + "Low Alarm": "Alarm lage BG", + "Urgent Low Alarm": "Urgent Alarm lage BG", + "Stale Data: Warn": "Waarschuwing Oude gegevens na", + "Stale Data: Urgent": "Urgente Waarschuwing Oude gegevens na", + "mins": "minuten", + "Night Mode": "Nachtstand", + "When enabled the page will be dimmed from 10pm - 6am.": "Scherm dimmen tussen 22:00 en 06:00", + "Enable": "Activeren", + "Show Raw BG Data": "Laat ruwe data zien", + "Never": "Nooit", + "Always": "Altijd", + "When there is noise": "Bij ruis", + "When enabled small white dots will be displayed for raw BG data": "Indien geactiveerd is ruwe data zichtbaar als witte punten", + "Custom Title": "Eigen titel", + "Theme": "Thema", + "Default": "Standaard", + "Colors": "Kleuren", + "Colorblind-friendly colors": "Kleurenblind vriendelijke kleuren", + "Reset, and use defaults": "Herstel standaard waardes", + "Calibrations": "Kalibraties", + "Alarm Test / Smartphone Enable": "Alarm test / activeer Smartphone", + "Bolus Wizard": "Bolus calculator", + "in the future": "In de toekomst", + "time ago": "tijd geleden", + "hr ago": "uur geleden", + "hrs ago": "uren geleden", + "min ago": "minuut geleden", + "mins ago": "minuten geleden", + "day ago": "dag geleden", + "days ago": "dagen geleden", + "long ago": "lang geleden", + "Clean": "Schoon", + "Light": "Licht", + "Medium": "Gemiddeld", + "Heavy": "Zwaar", + "Treatment type": "Type behandeling", + "Raw BG": "Ruwe BG data", + "Device": "Apparaat", + "Noise": "Ruis", + "Calibration": "Kalibratie", + "Show Plugins": "Laat Plug-Ins zien", + "About": "Over", + "Value in": "Waarde in", + "Carb Time": "Koolhydraten tijd", + "Language": "Taal", + "Add new": "Voeg toe", + "g": "g", + "ml": "ml", + "pcs": "stk", + "Drag&drop food here": "Maaltijd naar hier verplaatsen", + "Care Portal": "Zorgportaal", + "Medium/Unknown": "Medium/Onbekend", + "IN THE FUTURE": "IN DE TOEKOMST", + "Order": "Sortering", + "oldest on top": "Oudste boven", + "newest on top": "Nieuwste boven", + "All sensor events": "Alle sensor gegevens", + "Remove future items from mongo database": "Verwijder items die in de toekomst liggen uit database", + "Find and remove treatments in the future": "Zoek en verwijder behandelingen met datum in de toekomst", + "This task find and remove treatments in the future.": "Dit commando zoekt en verwijdert behandelingen met datum in de toekomst", + "Remove treatments in the future": "Verwijder behandelingen met datum in de toekomst", + "Find and remove entries in the future": "Zoek en verwijder behandelingen met datum in de toekomst", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "Dit commando zoekt en verwijdert behandelingen met datum in de toekomst", + "Remove entries in the future": "Verwijder invoer met datum in de toekomst", + "Loading database ...": "Database laden ....", + "Database contains %1 future records": "Database bevat %1 toekomstige data", + "Remove %1 selected records?": "Verwijder %1 geselecteerde data?", + "Error loading database": "Fout bij het laden van database", + "Record %1 removed ...": "Data %1 verwijderd ", + "Error removing record %1": "Fout bij het verwijderen van %1 data", + "Deleting records ...": "Verwijderen van data .....", + "%1 records deleted": "%1 records verwijderd", + "Clean Mongo status database": "Ruim Mongo database status op", + "Delete all documents from devicestatus collection": "Verwijder alle documenten uit \"devicestatus\" database", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "Dit commando verwijdert alle documenten uit \"devicestatus\" database. Handig wanneer de batterij status niet correct wordt geupload.", + "Delete all documents": "Verwijder alle documenten", + "Delete all documents from devicestatus collection?": "Wil je alle data van \"devicestatus\" database verwijderen?", + "Database contains %1 records": "Database bevat %1 gegevens", + "All records removed ...": "Alle gegevens verwijderd", + "Delete all documents from devicestatus collection older than 30 days": "Verwijder alle documenten uit \"devicestatus\" database ouder dan 30 dagen", + "Number of Days to Keep:": "Aantal dagen te bewaren:", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "Dit commando verwijdert alle documenten uit de \"devicestatus\" database. Handig wanneer de batterij status niet correct wordt geüpload.", + "Delete old documents from devicestatus collection?": "Wil je oude data uit de \"devicestatus\" database verwijderen?", + "Clean Mongo entries (glucose entries) database": "Mongo gegevens (glucose waarden) opschonen", + "Delete all documents from entries collection older than 180 days": "Verwijder alle documenten uit \"entries\" database ouder dan 180 dagen", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Dit commando verwijdert alle documenten uit de \"entries\" database. Handig wanneer de batterij status niet correct wordt geüpload.", + "Delete old documents": "Verwijder oude documenten", + "Delete old documents from entries collection?": "Wil je oude data uit de \"entries\" database verwijderen?", + "%1 is not a valid number": "%1 is geen geldig nummer", + "%1 is not a valid number - must be more than 2": "%1 is geen geldig nummer - moet meer zijn dan 2", + "Clean Mongo treatments database": "Ruim Mongo behandel database op", + "Delete all documents from treatments collection older than 180 days": "Verwijder alle documenten uit \"treatments\" database ouder dan 180 dagen", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Dit commando verwijdert alle documenten uit de \"treatments\" database. Handig wanneer de batterij status niet correct wordt geüpload.", + "Delete old documents from treatments collection?": "Wil je oude data uit de \"treatments\" database verwijderen?", + "Admin Tools": "Admin tools", + "Nightscout reporting": "Nightscout rapportages", + "Cancel": "Annuleer", + "Edit treatment": "Bewerkt behandeling", + "Duration": "Duur", + "Duration in minutes": "Duur in minuten", + "Temp Basal": "Tijdelijke basaal", + "Temp Basal Start": "Start tijdelijke basaal", + "Temp Basal End": "Einde tijdelijke basaal", + "Percent": "Procent", + "Basal change in %": "Basaal aanpassing in %", + "Basal value": "Basaal snelheid", + "Absolute basal value": "Absolute basaal waarde", + "Announcement": "Mededeling", + "Loading temp basal data": "Laden tijdelijke basaal gegevens", + "Save current record before changing to new?": "Opslaan voor verder te gaan?", + "Profile Switch": "Profiel wissel", + "Profile": "Profiel", + "General profile settings": "Profiel instellingen", + "Title": "Titel", + "Database records": "Database gegevens", + "Add new record": "Toevoegen", + "Remove this record": "Verwijder", + "Clone this record to new": "Kopieer deze invoer naar nieuwe", + "Record valid from": "Geldig van", + "Stored profiles": "Opgeslagen profielen", + "Timezone": "Tijdzone", + "Duration of Insulin Activity (DIA)": "Werkingsduur insuline (DIA)", + "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.": "Geeft de werkingsduur van de insuline in het lichaam aan. Dit verschilt van patient tot patient er per soort insuline, algemeen gemiddelde is 3 tot 4 uur. ", + "Insulin to carb ratio (I:C)": "Insuline - Koolhydraat ratio (I:C)", + "Hours:": "Uren:", + "hours": "Uren", + "g/hour": "g/uur", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "G KH per Eh insuline. De verhouding tussen hoeveel grammen koohlhydraten er verwerkt kunnen worden per eenheid insuline.", + "Insulin Sensitivity Factor (ISF)": "Insuline gevoeligheid (ISF)", + "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "mg/dL of mmol/L per E insuline. Ratio daling BG waarde per eenheid correctie", + "Carbs activity / absorption rate": "Koolhydraat opname snelheid", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "grammen per tijdseenheid. Geeft de wijzigingen in COB per tijdseenheid alsookde hoeveelheid KH dat impact zou moeten hebben over deze tijdspanne. KH absorbtie / activiteits curveszijn minder eenvoudig uitzetbaar, maar kunnen geschat worden door gebruik te maken van een startvertreging en daarna een constante curve van absorbtie (g/u).", + "Basal rates [unit/hour]": "Basaal snelheid [eenheden/uur]", + "Target BG range [mg/dL,mmol/L]": "Doel BG waarde in [mg/dl,mmol/L", + "Start of record validity": "Start geldigheid", + "Icicle": "Ijspegel", + "Render Basal": "Toon basaal", + "Profile used": "Gebruikt profiel", + "Calculation is in target range.": "Berekening valt binnen doelwaards", + "Loading profile records ...": "Laden profiel gegevens", + "Values loaded.": "Gegevens geladen", + "Default values used.": "Standaard waardes gebruikt", + "Error. Default values used.": "FOUT: Standaard waardes gebruikt", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "Tijdspanne van laag en hoog doel zijn niet correct. Standaard waarden worden gebruikt", + "Valid from:": "Geldig van:", + "Save current record before switching to new?": "Opslaan voor verder te gaan?", + "Add new interval before": "Voeg interval toe voor", + "Delete interval": "Verwijder interval", + "I:C": "I:C", + "ISF": "ISF", + "Combo Bolus": "Pizza Bolus", + "Difference": "Verschil", + "New time": "Nieuwe tijd", + "Edit Mode": "Wijzigen uitvoeren", + "When enabled icon to start edit mode is visible": "Als geactiveerd is Wijzigen modus beschikbaar", + "Operation": "Operatie", + "Move": "Verplaats", + "Delete": "Verwijder", + "Move insulin": "Verplaats insuline", + "Move carbs": "Verplaats KH", + "Remove insulin": "Verwijder insuline", + "Remove carbs": "Verwijder KH", + "Change treatment time to %1 ?": "Wijzig behandel tijdstip naar %1", + "Change carbs time to %1 ?": "Wijzig KH tijdstip naar %1", + "Change insulin time to %1 ?": "Wijzig insuline tijdstip naar %1", + "Remove treatment ?": "Verwijder behandeling", + "Remove insulin from treatment ?": "Verwijder insuline van behandeling", + "Remove carbs from treatment ?": "Verwijder KH van behandeling", + "Rendering": "Renderen", + "Loading OpenAPS data of": "OpenAPS gegevens opladen van", + "Loading profile switch data": "Ophalen van data om profiel te wisselen", + "Redirecting you to the Profile Editor to create a new profile.": "Verkeerde profiel instellingen.\ngeen profiel beschibaar voor getoonde tijd.\nVerder naar profiel editor om een profiel te maken.", + "Pump": "Pomp", + "Sensor Age": "Sensor leeftijd", + "Insulin Age": "Insuline ouderdom (IAGE)", + "Temporary target": "Tijdelijk doel", + "Reason": "Reden", + "Eating soon": "Binnenkort eten", + "Top": "Boven", + "Bottom": "Beneden", + "Activity": "Activiteit", + "Targets": "Doelen", + "Bolus insulin:": "Bolus insuline", + "Base basal insulin:": "Basis basaal insuline", + "Positive temp basal insulin:": "Extra tijdelijke basaal insuline", + "Negative temp basal insulin:": "Negatieve tijdelijke basaal insuline", + "Total basal insulin:": "Totaal basaal insuline", + "Total daily insulin:": "Totaal dagelijkse insuline", + "Unable to save Role": "Kan rol niet opslaan", + "Unable to delete Role": "Niet mogelijk rol te verwijderen", + "Database contains %1 roles": "Database bevat %1 rollen", + "Edit Role": "Pas rol aan", + "admin, school, family, etc": "admin, school, familie, etc", + "Permissions": "Rechten", + "Are you sure you want to delete: ": "Weet u het zeker dat u wilt verwijderen?", + "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.": "Elke rol heeft mintens 1 machtiging. De * machtiging is een wildcard, machtigingen hebben een hyrarchie door gebruik te maken van : als scheidingsteken.", + "Add new Role": "Voeg rol toe", + "Roles - Groups of People, Devices, etc": "Rollen - Groepen mensen apparaten etc", + "Edit this role": "Pas deze rol aan", + "Admin authorized": "Admin geauthoriseerd", + "Subjects - People, Devices, etc": "Onderwerpen - Mensen, apparaten etc", + "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "Elk onderwerp heeft een unieke toegangscode en 1 of meer rollen. Klik op de toegangscode om een nieu venster te openen om het onderwerp te bekijken, deze verborgen link kan gedeeld worden.", + "Add new Subject": "Voeg onderwerp toe", + "Unable to save Subject": "Kan onderwerp niet opslaan", + "Unable to delete Subject": "Kan onderwerp niet verwijderen", + "Database contains %1 subjects": "Database bevat %1 onderwerpen", + "Edit Subject": "Pas onderwerp aan", + "person, device, etc": "persoon, apparaat etc", + "role1, role2": "rol1, rol2", + "Edit this subject": "pas dit onderwerp aan", + "Delete this subject": "verwijder dit onderwerp", + "Roles": "Rollen", + "Access Token": "toegangscode", + "hour ago": "uur geleden", + "hours ago": "uren geleden", + "Silence for %1 minutes": "Sluimer %1 minuten", + "Check BG": "Controleer BG", + "BASAL": "Basaal", + "Current basal": "Huidige basaal", + "Sensitivity": "Gevoeligheid", + "Current Carb Ratio": "Huidige KH ratio", + "Basal timezone": "Basaal tijdzone", + "Active profile": "Actief profiel", + "Active temp basal": "Actieve tijdelijke basaal", + "Active temp basal start": "Actieve tijdelijke basaal start", + "Active temp basal duration": "Actieve tijdelijk basaal duur", + "Active temp basal remaining": "Actieve tijdelijke basaal resteert", + "Basal profile value": "Basaal profiel waarde", + "Active combo bolus": "Actieve combo bolus", + "Active combo bolus start": "Actieve combo bolus start", + "Active combo bolus duration": "Actieve combo bolus duur", + "Active combo bolus remaining": "Actieve combo bolus resteert", + "BG Delta": "BG Delta", + "Elapsed Time": "Verstreken tijd", + "Absolute Delta": "Abslute delta", + "Interpolated": "Geinterpoleerd", + "BWP": "BWP", + "Urgent": "Urgent", + "Warning": "Waarschuwing", + "Info": "Info", + "Lowest": "Laagste", + "Snoozing high alarm since there is enough IOB": "Snooze hoog alarm, er is genoeg IOB", + "Check BG, time to bolus?": "Controleer BG, tijd om te bolussen?", + "Notice": "Notitie", + "required info missing": "vereiste gegevens ontbreken", + "Insulin on Board": "IOB - Inuline on board", + "Current target": "huidig doel", + "Expected effect": "verwacht effect", + "Expected outcome": "Veracht resultaat", + "Carb Equivalent": "Koolhydraat equivalent", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "Insulineoverschot van %1U om laag doel te behalen (excl. koolhydraten)", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "Insulineoverschot van %1U om laag doel te behalen, ZORG VOOR VOLDOENDE KOOLHYDRATEN VOOR DE ACTIEVE INSULINE", + "%1U reduction needed in active insulin to reach low target, too much basal?": "%1U reductie vereist in actieve insuline om laag doel te bereiken, teveel basaal?", + "basal adjustment out of range, give carbs?": "basaal aanpassing buiten bereik, geef KH?", + "basal adjustment out of range, give bolus?": "basaal aanpassing buiten bereik, bolus?", + "above high": "boven hoog", + "below low": "onder laag", + "Projected BG %1 target": "Verwachte BG %1 doel", + "aiming at": "doel is", + "Bolus %1 units": "Bolus %1 eenheden", + "or adjust basal": "of pas basaal aan", + "Check BG using glucometer before correcting!": "Controleer BG met bloeddruppel voor correctie!", + "Basal reduction to account %1 units:": "Basaal verlaagd voor %1 eenheden", + "30m temp basal": "30 minuten tijdelijke basaal", + "1h temp basal": "1 uur tijdelijke basaal", + "Cannula change overdue!": "Cannule te oud!", + "Time to change cannula": "Verwissel canule", + "Change cannula soon": "Verwissel canule binnenkort", + "Cannula age %1 hours": "Canule leeftijd %1 uren", + "Inserted": "Ingezet", + "CAGE": "CAGE", + "COB": "COB", + "Last Carbs": "Laatse KH", + "IAGE": "IAGE", + "Insulin reservoir change overdue!": "Verwissel insulinereservoir nu!", + "Time to change insulin reservoir": "Verwissel insuline reservoir", + "Change insulin reservoir soon": "Verwissel insuline reservoir binnenkort", + "Insulin reservoir age %1 hours": "Insuline reservoir leeftijd %1 uren", + "Changed": "veranderd", + "IOB": "IOB", + "Careportal IOB": "Careportal tabblad", + "Last Bolus": "Laatste bolus", + "Basal IOB": "Basaal IOB", + "Source": "bron", + "Stale data, check rig?": "Geen data, controleer uploader", + "Last received:": "laatste ontvangen", + "%1m ago": "%1m geleden", + "%1h ago": "%1u geleden", + "%1d ago": "%1d geleden", + "RETRO": "RETRO", + "SAGE": "SAGE", + "Sensor change/restart overdue!": "Sensor vevang/hertstart tijd gepasseerd", + "Time to change/restart sensor": "Sensor vervangen of herstarten", + "Change/restart sensor soon": "Herstart of vervang sensor binnenkort", + "Sensor age %1 days %2 hours": "Sensor leeftijd %1 dag(en) en %2 uur", + "Sensor Insert": "Sensor ingebracht", + "Sensor Start": "Sensor start", + "days": "dagen", + "Insulin distribution": "Insuline verdeling", + "To see this report, press SHOW while in this view": "Om dit rapport te zien, druk op \"Laat zien\"", + "AR2 Forecast": "AR2 Voorspelling", + "OpenAPS Forecasts": "OpenAPS Voorspelling", + "Temporary Target": "Tijdelijk doel", + "Temporary Target Cancel": "Annuleer tijdelijk doel", + "OpenAPS Offline": "OpenAPS Offline", + "Profiles": "Profielen", + "Time in fluctuation": "Tijd met fluctuaties", + "Time in rapid fluctuation": "Tijd met grote fluctuaties", + "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:": "Dit is enkel een grove schatting die onjuist kan zijn welke geen bloedtest vervangt. De gebruikte formule is afkomstig van:", + "Filter by hours": "Filter op uren", + "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.": "Tijd met fluctuaties of grote fluctuaties in % van de geevalueerde periode, waarbij de bloed glucose relatief snel wijzigde.Lagere waarden zijn beter.", + "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.": "Gemiddelde veranderingen per dag is een som van alle waardes die uitschieten over de bekeken periode, gedeeld door het aantal dagen in deze periode. Lager is beter.", + "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "Gemiddelde veranderingen per uur is een som van alle waardes die uitschieten over de bekeken periode, gedeeld door het aantal uur in deze periode. Lager is beter.", + "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "Buiten het bereik van RMS wordt berekend door de afstand buiten het bereik van alle glucosewaardes voor de vastgestelde periode te nemen, deze te kwadrateren, sommeren, delen door het aantal metingen en daar de wortel van te nemen. Deze metriek is vergelijkbaar met het in-range percentage, maar metingen die verder buiten bereik zijn tellen zwaarder. Lagere waarden zijn beter.", + "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">is hier te vinden.", + "Mean Total Daily Change": "Gemiddelde veranderingen per dag", + "Mean Hourly Change": "Gemiddelde veranderingen per uur", + "FortyFiveDown": "licht dalend", + "FortyFiveUp": "licht stijgend", + "Flat": "vlak", + "SingleUp": "stijgend", + "SingleDown": "dalend", + "DoubleDown": "snel dalend", + "DoubleUp": "snel stijgend", + "virtAsstUnknown": "Die waarde is op dit moment onbekend. Zie je Nightscout site voor meer informatie.", + "virtAsstTitleAR2Forecast": "AR2 Voorspelling", + "virtAsstTitleCurrentBasal": "Huidig basaal", + "virtAsstTitleCurrentCOB": "Huidig COB", + "virtAsstTitleCurrentIOB": "Huidig IOB", + "virtAsstTitleLaunch": "Welkom bij Nightscout", + "virtAsstTitleLoopForecast": "Loop Voorbeschouwing", + "virtAsstTitleLastLoop": "Laatste Loop", + "virtAsstTitleOpenAPSForecast": "OpenAPS Voorspelling", + "virtAsstTitlePumpReservoir": "Resterende insuline", + "virtAsstTitlePumpBattery": "Pomp batterij", + "virtAsstTitleRawBG": "Huidige Ruw BG", + "virtAsstTitleUploaderBattery": "Uploader batterij", + "virtAsstTitleCurrentBG": "Huidig BG", + "virtAsstTitleFullStatus": "Volledige status", + "virtAsstTitleCGMMode": "CGM modus", + "virtAsstTitleCGMStatus": "CGM Status", + "virtAsstTitleCGMSessionAge": "CGM Sessie Leeftijd", + "virtAsstTitleCGMTxStatus": "CGM zender status", + "virtAsstTitleCGMTxAge": "CGM zender leeftijd", + "virtAsstTitleCGMNoise": "CGM ruis", + "virtAsstTitleDelta": "Bloedglucose delta", + "virtAsstStatus": "%1 en %2 sinds %3.", + "virtAsstBasal": "%1 huidig basaal is %2 eenheden per uur", + "virtAsstBasalTemp": "%1 tijdelijk basaal van %2 eenheden per uur zal eindigen %3", + "virtAsstIob": "en je hebt %1 insuline aan boord.", + "virtAsstIobIntent": "Je hebt %1 insuline aan boord", + "virtAsstIobUnits": "%1 eenheden van", + "virtAsstLaunch": "Wat wil je bekijken op Nightscout?", + "virtAsstPreamble": "Jouw", + "virtAsstPreamble3person": "%1 heeft een ", + "virtAsstNoInsulin": "geen", + "virtAsstUploadBattery": "De batterij van je mobiel is bij %l", + "virtAsstReservoir": "Je hebt nog %l eenheden in je reservoir", + "virtAsstPumpBattery": "Je pomp batterij is bij %1 %2", + "virtAsstUploaderBattery": "Je uploader batterij is bij %1", + "virtAsstLastLoop": "De meest recente goede loop was %1", + "virtAsstLoopNotAvailable": "De Loop plugin is niet geactiveerd", + "virtAsstLoopForecastAround": "Volgens de Loop voorspelling is je waarde around %1 over de volgnede %2", + "virtAsstLoopForecastBetween": "Volgens de Loop voorspelling is je waarde between %1 and %2 over de volgnede %3", + "virtAsstAR2ForecastAround": "Volgens de AR2 voorspelling wordt verwacht dat u ongeveer op %1 zal zitten in de volgende %2", + "virtAsstAR2ForecastBetween": "Volgens de AR2 voorspelling wordt verwacht dat u ongeveer tussen %1 en %2 zal zitten in de volgende %3", + "virtAsstForecastUnavailable": "Niet mogelijk om een voorspelling te doen met de data die beschikbaar is", + "virtAsstRawBG": "Je raw bloedwaarde is %1", + "virtAsstOpenAPSForecast": "OpenAPS uiteindelijke bloedglucose van %1", + "virtAsstCob3person": "%1 heeft %2 koolhydraten aan boord", + "virtAsstCob": "Je hebt %1 koolhydraten aan boord", + "virtAsstCGMMode": "Uw CGM modus was %1 sinds %2.", + "virtAsstCGMStatus": "Uw CGM status was %1 sinds %2.", + "virtAsstCGMSessAge": "Uw CGM sessie is actief gedurende %1 dagen en %2 uur.", + "virtAsstCGMSessNotStarted": "Er is op dit moment geen actieve CGM-sessie.", + "virtAsstCGMTxStatus": "Uw CGM zender status was %1 sinds %2.", + "virtAsstCGMTxAge": "Uw CGM-zender is %1 dagen oud.", + "virtAsstCGMNoise": "Uw CGM-ruis was %1 sinds %2.", + "virtAsstCGMBattOne": "Uw CGM batterij was %1 volt sinds %2.", + "virtAsstCGMBattTwo": "Uw CGM batterijniveau was %1 volt en %2 volt sinds %3.", + "virtAsstDelta": "Je delta was %1 tussen %2 en %3.", + "virtAsstDeltaEstimated": "Je geschatte delta was %1 tussen %2 en %3.", + "virtAsstUnknownIntentTitle": "Onbekende Intentie", + "virtAsstUnknownIntentText": "Het spijt me, ik weet niet wat je bedoelt.", + "Fat [g]": "Vet [g]", + "Protein [g]": "Proteine [g]", + "Energy [kJ]": "Energie [kJ]", + "Clock Views:": "Klokweergave:", + "Clock": "Klok", + "Color": "Kleur", + "Simple": "Simpel", + "TDD average": "Gemiddelde dagelijkse insuline (TDD)", + "Bolus average": "Gemiddelde bolus", + "Basal average": "Gemiddelde basaal", + "Base basal average:": "Basis basaal gemiddeld:", + "Carbs average": "Gemiddelde koolhydraten per dag", + "Eating Soon": "Pre-maaltijd modus", + "Last entry {0} minutes ago": "Laatste waarde {0} minuten geleden", + "change": "wijziging", + "Speech": "Spraak", + "Target Top": "Hoog tijdelijk doel", + "Target Bottom": "Laag tijdelijk doel", + "Canceled": "Geannuleerd", + "Meter BG": "Bloedglucosemeter waarde", + "predicted": "verwachting", + "future": "toekomstig", + "ago": "geleden", + "Last data received": "Laatste gegevens ontvangen", + "Clock View": "Klokweergave", + "Protein": "Eiwit", + "Fat": "Vet", + "Protein average": "eiwitgemiddelde", + "Fat average": "Vetgemiddelde", + "Total carbs": "Totaal koolhydraten", + "Total protein": "Totaal eiwitten", + "Total fat": "Totaal vetten", + "Database Size": "Grootte database", + "Database Size near its limits!": "Database grootte nadert limiet!", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "Database grootte is %1 MiB van de %2 MiB. Maak een backup en verwijder oude data", + "Database file size": "Database bestandsgrootte", + "%1 MiB of %2 MiB (%3%)": "%1 MiB van de %2 MiB (%3%)", + "Data size": "Datagrootte", + "virtAsstDatabaseSize": "%1 MiB dat is %2% van de beschikbaare database ruimte", + "virtAsstTitleDatabaseSize": "Database bestandsgrootte", + "Carbs/Food/Time": "Koolhydraten/Voedsel/Tijd", + "You have administration messages": "U heeft beheerberichten", + "Admin messages in queue": "Administratie berichten in wachtrij", + "Queue empty": "Wachtrij leeg", + "There are no admin messages in queue": "Er staan geen administratie berichten in de wachtrij", + "Please sign in using the API_SECRET to see your administration messages": "Log in met behulp van uw API_SECRET om de administratie berichten te zien", + "Reads enabled in default permissions": "Lezen ingeschakeld in standaard toestemmingen", + "Data reads enabled": "Gegevens lezen ingeschakeld", + "Data writes enabled": "Gegevens schrijven ingeschakeld", + "Data writes not enabled": "Gegevens schrijven uitgeschakeld", + "Color prediction lines": "Gekleurde voorspellingslijnen", + "Release Notes": "Versie opmerkingen", + "Check for Updates": "Zoek naar updates", + "Open Source": "Open source", + "Nightscout Info": "Nightscout Informatie", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "Het primaire doel van Loopalyzer is om te visualiseren hoe het Loop closed loop systeem presteert. Het kan ook werken met andere opstellingen, zowel in de closed en open loop als in de niet-loop. Echter afhankelijk van welke uploader u gebruikt, hoe vaak het in staat is om uw gegevens vast te leggen en te uploaden, en hoe het in staat is om ontbrekende gegevens op te vullen, kunnen sommige grafieken gaten hebben of zelfs volledig leeg zijn. Zorg er altijd voor dat de grafieken er redelijk uitzien. Het beste is om één dag tegelijk te bekijken en scroll door een aantal dagen eerst om te zien.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer bevat een functie voor tijdverschuiving. Als je bijvoorbeeld het ontbijt eet om 07:00 en om 08:00 op de dag erna, zal je gemiddelde bloedglucosecurve van deze twee dagen er zeer waarschijnlijk vlak uitzien en niet de werkelijke reactie laten zien na het ontbijt. Tijdverschuiving berekent de gemiddelde tijd dat deze maaltijden werden gegeten en verplaatst vervolgens alle data (koolhydraten, insuline, basaal, etc) zodat het lijkt of beide maaltijden op dezelfde tijd zijn gegeten.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "In dit voorbeeld worden alle gegevens van de eerste dag 30 minuten naar voren geschoven en alle gegevens vanaf de tweede dag 30 minuten naar achter geschoven, dus het lijkt alsof je om 7:30 beide dagen hebt ontbeten. Hiermee kunt u uw gemiddelde bloedglucosereactie van een maaltijd zien.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Tijdverschuiving benadrukt de periode na de gemiddelde begintijd in het grijs, voor de duur van de DIA (duur van insuline actie). Omdat alle gegevens van de hele dag verschoven zijn kunnen de gegevens buiten het grijze gebied mogelijk niet accuraat zijn.", + "Note that time shift is available only when viewing multiple days.": "Merk op dat tijdverschuiving alleen beschikbaar is bij het bekijken van meerdere dagen.", + "Please select a maximum of two weeks duration and click Show again.": "Selecteer maximaal twee weken en klik opnieuw op Laat Zien.", + "Show profiles table": "Profieltabel weergeven", + "Show predictions": "Toon voorspellingen", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Timeshift op maaltijden groter dan %1 g koolhydraten gegeten tussen %2 en %3", + "Previous": "Vorige", + "Previous day": "Vorige dag", + "Next day": "Volgende dag", + "Next": "Volgende", + "Temp basal delta": "Tijdelijk basaal delta", + "Authorized by token": "Geautoriseerd met token", + "Auth role": "Auth rol", + "view without token": "bekijken zonder token", + "Remove stored token": "Verwijder opgeslagen token", + "Weekly Distribution": "Wekelijkse spreiding", + "Failed authentication": "Mislukte authenticatie", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "Een apparaat met IP adres %1 heeft een poging gedaan om te authenticeren met Nightscout met verkeerde inloggegevens. Controleer of je een uploader hebt ingesteld met een verkeerd API_SECRET of token?", + "Default (with leading zero and U)": "Standaard (met 0 aan het begin en U)", + "Concise (with U, without leading zero)": "Beknopt (met U, zonder 0 aan het begin)", + "Minimal (without leading zero and U)": "Minimaal (zonder 0 aan het begin en U)", + "Small Bolus Display": "Beknopte Bolus Weergave", + "Large Bolus Display": "Grote Bolus Weergave", + "Bolus Display Threshold": "Bolus Weergave Drempel", + "%1 U and Over": "%1 U en meer", + "Event repeated %1 times.": "Gebeurtenis is %1 keer herhaald.", + "minutes": "minuten", + "Last recorded %1 %2 ago.": "Voor het laatst opgeslagen %1 %2 geleden.", + "Security issue": "Beveiligingsprobleem", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Zwak API_SECRET gevonden. Gebruik een mix van kleine en hoofdletters, cijfers en niet-alfanumerieke tekens !#%&/ om het risico op ongeoorloofde toegang te beperken. De minimale lengte van de API_SECRET is 12 tekens.", + "less than 1": "minder dan 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "MongoDB wachtwoord en API_SECRET zijn hetzelfde. Dit is geen goed idee. Verander beide en hergebruik geen wachtwoorden in het hele systeem." +} diff --git a/translations/pl_PL.json b/translations/pl_PL.json new file mode 100644 index 00000000000..0539092ee7b --- /dev/null +++ b/translations/pl_PL.json @@ -0,0 +1,707 @@ +{ + "Listening on port": "Słucham na porcie", + "Mo": "Pn", + "Tu": "Wt", + "We": "Śr", + "Th": "Cz", + "Fr": "Pt", + "Sa": "So", + "Su": "Nd", + "Monday": "Poniedziałek", + "Tuesday": "Wtorek", + "Wednesday": "Środa", + "Thursday": "Czwartek", + "Friday": "Piątek", + "Saturday": "Sobota", + "Sunday": "Niedziela", + "Category": "Kategoria", + "Subcategory": "Podkategoria", + "Name": "Imie", + "Today": "Dziś", + "Last 2 days": "Ostatnie 2 dni", + "Last 3 days": "Ostatnie 3 dni", + "Last week": "Ostatni tydzień", + "Last 2 weeks": "Ostatnie 2 tygodnie", + "Last month": "Ostatni miesiąc", + "Last 3 months": "Ostatnie 3 miesiące", + "From": "Od", + "To": "Do", + "Notes": "Uwagi", + "Food": "Jedzenie", + "Insulin": "Insulina", + "Carbs": "Węglowodany", + "Notes contain": "Zawierają uwagi", + "Target BG range bottom": "Docelowy zakres glikemii, dolny", + "top": "górny", + "Show": "Pokaż", + "Display": "Wyświetl", + "Loading": "Ładowanie", + "Loading profile": "Ładowanie profilu", + "Loading status": "Status załadowania", + "Loading food database": "Ładowanie bazy posiłków", + "not displayed": "Nie jest wyświetlany", + "Loading CGM data of": "Ładowanie danych z CGM", + "Loading treatments data of": "Ładowanie danych leczenia", + "Processing data of": "Przetwarzanie danych", + "Portion": "Część", + "Size": "Rozmiar", + "(none)": "(brak)", + "None": "brak", + "": "", + "Result is empty": "Brak wyniku", + "Day to day": "Dzień po dniu", + "Week to week": "Tydzień po tygodniu", + "Daily Stats": "Statystyki dzienne", + "Percentile Chart": "Wykres percentyl", + "Distribution": "Dystrybucja", + "Hourly stats": "Statystyki godzinowe", + "netIOB stats": "Statystyki netIOP", + "temp basals must be rendered to display this report": "Tymczasowa dawka podstawowa jest wymagana aby wyświetlić ten raport", + "No data available": "Brak danych", + "Low": "Niski", + "In Range": "W zakresie", + "Period": "Okres", + "High": "Wysoki", + "Average": "Średnia", + "Low Quartile": "Dolny kwartyl", + "Upper Quartile": "Górny kwartyl", + "Quartile": "Kwartyl", + "Date": "Data", + "Normal": "Normalny", + "Median": "Mediana", + "Readings": "Odczyty", + "StDev": "Stand. odchylenie", + "Daily stats report": "Dzienne statystyki", + "Glucose Percentile report": "Tabela centylowa glikemii", + "Glucose distribution": "Rozkład glikemii", + "days total": "dni łącznie", + "Total per day": "dni łącznie", + "Overall": "Ogółem", + "Range": "Zakres", + "% of Readings": "% Odczytów", + "# of Readings": "Ilość Odczytów", + "Mean": "Wartość średnia", + "Standard Deviation": "Standardowe odchylenie", + "Max": "Max", + "Min": "Min", + "A1c estimation*": "HbA1c przewidywany", + "Weekly Success": "Wyniki tygodniowe", + "There is not sufficient data to run this report. Select more days.": "Nie ma wystarczających danych dla tego raportu. Wybierz więcej dni.", + "Using stored API secret hash": "Korzystając z zapisanego poufnego hasha API", + "No API secret hash stored yet. You need to enter API secret.": "Nie ma żadnego poufnego hasha API zapisanego. Należy wprowadzić poufny hash API.", + "Database loaded": "Baza danych załadowana", + "Error: Database failed to load": "Błąd, baza danych nie może być załadowana", + "Error": "Błąd", + "Create new record": "Tworzenie nowego wpisu", + "Save record": "Zapisz wpis", + "Portions": "Porcja", + "Unit": "Jednostka", + "GI": "IG", + "Edit record": "Edycja wpisu", + "Delete record": "Usuń wpis", + "Move to the top": "Przejdź do góry", + "Hidden": "Ukryte", + "Hide after use": "Ukryj po użyciu", + "Your API secret must be at least 12 characters long": "Twój poufny klucz API musi zawierać co majmniej 12 znaków", + "Bad API secret": "Błędny klucz API", + "API secret hash stored": "Poufne klucz API zapisane", + "Status": "Status", + "Not loaded": "Nie załadowany", + "Food Editor": "Edytor posiłków", + "Your database": "Twoja baza danych", + "Filter": "Filtr", + "Save": "Zapisz", + "Clear": "Wyczyść", + "Record": "Wpis", + "Quick picks": "Szybki wybór", + "Show hidden": "Pokaż ukryte", + "Your API secret or token": "Twój hash API lub token", + "Remember this device. (Do not enable this on public computers.)": "Zapamiętaj to urządzenie (Nie używaj tej opcji korzystając z publicznych komputerów.)", + "Treatments": "Leczenie", + "Time": "Czas", + "Event Type": "Typ zdarzenia", + "Blood Glucose": "Glikemia z krwi", + "Entered By": "Wprowadzono przez", + "Delete this treatment?": "Usunąć te leczenie?", + "Carbs Given": "Węglowodany spożyte", + "Insulin Given": "Podana insulina", + "Event Time": "Czas zdarzenia", + "Please verify that the data entered is correct": "Proszę sprawdzić, czy wprowadzone dane są prawidłowe", + "BG": "BG", + "Use BG correction in calculation": "Użyj BG w obliczeniach korekty", + "BG from CGM (autoupdated)": "Wartość BG z CGM (automatycznie)", + "BG from meter": "Wartość BG z glukometru", + "Manual BG": "Ręczne wprowadzenie BG", + "Quickpick": "Szybki wybór", + "or": "lub", + "Add from database": "Dodaj z bazy danych", + "Use carbs correction in calculation": "Użyj wartość węglowodanów w obliczeniach korekty", + "Use COB correction in calculation": "Użyj COB do obliczenia korekty", + "Use IOB in calculation": "Użyj IOB w obliczeniach", + "Other correction": "Inna korekta", + "Rounding": "Zaokrąglanie", + "Enter insulin correction in treatment": "Wprowadź wartość korekty w leczeniu", + "Insulin needed": "Wymagana insulina", + "Carbs needed": "Wymagane węglowodany", + "Carbs needed if Insulin total is negative value": "Wymagane węglowodany, jeśli łączna wartość Insuliny jest ujemna", + "Basal rate": "Dawka bazowa", + "60 minutes earlier": "60 minut wcześniej", + "45 minutes earlier": "45 minut wcześniej", + "30 minutes earlier": "30 minut wcześniej", + "20 minutes earlier": "20 minut wcześniej", + "15 minutes earlier": "15 minut wcześniej", + "Time in minutes": "Czas w minutach", + "15 minutes later": "15 minut później", + "20 minutes later": "20 minut później", + "30 minutes later": "30 minut później", + "45 minutes later": "45 minut później", + "60 minutes later": "60 minut później", + "Additional Notes, Comments": "Uwagi dodatkowe", + "RETRO MODE": "Tryb RETRO", + "Now": "Teraz", + "Other": "Inny", + "Submit Form": "Zatwierdź", + "Profile Editor": "Edytor profilu", + "Reports": "Raporty", + "Add food from your database": "Dodaj posiłek z twojej bazy danych", + "Reload database": "Odśwież bazę danych", + "Add": "Dodaj", + "Unauthorized": "Nieuwierzytelniono", + "Entering record failed": "Wprowadzenie wpisu nie powiodło się", + "Device authenticated": "Urządzenie uwierzytelnione", + "Device not authenticated": "Urządzenie nieuwierzytelnione", + "Authentication status": "Status uwierzytelnienia", + "Authenticate": "Uwierzytelnienie", + "Remove": "Usuń", + "Your device is not authenticated yet": "Twoje urządzenie nie jest jeszcze uwierzytelnione", + "Sensor": "Sensor", + "Finger": "Glukometr", + "Manual": "Ręcznie", + "Scale": "Skala", + "Linear": "Liniowa", + "Logarithmic": "Logarytmiczna", + "Logarithmic (Dynamic)": "Logarytmiczna (Dynamiczna)", + "Insulin-on-Board": "Aktywna insulina (IOB)", + "Carbs-on-Board": "Aktywne wglowodany (COB)", + "Bolus Wizard Preview": "Kalkulator Bolusa (BWP)", + "Value Loaded": "Wartości wczytane", + "Cannula Age": "Czas wkłucia (CAGE)", + "Basal Profile": "Profil dawki bazowej", + "Silence for 30 minutes": "Wycisz na 30 minut", + "Silence for 60 minutes": "Wycisz na 60 minut", + "Silence for 90 minutes": "Wycisz na 90 minut", + "Silence for 120 minutes": "Wycisz na 120 minut", + "Settings": "Ustawienia", + "Units": "Jednostki", + "Date format": "Format daty", + "12 hours": "12 godzinny", + "24 hours": "24 godzinny", + "Log a Treatment": "Wprowadź leczenie", + "BG Check": "Pomiar glikemii", + "Meal Bolus": "Bolus do posiłku", + "Snack Bolus": "Bolus przekąskowy", + "Correction Bolus": "Bolus korekcyjny", + "Carb Correction": "Węglowodany korekcyjne", + "Note": "Uwagi", + "Question": "Pytanie", + "Exercise": "Wysiłek", + "Pump Site Change": "Zmiana miejsca wkłucia pompy", + "CGM Sensor Start": "Start nowego sensora", + "CGM Sensor Stop": "Stop Sensora CGM", + "CGM Sensor Insert": "Zmiana sensora", + "Sensor Code": "Kod sensora", + "Transmitter ID": "ID nadajnika", + "Dexcom Sensor Start": "Start sensora DEXCOM", + "Dexcom Sensor Change": "Zmiana sensora DEXCOM", + "Insulin Cartridge Change": "Zmiana zbiornika z insuliną", + "D.A.D. Alert": "Psi Alarm cukrzycowy", + "Glucose Reading": "Odczyt glikemii", + "Measurement Method": "Sposób pomiaru", + "Meter": "Glukometr", + "Amount in grams": "Wartość w gramach", + "Amount in units": "Wartość w jednostkach", + "View all treatments": "Pokaż całość leczenia", + "Enable Alarms": "Włącz alarmy", + "Pump Battery Change": "Zmiana baterii w pompie", + "Pump Battery Age": "Pump Battery Age", + "Pump Battery Low Alarm": "Alarm! Niski poziom baterii w pompie", + "Pump Battery change overdue!": "Bateria pompy musi być wymieniona!", + "When enabled an alarm may sound.": "Sygnalizacja dzwiękowa przy włączonym alarmie", + "Urgent High Alarm": "Uwaga: Alarm hiperglikemii", + "High Alarm": "Alarm hiperglikemii", + "Low Alarm": "Alarm hipoglikemii", + "Urgent Low Alarm": "Uwaga: Alarm hipoglikemii", + "Stale Data: Warn": "Ostrzeżenie: brak odczytów", + "Stale Data: Urgent": "Uwaga: brak odczytów", + "mins": "min", + "Night Mode": "Tryb nocny", + "When enabled the page will be dimmed from 10pm - 6am.": "Po włączeniu strona będzie przyciemniona od 22 wieczorem do 6 nad ranem.", + "Enable": "Włącz", + "Show Raw BG Data": "Wyświetl surowe dane BG", + "Never": "Nigdy", + "Always": "Zawsze", + "When there is noise": "Gdy sygnał jest zakłócony", + "When enabled small white dots will be displayed for raw BG data": "Gdy funkcja jest włączona, małe białe kropki pojawią się na surowych danych BG", + "Custom Title": "Własny tytuł strony", + "Theme": "Wygląd", + "Default": "Domyślny", + "Colors": "Kolorowy", + "Colorblind-friendly colors": "Kolory dla niedowidzących", + "Reset, and use defaults": "Reset i powrót do domyślnych ustawień", + "Calibrations": "Kalibracja", + "Alarm Test / Smartphone Enable": "Test alarmu / Smartphone aktywny", + "Bolus Wizard": "Kalkulator bolusa", + "in the future": "w przyszłości", + "time ago": "czas temu", + "hr ago": "godzina temu", + "hrs ago": "godzin temu", + "min ago": "minuta temu", + "mins ago": "minut temu", + "day ago": "dzień temu", + "days ago": "dni temu", + "long ago": "dawno", + "Clean": "Czysty", + "Light": "Niski", + "Medium": "Średni", + "Heavy": "Wysoki", + "Treatment type": "Rodzaj leczenia", + "Raw BG": "Surowe BG", + "Device": "Urządzenie", + "Noise": "Szum", + "Calibration": "Kalibracja", + "Show Plugins": "Pokaż rozszerzenia", + "About": "O aplikacji", + "Value in": "Wartości w", + "Carb Time": "Czas posiłku", + "Language": "Język", + "Add new": "Dodaj nowy", + "g": "g", + "ml": "ml", + "pcs": "cz.", + "Drag&drop food here": "Tutaj przesuń/upuść jedzenie", + "Care Portal": "Portal Opieki", + "Medium/Unknown": "Średni/nieznany", + "IN THE FUTURE": "W PRZYSZŁOŚCI", + "Order": "Kolejność", + "oldest on top": "Najstarszy na górze", + "newest on top": "Najnowszy na górze", + "All sensor events": "Wszystkie zdarzenia sensora", + "Remove future items from mongo database": "Usuń przyszłe/błędne wpisy z bazy mongo", + "Find and remove treatments in the future": "Znajdź i usuń przyszłe/błędne zabiegi", + "This task find and remove treatments in the future.": "To narzędzie znajduje i usuwa przyszłe/błędne zabiegi", + "Remove treatments in the future": "Usuń zabiegi w przyszłości", + "Find and remove entries in the future": "Znajdź i usuń wpisy z przyszłości", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "To narzędzie odnajduje i usuwa dane CGM utworzone przez uploader w przyszłości - ze złą datą/czasem.", + "Remove entries in the future": "Usuń wpisy w przyszłości", + "Loading database ...": "Wczytuje baze danych", + "Database contains %1 future records": "Baza danych zawiera %1 przyszłych rekordów", + "Remove %1 selected records?": "Usunąć %1 wybranych rekordów?", + "Error loading database": "Błąd wczytywania bazy danych", + "Record %1 removed ...": "%1 rekordów usunięto ...", + "Error removing record %1": "Błąd przy usuwaniu rekordu %1", + "Deleting records ...": "Usuwanie rekordów ...", + "%1 records deleted": "%1 rekordów zostało usuniętych", + "Clean Mongo status database": "Oczyść status bazy danych Mongo", + "Delete all documents from devicestatus collection": "Usuń wszystkie dokumenty z kolekcji devicestatus", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "To narzędzie usuwa wszystkie dokumenty z kolekcji devicestatus. Przydatne, gdy status baterii uploadera nie jest aktualizowany.", + "Delete all documents": "Usuń wszystkie dokumenty", + "Delete all documents from devicestatus collection?": "Czy na pewno usunąć wszystkie dokumenty z kolekcji devicestatus?", + "Database contains %1 records": "Baza danych zawiera %1 rekordów", + "All records removed ...": "Wszystkie rekordy usunięto", + "Delete all documents from devicestatus collection older than 30 days": "Usuń wszystkie dokumenty z kolekcji devicestatus starsze niż 30 dni", + "Number of Days to Keep:": "Ilość dni do zachowania:", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "To narzędzie usuwa wszystkie dokumenty z kolekcji devicestatus starsze niż 30 dni. Przydatne, gdy status baterii uploadera nie jest aktualizowany.", + "Delete old documents from devicestatus collection?": "Czy na pewno chcesz usunąć stare dokumenty z kolekcji devicestatus?", + "Clean Mongo entries (glucose entries) database": "Wyczyść bazę wpisów (wpisy glukozy) Mongo", + "Delete all documents from entries collection older than 180 days": "Usuń wszystkie dokumenty z kolekcji wpisów starsze niż 180 dni", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "To narzędzie usuwa wszystkie dokumenty z kolekcji wpisów starsze niż 180 dni. Przydatne, gdy status baterii uploadera nie jest aktualizowany.", + "Delete old documents": "Usuń stare dokumenty", + "Delete old documents from entries collection?": "Czy na pewno chcesz usunąć stare dokumenty z kolekcji wpisów?", + "%1 is not a valid number": "%1 nie jest poprawną liczbą", + "%1 is not a valid number - must be more than 2": "%1 nie jest poprawną liczbą - musi być większe od 2", + "Clean Mongo treatments database": "Wyczyść bazę leczenia Mongo", + "Delete all documents from treatments collection older than 180 days": "Usuń wszystkie dokumenty z kolekcji leczenia starsze niż 180 dni", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "To narzędzie usuwa wszystkie dokumenty z kolekcji leczenia starsze niż 180 dni. Przydatne, gdy status baterii uploadera nie jest aktualizowany.", + "Delete old documents from treatments collection?": "Czy na pewno chcesz usunąć stare dokumenty z kolekcji leczenia?", + "Admin Tools": "Narzędzia administratora", + "Nightscout reporting": "Nightscout - raporty", + "Cancel": "Anuluj", + "Edit treatment": "Edytuj zabieg", + "Duration": "Czas trwania", + "Duration in minutes": "Czas trwania w minutach", + "Temp Basal": "Tymczasowa dawka podstawowa", + "Temp Basal Start": "Początek tymczasowej dawki podstawowej", + "Temp Basal End": "Koniec tymczasowej dawki podstawowej", + "Percent": "Procent", + "Basal change in %": "Zmiana dawki podstawowej w %", + "Basal value": "Dawka podstawowa", + "Absolute basal value": "Bezwględna wartość dawki podstawowej", + "Announcement": "Powiadomienie", + "Loading temp basal data": "Wczytuje dane tymczasowej dawki podstawowej", + "Save current record before changing to new?": "Zapisać bieżący rekord przed zamianą na nowy?", + "Profile Switch": "Przełączenie profilu", + "Profile": "Profil", + "General profile settings": "Ogólne ustawienia profilu", + "Title": "Nazwa", + "Database records": "Rekordy bazy danych", + "Add new record": "Dodaj nowy rekord", + "Remove this record": "Usuń ten rekord", + "Clone this record to new": "Powiel ten rekord na nowy", + "Record valid from": "Rekord ważny od", + "Stored profiles": "Zachowane profile", + "Timezone": "Strefa czasowa", + "Duration of Insulin Activity (DIA)": "Czas trwania aktywnej insuliny (DIA)", + "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.": "Odzwierciedla czas działania insuliny. Może różnić się w zależności od chorego i rodzaju insuliny. Zwykle są to 3-4 godziny dla insuliny podawanej pompą u większości chorych. Inna nazwa to czas trwania insuliny.", + "Insulin to carb ratio (I:C)": "Współczynnik insulina/węglowodany (I:C)", + "Hours:": "Godziny:", + "hours": "godziny", + "g/hour": "g/godzine", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "g węglowodanów na 1j insuliny. Współczynnik ilości gram weglowodanów równoważonych przez 1j insuliny.", + "Insulin Sensitivity Factor (ISF)": "Współczynnik wrażliwosci na insulinę (ISF)", + "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "mg/dl lub mmol/L na 1j insuliny. Współczynnik obniżenia poziomu glukozy przez 1j insuliny", + "Carbs activity / absorption rate": "Aktywność węglowodanów / współczynnik absorpcji", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "g na jednostkę czasu. Odzwierciedla zmianę COB na jednostkę czasu oraz ilość węglowodanów mających przynieść efekt w czasie. Krzywe absorpcji / aktywnosci węglowodanów są mniej poznane niż aktywności insuliny ale mogą być oszacowane przez ocenę opóźnienia wchłaniania przy stałym współczynniku absorpcji (g/h).", + "Basal rates [unit/hour]": "Dawka podstawowa [j/h]", + "Target BG range [mg/dL,mmol/L]": "Docelowy przedział glikemii [mg/dl, mmol/L])", + "Start of record validity": "Początek ważnych rekordów", + "Icicle": "Odwrotność", + "Render Basal": "Zmiana dawki bazowej", + "Profile used": "Profil wykorzystywany", + "Calculation is in target range.": "Obliczenie mieści się w zakresie docelowym", + "Loading profile records ...": "Wczytywanie rekordów profilu", + "Values loaded.": "Wartości wczytane.", + "Default values used.": "Używane domyślne wartości.", + "Error. Default values used.": "Błąd. Używane domyślne wartości.", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "Zakres czasu w docelowo niskim i wysokim przedziale nie są dopasowane. Przywrócono wartości domyślne", + "Valid from:": "Ważne od:", + "Save current record before switching to new?": "Nagrać bieżący rekord przed przełączeniem na nowy?", + "Add new interval before": "Dodaj nowy przedział przed", + "Delete interval": "Usuń przedział", + "I:C": "I:C", + "ISF": "ISF", + "Combo Bolus": "Bolus złożony", + "Difference": "Różnica", + "New time": "Nowy czas", + "Edit Mode": "Tryb edycji", + "When enabled icon to start edit mode is visible": "Po aktywacji, widoczne ikony, aby uruchomić tryb edycji", + "Operation": "Operacja", + "Move": "Przesuń", + "Delete": "Skasuj", + "Move insulin": "Przesuń insulinę", + "Move carbs": "Przesuń węglowodany", + "Remove insulin": "Usuń insulinę", + "Remove carbs": "Usuń węglowodany", + "Change treatment time to %1 ?": "Zmień czas zdarzenia na %1 ?", + "Change carbs time to %1 ?": "Zmień czas węglowodanów na %1 ?", + "Change insulin time to %1 ?": "Zmień czas insuliny na %1 ?", + "Remove treatment ?": "Usunąć wydarzenie?", + "Remove insulin from treatment ?": "Usunąć insulinę z wydarzenia?", + "Remove carbs from treatment ?": "Usunąć węglowodany z wydarzenia?", + "Rendering": "Rysuję", + "Loading OpenAPS data of": "Ładuję dane OpenAPS z", + "Loading profile switch data": "Ładuję dane zmienionego profilu", + "Redirecting you to the Profile Editor to create a new profile.": "Złe ustawienia profilu.\nDla podanego czasu nie zdefiniowano profilu.\nPrzekierowuję do edytora profili aby utworzyć nowy.", + "Pump": "Pompa", + "Sensor Age": "Wiek sensora", + "Insulin Age": "Wiek insuliny", + "Temporary target": "Tymczasowy cel", + "Reason": "Powód", + "Eating soon": "Zjedz wkrótce", + "Top": "Góra", + "Bottom": "Dół", + "Activity": "Aktywność", + "Targets": "Cele", + "Bolus insulin:": "Bolus insuliny", + "Base basal insulin:": "Bazowa dawka insuliny", + "Positive temp basal insulin:": "Zwiększona bazowa dawka insuliny", + "Negative temp basal insulin:": "Zmniejszona bazowa dawka insuliny", + "Total basal insulin:": "Całkowita ilość bazowej dawki insuliny", + "Total daily insulin:": "Całkowita dzienna ilość insuliny", + "Unable to save Role": "Nie można zapisać roli", + "Unable to delete Role": "Nie można usunąć roli", + "Database contains %1 roles": "Baza danych zawiera %1 ról", + "Edit Role": "Edycja roli", + "admin, school, family, etc": "administrator, szkoła, rodzina, itp", + "Permissions": "Uprawnienia", + "Are you sure you want to delete: ": "Jesteś pewien, że chcesz usunąć:", + "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.": "Każda rola będzie mieć 1 lub więcej uprawnień. Symbol * uprawnia do wszystkiego. Uprawnienia są hierarchiczne, używając : jako separatora.", + "Add new Role": "Dodaj nową rolę", + "Roles - Groups of People, Devices, etc": "Role - Grupy ludzi, urządzeń, itp", + "Edit this role": "Edytuj rolę", + "Admin authorized": "Administrator autoryzowany", + "Subjects - People, Devices, etc": "Obiekty - ludzie, urządzenia itp", + "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "Każdy obiekt będzie miał unikalny token dostępu i jedną lub więcej ról. Kliknij token dostępu, aby otworzyć nowy widok z wybranym obiektem, ten tajny link może być następnie udostępniony", + "Add new Subject": "Dodaj obiekt", + "Unable to save Subject": "Nie można zapisać podmiotu", + "Unable to delete Subject": "Nie można usunąć obiektu", + "Database contains %1 subjects": "Baza danych zawiera %1 obiektów", + "Edit Subject": "Edytuj obiekt", + "person, device, etc": "osoba, urządzenie, itp", + "role1, role2": "rola1, rola2", + "Edit this subject": "Edytuj ten obiekt", + "Delete this subject": "Usuń ten obiekt", + "Roles": "Role", + "Access Token": "Token dostępu", + "hour ago": "Godzię temu", + "hours ago": "Godzin temu", + "Silence for %1 minutes": "Wycisz na %1 minut", + "Check BG": "Sprawdź glukozę z krwi", + "BASAL": "BAZA", + "Current basal": "Dawka podstawowa", + "Sensitivity": "Wrażliwość", + "Current Carb Ratio": "Obecny przelicznik węglowodanowy", + "Basal timezone": "Strefa czasowa dawki podstawowej", + "Active profile": "Profil aktywny", + "Active temp basal": "Aktywa tymczasowa dawka podstawowa", + "Active temp basal start": "Start aktywnej tymczasowej dawki podstawowej", + "Active temp basal duration": "Czas trwania aktywnej tymczasowej dawki podstawowej", + "Active temp basal remaining": "Pozostała aktywna tymczasowa dawka podstawowa", + "Basal profile value": "Wartość profilu podstawowego", + "Active combo bolus": "Aktywny bolus złożony", + "Active combo bolus start": "Start aktywnego bolusa złożonego", + "Active combo bolus duration": "Czas trwania aktywnego bolusa złożonego", + "Active combo bolus remaining": "Pozostały aktywny bolus złożony", + "BG Delta": "Zmiana glikemii", + "Elapsed Time": "Upłynął czas", + "Absolute Delta": "różnica absolutna", + "Interpolated": "Interpolowany", + "BWP": "Kalkulator bolusa", + "Urgent": "Pilny", + "Warning": "Ostrzeżenie", + "Info": "Informacja", + "Lowest": "Niski", + "Snoozing high alarm since there is enough IOB": "Wycisz alarm wysokiej glikemi, jest wystarczająco dużo aktywnej insuliny", + "Check BG, time to bolus?": "Sprawdź glikemię, czas na bolusa ?", + "Notice": "Uwaga", + "required info missing": "brak wymaganych informacji", + "Insulin on Board": "Aktywna insulina", + "Current target": "Aktualny cel", + "Expected effect": "Oczekiwany efekt", + "Expected outcome": "Oczekowany resultat", + "Carb Equivalent": "Odpowiednik w węglowodanach", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "Nadmiar insuliny, %1J więcej niż potrzeba, aby osiągnąć cel dolnej granicy, nie biorąc pod uwagę węglowodanów", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "Nadmiar insuliny: o %1J więcej niż potrzeba, aby osiągnąć cel dolnej granicy. UPEWNIJ SIĘ, ŻE AKTYWNA INSULINA JEST POKRYTA WĘGLOWODANAMI", + "%1U reduction needed in active insulin to reach low target, too much basal?": "%1J potrzebnej redukcji w aktywnej insulinie, aby osiągnąć niski cel dolnej granicy, Za duża dawka podstawowa ?", + "basal adjustment out of range, give carbs?": "dawka podstawowa poza zakresem, podać węglowodany?", + "basal adjustment out of range, give bolus?": "dawka podstawowa poza zakresem, podać insulinę?", + "above high": "powyżej wysokiego", + "below low": "poniżej niskiego", + "Projected BG %1 target": "Oczekiwany poziom glikemii %1", + "aiming at": "pożądany wynik", + "Bolus %1 units": "Bolus %1 jednostek", + "or adjust basal": "lub dostosuj dawkę bazową", + "Check BG using glucometer before correcting!": "Sprawdź glikemię z krwi przed podaniem korekty!", + "Basal reduction to account %1 units:": "Dawka bazowa zredukowana do 1% J", + "30m temp basal": "30 minut tymczasowej dawki bazowej", + "1h temp basal": "1 godzina tymczasowej dawki bazowej", + "Cannula change overdue!": "Przekroczono czas wymiany wkłucia!", + "Time to change cannula": "Czas do wymiany wkłucia", + "Change cannula soon": "Wkrótce wymiana wkłucia", + "Cannula age %1 hours": "Czas od wymiany wkłucia %1 godzin", + "Inserted": "Zamontowano", + "CAGE": "Wiek wkłucia", + "COB": "Aktywne węglowodany", + "Last Carbs": "Ostatnie węglowodany", + "IAGE": "Wiek insuliny", + "Insulin reservoir change overdue!": "Przekroczono czas wymiany zbiornika na insulinę!", + "Time to change insulin reservoir": "Czas do zmiany zbiornika na insulinę!", + "Change insulin reservoir soon": "Wkrótce wymiana zbiornika na insulinę!", + "Insulin reservoir age %1 hours": "Wiek zbiornika na insulinę %1 godzin", + "Changed": "Wymieniono", + "IOB": "Aktywna insulina", + "Careportal IOB": "Aktywna insulina z portalu", + "Last Bolus": "Ostatni bolus", + "Basal IOB": "Aktywna insulina z dawki bazowej", + "Source": "Źródło", + "Stale data, check rig?": "Dane są nieaktualne, sprawdź urządzenie transmisyjne.", + "Last received:": "Ostatnio odebrane:", + "%1m ago": "%1 minut temu", + "%1h ago": "%1 godzin temu", + "%1d ago": "%1 dni temu", + "RETRO": "DAWNE", + "SAGE": "Wiek sensora", + "Sensor change/restart overdue!": "Przekroczono czas wymiany/restartu sensora!", + "Time to change/restart sensor": "Czas do wymiany/restartu sensora", + "Change/restart sensor soon": "Wkrótce czas wymiany/restartu sensora", + "Sensor age %1 days %2 hours": "Wiek sensora: %1 dni %2 godzin", + "Sensor Insert": "Zamontuj sensor", + "Sensor Start": "Uruchomienie sensora", + "days": "dni", + "Insulin distribution": "podawanie insuliny", + "To see this report, press SHOW while in this view": "Aby wyświetlić ten raport, naciśnij przycisk POKAŻ w tym widoku", + "AR2 Forecast": "Prognoza AR2", + "OpenAPS Forecasts": "Prognoza OpenAPS", + "Temporary Target": "Cel tymczasowy", + "Temporary Target Cancel": "Zel tymczasowy anulowany", + "OpenAPS Offline": "OpenAPS nieaktywny", + "Profiles": "Profile", + "Time in fluctuation": "Czas fluaktacji (odchyleń)", + "Time in rapid fluctuation": "Czas szybkich fluaktacji (odchyleń)", + "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:": "To tylko przybliżona ocena, która może być bardzo niedokładna i nie może zastąpić faktycznego poziomu cukru we krwi. Zastosowano formułę:", + "Filter by hours": "Filtruj po godzinach", + "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.": "Czas fluktuacji i szybki czas fluktuacji mierzą % czasu w badanym okresie, w którym poziom glukozy we krwi zmieniał się szybko lub bardzo szybko. Preferowane są wolniejsze zmiany", + "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.": "Sednia całkowita dziennych zmian jest sumą wszystkich zmian glikemii w badanym okresie, podzielonym przez liczbę dni. Mniejsze są lepsze", + "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "Sednia całkowita godzinnych zmian jest sumą wszystkich zmian glikemii w badanym okresie, podzielonym przez liczbę godzin. Mniejsze są lepsze", + "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.", + "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">tutaj.", + "Mean Total Daily Change": "Średnia całkowita dziennych zmian", + "Mean Hourly Change": "Średnia całkowita godzinnych zmian", + "FortyFiveDown": "niewielki spadek", + "FortyFiveUp": "niewielki wzrost", + "Flat": "stabilny", + "SingleUp": "wzrost", + "SingleDown": "spada", + "DoubleDown": "szybko spada", + "DoubleUp": "szybko rośnie", + "virtAsstUnknown": "That value is unknown at the moment. Please see your Nightscout site for more details.", + "virtAsstTitleAR2Forecast": "Prognoza AR2", + "virtAsstTitleCurrentBasal": "Bieżąca baza", + "virtAsstTitleCurrentCOB": "Current COB", + "virtAsstTitleCurrentIOB": "Current IOB", + "virtAsstTitleLaunch": "Witamy w Nightscout", + "virtAsstTitleLoopForecast": "Prognoza pętli", + "virtAsstTitleLastLoop": "Ostatnia pętla", + "virtAsstTitleOpenAPSForecast": "Prognoza OpenAPS", + "virtAsstTitlePumpReservoir": "Pozostała insulina", + "virtAsstTitlePumpBattery": "Bateria Pompy", + "virtAsstTitleRawBG": "Current Raw BG", + "virtAsstTitleUploaderBattery": "Uploader Battery", + "virtAsstTitleCurrentBG": "Current BG", + "virtAsstTitleFullStatus": "Full Status", + "virtAsstTitleCGMMode": "CGM Mode", + "virtAsstTitleCGMStatus": "CGM Status", + "virtAsstTitleCGMSessionAge": "CGM Session Age", + "virtAsstTitleCGMTxStatus": "CGM Transmitter Status", + "virtAsstTitleCGMTxAge": "CGM Transmitter Age", + "virtAsstTitleCGMNoise": "CGM Noise", + "virtAsstTitleDelta": "Blood Glucose Delta", + "virtAsstStatus": "%1 i %2 rozpoczęte od %3.", + "virtAsstBasal": "%1 obecna dawka bazalna %2 J na godzinę", + "virtAsstBasalTemp": "%1 tymczasowa dawka bazalna %2 J na godzinę zakoczy się o %3", + "virtAsstIob": "i masz %1 aktywnej insuliny.", + "virtAsstIobIntent": "Masz %1 aktywnej insuliny", + "virtAsstIobUnits": "%1 jednostek", + "virtAsstLaunch": "What would you like to check on Nightscout?", + "virtAsstPreamble": "twój", + "virtAsstPreamble3person": "%1 ma ", + "virtAsstNoInsulin": "nie", + "virtAsstUploadBattery": "Twoja bateria ma %1", + "virtAsstReservoir": "W zbiorniku pozostało %1 jednostek", + "virtAsstPumpBattery": "Bateria pompy jest w %1 %2", + "virtAsstUploaderBattery": "Your uploader battery is at %1", + "virtAsstLastLoop": "Ostatnia pomyślna pętla była %1", + "virtAsstLoopNotAvailable": "Plugin Loop prawdopodobnie nie jest włączona", + "virtAsstLoopForecastAround": "Zgodnie z prognozą pętli, glikemia around %1 będzie podczas następnego %2", + "virtAsstLoopForecastBetween": "Zgodnie z prognozą pętli, glikemia between %1 and %2 będzie podczas następnego %3", + "virtAsstAR2ForecastAround": "According to the AR2 forecast you are expected to be around %1 over the next %2", + "virtAsstAR2ForecastBetween": "According to the AR2 forecast you are expected to be between %1 and %2 over the next %3", + "virtAsstForecastUnavailable": "Prognoza pętli nie jest możliwa, z dostępnymi danymi.", + "virtAsstRawBG": "Glikemia RAW wynosi %1", + "virtAsstOpenAPSForecast": "Glikemia prognozowana przez OpenAPS wynosi %1", + "virtAsstCob3person": "%1 has %2 carbohydrates on board", + "virtAsstCob": "You have %1 carbohydrates on board", + "virtAsstCGMMode": "Your CGM mode was %1 as of %2.", + "virtAsstCGMStatus": "Your CGM status was %1 as of %2.", + "virtAsstCGMSessAge": "Your CGM session has been active for %1 days and %2 hours.", + "virtAsstCGMSessNotStarted": "There is no active CGM session at the moment.", + "virtAsstCGMTxStatus": "Your CGM transmitter status was %1 as of %2.", + "virtAsstCGMTxAge": "Your CGM transmitter is %1 days old.", + "virtAsstCGMNoise": "Your CGM noise was %1 as of %2.", + "virtAsstCGMBattOne": "Your CGM battery was %1 volts as of %2.", + "virtAsstCGMBattTwo": "Your CGM battery levels were %1 volts and %2 volts as of %3.", + "virtAsstDelta": "Your delta was %1 between %2 and %3.", + "virtAsstDeltaEstimated": "Your estimated delta was %1 between %2 and %3.", + "virtAsstUnknownIntentTitle": "Unknown Intent", + "virtAsstUnknownIntentText": "I'm sorry, I don't know what you're asking for.", + "Fat [g]": "Tłuszcz [g]", + "Protein [g]": "Białko [g]", + "Energy [kJ]": "Energia [kJ}", + "Clock Views:": "Widoki zegarów", + "Clock": "Zegar", + "Color": "Kolor", + "Simple": "Prosty", + "TDD average": "Średnia dawka dzienna", + "Bolus average": "Bolus average", + "Basal average": "Basal average", + "Base basal average:": "Base basal average:", + "Carbs average": "Średnia ilość węglowodanów", + "Eating Soon": "Przed jedzeniem", + "Last entry {0} minutes ago": "Ostatni wpis przed {0} minutami", + "change": "zmiana", + "Speech": "Głos", + "Target Top": "Górny limit", + "Target Bottom": "Dolny limit", + "Canceled": "Anulowane", + "Meter BG": "Glikemia z krwi", + "predicted": "prognoza", + "future": "przyszłość", + "ago": "temu", + "Last data received": "Ostatnie otrzymane dane", + "Clock View": "Widok zegara", + "Protein": "Białko", + "Fat": "Tłuszcz", + "Protein average": "Średnia białka", + "Fat average": "Średnia tłuszczu", + "Total carbs": "Węglowodany ogółem", + "Total protein": "Białko ogółem", + "Total fat": "Tłuszcz ogółem", + "Database Size": "Rozmiar Bazy Danych", + "Database Size near its limits!": "Rozmiar bazy danych zbliża się do limitu!", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "Baza danych zajmuje %1 MiB z dozwolonych %2 MiB. Proszę zrób kopię zapasową i oczyść bazę danych!", + "Database file size": "Rozmiar pliku bazy danych", + "%1 MiB of %2 MiB (%3%)": "%1 MiB z %2 MiB (%3%)", + "Data size": "Rozmiar danych", + "virtAsstDatabaseSize": "%1 MiB co stanowi %2% przestrzeni dostępnej dla bazy danych", + "virtAsstTitleDatabaseSize": "Rozmiar pliku bazy danych", + "Carbs/Food/Time": "Carbs/Food/Time", + "You have administration messages": "You have administration messages", + "Admin messages in queue": "Admin messages in queue", + "Queue empty": "Queue empty", + "There are no admin messages in queue": "There are no admin messages in queue", + "Please sign in using the API_SECRET to see your administration messages": "Please sign in using the API_SECRET to see your administration messages", + "Reads enabled in default permissions": "Reads enabled in default permissions", + "Data reads enabled": "Data reads enabled", + "Data writes enabled": "Data writes enabled", + "Data writes not enabled": "Data writes not enabled", + "Color prediction lines": "Color prediction lines", + "Release Notes": "Release Notes", + "Check for Updates": "Check for Updates", + "Open Source": "Open Source", + "Nightscout Info": "Nightscout Info", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.", + "Note that time shift is available only when viewing multiple days.": "Note that time shift is available only when viewing multiple days.", + "Please select a maximum of two weeks duration and click Show again.": "Please select a maximum of two weeks duration and click Show again.", + "Show profiles table": "Show profiles table", + "Show predictions": "Show predictions", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Timeshift on meals larger than %1 g carbs consumed between %2 and %3", + "Previous": "Previous", + "Previous day": "Previous day", + "Next day": "Next day", + "Next": "Next", + "Temp basal delta": "Temp basal delta", + "Authorized by token": "Authorized by token", + "Auth role": "Auth role", + "view without token": "view without token", + "Remove stored token": "Remove stored token", + "Weekly Distribution": "Weekly Distribution", + "Failed authentication": "Failed authentication", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?", + "Default (with leading zero and U)": "Default (with leading zero and U)", + "Concise (with U, without leading zero)": "Concise (with U, without leading zero)", + "Minimal (without leading zero and U)": "Minimal (without leading zero and U)", + "Small Bolus Display": "Small Bolus Display", + "Large Bolus Display": "Large Bolus Display", + "Bolus Display Threshold": "Bolus Display Threshold", + "%1 U and Over": "%1 U and Over", + "Event repeated %1 times.": "Event repeated %1 times.", + "minutes": "minutes", + "Last recorded %1 %2 ago.": "Last recorded %1 %2 ago.", + "Security issue": "Security issue", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.", + "less than 1": "less than 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system." +} diff --git a/translations/pt_BR.json b/translations/pt_BR.json new file mode 100644 index 00000000000..17aa5a61b42 --- /dev/null +++ b/translations/pt_BR.json @@ -0,0 +1,707 @@ +{ + "Listening on port": "Ouvindo na porta", + "Mo": "Seg", + "Tu": "Ter", + "We": "Qua", + "Th": "Qui", + "Fr": "Sex", + "Sa": "Sab", + "Su": "Dom", + "Monday": "Segunda", + "Tuesday": "Terça", + "Wednesday": "Quarta", + "Thursday": "Quinta", + "Friday": "Sexta", + "Saturday": "Sábado", + "Sunday": "Domingo", + "Category": "Categoria", + "Subcategory": "Subcategoria", + "Name": "Nome", + "Today": "Hoje", + "Last 2 days": "Últimos 2 dias", + "Last 3 days": "Últimos 3 dias", + "Last week": "Semana passada", + "Last 2 weeks": "Últimas 2 semanas", + "Last month": "Mês passado", + "Last 3 months": "Últimos 3 meses", + "From": "De", + "To": "a", + "Notes": "Notas", + "Food": "Comida", + "Insulin": "Insulina", + "Carbs": "Carboidrato", + "Notes contain": "Notas contém", + "Target BG range bottom": "Limite inferior de glicemia", + "top": "superior", + "Show": "Mostrar", + "Display": "Visualizar", + "Loading": "Carregando", + "Loading profile": "Carregando perfil", + "Loading status": "Carregando status", + "Loading food database": "Carregando dados de alimentos", + "not displayed": "não exibido", + "Loading CGM data of": "Carregando dados de CGM de", + "Loading treatments data of": "Carregando dados de tratamento de", + "Processing data of": "Processando dados de", + "Portion": "Porção", + "Size": "Tamanho", + "(none)": "(nenhum)", + "None": "nenhum", + "": "", + "Result is empty": "Resultado vazio", + "Day to day": "Dia a dia", + "Week to week": "Semana a semana", + "Daily Stats": "Estatísticas diárias", + "Percentile Chart": "Percentis", + "Distribution": "Distribuição", + "Hourly stats": "Estatísticas por hora", + "netIOB stats": "Estatísticas de netIOB", + "temp basals must be rendered to display this report": "basais temporárias devem ser renderizadas para exibir este relatório", + "No data available": "Não há dados", + "Low": "Baixo", + "In Range": "Na meta", + "Period": "Período", + "High": "Alto", + "Average": "Média", + "Low Quartile": "Quartil inferior", + "Upper Quartile": "Quartil superior", + "Quartile": "Quartil", + "Date": "Data", + "Normal": "Normal", + "Median": "Mediana", + "Readings": "Valores", + "StDev": "DesvPadr", + "Daily stats report": "Relatório diário", + "Glucose Percentile report": "Relatório de Percentis de Glicemia", + "Glucose distribution": "Distribuição de glicemias", + "days total": "dias no total", + "Total per day": "dias no total", + "Overall": "Geral", + "Range": "intervalo", + "% of Readings": "% de valores", + "# of Readings": "N° de valores", + "Mean": "Média", + "Standard Deviation": "Desvio padrão", + "Max": "Máx", + "Min": "Mín", + "A1c estimation*": "HbA1c estimada*", + "Weekly Success": "Resultados semanais", + "There is not sufficient data to run this report. Select more days.": "Não há dados suficientes para executar este relatório. Selecione mais dias.", + "Using stored API secret hash": "Usando o hash de API existente", + "No API secret hash stored yet. You need to enter API secret.": "Nenhum hash secreto da API armazenado ainda. Você precisa digitar o segredo da API.", + "Database loaded": "Banco de dados carregado", + "Error: Database failed to load": "Erro: Banco de dados não carregado", + "Error": "Erro", + "Create new record": "Criar novo registro", + "Save record": "Salvar registro", + "Portions": "Porções", + "Unit": "Unidade", + "GI": "IG", + "Edit record": "Editar registro", + "Delete record": "Apagar registro", + "Move to the top": "Mover para o topo", + "Hidden": "Oculto", + "Hide after use": "Ocultar após uso", + "Your API secret must be at least 12 characters long": "Seu segredo de API deve conter no mínimo 12 caracteres", + "Bad API secret": "Segredo de API incorreto", + "API secret hash stored": "Segredo de API guardado", + "Status": "Estado", + "Not loaded": "Não carregado", + "Food Editor": "Editor de alimentos", + "Your database": "Seu banco de dados", + "Filter": "Filtro", + "Save": "Salvar", + "Clear": "Apagar", + "Record": "Gravar", + "Quick picks": "Seleção rápida", + "Show hidden": "Mostrar ocultos", + "Your API secret or token": "Suq senha do API ou token", + "Remember this device. (Do not enable this on public computers.)": "Lembrar deste dispositivo. (Não ative isso em computadores de acesso público.)", + "Treatments": "Procedimentos", + "Time": "Hora", + "Event Type": "Tipo de evento", + "Blood Glucose": "Glicemia", + "Entered By": "Inserido por", + "Delete this treatment?": "Apagar este procedimento?", + "Carbs Given": "Carboidratos", + "Insulin Given": "Insulina", + "Event Time": "Hora do evento", + "Please verify that the data entered is correct": "Favor verificar se os dados estão corretos", + "BG": "Glicemia", + "Use BG correction in calculation": "Usar correção de glicemia nos cálculos", + "BG from CGM (autoupdated)": "Glicemia do sensor (Automático)", + "BG from meter": "Glicemia do glicosímetro", + "Manual BG": "Glicemia Manual", + "Quickpick": "Seleção rápida", + "or": "ou", + "Add from database": "Adicionar do banco de dados", + "Use carbs correction in calculation": "Usar correção com carboidratos no cálculo", + "Use COB correction in calculation": "Usar correção de COB no cálculo", + "Use IOB in calculation": "Usar IOB no cálculo", + "Other correction": "Outra correção", + "Rounding": "Arredondamento", + "Enter insulin correction in treatment": "Inserir correção com insulina no tratamento", + "Insulin needed": "Insulina necessária", + "Carbs needed": "Carboidratos necessários", + "Carbs needed if Insulin total is negative value": "Carboidratos necessários se Insulina total for negativa", + "Basal rate": "Taxa basal", + "60 minutes earlier": "60 min antes", + "45 minutes earlier": "45 min antes", + "30 minutes earlier": "30 min antes", + "20 minutes earlier": "20 min antes", + "15 minutes earlier": "15 min antes", + "Time in minutes": "Tempo em minutos", + "15 minutes later": "15 min depois", + "20 minutes later": "20 min depois", + "30 minutes later": "30 min depois", + "45 minutes later": "45 min depois", + "60 minutes later": "60 min depois", + "Additional Notes, Comments": "Notas adicionais e comentários", + "RETRO MODE": "Modo Retrospectivo", + "Now": "Agora", + "Other": "Outro", + "Submit Form": "Enviar formulário", + "Profile Editor": "Editor de perfil", + "Reports": "Relatórios", + "Add food from your database": "Incluir alimento do seu banco de dados", + "Reload database": "Recarregar banco de dados", + "Add": "Adicionar", + "Unauthorized": "Não autorizado", + "Entering record failed": "Entrada de registro falhou", + "Device authenticated": "Dispositivo autenticado", + "Device not authenticated": "Dispositivo não autenticado", + "Authentication status": "Status de autenticação", + "Authenticate": "Autenticar", + "Remove": "Remover", + "Your device is not authenticated yet": "Seu dispositivo ainda não foi autenticado", + "Sensor": "Sensor", + "Finger": "Ponta de dedo", + "Manual": "Manual", + "Scale": "Escala", + "Linear": "Linear", + "Logarithmic": "Logarítmica", + "Logarithmic (Dynamic)": "Logarítmica (Dinâmica)", + "Insulin-on-Board": "Insulina ativa", + "Carbs-on-Board": "Carboidratos ativos", + "Bolus Wizard Preview": "Ajuda de bolus", + "Value Loaded": "Valores carregados", + "Cannula Age": "Idade da Cânula (ICAT)", + "Basal Profile": "Perfil de Basal", + "Silence for 30 minutes": "Silenciar por 30 minutos", + "Silence for 60 minutes": "Silenciar por 60 minutos", + "Silence for 90 minutes": "Silenciar por 90 minutos", + "Silence for 120 minutes": "Silenciar por 120 minutos", + "Settings": "Ajustes", + "Units": "Unidades", + "Date format": "Formato de data", + "12 hours": "12 horas", + "24 hours": "24 horas", + "Log a Treatment": "Registre um tratamento", + "BG Check": "Medida de glicemia", + "Meal Bolus": "Bolus de refeição", + "Snack Bolus": "Bolus de lanche", + "Correction Bolus": "Bolus de correção", + "Carb Correction": "Correção com carboidrato", + "Note": "Nota", + "Question": "Pergunta", + "Exercise": "Exercício", + "Pump Site Change": "Troca de catéter", + "CGM Sensor Start": "Início de sensor", + "CGM Sensor Stop": "Parar sensor de glicose", + "CGM Sensor Insert": "Troca de sensor", + "Sensor Code": "Código de Sensor", + "Transmitter ID": "ID do transmissor", + "Dexcom Sensor Start": "Início de sensor", + "Dexcom Sensor Change": "Troca de sensor", + "Insulin Cartridge Change": "Troca de reservatório de insulina", + "D.A.D. Alert": "Alerta de cão sentinela de diabetes", + "Glucose Reading": "Valor de glicemia", + "Measurement Method": "Método de medida", + "Meter": "Glicosímetro", + "Amount in grams": "Quantidade em gramas", + "Amount in units": "Quantidade em unidades", + "View all treatments": "Visualizar todos os procedimentos", + "Enable Alarms": "Ativar alarmes", + "Pump Battery Change": "Bateria da bomba de infusão de insulina descarregada", + "Pump Battery Age": "Pump Battery Age", + "Pump Battery Low Alarm": "Alarme de bateria baixa da bomba de infusão de insulina", + "Pump Battery change overdue!": "Mudança de bateria da bomba atrasada!", + "When enabled an alarm may sound.": "Quando ativado, um alarme poderá soar", + "Urgent High Alarm": "URGENTE: Alarme de glicemia alta", + "High Alarm": "Alarme de glicemia alta", + "Low Alarm": "Alarme de glicemia baixa", + "Urgent Low Alarm": "URGENTE: Alarme de glicemia baixa", + "Stale Data: Warn": "Dados antigos: alerta", + "Stale Data: Urgent": "Dados antigos: Urgente", + "mins": "min", + "Night Mode": "Modo noturno", + "When enabled the page will be dimmed from 10pm - 6am.": "Se ativado, a página será escurecida entre 22h e 6h", + "Enable": "Ativar", + "Show Raw BG Data": "Mostrar dados de glicemia não processados", + "Never": "Nunca", + "Always": "Sempre", + "When there is noise": "Quando houver ruído", + "When enabled small white dots will be displayed for raw BG data": "Se ativado, pontos brancos representarão os dados de glicemia não processados", + "Custom Title": "Customizar Título", + "Theme": "tema", + "Default": "Padrão", + "Colors": "Colorido", + "Colorblind-friendly colors": "Cores para daltônicos", + "Reset, and use defaults": "Zerar e usar padrões", + "Calibrations": "Calibraçôes", + "Alarm Test / Smartphone Enable": "Testar Alarme / Ativar Smartphone", + "Bolus Wizard": "Ajuda de bolus", + "in the future": "no futuro", + "time ago": "tempo atrás", + "hr ago": "h atrás", + "hrs ago": "h atrás", + "min ago": "min atrás", + "mins ago": "min atrás", + "day ago": "dia atrás", + "days ago": "dias atrás", + "long ago": "muito tempo atrás", + "Clean": "Limpo", + "Light": "Leve", + "Medium": "Médio", + "Heavy": "Pesado", + "Treatment type": "Tipo de tratamento", + "Raw BG": "Glicemia sem processamento", + "Device": "Dispositivo", + "Noise": "Ruído", + "Calibration": "Calibração", + "Show Plugins": "Mostrar les Plugins", + "About": "Sobre", + "Value in": "Valor em", + "Carb Time": "Hora do carboidrato", + "Language": "Língua", + "Add new": "Adicionar novo", + "g": "g", + "ml": "mL", + "pcs": "pçs", + "Drag&drop food here": "Arraste e coloque alimentos aqui", + "Care Portal": "Portal de Atendimento", + "Medium/Unknown": "Médio/Desconhecido", + "IN THE FUTURE": "NO FUTURO", + "Order": "Ordenar", + "oldest on top": "mais antigos no topo", + "newest on top": "Mais recentes no topo", + "All sensor events": "Todos os eventos de sensor", + "Remove future items from mongo database": "Remover itens futuro da base de dados mongo", + "Find and remove treatments in the future": "Encontrar e remover tratamentos futuros", + "This task find and remove treatments in the future.": "Este comando encontra e remove tratamentos futuros", + "Remove treatments in the future": "Remover tratamentos futuros", + "Find and remove entries in the future": "Encontrar e remover entradas futuras", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "Este comando procura e remove dados de sensor futuros criados por um uploader com data ou horário errados.", + "Remove entries in the future": "Remover entradas futuras", + "Loading database ...": "Carregando banco de dados ...", + "Database contains %1 future records": "O banco de dados contém %1 registros futuros", + "Remove %1 selected records?": "Remover os %1 registros selecionados?", + "Error loading database": "Erro ao carregar danco de dados", + "Record %1 removed ...": "Registro %1 removido ...", + "Error removing record %1": "Erro ao remover registro %1", + "Deleting records ...": "Apagando registros ...", + "%1 records deleted": "%1 Registros excluídos", + "Clean Mongo status database": "Limpar banco de dados de status no Mongo", + "Delete all documents from devicestatus collection": "Apagar todos os documentos da coleção devicestatus", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "Este comando remove todos os documentos da coleção devicestatus. Útil quando o status da bateria do uploader não é atualizado corretamente.", + "Delete all documents": "Apagar todos os documentos", + "Delete all documents from devicestatus collection?": "Apagar todos os documentos da coleção devicestatus?", + "Database contains %1 records": "O banco de dados contém %1 registros", + "All records removed ...": "Todos os registros foram removidos ...", + "Delete all documents from devicestatus collection older than 30 days": "Excluir todos os documentos da coleção de dispositivos mais antigos que 30 dias", + "Number of Days to Keep:": "Numero de dias mantidos:", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "Esta tarefa remove todos os documentos da coleção do dispositivo que são mais antigos do que 30 dias. Útil quando o status da bateria do carregador não é atualizado corretamente.", + "Delete old documents from devicestatus collection?": "Excluir documentos antigos da coleção do dispositivo?", + "Clean Mongo entries (glucose entries) database": "Limpar entradas (entradas de glicose) do banco de dados Mongo", + "Delete all documents from entries collection older than 180 days": "Excluir todos os documentos da coleção de entradas mais antigos que 180 dias", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Esta tarefa remove todos os documentos da coleção de entradas que são mais antigos do que 180 dias. Útil quando o status da bateria não é atualizado corretamente.", + "Delete old documents": "Apagar documentos antigos", + "Delete old documents from entries collection?": "Excluir documentos antigos da coleção de entradas?", + "%1 is not a valid number": "%1 não é um número válido", + "%1 is not a valid number - must be more than 2": "%1 não é um número válido - numero deve ser maior que 2", + "Clean Mongo treatments database": "Limpar banco de dados de tratamentos no Mongo", + "Delete all documents from treatments collection older than 180 days": "Excluir todos os documentos da coleção de tratamentos mais antigos que 180 dias", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Esta tarefa remove todos os documentos da coleção de tratamentos que são mais antigos do que 180 dias. Útil quando o status da bateria não é atualizado corretamente.", + "Delete old documents from treatments collection?": "Apagar todos os documentos da coleção devicestatus?", + "Admin Tools": "Ferramentas de administração", + "Nightscout reporting": "Relatórios do Nightscout", + "Cancel": "Cancelar", + "Edit treatment": "Editar tratamento", + "Duration": "Duração", + "Duration in minutes": "Duração em minutos", + "Temp Basal": "Basal Temporária", + "Temp Basal Start": "Início da Basal Temporária", + "Temp Basal End": "Fim de Basal Temporária", + "Percent": "Porcento", + "Basal change in %": "Mudança de basal em %", + "Basal value": "Valor da basal", + "Absolute basal value": "Valor absoluto da basal", + "Announcement": "Aviso", + "Loading temp basal data": "Carregando os dados de basal temporária", + "Save current record before changing to new?": "Salvar o registro atual antes de mudar para um novo?", + "Profile Switch": "Troca de perfil", + "Profile": "Perfil", + "General profile settings": "Configurações de perfil gerais", + "Title": "Título", + "Database records": "Registros do banco de dados", + "Add new record": "Adicionar novo registro", + "Remove this record": "Remover este registro", + "Clone this record to new": "Duplicar este registro como novo", + "Record valid from": "Registro válido desde", + "Stored profiles": "Perfis guardados", + "Timezone": "Fuso horário", + "Duration of Insulin Activity (DIA)": "Duração da Atividade da Insulina (DIA)", + "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.": "Representa a tempo típico durante o qual a insulina tem efeito. Varia de acordo com o paciente e tipo de insulina. Tipicamente 3-4 horas para a maioria das insulinas usadas em bombas e dos pacientes. Algumas vezes chamada de tempo de vida da insulina", + "Insulin to carb ratio (I:C)": "Relação Insulina-Carboidrato (I:C)", + "Hours:": "Horas:", + "hours": "horas", + "g/hour": "g/hora", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "g de carboidrato por unidade de insulina. A razão de quantos gramas de carboidrato são processados por cada unidade de insulina.", + "Insulin Sensitivity Factor (ISF)": "Fator de Sensibilidade da Insulina (ISF)", + "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "mg/dL ou mmol/L por unidade de insulina. A razão entre queda glicêmica e cada unidade de insulina de correção administrada.", + "Carbs activity / absorption rate": "Atividade dos carboidratos / taxa de absorção", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "Gramas por unidade de tempo. Representa a mudança em COB por unidade de tempo, bem como a quantidade de carboidratos que deve ter efeito durante esse período de tempo. Absorção de carboidrato / curvas de atividade são menos conhecidas que atividade de insulina, mas podem ser aproximadas usando um atraso inicial seguido de uma taxa de absorção constante (g/h). ", + "Basal rates [unit/hour]": "Taxas de basal [unidades/hora]", + "Target BG range [mg/dL,mmol/L]": "Meta de glicemia [mg/dL, mmol/L]", + "Start of record validity": "Início da validade dos dados", + "Icicle": "Inverso", + "Render Basal": "Renderizar basal", + "Profile used": "Perfil utilizado", + "Calculation is in target range.": "O cálculo está dentro da meta", + "Loading profile records ...": "Carregando dados do perfil ...", + "Values loaded.": "Valores carregados.", + "Default values used.": "Valores padrão em uso.", + "Error. Default values used.": "Erro. Valores padrão em uso.", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "Os intervalos de tempo da meta inferior e da meta superior não conferem. Os valores padrão serão restaurados.", + "Valid from:": "Válido desde:", + "Save current record before switching to new?": "Salvar os dados atuais antes de mudar para um novo?", + "Add new interval before": "Adicionar novo intervalo antes de", + "Delete interval": "Apagar intervalo", + "I:C": "I:C", + "ISF": "ISF", + "Combo Bolus": "Bolus duplo", + "Difference": "Diferença", + "New time": "Novo horário", + "Edit Mode": "Modo de edição", + "When enabled icon to start edit mode is visible": "Quando ativado, o ícone iniciar modo de edição estará visível", + "Operation": "Operação", + "Move": "Mover", + "Delete": "Apagar", + "Move insulin": "Mover insulina", + "Move carbs": "Mover carboidratos", + "Remove insulin": "Remover insulina", + "Remove carbs": "Remover carboidratos", + "Change treatment time to %1 ?": "Alterar horário do tratamento para %1 ?", + "Change carbs time to %1 ?": "Alterar horário do carboidrato para %1 ?", + "Change insulin time to %1 ?": "Alterar horário da insulina para %1 ?", + "Remove treatment ?": "Remover tratamento?", + "Remove insulin from treatment ?": "Remover insulina do tratamento?", + "Remove carbs from treatment ?": "Remover carboidratos do tratamento?", + "Rendering": "Renderizando", + "Loading OpenAPS data of": "Carregando dados de OpenAPS de", + "Loading profile switch data": "Carregando dados de troca de perfil", + "Redirecting you to the Profile Editor to create a new profile.": "Configuração de perfil incorreta. \nNão há perfil definido para mostrar o horário. \nRedirecionando para o editor de perfil para criar um perfil novo.", + "Pump": "Bomba", + "Sensor Age": "Idade do sensor", + "Insulin Age": "Idade da insulina", + "Temporary target": "Meta temporária", + "Reason": "Razão", + "Eating soon": "Refeição em breve", + "Top": "Superior", + "Bottom": "Inferior", + "Activity": "Atividade", + "Targets": "Metas", + "Bolus insulin:": "Insulina de bolus", + "Base basal insulin:": "Insulina basal programada:", + "Positive temp basal insulin:": "Insulina basal temporária positiva:", + "Negative temp basal insulin:": "Insulina basal temporária negativa:", + "Total basal insulin:": "Insulina basal total:", + "Total daily insulin:": "Insulina diária total:", + "Unable to save Role": "Não foi possível salvar a função", + "Unable to delete Role": "Não foi possível apagar a Função", + "Database contains %1 roles": "Banco de dados contém %1 Funções", + "Edit Role": "Editar Função", + "admin, school, family, etc": "Administrador, escola, família, etc", + "Permissions": "Permissões", + "Are you sure you want to delete: ": "Tem certeza de que deseja apagar:", + "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.": "Cada função terá uma ou mais permissões. A permissão * é um wildcard, permissões são uma hierarquia utilizando * como um separador.", + "Add new Role": "Adicionar novo Papel", + "Roles - Groups of People, Devices, etc": "Funções - grupos de pessoas, dispositivos, etc", + "Edit this role": "Editar esta Função", + "Admin authorized": "Administrador autorizado", + "Subjects - People, Devices, etc": "Assunto - Pessoas, dispositivos, etc", + "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "Cada assunto terá um único token de acesso e uma ou mais Funções. Clique no token de acesso para abrir uma nova visualização com o assunto selecionado. Este link secreto poderá então ser compartilhado", + "Add new Subject": "Adicionar novo assunto", + "Unable to save Subject": "Não foi possível salvar o assunto", + "Unable to delete Subject": "Impossível apagar assunto", + "Database contains %1 subjects": "Banco de dados contém %1 assuntos", + "Edit Subject": "Editar assunto", + "person, device, etc": "Pessoa, dispositivo, etc", + "role1, role2": "papel1, papel2", + "Edit this subject": "Editar esse assunto", + "Delete this subject": "Apagar esse assunto", + "Roles": "Papéis", + "Access Token": "Token de acesso", + "hour ago": "hora atrás", + "hours ago": "horas atrás", + "Silence for %1 minutes": "Silencir por %1 minutos", + "Check BG": "Verifique a glicemia", + "BASAL": "BASAL", + "Current basal": "Basal atual", + "Sensitivity": "Fator de sensibilidade", + "Current Carb Ratio": "Relação insulina:carboidrato atual", + "Basal timezone": "Fuso horário da basal", + "Active profile": "Perfil ativo", + "Active temp basal": "Basal temporária ativa", + "Active temp basal start": "Início da basal temporária ativa", + "Active temp basal duration": "Duração de basal temporária ativa", + "Active temp basal remaining": "Basal temporária ativa restante", + "Basal profile value": "Valor do perfil basal", + "Active combo bolus": "Bolus duplo em atividade", + "Active combo bolus start": "Início do bolus duplo em atividade", + "Active combo bolus duration": "Duração de bolus duplo em atividade", + "Active combo bolus remaining": "Restante de bolus duplo em atividade", + "BG Delta": "Diferença de glicemia", + "Elapsed Time": "Tempo transcorrido", + "Absolute Delta": "Diferença absoluta", + "Interpolated": "Interpolado", + "BWP": "Ajuda de bolus", + "Urgent": "Urgente", + "Warning": "Aviso", + "Info": "Informações", + "Lowest": "Mais baixo", + "Snoozing high alarm since there is enough IOB": "Ignorar alarme de hiper em função de IOB suficiente", + "Check BG, time to bolus?": "Meça a glicemia, hora de bolus de correção?", + "Notice": "Nota", + "required info missing": "Informação essencial faltando", + "Insulin on Board": "Insulina ativa", + "Current target": "Meta atual", + "Expected effect": "Efeito esperado", + "Expected outcome": "Resultado esperado", + "Carb Equivalent": "Equivalente em carboidratos", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "Excesso de insulina equivalente a %1U além do necessário para atingir a meta inferior, sem levar em conta carboidratos", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "Excesso de insulina equivalente a %1U além do necessário para atingir a meta inferior. ASSEGURE-SE DE QUE A IOB ESTEJA COBERTA POR CARBOIDRATOS", + "%1U reduction needed in active insulin to reach low target, too much basal?": "Necessária redução de %1U na insulina ativa para atingir a meta inferior, excesso de basal?", + "basal adjustment out of range, give carbs?": "ajuste de basal fora da meta, dar carboidrato?", + "basal adjustment out of range, give bolus?": "ajuste de basal fora da meta, dar bolus de correção?", + "above high": "acima do limite superior", + "below low": "abaixo do limite inferior", + "Projected BG %1 target": "Meta de glicemia estimada %1", + "aiming at": "meta", + "Bolus %1 units": "Bolus %1 unidades", + "or adjust basal": "ou ajuste basal", + "Check BG using glucometer before correcting!": "Verifique glicemia de ponta de dedo antes de corrigir!", + "Basal reduction to account %1 units:": "Redução de basal para compensar %1 unidades:", + "30m temp basal": "Basal temp 30m", + "1h temp basal": "Basal temp 1h", + "Cannula change overdue!": "Substituição de catéter vencida!", + "Time to change cannula": "Hora de subistituir catéter", + "Change cannula soon": "Substituir catéter em breve", + "Cannula age %1 hours": "Idade do catéter %1 horas", + "Inserted": "Inserido", + "CAGE": "ICAT", + "COB": "COB", + "Last Carbs": "Último carboidrato", + "IAGE": "IddI", + "Insulin reservoir change overdue!": "Substituição de reservatório vencida!", + "Time to change insulin reservoir": "Hora de substituir reservatório", + "Change insulin reservoir soon": "Substituir reservatório em brave", + "Insulin reservoir age %1 hours": "Idade do reservatório %1 horas", + "Changed": "Substituído", + "IOB": "IOB", + "Careportal IOB": "IOB do Careportal", + "Last Bolus": "Último bolus", + "Basal IOB": "IOB basal", + "Source": "Fonte", + "Stale data, check rig?": "Dados antigos, verificar uploader?", + "Last received:": "Último recebido:", + "%1m ago": "%1m atrás", + "%1h ago": "%1h atrás", + "%1d ago": "%1d atrás", + "RETRO": "RETRO", + "SAGE": "IddS", + "Sensor change/restart overdue!": "Substituição/reinício de sensor vencido", + "Time to change/restart sensor": "Hora de substituir/reiniciar sensor", + "Change/restart sensor soon": "Mudar/reiniciar sensor em breve", + "Sensor age %1 days %2 hours": "Idade do sensor %1 dias %2 horas", + "Sensor Insert": "Inserção de sensor", + "Sensor Start": "Início de sensor", + "days": "dias", + "Insulin distribution": "Distribuição de insulina", + "To see this report, press SHOW while in this view": "Para ver este relatório, pressione MOSTRAR neste modo de exibição", + "AR2 Forecast": "Previsão de AR2", + "OpenAPS Forecasts": "Previsões do OpenAPS", + "Temporary Target": "Alvo temporário", + "Temporary Target Cancel": "Cancelar alvo temporário", + "OpenAPS Offline": "OpenAPS Offline", + "Profiles": "Perfis", + "Time in fluctuation": "Tempo em flutuação", + "Time in rapid fluctuation": "Tempo em flutuação rápida", + "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:": "Esta é apenas uma estimativa grosseira que pode ser muito imprecisa e não substitui o verdadeiro exame de sangue. A fórmula utilizada é retirada de:", + "Filter by hours": "Filtrar por horas", + "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.": "Tempo de flutuação e tempo em flutuação rápida medem o percentual de tempo durante o período examinado, durante o qual a glicose do sangue tem mudado relativamente rápida ou rapidamente. Valores mais baixos são melhores.", + "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.": "Mudança Diária Média é uma soma do valor absoluto de todas as medicões de glicose para o período examinado, dividido pelo número de dias. Mais baixo é melhor.", + "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "Mudança Diária Média é uma soma do valor absoluto de todas as medicões de glicose para o período examinado, dividido pelo número de dias. Mais baixo é melhor.", + "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "O RMS fora do intervalo é calculado pela raiz quadrada da distância fora do intervalo para todas as leituras de glicemia para o período examinado. somando as leituras, dividindo pela contagem e pegando a raiz quadrada. Esta métrica é semelhante à porcentagem dentro do intervalo, mas os pesos nas leituras mais altas. Os valores mais baixos são melhores.", + "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">pode ser encontrado aqui.", + "Mean Total Daily Change": "Mudança Total Diária Média", + "Mean Hourly Change": "Mudança média de hora", + "FortyFiveDown": "ligeira descida", + "FortyFiveUp": "ligeira subida", + "Flat": "em espera", + "SingleUp": "subindo", + "SingleDown": "descendo", + "DoubleDown": "queda rápida", + "DoubleUp": "subida rápida", + "virtAsstUnknown": "Esse valor é desconhecido no momento. Por favor, veja o site do Nightscout para mais detalhes.", + "virtAsstTitleAR2Forecast": "Previsão de AR2", + "virtAsstTitleCurrentBasal": "Basal Atual", + "virtAsstTitleCurrentCOB": "COB Atual", + "virtAsstTitleCurrentIOB": "IOB Atual", + "virtAsstTitleLaunch": "Bem-vindo ao Nightscout", + "virtAsstTitleLoopForecast": "Probabilidade do loop", + "virtAsstTitleLastLoop": "Ultimo Loop", + "virtAsstTitleOpenAPSForecast": "Previsões do OpenAPS", + "virtAsstTitlePumpReservoir": "Insulina Restante", + "virtAsstTitlePumpBattery": "Bateria da Bomba", + "virtAsstTitleRawBG": "Glicemia atual", + "virtAsstTitleUploaderBattery": "Carregador de informacao da Bateria", + "virtAsstTitleCurrentBG": "Glicemia atual", + "virtAsstTitleFullStatus": "Status completo", + "virtAsstTitleCGMMode": "Modo CGM", + "virtAsstTitleCGMStatus": "Status do CGM", + "virtAsstTitleCGMSessionAge": "Idade da Sessão do CGM", + "virtAsstTitleCGMTxStatus": "Status do Transmissor CGM", + "virtAsstTitleCGMTxAge": "Idade do Transmissor CGM", + "virtAsstTitleCGMNoise": "Ruído de CGM", + "virtAsstTitleDelta": "Diferenca no nivel de glicemia", + "virtAsstStatus": "%1 e %2 a partir de %3.", + "virtAsstBasal": "%1 basal atual é de %2 unidades por hora", + "virtAsstBasalTemp": "%1 basal temp de %2 unidades por hora terminará %3", + "virtAsstIob": "e você tem %1 insulina a bordo.", + "virtAsstIobIntent": "Você tem %1 insulina a bordo", + "virtAsstIobUnits": "%1 unidades de", + "virtAsstLaunch": "O que você gostaria de verificar no Nightscout?", + "virtAsstPreamble": "Seu/Sua", + "virtAsstPreamble3person": "%1 possui uma ", + "virtAsstNoInsulin": "não", + "virtAsstUploadBattery": "Sua carga de bateria está às %1", + "virtAsstReservoir": "Você tem %1 unidades restantes", + "virtAsstPumpBattery": "Sua bateria de bomba está às %1 %2", + "virtAsstUploaderBattery": "Your uploader battery is at %1", + "virtAsstLastLoop": "O último loop de sucesso foi %1", + "virtAsstLoopNotAvailable": "O plugin Loop parece não estar ativado", + "virtAsstLoopForecastAround": "De acordo com a previsão do loop você deverá estar em torno de %1 durante o próximo %2", + "virtAsstLoopForecastBetween": "De acordo com a previsão do loop você deverá estar entre %1 e %2 durante o próximo %3", + "virtAsstAR2ForecastAround": "De acordo com a previsão do AR2, você deverá estar em torno de %1 durante o próximo %2", + "virtAsstAR2ForecastBetween": "According to the AR2 forecast you are expected to be between %1 and %2 over the next %3", + "virtAsstForecastUnavailable": "Não é possível fazer previsão com os dados disponíveis", + "virtAsstRawBG": "Seu BG é %1", + "virtAsstOpenAPSForecast": "O BG Eventual do OpenAPS é %1", + "virtAsstCob3person": "%1 tem %2 carboidratos ativos", + "virtAsstCob": "Voce tem %1 carboidratos ativos", + "virtAsstCGMMode": "Seu modo CGM era %1 a partir de %2.", + "virtAsstCGMStatus": "Seu status do CGM era %1 a partir de %2.", + "virtAsstCGMSessAge": "Sua sessão do CGM está ativa por %1 dias e %2 horas.", + "virtAsstCGMSessNotStarted": "Neste momento não existe uma sessão activa do CGM.", + "virtAsstCGMTxStatus": "Seu status do transmissor CGM era de %1 a partir de %2.", + "virtAsstCGMTxAge": "Seu transmissor CGM tem %1 dias.", + "virtAsstCGMNoise": "Seu ruído CGM era de %1 a partir de %2.", + "virtAsstCGMBattOne": "Sua bateria do CGM estava com %1 volts a partir de %2.", + "virtAsstCGMBattTwo": "Os seus níveis de bateria do CGM foram de %1 volts e %2 volts as %3.", + "virtAsstDelta": "Seu delta estava %1 entre %2 e %3.", + "virtAsstDeltaEstimated": "Your estimated delta was %1 between %2 and %3.", + "virtAsstUnknownIntentTitle": "Unknown Intent", + "virtAsstUnknownIntentText": "I'm sorry, I don't know what you're asking for.", + "Fat [g]": "Fat [g]", + "Protein [g]": "Protein [g]", + "Energy [kJ]": "Energy [kJ]", + "Clock Views:": "Clock Views:", + "Clock": "Clock", + "Color": "Color", + "Simple": "Simple", + "TDD average": "TDD average", + "Bolus average": "Bolus average", + "Basal average": "Basal average", + "Base basal average:": "Base basal average:", + "Carbs average": "Carbs average", + "Eating Soon": "Eating Soon", + "Last entry {0} minutes ago": "Last entry {0} minutes ago", + "change": "change", + "Speech": "Speech", + "Target Top": "Target Top", + "Target Bottom": "Target Bottom", + "Canceled": "Canceled", + "Meter BG": "Meter BG", + "predicted": "prevista", + "future": "future", + "ago": "ago", + "Last data received": "Last data received", + "Clock View": "Clock View", + "Protein": "Protein", + "Fat": "Fat", + "Protein average": "Protein average", + "Fat average": "Fat average", + "Total carbs": "Total carbs", + "Total protein": "Total protein", + "Total fat": "Total fat", + "Database Size": "Database Size", + "Database Size near its limits!": "Database Size near its limits!", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!", + "Database file size": "Database file size", + "%1 MiB of %2 MiB (%3%)": "%1 MiB of %2 MiB (%3%)", + "Data size": "Data size", + "virtAsstDatabaseSize": "%1 MiB. That is %2% of available database space.", + "virtAsstTitleDatabaseSize": "Database file size", + "Carbs/Food/Time": "Carbs/Food/Time", + "You have administration messages": "You have administration messages", + "Admin messages in queue": "Admin messages in queue", + "Queue empty": "Queue empty", + "There are no admin messages in queue": "There are no admin messages in queue", + "Please sign in using the API_SECRET to see your administration messages": "Please sign in using the API_SECRET to see your administration messages", + "Reads enabled in default permissions": "Reads enabled in default permissions", + "Data reads enabled": "Data reads enabled", + "Data writes enabled": "Data writes enabled", + "Data writes not enabled": "Data writes not enabled", + "Color prediction lines": "Color prediction lines", + "Release Notes": "Release Notes", + "Check for Updates": "Check for Updates", + "Open Source": "Open Source", + "Nightscout Info": "Nightscout Info", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.", + "Note that time shift is available only when viewing multiple days.": "Note that time shift is available only when viewing multiple days.", + "Please select a maximum of two weeks duration and click Show again.": "Please select a maximum of two weeks duration and click Show again.", + "Show profiles table": "Show profiles table", + "Show predictions": "Show predictions", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Timeshift on meals larger than %1 g carbs consumed between %2 and %3", + "Previous": "Anterior", + "Previous day": "Dia anterior", + "Next day": "Próximo Dia", + "Next": "Próximo", + "Temp basal delta": "Variacao basal temporária", + "Authorized by token": "Authorized by token", + "Auth role": "Auth role", + "view without token": "view without token", + "Remove stored token": "Remove stored token", + "Weekly Distribution": "Weekly Distribution", + "Failed authentication": "Failed authentication", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?", + "Default (with leading zero and U)": "Padrão (com zero a esquerda e U)", + "Concise (with U, without leading zero)": "Conciso (com U, sem zero à esquerda)", + "Minimal (without leading zero and U)": "Mínimo (sem zero a esquerda e U)", + "Small Bolus Display": "Tela Pequena de Bolus", + "Large Bolus Display": "Tela Grande de Bolus", + "Bolus Display Threshold": "Limite de exibição de Bolus", + "%1 U and Over": "%1 U e acima", + "Event repeated %1 times.": "Event repeated %1 times.", + "minutes": "minutes", + "Last recorded %1 %2 ago.": "Last recorded %1 %2 ago.", + "Security issue": "Security issue", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.", + "less than 1": "less than 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system." +} diff --git a/translations/pt_PT.json b/translations/pt_PT.json new file mode 100644 index 00000000000..946df2e8006 --- /dev/null +++ b/translations/pt_PT.json @@ -0,0 +1,707 @@ +{ + "Listening on port": "À escuta no porto", + "Mo": "Seg", + "Tu": "Ter", + "We": "Qua", + "Th": "Qui", + "Fr": "Sex", + "Sa": "Sáb", + "Su": "Dom", + "Monday": "Segunda-feira", + "Tuesday": "Terça-feira", + "Wednesday": "Quarta-feira", + "Thursday": "Quinta-feira", + "Friday": "Sexta-feira", + "Saturday": "Sábado", + "Sunday": "Domingo", + "Category": "Categoria", + "Subcategory": "Subcategoria", + "Name": "Nome", + "Today": "Hoje", + "Last 2 days": "Últimos 2 dias", + "Last 3 days": "Últimos 3 dias", + "Last week": "Última semana", + "Last 2 weeks": "Últimas 2 semanas", + "Last month": "Último mês", + "Last 3 months": "Últimos 3 meses", + "From": "De", + "To": "Para", + "Notes": "Notas", + "Food": "Alimentos", + "Insulin": "Insulina", + "Carbs": "Hidratos", + "Notes contain": "Notas contêm", + "Target BG range bottom": "Alvo Inferior Glicose", + "top": "topo", + "Show": "Mostrar", + "Display": "Visualização", + "Loading": "A Carregar", + "Loading profile": "A Carregar Perfil", + "Loading status": "A Carregar Estado", + "Loading food database": "A Carregar Base de Dados de Alimentos", + "not displayed": "não mostrado", + "Loading CGM data of": "A Carregar Dados CGM de", + "Loading treatments data of": "A Carregar Dados Alimentos de", + "Processing data of": "A Processar Dados de", + "Portion": "Porção", + "Size": "Tamanho", + "(none)": "(nenhum)", + "None": "Nenhum", + "": "", + "Result is empty": "Resultado está vazio", + "Day to day": "Dia a dia", + "Week to week": "Semana a semana", + "Daily Stats": "Estatísticas Diárias", + "Percentile Chart": "Gráfico Percentil", + "Distribution": "Distribuição", + "Hourly stats": "Estatísticas por hora", + "netIOB stats": "Estatísticas netIOB", + "temp basals must be rendered to display this report": "basais temporárias devem ser renderizadas para apresentar este relatório", + "No data available": "Não há dados disponíveis", + "Low": "Hipo", + "In Range": "No Intervalo", + "Period": "Período", + "High": "Hiper", + "Average": "Média", + "Low Quartile": "Quartil Inferior", + "Upper Quartile": "Quartil Superior", + "Quartile": "Quartil", + "Date": "Data", + "Normal": "Normal", + "Median": "Mediana", + "Readings": "Leituras", + "StDev": "Desvio-Padrão", + "Daily stats report": "Relatório Estatísticas Diárias", + "Glucose Percentile report": "Relatório do Percentil da Glicose", + "Glucose distribution": "Distribuição da Glicose", + "days total": "total de dias", + "Total per day": "Total por dia", + "Overall": "Em Geral", + "Range": "Intervalo", + "% of Readings": "% de Leituras", + "# of Readings": "# de Leituras", + "Mean": "Média", + "Standard Deviation": "Desvio Padrão", + "Max": "Máx", + "Min": "Min", + "A1c estimation*": "Estimativa A1c*", + "Weekly Success": "Sucesso Semanal", + "There is not sufficient data to run this report. Select more days.": "Não há dados suficientes para executar este relatório. Seleccione mais dias.", + "Using stored API secret hash": "A usar o Hash API Secret armazenado", + "No API secret hash stored yet. You need to enter API secret.": "Nenhum hash API Secret foi armazenado ainda. Precisa introduzir o API Secret.", + "Database loaded": "Base de Dados foi carregada", + "Error: Database failed to load": "Erro: falha ao carregar Base de Dados", + "Error": "Erro", + "Create new record": "Criar novo registo", + "Save record": "Guardar registo", + "Portions": "Porções", + "Unit": "Unidade", + "GI": "IG", + "Edit record": "Editar registo", + "Delete record": "Eliminar registo", + "Move to the top": "Mover para o topo", + "Hidden": "Oculto", + "Hide after use": "Ocultar após uso", + "Your API secret must be at least 12 characters long": "A sua API Secret tem de ter pelo menos 12 caracteres", + "Bad API secret": "API Secret incorrecta", + "API secret hash stored": "Hash da API Secret armazenado", + "Status": "Estado", + "Not loaded": "Não carregado", + "Food Editor": "Editor de Alimentos", + "Your database": "Sua Base de Dados", + "Filter": "Filtro", + "Save": "Guardar", + "Clear": "Limpar", + "Record": "Gravar", + "Quick picks": "Escolhas rápidas", + "Show hidden": "Mostrar ocultos", + "Your API secret or token": "Sua API Secret ou token", + "Remember this device. (Do not enable this on public computers.)": "Lembrar este dispositivo. (Não active isto em computadores públicos.)", + "Treatments": "Tratamentos", + "Time": "Hora", + "Event Type": "Tipo de Evento", + "Blood Glucose": "Glicose no Sangue", + "Entered By": "Inserido Por", + "Delete this treatment?": "Eliminar este tratamento?", + "Carbs Given": "Hidratos Dados", + "Insulin Given": "Insulina Dada", + "Event Time": "Hora do Evento", + "Please verify that the data entered is correct": "Por favor, verifique se os dados inseridos estão correctos", + "BG": "Glicose", + "Use BG correction in calculation": "Usar Correcção Glicemia no cálculo", + "BG from CGM (autoupdated)": "Glicose do CGM (actualizado auto.)", + "BG from meter": "Glicose do medidor", + "Manual BG": "Glicose Manual", + "Quickpick": "Escolha Rápida", + "or": "ou", + "Add from database": "Adicionar da base de dados", + "Use carbs correction in calculation": "Usar Correcção Hidratos no Cálculo", + "Use COB correction in calculation": "Usar Correção COB no cálculo", + "Use IOB in calculation": "Usar IOB no cálculo", + "Other correction": "Outra correcção", + "Rounding": "Arredondamento", + "Enter insulin correction in treatment": "Inserir correcção de insulina no tratamento", + "Insulin needed": "Insulina necessária", + "Carbs needed": "Hidratos necessários", + "Carbs needed if Insulin total is negative value": "Hidratos necessários se o total da Insulina é negativo", + "Basal rate": "Taxa Basal", + "60 minutes earlier": "60 minutos antes", + "45 minutes earlier": "45 minutos antes", + "30 minutes earlier": "30 minutos antes", + "20 minutes earlier": "20 minutos antes", + "15 minutes earlier": "15 minutos antes", + "Time in minutes": "Tempo em minutos", + "15 minutes later": "15 minutos depois", + "20 minutes later": "20 minutos depois", + "30 minutes later": "30 minutos depois", + "45 minutes later": "45 minutos depois", + "60 minutes later": "60 minutos depois", + "Additional Notes, Comments": "Notas adicionais, Comentários", + "RETRO MODE": "MODO RETRO", + "Now": "Agora", + "Other": "Outro", + "Submit Form": "Enviar Formulário", + "Profile Editor": "Editor de Perfil", + "Reports": "Relatórios", + "Add food from your database": "Adicionar alimentos da sua base de dados", + "Reload database": "Recarregar base de dados", + "Add": "Adicionar", + "Unauthorized": "Não autorizado", + "Entering record failed": "Falha ao Inserir Registo", + "Device authenticated": "Dispositivo Autenticado", + "Device not authenticated": "Dispositivo Não Autenticado", + "Authentication status": "Estado de Autenticação", + "Authenticate": "Autenticar", + "Remove": "Remover", + "Your device is not authenticated yet": "Dispositivo ainda não está autenticado", + "Sensor": "Sensor", + "Finger": "Capilar", + "Manual": "Manual", + "Scale": "Escala", + "Linear": "Linear", + "Logarithmic": "Logarítmico", + "Logarithmic (Dynamic)": "Logarítmico (Dinâmico)", + "Insulin-on-Board": "Insulina-a-Bordo (IOB)", + "Carbs-on-Board": "Hidratos-a-Bordo (COB)", + "Bolus Wizard Preview": "Pré-Visualização do Assistente de Bólus", + "Value Loaded": "Valor Carregado", + "Cannula Age": "Idade Cânula", + "Basal Profile": "Perfil Basal", + "Silence for 30 minutes": "Silenciar por 30 minutos", + "Silence for 60 minutes": "Silenciar por 60 minutos", + "Silence for 90 minutes": "Silenciar por 90 minutos", + "Silence for 120 minutes": "Silenciar por 120 minutos", + "Settings": "Definições", + "Units": "Unidades", + "Date format": "Formato da Data", + "12 hours": "12 horas", + "24 hours": "24 horas", + "Log a Treatment": "Registar um Tratamento", + "BG Check": "Verificar Glicose", + "Meal Bolus": "Bólus Refeição", + "Snack Bolus": "Bólus Lanche", + "Correction Bolus": "Bólus Correcção", + "Carb Correction": "Correcção Hidratos", + "Note": "Nota", + "Question": "Questão", + "Exercise": "Exercício", + "Pump Site Change": "Mudança de Cateter", + "CGM Sensor Start": "Iniciar Sensor CGM", + "CGM Sensor Stop": "Parar Sensor CGM", + "CGM Sensor Insert": "Colocação Sensor CGM", + "Sensor Code": "Código do Sensor", + "Transmitter ID": "ID do Transmissor", + "Dexcom Sensor Start": "Iniciar Sensor Dexcom", + "Dexcom Sensor Change": "Troca do Sensor Dexcom", + "Insulin Cartridge Change": "Mudança do Cartucho de Insulina", + "D.A.D. Alert": "Alerta D.A.D. (Diabete Dog Alert)", + "Glucose Reading": "Leitura Glicose", + "Measurement Method": "Método de Medição", + "Meter": "Medidor", + "Amount in grams": "Quantidade em gramas", + "Amount in units": "Quantidade em unidades", + "View all treatments": "Ver todos os tratamentos", + "Enable Alarms": "Activar Alarmes", + "Pump Battery Change": "Troca de Bateria da Bomba", + "Pump Battery Age": "Idade Bateria da Bomba", + "Pump Battery Low Alarm": "Alarme de Bateria Fraca da Bomba", + "Pump Battery change overdue!": "Troca de Bateria da Bomba atrasada!", + "When enabled an alarm may sound.": "Quando activado um alarme pode soar.", + "Urgent High Alarm": "Alarme Muito Alto", + "High Alarm": "Alarme Hiper", + "Low Alarm": "Alarme Hipo", + "Urgent Low Alarm": "Alarme Muito Baixo", + "Stale Data: Warn": "Dados Antigos: Aviso", + "Stale Data: Urgent": "Dados Antigos: Urgente", + "mins": " mins", + "Night Mode": "Modo Nocturno", + "When enabled the page will be dimmed from 10pm - 6am.": "Quando activado, a página será escurecida das 22h - 7h.", + "Enable": "Activar", + "Show Raw BG Data": "Mostrar Dados em Bruto da Glicose", + "Never": "Nunca", + "Always": "Sempre", + "When there is noise": "Quando houver ruído", + "When enabled small white dots will be displayed for raw BG data": "Quando activado, pequenos pontos brancos serão exibidos para dados em bruto da glicose", + "Custom Title": "Título Personalizado", + "Theme": "Tema", + "Default": "Padrão", + "Colors": "Cores", + "Colorblind-friendly colors": "Cores para Daltónicos", + "Reset, and use defaults": "Repor, e usar os padrões", + "Calibrations": "Calibrações", + "Alarm Test / Smartphone Enable": "Alarme Teste / Smartphone Activado", + "Bolus Wizard": "Assistente de Bólus", + "in the future": "no futuro", + "time ago": "tempo atrás", + "hr ago": "hr atrás", + "hrs ago": "hrs atrás", + "min ago": "min atrás", + "mins ago": "mins atrás", + "day ago": "dia atrás", + "days ago": "dias atrás", + "long ago": "há muito tempo", + "Clean": "Limpar", + "Light": "Leve", + "Medium": "Médio", + "Heavy": "Forte", + "Treatment type": "Tipo de Tratamento", + "Raw BG": "Glicose em Bruto", + "Device": "Dispositivo", + "Noise": "Ruído", + "Calibration": "Calibração", + "Show Plugins": "Mostrar Plugins", + "About": "Acerca de", + "Value in": "Valor em", + "Carb Time": "Hora Hidrato", + "Language": "Idioma", + "Add new": "Adicionar novo", + "g": "g", + "ml": "ml", + "pcs": "pçs", + "Drag&drop food here": "Arrastar alimento para aqui", + "Care Portal": "Care Portal", + "Medium/Unknown": "Médio/Desconhecido", + "IN THE FUTURE": "NO FUTURO", + "Order": "Ordenar", + "oldest on top": "mais antigo no topo", + "newest on top": "mais novo no topo", + "All sensor events": "Todos os eventos do sensor", + "Remove future items from mongo database": "Remover itens futuros da base de dados mongo", + "Find and remove treatments in the future": "Localizar e remover tratamentos no futuro", + "This task find and remove treatments in the future.": "Esta tarefa localiza e remove tratamentos no futuro.", + "Remove treatments in the future": "Remover tratamentos no futuro", + "Find and remove entries in the future": "Localizar e remover entradas no futuro", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "Esta tarefa localiza e remove dados do CGM no futuro criados pelo emissor com data/hora errada.", + "Remove entries in the future": "Remover entradas no futuro", + "Loading database ...": "A carregar base de dados ...", + "Database contains %1 future records": "Base de Dados contém %1 registos futuros", + "Remove %1 selected records?": "Remover %1 registos seleccionados?", + "Error loading database": "Erro ao carregar base de dados", + "Record %1 removed ...": "Registo %1 removido...", + "Error removing record %1": "Erro ao remover registo %1", + "Deleting records ...": "A eliminar registos ...", + "%1 records deleted": "%1 registos eliminados", + "Clean Mongo status database": "Limpar Estado Base de Dados Mongo", + "Delete all documents from devicestatus collection": "Eliminar todos os documentos da colecção devicestatus", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "Esta tarefa remove todos os documentos da colecção do devicestatus. Útil quando o estado da bateria do emissor não é actualizado correctamente.", + "Delete all documents": "Eliminar todos os documentos", + "Delete all documents from devicestatus collection?": "Excluir todos os documentos da coleção devicestatus?", + "Database contains %1 records": "Base de dados contém %1 registos", + "All records removed ...": "Todos os registos removidos...", + "Delete all documents from devicestatus collection older than 30 days": "Eliminar todos os documentos da colecção devicestatus com mais de 30 dias", + "Number of Days to Keep:": "Número de Dias a Manter:", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "Esta tarefa remove todos os documentos da colecção devicestatus que são mais antigos do que 30 dias. Útil quando o estado da bateria do emissor não é actualizado correctamente.", + "Delete old documents from devicestatus collection?": "Eliminar documentos antigos da colecção devicestatus?", + "Clean Mongo entries (glucose entries) database": "Limpar entradas (entradas de glicose) na base de dados Mongo", + "Delete all documents from entries collection older than 180 days": "Eliminar todos os documentos da colecção de entradas com mais de 180 dias", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Esta tarefa remove todos os documentos da colecção de entradas que são mais antigos do que 180 dias. Útil quando o estado da bateria do emissor não é actualizado correctamente.", + "Delete old documents": "Eliminar documentos antigos", + "Delete old documents from entries collection?": "Eliminar documentos antigos da colecção de entradas?", + "%1 is not a valid number": "%1 não é um número válido", + "%1 is not a valid number - must be more than 2": "%1 não é um número válido - deve ser maior que 2", + "Clean Mongo treatments database": "Limpar base de dados de tratamentos Mongo", + "Delete all documents from treatments collection older than 180 days": "Eliminar todos os documentos da colecção de tratamentos com mais de 180 dias", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Esta tarefa remove todos os documentos da colecção de tratamentos que são mais antigos do que 180 dias. Útil quando o estado da bateria do emissor não é actualizado correctamente.", + "Delete old documents from treatments collection?": "Eliminar documentos antigos da colecção de tratamentos?", + "Admin Tools": "Ferramentas Admin", + "Nightscout reporting": "Relatório Nightscout", + "Cancel": "Cancelar", + "Edit treatment": "Editar tratamento", + "Duration": "Duração", + "Duration in minutes": "Duração em minutos", + "Temp Basal": "Basal Temp", + "Temp Basal Start": "Início Basal Temp", + "Temp Basal End": "Fim Basal Temp", + "Percent": "Percentagem", + "Basal change in %": "Mudança de Nasal em %", + "Basal value": "Valor da Basal", + "Absolute basal value": "Valor absoluto Basal", + "Announcement": "Anúncio", + "Loading temp basal data": "A carregar dados Basal Temp", + "Save current record before changing to new?": "Gravar o registo actual antes de alterar para novo?", + "Profile Switch": "Troca de Perfil", + "Profile": "Perfil", + "General profile settings": "Definições Gerais do Perfil", + "Title": "Título", + "Database records": "Registos Base de Dados", + "Add new record": "Adicionar novo registo", + "Remove this record": "Remover este registo", + "Clone this record to new": "Clonar este registo para o novo", + "Record valid from": "Registo válido de", + "Stored profiles": "Perfis armazenados", + "Timezone": "Fuso Horário", + "Duration of Insulin Activity (DIA)": "Duração de Insulina Activa (DIA)", + "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.": "Representa a duração típica sobre a qual a insulina tem efeito. Varia por paciente e por tipo de insulina. Normalmente 3-4 horas para a maioria das injecções de insulina e a maioria dos pacientes. Às vezes também chamado de duração da insulina activa.", + "Insulin to carb ratio (I:C)": "Insulina por Hidratos (I:HC)", + "Hours:": "Horas:", + "hours": "horas", + "g/hour": "g/hora", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "g hidratos por U insulina. A proporção de quantos gramas de hidratos são cobertos por cada U de insulina.", + "Insulin Sensitivity Factor (ISF)": "Factor Sensibilidade à Insulina (FSI)", + "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "mg/dL ou mmol/L por U insulina. A proporção de quanta Glicemia altera com cada U de insulina de correcção.", + "Carbs activity / absorption rate": "Hidratos actividade / taxa de absorção", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "gramas por unidade de tempo. Representa quer a alteração do COB por unidade de tempo, bem como a quantidade de hidratos de carbono que devem ter efeito ao longo do tempo. As curvas de absorção de hidratos/actividade são menos bem compreendidas do que as de actuação da insulina, mas podem ser aproximadas usando um atraso inicial seguido de uma taxa constante de absorção (g/hr).", + "Basal rates [unit/hour]": "Taxas de Basal [uni/hora]", + "Target BG range [mg/dL,mmol/L]": "Intervalo Alvo Glicose [mg/dL,mmol/L]", + "Start of record validity": "Início da validade do registo", + "Icicle": "Inverso", + "Render Basal": "Mostrar Basal", + "Profile used": "Perfil usado", + "Calculation is in target range.": "O cálculo está no intervalo alvo.", + "Loading profile records ...": "A carregar registos de perfil ...", + "Values loaded.": "Valores carregados.", + "Default values used.": "Valores padrão usados.", + "Error. Default values used.": "Erro. Valores padrão utilizados.", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "Os intervalos de tempo do alvo_mínimo e alvo_máximo não coincidem. Valores são restaurados para os valores padrão.", + "Valid from:": "Válido desde:", + "Save current record before switching to new?": "Guardar o registo atual antes de mudar para novo?", + "Add new interval before": "Adicionar novo intervalo antes", + "Delete interval": "Eliminar intervalo", + "I:C": "I:HC", + "ISF": "FSI", + "Combo Bolus": "Bólus Combo", + "Difference": "Diferença", + "New time": "Nova hora", + "Edit Mode": "Modo de Edição", + "When enabled icon to start edit mode is visible": "Quando activado o ícone para iniciar o modo de edição fica visível", + "Operation": "Operação", + "Move": "Mover", + "Delete": "Eliminar", + "Move insulin": "Mover insulina", + "Move carbs": "Mover hidratos", + "Remove insulin": "Remover insulina", + "Remove carbs": "Remover hidratos", + "Change treatment time to %1 ?": "Alterar o tempo de tratamento para %1?", + "Change carbs time to %1 ?": "Alterar o tempo dos hidratos para %1?", + "Change insulin time to %1 ?": "Alterar o tempo da insulina para %1?", + "Remove treatment ?": "Remover tratamento?", + "Remove insulin from treatment ?": "Remover insulina do tratamento?", + "Remove carbs from treatment ?": "Remover hidratos do tratamento?", + "Rendering": "A processar", + "Loading OpenAPS data of": "A carregar dados OpenAPS de", + "Loading profile switch data": "A carregar dados da troca de perfil", + "Redirecting you to the Profile Editor to create a new profile.": "A redireccionar para o Editor de Perfil para criar um novo perfil.", + "Pump": "Bomba", + "Sensor Age": "Idade do Sensor", + "Insulin Age": "Idade Insulina", + "Temporary target": "Alvo Temporário", + "Reason": "Motivo", + "Eating soon": "Comer Brevemente", + "Top": "Topo", + "Bottom": "Fundo", + "Activity": "Actividade", + "Targets": "Alvos", + "Bolus insulin:": "Insulina Bólus:", + "Base basal insulin:": "Insulina Basal Base:", + "Positive temp basal insulin:": "Insulina Basal Temp positiva:", + "Negative temp basal insulin:": "Insulina Basal Temp negativa:", + "Total basal insulin:": "Total Insulina Basal:", + "Total daily insulin:": "Total Diário Insulina (TDI):", + "Unable to save Role": "Não foi possível guardar a Função", + "Unable to delete Role": "Não foi possível eliminar a Função", + "Database contains %1 roles": "Base de Dados contém %1 funções", + "Edit Role": "Editar Função", + "admin, school, family, etc": "admin, escola, família, etc", + "Permissions": "Permissões", + "Are you sure you want to delete: ": "Tem a certeza que quer eliminar: ", + "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.": "Cada função terá 1 ou mais permissões. A permissão * é uma carta curinga, as permissões são uma hierarquia usando : como separador.", + "Add new Role": "Adicionar nova Função", + "Roles - Groups of People, Devices, etc": "Funções - Grupos de Pessoas, Dispositivos, etc", + "Edit this role": "Editar esta função", + "Admin authorized": "Admin autorizado", + "Subjects - People, Devices, etc": "Assuntos - Pessoas, Dispositivos, etc", + "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "Cada assunto terá um token de acesso único e uma ou mais funções. Clique no token de acesso para abrir uma nova vista com o assunto selecionado, este link secreto pode então ser partilhado.", + "Add new Subject": "Adicionar novo Assunto", + "Unable to save Subject": "Não é possível guardar o Assunto", + "Unable to delete Subject": "Não é possível eliminar o Assunto", + "Database contains %1 subjects": "Base de Dados contém %1 assuntos", + "Edit Subject": "Editar Assunto", + "person, device, etc": "pessoa, dispositivo, etc", + "role1, role2": "função1, função2", + "Edit this subject": "Editar este assunto", + "Delete this subject": "Eliminar este assunto", + "Roles": "Funções", + "Access Token": "Token de Acesso", + "hour ago": "hora atrás", + "hours ago": "horas atrás", + "Silence for %1 minutes": "Silenciar por %1 minutos", + "Check BG": "Verificar Glicose", + "BASAL": "BASAL", + "Current basal": "Basal atual", + "Sensitivity": "Sensibilidade", + "Current Carb Ratio": "Rácio Actual Hidratos", + "Basal timezone": "Fuso Horário Basal", + "Active profile": "Perfil Activo", + "Active temp basal": "Basal Temp Activa", + "Active temp basal start": "Início da basal temporária activa", + "Active temp basal duration": "Duração da basal temporária activa", + "Active temp basal remaining": "Restante basal temporária activa", + "Basal profile value": "Valor do Perfil Basal", + "Active combo bolus": "Bólus Combo Activo", + "Active combo bolus start": "Início Bolús Combo Activo", + "Active combo bolus duration": "Duração Bólus Combo Activo", + "Active combo bolus remaining": "Restant Bólus Combo Activo", + "BG Delta": "Delta Glicose", + "Elapsed Time": "Tempo Decorrido", + "Absolute Delta": "Delta Absoluto", + "Interpolated": "Interpolado", + "BWP": "ASSBOLUS", + "Urgent": "Urgente", + "Warning": "Aviso", + "Info": "Info", + "Lowest": "Mínimo", + "Snoozing high alarm since there is enough IOB": "Silenciar Alarme Hiper, já que há IOB suficiente", + "Check BG, time to bolus?": "Verificar Glicose, tempo para bólus?", + "Notice": "Observação", + "required info missing": "informação necessária em falta", + "Insulin on Board": "Insulina a Bordo", + "Current target": "Alvo actual", + "Expected effect": "Efeito Esperado", + "Expected outcome": "Resultado esperado", + "Carb Equivalent": "Equivalente Hidratos", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "Excesso de insulina equivalente %1U mais do que o necessário para atingir um alvo baixo, sem contabilizar os hidratos de carbono", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "Excesso de insulina equivalente %1U é mais do que o necessário para atingir o alvo baixo, GARANTIR QUE A INSULINA ACTIVA É COBERTA POR HIDRATOS DE CARBONO", + "%1U reduction needed in active insulin to reach low target, too much basal?": "%1U de redução necessária na insulina activa para atingir um alvo baixo, muita basal?", + "basal adjustment out of range, give carbs?": "ajuste da basal fora do intervalo, ingerir hidratos de carbono?", + "basal adjustment out of range, give bolus?": "ajuste da basal fora do intervalo, corrigir com bolus?", + "above high": "acima hiper", + "below low": "abaixo hipo", + "Projected BG %1 target": "Glicose projectada %1 alvo", + "aiming at": "visando", + "Bolus %1 units": "Bólus %1 unidades", + "or adjust basal": "ou ajuste basal", + "Check BG using glucometer before correcting!": "Verificar Glicose com a capilar antes de corrigir!", + "Basal reduction to account %1 units:": "Redução da basal tem em conta %1 unidades:", + "30m temp basal": "30m basal temp", + "1h temp basal": "1h basal temp", + "Cannula change overdue!": "Troca de cânula atrasada!", + "Time to change cannula": "Hora de trocar a canula", + "Change cannula soon": "Mude a cânula em breve", + "Cannula age %1 hours": "Cânula com idade %1 horas", + "Inserted": "Inserido", + "CAGE": "CAGE", + "COB": "COB", + "Last Carbs": "Últimos Hidratos", + "IAGE": "IAGE", + "Insulin reservoir change overdue!": "Troca de reservatório de insulina em atraso!", + "Time to change insulin reservoir": "Hora de trocar reservatório de insulina", + "Change insulin reservoir soon": "Troque o reservatório de insulina em breve", + "Insulin reservoir age %1 hours": "Idade Reservatório Insulina %1 horas", + "Changed": "Alterado", + "IOB": "IOB", + "Careportal IOB": "IOB Careportal", + "Last Bolus": "Último Bólus", + "Basal IOB": "IOB Basal", + "Source": "Fonte", + "Stale data, check rig?": "Dados obsoletos, verificar plataforma?", + "Last received:": "Último recebido:", + "%1m ago": "%1min atrás", + "%1h ago": "%1h atrás", + "%1d ago": "%1d atrás", + "RETRO": "RETRO", + "SAGE": "SAGE", + "Sensor change/restart overdue!": "Mudança/reinício do sensor atrasado!", + "Time to change/restart sensor": "Altura para mudar/reiniciar sensor", + "Change/restart sensor soon": "Mudar/reiniciar o sensor em breve", + "Sensor age %1 days %2 hours": "Idade Sensor %1 dias %2 horas", + "Sensor Insert": "Colocação Sensor", + "Sensor Start": "Início de Sensor", + "days": "dias", + "Insulin distribution": "Distribuição de Insulina", + "To see this report, press SHOW while in this view": "Para ver este relatório, pressione MOSTRAR neste modo de visualização", + "AR2 Forecast": "Previsão AR2", + "OpenAPS Forecasts": "Previsões OpenAPS", + "Temporary Target": "Alvo Temporário", + "Temporary Target Cancel": "Cancelar Alvo Temporário", + "OpenAPS Offline": "OpenAPS Offline", + "Profiles": "Perfis", + "Time in fluctuation": "Tempo em flutuação", + "Time in rapid fluctuation": "Tempo em flutuação rápida", + "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:": "Esta é apenas uma estimativa aproximada que pode ser muito imprecisa e não substitui o teste da capilar. A fórmula utilizada é retirada de:", + "Filter by hours": "Filtrar por horas", + "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.": "Tempo em flutuação e Tempo em flutuação rápida medem a percentagem de tempo durante o período examinado, durante o qual a glicemia tem mudado relativamente rápida ou rapidamente. Valores mais baixos são melhores.", + "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.": "Média Troca Total Diária é uma soma do valor absoluto de todas as excursões de glicose para o período examinado, dividido pelo número de dias. Menor é melhor.", + "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "Mudança Média por Hora é a soma dos valores absolutos de todas as entradas de glicemia para o período em análise, dividido pelo número de horas nesse periodo. Um valor baixo é melhor.", + "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "RMS Fora do Ontervalo é calculado interligando a distância fora do alvo para todas as leituras de glicemia para o período examinado. somando-os, dividindo pela contagem e obtendo a raiz quadrada. Esta métrica é semelhante à percentagem dentro do intervalo, mas os pesos nas leituras mais altas. Valores mais baixos são melhores.", + "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">pode ser encontrado aqui.", + "Mean Total Daily Change": "Média Troca Total Diária", + "Mean Hourly Change": "Média Troca Por Hora", + "FortyFiveDown": "a descer lento", + "FortyFiveUp": "a subir lento", + "Flat": "estavél", + "SingleUp": "a subir", + "SingleDown": "a descer", + "DoubleDown": "a descer rápido", + "DoubleUp": "a subir rápido", + "virtAsstUnknown": "Esse valor é desconhecido no momento. Por favor, veja o site do Nightscout para mais detalhes.", + "virtAsstTitleAR2Forecast": "Previsão AR2", + "virtAsstTitleCurrentBasal": "Basal Actual", + "virtAsstTitleCurrentCOB": "COB Actual", + "virtAsstTitleCurrentIOB": "IOB Actual", + "virtAsstTitleLaunch": "Bem-vindo(a) ao Nightscout", + "virtAsstTitleLoopForecast": "Previsão Loop", + "virtAsstTitleLastLoop": "Último Loop", + "virtAsstTitleOpenAPSForecast": "Previsão OpenAPS", + "virtAsstTitlePumpReservoir": "Insulina Restante", + "virtAsstTitlePumpBattery": "Bateria da Bomba", + "virtAsstTitleRawBG": "Glicose Bruta em Bruto", + "virtAsstTitleUploaderBattery": "Bateria Emissor", + "virtAsstTitleCurrentBG": "Glicose Actual", + "virtAsstTitleFullStatus": "Estado Completo", + "virtAsstTitleCGMMode": "Modo CGM", + "virtAsstTitleCGMStatus": "Estado CGM", + "virtAsstTitleCGMSessionAge": "Idade Sessão CGM", + "virtAsstTitleCGMTxStatus": "Estado Transmissor CGM", + "virtAsstTitleCGMTxAge": "Idade Transmissor CGM", + "virtAsstTitleCGMNoise": "Ruído CGM", + "virtAsstTitleDelta": "Delta Glicemia", + "virtAsstStatus": "%1 e %2 a partir de %3.", + "virtAsstBasal": "%1 basal actual é de %2 unidades por hora", + "virtAsstBasalTemp": "%1 basal temp de %2 unidades por hora terminará %3", + "virtAsstIob": "e tem %1 insulina a bordo.", + "virtAsstIobIntent": "Tem %1 insulina a bordo", + "virtAsstIobUnits": "%1 unidades de", + "virtAsstLaunch": "O que gostaria de verificar no Nightscout?", + "virtAsstPreamble": "Seu", + "virtAsstPreamble3person": "%1 tem uma ", + "virtAsstNoInsulin": "não", + "virtAsstUploadBattery": "Bateria do emissor está a %1", + "virtAsstReservoir": "Tem %1 unidades restantes", + "virtAsstPumpBattery": "Bateria da bomba está a %1 %2", + "virtAsstUploaderBattery": "Bateria do emissor está a %1", + "virtAsstLastLoop": "O último loop com sucesso foi %1", + "virtAsstLoopNotAvailable": "O plugin Loop parece não estar activado", + "virtAsstLoopForecastAround": "De acordo com a previsão do loop deverá estar perto de %1 durante o próximo %2", + "virtAsstLoopForecastBetween": "De acordo com a previsão do loop deverá estar entre %1 e %2 ao longo dos próximos %3", + "virtAsstAR2ForecastAround": "De acordo com a previsão do AR2 deverá estar perto de %1 durante o próximo %2", + "virtAsstAR2ForecastBetween": "De acordo com a previsão de AR2, você deverá estar entre %1 e %2 ao longo dos próximos %3", + "virtAsstForecastUnavailable": "Não é possível prever com os dados disponíveis", + "virtAsstRawBG": "Glicose em Bruto é %1", + "virtAsstOpenAPSForecast": "Glicose Eventual do OpenAPS é %1", + "virtAsstCob3person": "%1 tem %2 hidratos a bordo", + "virtAsstCob": "Tem %1 hidratos a bordo", + "virtAsstCGMMode": "Modo CGM era %1 a partir de %2.", + "virtAsstCGMStatus": "Estado do CGM era %1 a partir de %2.", + "virtAsstCGMSessAge": "Sessão do CGM está activa por %1 dias e %2 horas.", + "virtAsstCGMSessNotStarted": "Neste momento não existe uma sessão activa do CGM.", + "virtAsstCGMTxStatus": "Estado do transmissor CGM era de %1 a partir de %2.", + "virtAsstCGMTxAge": "Transmissor CGM tem %1 dias.", + "virtAsstCGMNoise": "Ruído CGM era de %1 a partir de %2.", + "virtAsstCGMBattOne": "Bateria CGM estava com %1 volts a partir de %2.", + "virtAsstCGMBattTwo": "Níveis bateria CGM eram de %1 volts e %2 volts de %3.", + "virtAsstDelta": "Delta era %1 entre %2 e %3.", + "virtAsstDeltaEstimated": "Delta estimado era %1 entre %2 e %3.", + "virtAsstUnknownIntentTitle": "Intenção Desconhecida", + "virtAsstUnknownIntentText": "Sinto muito, não sei o que está a pedir.", + "Fat [g]": "Gordura [g]", + "Protein [g]": "Proteína [g]", + "Energy [kJ]": "Energia [kJ]", + "Clock Views:": "Vistas Relógio:", + "Clock": "Relógio", + "Color": "Cor", + "Simple": "Simples", + "TDD average": "Média TDI", + "Bolus average": "Média Bólus", + "Basal average": "Média Basal", + "Base basal average:": "Média Basal Base:", + "Carbs average": "Média Hidratos", + "Eating Soon": "Comer Brevemente", + "Last entry {0} minutes ago": "Última entrada há {0} minutos", + "change": "alterar", + "Speech": "Fala", + "Target Top": "Alvo Superior", + "Target Bottom": "Alvo Inferior", + "Canceled": "Cancelado", + "Meter BG": "Medidor Glicose", + "predicted": "previsto", + "future": "futuro", + "ago": "atrás", + "Last data received": "Últimos dados recebidos", + "Clock View": "Vista do Relógio", + "Protein": "Proteína", + "Fat": "Gordura", + "Protein average": "Média Proteína", + "Fat average": "Média Gordura", + "Total carbs": "Total de Hidratos", + "Total protein": "Total Proteína", + "Total fat": "Total Gordura", + "Database Size": "Tamanho da Base de Dados", + "Database Size near its limits!": "Tamanho da Base de Dados próximo do seu limite!", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "O tamanho da Dase de Dados é %1 MiB de %2 MiB. Por favor, faça copiar de segurança e limpe a base de dados!", + "Database file size": "Tamanho do ficheiro Base de Dados", + "%1 MiB of %2 MiB (%3%)": "%1 MiB de %2 MiB (%3%)", + "Data size": "Tamanho dos dados", + "virtAsstDatabaseSize": "%1 MiB. Isso é %2% do espaço da base de dados disponível.", + "virtAsstTitleDatabaseSize": "Tamanho do ficheiro da Base de Dados", + "Carbs/Food/Time": "Hidratos/Alimentos/Hora", + "You have administration messages": "Tem mensagens administrativas", + "Admin messages in queue": "Mensagens de Administrador na fila", + "Queue empty": "Fila vazia", + "There are no admin messages in queue": "Não há mensagens de admin na fila", + "Please sign in using the API_SECRET to see your administration messages": "Por favor, entre com a API_SECRET para ver mensagens de administração", + "Reads enabled in default permissions": "Leituras activadas nas permissões padrão", + "Data reads enabled": "Leitura de Dados Activada", + "Data writes enabled": "Escrita de Dados Activada", + "Data writes not enabled": "Escrita de Dados desactivada", + "Color prediction lines": "Cor Linhas de Previsão", + "Release Notes": "Notas de Lançamento", + "Check for Updates": "Verificar Acualizações", + "Open Source": "Código Aberto", + "Nightscout Info": "Info Nightscout", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "A principal finalidade do Loopalyzer é visualizar como o sistema de Loop fechado funciona. Também pode funcionar com outras configurações, tanto com loop fechado como loop aberto, e o non-loop. No entanto, dependendo do uploader que é usado, a frequência com que os dados são recolhidos e é feito o upload, e a capacidade em preencher dados em falta, alguns gráficos podem ter espaços em branco ou até mesmo estar completamente vazios. Certifique-se sempre que a aparência dos gráficos é razoável. O melhor é verificar um dia de cada vez e percorrer vários dias primeiro.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "O Loopalyzer inclui uma função de mudança de tempo. Se, por exemplo, tomar o pequeno-almoço às 07h00 um dia e às 08h00 no dia seguinte, a curva média de glicose no sangue nestes dois dias provavelmente ficará achatada e não mostrará a resposta real depois de um pequeno-almoço. A função de mudança de tempo calculará o tempo médio em que essas refeições foram comidas e depois mudará todos os dados (hidratos de carbono, insulina, basal, etc.) de ambos os dias, fazendo corresponder a diferença de tempo, para que ambas as refeições se alinhem com o tempo médio de início da refeição.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "Neste exemplo, todos os dados do primeiro dia são empurrados para frente 30 minutos e todos os dados do segundo dia são puxados 30 minutos para trás no tempo, por isso parece que tomou o pequeno-almoço às 07h30 nos dois dias. Isto permite que consiga ver a resposta média da glicose no sangue numa refeição.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Mudança de tempo destaca o período após o tempo médio de início da refeição em cinza, pela duração da DIA (Duração de Insulina Activa). Uma vez que todos os dados indicam que o dia inteiro são deslocados, as curvas fora área cinza podem não ser exactas.", + "Note that time shift is available only when viewing multiple days.": "Note que a mudança de tempo só está disponível quando estiver a visualizar vários dias.", + "Please select a maximum of two weeks duration and click Show again.": "Por favor, selecione no máximo duas semanas de duração e clique em Mostrar novamente.", + "Show profiles table": "Mostrar tabela de perfis", + "Show predictions": "Mostrar previsões", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Mudança de tempo nas refeições maiores que %1 g hidratos consumidos entre %2 e %3", + "Previous": "Anterior", + "Previous day": "Dia Anterior", + "Next day": "Dia seguinte", + "Next": "Seguinte", + "Temp basal delta": "Delta Basal Temp", + "Authorized by token": "Autorizado pelo token", + "Auth role": "Função de Autenticação", + "view without token": "ver sem token", + "Remove stored token": "Remover token armazenado", + "Weekly Distribution": "Distribuição Semanal", + "Failed authentication": "Autenticação Falhou", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "Um dispositivo no endereço IP %1 tentou autenticar com o Nightscout com credenciais erradas. Verifique se tem uma configuração de um emissor com API_SECRET ou token errados?", + "Default (with leading zero and U)": "Padrão (com zero à esquerda e U)", + "Concise (with U, without leading zero)": "Conciso (com U, sem zero à esquerda)", + "Minimal (without leading zero and U)": "Mínimo (sem zero à esquerda e U)", + "Small Bolus Display": "Expositor Pequeno Bólus", + "Large Bolus Display": "Expositor Grande Bólus", + "Bolus Display Threshold": "Mostrador Limite Bólus", + "%1 U and Over": "%1 U e Acima", + "Event repeated %1 times.": "Evento repetido %1 vezes.", + "minutes": "minutos", + "Last recorded %1 %2 ago.": "Último registo %1 %2 atrás.", + "Security issue": "Problema de Segurança", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "API_SECRET fraco foi detectado. Por favor, use uma mistura de letras minúsculas e MAIÚSCULAS, números e caracteres não-alfanuméricos como !#%&/ para reduzir o risco de acesso não autorizado. O comprimento mínimo da API_SECRET é de 12 caracteres.", + "less than 1": "menos de 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "Senha MongoDB e a API_SECRET coincidem. Esta é uma má ideia. Por favor, altere ambas e não reutilize senhas em todo o sistema." +} diff --git a/translations/ro_RO.json b/translations/ro_RO.json new file mode 100644 index 00000000000..f0240d80ade --- /dev/null +++ b/translations/ro_RO.json @@ -0,0 +1,707 @@ +{ + "Listening on port": "Activ pe portul", + "Mo": "Lu", + "Tu": "Ma", + "We": "Mie", + "Th": "Jo", + "Fr": "Vi", + "Sa": "Sa", + "Su": "Du", + "Monday": "Luni", + "Tuesday": "Marți", + "Wednesday": "Miercuri", + "Thursday": "Joi", + "Friday": "Vineri", + "Saturday": "Sâmbătă", + "Sunday": "Duminică", + "Category": "Categorie", + "Subcategory": "Subcategorie", + "Name": "Nume", + "Today": "Astăzi", + "Last 2 days": "Ultimele 2 zile", + "Last 3 days": "Ultimele 3 zile", + "Last week": "Săptămâna trecută", + "Last 2 weeks": "Ultimele 2 săptămâni", + "Last month": "Ultima lună", + "Last 3 months": "Ultimele 3 luni", + "From": "De la", + "To": "La", + "Notes": "Note", + "Food": "Mâncare", + "Insulin": "Insulină", + "Carbs": "Carbohidrați", + "Notes contain": "Conținut note", + "Target BG range bottom": "Limita de jos a glicemiei", + "top": "Sus", + "Show": "Arată", + "Display": "Afișează", + "Loading": "Se încarcă", + "Loading profile": "Se încarcă profilul", + "Loading status": "Se încarcă starea", + "Loading food database": "Se încarcă baza de date de alimente", + "not displayed": "neafișat", + "Loading CGM data of": "Încarc datele CGM pentru", + "Loading treatments data of": "Încarc datele despre tratament pentru", + "Processing data of": "Procesez datele pentru", + "Portion": "Porție", + "Size": "Mărime", + "(none)": "(fără)", + "None": "Niciunul", + "": "", + "Result is empty": "Fără rezultat", + "Day to day": "Zi cu zi", + "Week to week": "Săptămâna la săptămână", + "Daily Stats": "Statistici zilnice", + "Percentile Chart": "Grafic percentile", + "Distribution": "Distribuție", + "Hourly stats": "Statistici orare", + "netIOB stats": "Statistici netIOB", + "temp basals must be rendered to display this report": "bazalele temporare trebuie redate pentru a afișa acest raport", + "No data available": "Nu există date disponibile", + "Low": "Prea jos", + "In Range": "În interval", + "Period": "Perioada", + "High": "Prea sus", + "Average": "Media", + "Low Quartile": "Pătrime inferioară", + "Upper Quartile": "Pătrime superioară", + "Quartile": "Pătrime", + "Date": "Data", + "Normal": "Normal", + "Median": "Mediană", + "Readings": "Valori", + "StDev": "Deviație standard", + "Daily stats report": "Raport statistică zilnică", + "Glucose Percentile report": "Raport percentile glicemii", + "Glucose distribution": "Distribuție glicemie", + "days total": "total zile", + "Total per day": "Total pe zi", + "Overall": "General", + "Range": "Interval", + "% of Readings": "% de valori", + "# of Readings": "# de valori", + "Mean": "Medie", + "Standard Deviation": "Deviație standard", + "Max": "Max", + "Min": "Min", + "A1c estimation*": "HbA1C estimată*", + "Weekly Success": "Rezultate Săptămânale", + "There is not sufficient data to run this report. Select more days.": "Nu sunt suficiente date pentru acest raport. Selectați mai multe zile.", + "Using stored API secret hash": "Folosind cheia API secretă stocată", + "No API secret hash stored yet. You need to enter API secret.": "Încă nu există o cheie API secretă stocată. Trebuie să introduci cheia API secretă.", + "Database loaded": "Baza de date încărcată", + "Error: Database failed to load": "Eroare: Nu s-a încărcat baza de date", + "Error": "Eroare", + "Create new record": "Crează înregistrare nouă", + "Save record": "Salvează înregistrarea", + "Portions": "Porții", + "Unit": "Unități", + "GI": "GI", + "Edit record": "Editează înregistrarea", + "Delete record": "Șterge înregistrarea", + "Move to the top": "Mergi la început", + "Hidden": "Ascuns", + "Hide after use": "Ascunde după folosire", + "Your API secret must be at least 12 characters long": "Cheia API trebuie să aibă minim 12 caractere", + "Bad API secret": "Cheie API greșită", + "API secret hash stored": "Cheie API înregistrată", + "Status": "Stare", + "Not loaded": "Neîncărcat", + "Food Editor": "Editor alimente", + "Your database": "Baza ta de date", + "Filter": "Filtru", + "Save": "Salvează", + "Clear": "Inițializare", + "Record": "Înregistrare", + "Quick picks": "Selecție rapidă", + "Show hidden": "Arată înregistrările ascunse", + "Your API secret or token": "API secret sau cheie de acces", + "Remember this device. (Do not enable this on public computers.)": "Tine minte acest dispozitiv. (Nu activaţi pe calculatoarele publice.)", + "Treatments": "Tratamente", + "Time": "Ora", + "Event Type": "Tip eveniment", + "Blood Glucose": "Glicemie", + "Entered By": "Introdus de", + "Delete this treatment?": "Șterg acest eveniment?", + "Carbs Given": "Carbohidrați administrați", + "Insulin Given": "Insulină administrată", + "Event Time": "Ora evenimentului", + "Please verify that the data entered is correct": "Verificaţi dacă datele introduse sunt corecte", + "BG": "Glicemie", + "Use BG correction in calculation": "Folosește corecția de glicemie în calcule", + "BG from CGM (autoupdated)": "Glicemie din senzor (automat)", + "BG from meter": "Glicemie din glucometru", + "Manual BG": "Glicemie manuală", + "Quickpick": "Selecție rapidă", + "or": "sau", + "Add from database": "Adaugă din baza de date", + "Use carbs correction in calculation": "Folosește corecția de carbohidrați în calcule", + "Use COB correction in calculation": "Folosește corectia COB în calcule", + "Use IOB in calculation": "Folosește IOB în calcule", + "Other correction": "Alte corecții", + "Rounding": "Rotunjire", + "Enter insulin correction in treatment": "Introdu corecția de insulină în tratament", + "Insulin needed": "Necesar insulină", + "Carbs needed": "Necesar carbohidrați", + "Carbs needed if Insulin total is negative value": "Carbohidrați necesari dacă insulina totală are valoare negativă", + "Basal rate": "Rata bazală", + "60 minutes earlier": "acum 60 min", + "45 minutes earlier": "acum 45 min", + "30 minutes earlier": "acum 30 min", + "20 minutes earlier": "acum 20 min", + "15 minutes earlier": "acum 15 min", + "Time in minutes": "Timp în minute", + "15 minutes later": "după 15 min", + "20 minutes later": "după 20 min", + "30 minutes later": "după 30 min", + "45 minutes later": "după 45 min", + "60 minutes later": "după 60 min", + "Additional Notes, Comments": "Note adiționale, comentarii", + "RETRO MODE": "MOD RETROSPECTIV", + "Now": "Acum", + "Other": "Altul", + "Submit Form": "Trimite formularul", + "Profile Editor": "Editare profil", + "Reports": "Rapoarte", + "Add food from your database": "Adaugă alimente din baza ta de date", + "Reload database": "Reîncarcă baza de date", + "Add": "Adaugă", + "Unauthorized": "Neautorizat", + "Entering record failed": "Înregistrare eșuată", + "Device authenticated": "Dispozitiv autentificat", + "Device not authenticated": "Dispozitiv neautentificat", + "Authentication status": "Starea autentificării", + "Authenticate": "Autentificare", + "Remove": "Șterge", + "Your device is not authenticated yet": "Dispozitivul nu este autentificat încă", + "Sensor": "Senzor", + "Finger": "Deget", + "Manual": "Manual", + "Scale": "Scală", + "Linear": "Liniar", + "Logarithmic": "Logaritmic", + "Logarithmic (Dynamic)": "Logaritmic (Dinamic)", + "Insulin-on-Board": "IOB-Insulină activă la bord", + "Carbs-on-Board": "COB-Carbohidrați activi la bord", + "Bolus Wizard Preview": "BWP-Vizualizare asistent de bolusare", + "Value Loaded": "Valoare încărcată", + "Cannula Age": "CAGE-Vechime canulă", + "Basal Profile": "Profil bazală", + "Silence for 30 minutes": "Silențios pentru 30 minute", + "Silence for 60 minutes": "Silențios pentru 60 minute", + "Silence for 90 minutes": "Silențios pentru 90 minute", + "Silence for 120 minutes": "Silențios pentru 120 minute", + "Settings": "Setări", + "Units": "Unități", + "Date format": "Formatul datei", + "12 hours": "12 ore", + "24 hours": "24 ore", + "Log a Treatment": "Înregistrează un eveniment", + "BG Check": "Verificare glicemie", + "Meal Bolus": "Bolus masă", + "Snack Bolus": "Bolus gustare", + "Correction Bolus": "Bolus corecție", + "Carb Correction": "Corecție de carbohidrați", + "Note": "Notă", + "Question": "Întrebare", + "Exercise": "Activitate fizică", + "Pump Site Change": "Schimbare loc pompă", + "CGM Sensor Start": "Start senzor CGM", + "CGM Sensor Stop": "Stop senzor CGM", + "CGM Sensor Insert": "Inserare senzor CGM", + "Sensor Code": "Cod senzor", + "Transmitter ID": "Serie transmițător", + "Dexcom Sensor Start": "Pornire senzor Dexcom", + "Dexcom Sensor Change": "Schimbare senzor Dexcom", + "Insulin Cartridge Change": "Schimbare cartuș insulină", + "D.A.D. Alert": "Alertă câine special antrenat ca însoțitor", + "Glucose Reading": "Valoare glicemie", + "Measurement Method": "Metoda de măsurare", + "Meter": "Glucometru", + "Amount in grams": "Cantitate în grame", + "Amount in units": "Cantitate în unități", + "View all treatments": "Vezi toate evenimentele", + "Enable Alarms": "Activează alarmele", + "Pump Battery Change": "Schimbare baterie pompă", + "Pump Battery Age": "Pump Battery Age", + "Pump Battery Low Alarm": "Alarmă Baterie Scăzută la pompă", + "Pump Battery change overdue!": "Intârziere la schimbarea bateriei de la pompă!", + "When enabled an alarm may sound.": "Când este activ, poate suna o alarmă.", + "Urgent High Alarm": "Alarmă urgentă hiper", + "High Alarm": "Alarmă hiper", + "Low Alarm": "Alarmă hipo", + "Urgent Low Alarm": "Alarmă urgentă hipo", + "Stale Data: Warn": "Date învechite: alertă", + "Stale Data: Urgent": "Date învechite: urgent", + "mins": "min", + "Night Mode": "Mod nocturn", + "When enabled the page will be dimmed from 10pm - 6am.": "La activare va scădea iluminarea paginii între 22 și 6.", + "Enable": "Activează", + "Show Raw BG Data": "Afișează date primare glicemie", + "Never": "Niciodată", + "Always": "Întotdeauna", + "When there is noise": "Atunci când este zgomot", + "When enabled small white dots will be displayed for raw BG data": "La activare vor apărea puncte albe reprezentând valorile primare ale glicemiei", + "Custom Title": "Titlu personalizat", + "Theme": "Temă", + "Default": "Implicit", + "Colors": "Culori", + "Colorblind-friendly colors": "Culori pentru cei cu deficiențe de vedere", + "Reset, and use defaults": "Resetează și folosește setările implicite", + "Calibrations": "Calibrări", + "Alarm Test / Smartphone Enable": "Testare alarmă / Activare pe smartphone", + "Bolus Wizard": "Asistent bolusare", + "in the future": "în viitor", + "time ago": "în trecut", + "hr ago": "oră în trecut", + "hrs ago": "ore în trecut", + "min ago": "min în trecut", + "mins ago": "minute în trecut", + "day ago": "zi în trecut", + "days ago": "zile în trecut", + "long ago": "in urma cu mult timp", + "Clean": "Curat", + "Light": "Ușor", + "Medium": "Mediu", + "Heavy": "Puternic", + "Treatment type": "Tip tratament", + "Raw BG": "Valorile primară a glicemiei", + "Device": "Dispozitiv", + "Noise": "Zgomot", + "Calibration": "Calibrare", + "Show Plugins": "Arată plugin-urile", + "About": "Despre", + "Value in": "Valoare în", + "Carb Time": "Ora carbohidrați", + "Language": "Limba", + "Add new": "Adaugă intrare noua", + "g": "gr", + "ml": "ml", + "pcs": "buc", + "Drag&drop food here": "Apasă&trage aliment aici", + "Care Portal": "Care Portal", + "Medium/Unknown": "Mediu/Necunoscut", + "IN THE FUTURE": "ÎN VIITOR", + "Order": "Sortare", + "oldest on top": "cele mai vechi primele de sus", + "newest on top": "cele mai noi primele de sus", + "All sensor events": "Toate evenimentele legate de senzor", + "Remove future items from mongo database": "Șterge date din viitor din baza de date mongo", + "Find and remove treatments in the future": "Caută și elimină tratamente din viitor", + "This task find and remove treatments in the future.": "Acest instrument curăță tratamentele din viitor.", + "Remove treatments in the future": "Șterge tratamentele din viitor", + "Find and remove entries in the future": "Caută și elimină valorile din viitor", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "Acest instrument caută și elimină datele CGM din viitor, create de uploader cu ora setată greșit.", + "Remove entries in the future": "Elimină înregistrările din viitor", + "Loading database ...": "Se încarcă baza de date...", + "Database contains %1 future records": "Baza de date conține %1 înregistrări din viitor", + "Remove %1 selected records?": "Șterg %1 înregistrări selectate?", + "Error loading database": "Eroare la încărcarea bazei de date", + "Record %1 removed ...": "Înregistrarea %1 a fost ștearsă...", + "Error removing record %1": "Eroare la ștergerea înregistrării %1", + "Deleting records ...": "Se șterg înregistrările...", + "%1 records deleted": "%1 înregistrări șterse", + "Clean Mongo status database": "Curăță tabela despre status din Mongo", + "Delete all documents from devicestatus collection": "Șterge toate documentele din colecția de status dispozitiv", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "Acest instrument șterge toate documentele din colecția devicestatus. Se folosește când încărcarea bateriei nu se afișează corect.", + "Delete all documents": "Șterge toate documentele", + "Delete all documents from devicestatus collection?": "Șterg toate documentele din colecția status dispozitiv?", + "Database contains %1 records": "Baza de date conține %1 înregistrări", + "All records removed ...": "Toate înregistrările au fost șterse...", + "Delete all documents from devicestatus collection older than 30 days": "Șterge toate documentele mai vechi de 30 de zile din starea dispozitivului", + "Number of Days to Keep:": "Numărul de zile de păstrat:", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "Acest instrument șterge toate documentele mai vechi de 30 de zile din starea dispozitivului. Se folosește când încărcarea bateriei nu se afișează corect.", + "Delete old documents from devicestatus collection?": "Șterg toate documentele din colecția starea dispozitivului?", + "Clean Mongo entries (glucose entries) database": "Curătă intrarile in baza de date Mongo (intrări de glicemie)", + "Delete all documents from entries collection older than 180 days": "Șterge toate documentele mai vechi de 180 de zile din colectia intrari valori", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Acest instrument șterge toate documentele mai vechi de 180 de zile din colectia intrari valori. Se folosește când încărcarea bateriei nu se afișează corect.", + "Delete old documents": "Șterge documentele vechi", + "Delete old documents from entries collection?": "Șterg toate documentele vechi din colecția intrari valori?", + "%1 is not a valid number": "%1 nu este un număr valid", + "%1 is not a valid number - must be more than 2": "%1 nu este un număr valid - trebuie să fie mai mare decât 2", + "Clean Mongo treatments database": "Curăță baza de date Mongo de tratamente", + "Delete all documents from treatments collection older than 180 days": "Șterge toate documentele mai vechi de 180 de zile din colecția de tratamente", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Acest instrument șterge toate documentele mai vechi de 180 de zile din colecția de tratamente. Se folosește când încărcarea bateriei nu se afișează corect.", + "Delete old documents from treatments collection?": "Șterg documentele vechi din colecția de tratamente?", + "Admin Tools": "Instrumente de administrare", + "Nightscout reporting": "Rapoarte Nightscout", + "Cancel": "Renunță", + "Edit treatment": "Modifică tratament", + "Duration": "Durata", + "Duration in minutes": "Durata în minute", + "Temp Basal": "Bazală temporară", + "Temp Basal Start": "Start bazală temporară", + "Temp Basal End": "Sfârșit bazală temporară", + "Percent": "Procent", + "Basal change in %": "Bazală schimbată în %", + "Basal value": "Valoare bazală", + "Absolute basal value": "Valoare absolută bazală", + "Announcement": "Anunț", + "Loading temp basal data": "Se încarcă date bazală temporară", + "Save current record before changing to new?": "Salvez înregistrarea curentă înainte de a trece mai departe?", + "Profile Switch": "Schimbă profilul", + "Profile": "Profil", + "General profile settings": "Setări generale profil", + "Title": "Titlu", + "Database records": "Baza de date cu înregistrări", + "Add new record": "Adaugă înregistrare nouă", + "Remove this record": "Șterge această înregistrare", + "Clone this record to new": "Dublează această înregistrare", + "Record valid from": "Înregistare validă de la", + "Stored profiles": "Profile salvate", + "Timezone": "Fus orar", + "Duration of Insulin Activity (DIA)": "Durata de acțiune a insulinei (DIA)", + "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.": "Reprezintă durata tipică pentru care insulina are efect. Este diferită la fiecare pacient și pentru fiecare tip de insulină. De obicei 3-4 ore pentru marea majoritate a insulinelor si pacienților. Uneori se numește și durata de viață a insulinei.", + "Insulin to carb ratio (I:C)": "Rată insulină la carbohidrați (ICR)", + "Hours:": "Ore:", + "hours": "ore", + "g/hour": "g/oră", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "g carbohidrați pentru o unitate de insulină. Câte grame de carbohidrați sunt acoperite de fiecare unitate de insulină.", + "Insulin Sensitivity Factor (ISF)": "Factor de sensilibtate la insulină (ISF)", + "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "mg/dL sau mmol/L pentru 1U insulină. Cât de mult influențează glicemia o corecție de o unitate de insulină.", + "Carbs activity / absorption rate": "Rata de absorbție", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "grame pe unitatea de timp. Reprezintă atât schimbarea COB pe unitatea de timp, cât și cantitatea de carbohidrați care ar influența în perioada de timp. Graficele ratei de absorbție sunt mai puțin înțelese decât senzitivitatea la insulină, dar se poate aproxima folosind o întârziere implicită și apoi o rată constantă de absorbție (gr/oră).", + "Basal rates [unit/hour]": "Rate bazale [unitati/oră]", + "Target BG range [mg/dL,mmol/L]": "Intervalul țintă al glicemiei [mg/dL, mmol/L]", + "Start of record validity": "De când este valabilă înregistrarea", + "Icicle": "Icicle", + "Render Basal": "Afișează bazala", + "Profile used": "Profil folosit", + "Calculation is in target range.": "Calculul este în intervalul țintă.", + "Loading profile records ...": "Se încarcă datele profilului...", + "Values loaded.": "Valorile au fost încărcate.", + "Default values used.": "Se folosesc valorile implicite.", + "Error. Default values used.": "Eroare. Se folosesc valorile implicite.", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "Intervalele temporale pentru țintă_inferioară și țintă_superioară nu se potrivesc. Se folosesc valorile implicite.", + "Valid from:": "Valid de la:", + "Save current record before switching to new?": "Salvez valoarea curentă înainte de a trece la una nouă?", + "Add new interval before": "Adaugă un nou interval înainte", + "Delete interval": "Șterge interval", + "I:C": "I:C", + "ISF": "ISF (factor de sensibilitate la insulina)", + "Combo Bolus": "Bolus extins", + "Difference": "Diferență", + "New time": "Oră nouă", + "Edit Mode": "Mod editare", + "When enabled icon to start edit mode is visible": "La activare, butonul de editare este vizibil", + "Operation": "Operațiune", + "Move": "Mutați", + "Delete": "Ștergeți", + "Move insulin": "Mutați insulina", + "Move carbs": "Mutați carbohidrații", + "Remove insulin": "Ștergeți insulina", + "Remove carbs": "Ștergeți carbohidrații", + "Change treatment time to %1 ?": "Schimbați ora tratamentului la %1 ?", + "Change carbs time to %1 ?": "Schimbați ora carbohidraților la %1 ?", + "Change insulin time to %1 ?": "Schimbați ora insulinei la %1 ?", + "Remove treatment ?": "Ștergeți tratamentul?", + "Remove insulin from treatment ?": "Ștergeți insulina din tratament?", + "Remove carbs from treatment ?": "Ștergeți carbohidrații din tratament?", + "Rendering": "Se desenează", + "Loading OpenAPS data of": "Se încarcă datele OpenAPS pentru", + "Loading profile switch data": "Se încarcă datele de schimbare profil", + "Redirecting you to the Profile Editor to create a new profile.": "Redirecționare către editorul de profil pentru a crea un profil nou.", + "Pump": "Pompă", + "Sensor Age": "Vechimea senzorului", + "Insulin Age": "Vechimea insulinei", + "Temporary target": "Țintă temporară", + "Reason": "Motiv", + "Eating soon": "Mâncare în curând", + "Top": "Deasupra", + "Bottom": "Sub", + "Activity": "Activitate", + "Targets": "Ținte", + "Bolus insulin:": "Insulină bolusată:", + "Base basal insulin:": "Bazala obișnuită:", + "Positive temp basal insulin:": "Bazală temporară marită:", + "Negative temp basal insulin:": "Bazală temporară micșorată:", + "Total basal insulin:": "Bazală totală:", + "Total daily insulin:": "Insulină totală zilnică:", + "Unable to save Role": "Rolul nu poate fi salvat", + "Unable to delete Role": "Imposibil de șters Rolul", + "Database contains %1 roles": "Baza de date conține %1 rol(uri)", + "Edit Role": "Editează Rolul", + "admin, school, family, etc": "administrator, școală, familie, etc", + "Permissions": "Permisiuni", + "Are you sure you want to delete: ": "Confirmați ștergerea: ", + "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.": "Fiecare rol va avea cel puțin o permisiune. Permisiunea * este totală, permisiunile sunt ierarhice utilizând : pe post de separator.", + "Add new Role": "Adaugă un Rol nou", + "Roles - Groups of People, Devices, etc": "Roluri - Grupuri de persoane, dispozitive, etc", + "Edit this role": "Editează acest rol", + "Admin authorized": "Autorizat de admin", + "Subjects - People, Devices, etc": "Subiecte - Persoane, dispozitive, etc", + "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "Fiecare subiect va avea o cheie unică de acces și unul sau mai multe roluri. Apăsați pe cheia de acces pentru a vizualiza subiectul selectat, acest link poate fi distribuit.", + "Add new Subject": "Adaugă un Subiect nou", + "Unable to save Subject": "Imposibil de salvat Subiectul", + "Unable to delete Subject": "Imposibil de șters Subiectul", + "Database contains %1 subjects": "Baza de date are %1 subiecți", + "Edit Subject": "Editează Subiectul", + "person, device, etc": "persoană, dispozitiv, etc", + "role1, role2": "Rol1, Rol2", + "Edit this subject": "Editează acest subiect", + "Delete this subject": "Șterge acest subiect", + "Roles": "Roluri", + "Access Token": "Cheie de acces", + "hour ago": "oră în trecut", + "hours ago": "ore în trecut", + "Silence for %1 minutes": "Silențios pentru %1 minute", + "Check BG": "Verificați glicemia", + "BASAL": "BAZALĂ", + "Current basal": "Bazală curentă", + "Sensitivity": "Sensibilitate la insulină", + "Current Carb Ratio": "Raport Insulină:Carbohidrați (ICR)", + "Basal timezone": "Fus orar pentru bazală", + "Active profile": "Profilul activ", + "Active temp basal": "Bazală temporară activă", + "Active temp basal start": "Start bazală temporară activă", + "Active temp basal duration": "Durata bazalei temporare active", + "Active temp basal remaining": "Rest de bazală temporară activă", + "Basal profile value": "Valoarea profilului bazalei", + "Active combo bolus": "Bolus combinat activ", + "Active combo bolus start": "Start bolus combinat activ", + "Active combo bolus duration": "Durată bolus combinat activ", + "Active combo bolus remaining": "Rest de bolus combinat activ", + "BG Delta": "Variația glicemiei", + "Elapsed Time": "Timp scurs", + "Absolute Delta": "Variația absolută", + "Interpolated": "Interpolat", + "BWP": "BWP", + "Urgent": "Urgent", + "Warning": "Atenție", + "Info": "Informație", + "Lowest": "Cea mai mică", + "Snoozing high alarm since there is enough IOB": "Amână alarma de hiper deoarece este suficientă insulină activă IOB", + "Check BG, time to bolus?": "Verifică glicemia, poate este necesar un bolus?", + "Notice": "Notificare", + "required info missing": "lipsă informații necesare", + "Insulin on Board": "Insulină activă (IOB)", + "Current target": "Țintă curentă", + "Expected effect": "Efect presupus", + "Expected outcome": "Rezultat așteptat", + "Carb Equivalent": "Echivalență în carbohidrați", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "Insulină în exces %1U mai mult decât este necesar pentru a atinge ținta inferioară, fără a ține cont de carbohidrați", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "Insulină în exces %1U mai mult decât este necesar pentru a atinge ținta inferioară, ASIGURAȚI-VĂ CĂ INSULINA ACTIVĂ ESTE ACOPERITĂ DE CARBOHIDRAȚI", + "%1U reduction needed in active insulin to reach low target, too much basal?": "%1U de insulină activă e în plus pentru a atinge ținta inferioară, bazala este prea mare?", + "basal adjustment out of range, give carbs?": "ajustarea bazalei duce în afara intervalului țintă. Suplimentați carbohirații?", + "basal adjustment out of range, give bolus?": "ajustarea bazalei duce în afara intervalului țintă. Suplimentați insulina?", + "above high": "peste ținta superioară", + "below low": "sub ținta inferioară", + "Projected BG %1 target": "Glicemie estimată %1 în țintă", + "aiming at": "ținta este", + "Bolus %1 units": "Bolus de %1 unități", + "or adjust basal": "sau ajustează bazala", + "Check BG using glucometer before correcting!": "Verifică glicemia cu glucometrul înainte de a face o corecție!", + "Basal reduction to account %1 units:": "Reducere bazală pentru a compensa %1 unități:", + "30m temp basal": "bazală temporară de 30 minute", + "1h temp basal": "bazală temporară de 1 oră", + "Cannula change overdue!": "Depășire termen schimbare canulă!", + "Time to change cannula": "Este vremea să schimbați canula", + "Change cannula soon": "În curând trebuie să schimbați canula", + "Cannula age %1 hours": "Vechimea canulei este %1 ore", + "Inserted": "Inserat", + "CAGE": "VC", + "COB": "COB", + "Last Carbs": "Ultimii carbohidrați", + "IAGE": "VI", + "Insulin reservoir change overdue!": "Termenul de schimbare a rezervorului de insulină a fost depășit!", + "Time to change insulin reservoir": "Este timpul pentru schimbarea rezervorului de insulină", + "Change insulin reservoir soon": "Rezervorul de insulină trebuie schimbat în curând", + "Insulin reservoir age %1 hours": "Vârsta reservorului de insulină %1 ore", + "Changed": "Schimbat", + "IOB": "IOB", + "Careportal IOB": "IOB în Careportal", + "Last Bolus": "Ultimul bolus", + "Basal IOB": "IOB bazală", + "Source": "Sursă", + "Stale data, check rig?": "Date învechite, verificați uploaderul!", + "Last received:": "Ultimile date:", + "%1m ago": "%1 min in urmă", + "%1h ago": "%1 ore in urmă", + "%1d ago": "%1d zile in urmă", + "RETRO": "VECHI", + "SAGE": "VS", + "Sensor change/restart overdue!": "Depășire termen schimbare/restart senzor!", + "Time to change/restart sensor": "Este timpul pentru schimbarea/repornirea senzorului", + "Change/restart sensor soon": "În curând trebuie să schimbați/restartați senzorul", + "Sensor age %1 days %2 hours": "Senzor vechi de %1 zile și %2 ore", + "Sensor Insert": "Inserția senzorului", + "Sensor Start": "Pornirea senzorului", + "days": "zile", + "Insulin distribution": "Distribuția de insulină", + "To see this report, press SHOW while in this view": "Pentru a vedea acest raport, apăsați butonul Arată", + "AR2 Forecast": "Predicție AR2", + "OpenAPS Forecasts": "Predicții OpenAPS", + "Temporary Target": "Țintă Temporară", + "Temporary Target Cancel": "Renunțare la Ținta Temporară", + "OpenAPS Offline": "OpenAPS deconectat", + "Profiles": "Profile", + "Time in fluctuation": "Timp în fluctuație", + "Time in rapid fluctuation": "Timp în fluctuație rapidă", + "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:": "Aceasta este doar o aproximare brută, care poate fi foarte imprecisă și nu ține loc de testare capilară. Formula matematică folosită este luată din:", + "Filter by hours": "Filtrare pe ore", + "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.": "Timpul în fluctuație și timpul în fluctuație rapidă măsoară procentul de timp, din perioada examinată, în care glicemia din sânge a avut o variație relativ rapidă sau rapidă. Valorile mici sunt de preferat.", + "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.": "Schimbarea medie totală zilnică este suma valorilor absolute ale tuturor excursiilor glicemice din perioada examinată, împărțite la numărul de zile. Valorile mici sunt de preferat.", + "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "Variația media orară este suma valorilor absolute ale tuturor excursiilor glicemice din perioada examinată, împărțite la numărul de ore din aceeași perioadă. Valorile mici sunt de preferat.", + "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "RMS în afara tintelor se calculează prin insumarea tuturor ridicărilor la pătrat a distanțelor din afara intervalului pentru toate valorile de glicemie din perioada examinată, care se impart apoi la numarul lor si ulterior se calculează rădăcina pătrată a acestui rezultat. Această măsurătoare este similară cu procentajul în interval, dar cu greutate mai mare pe valorile mai mari. Valorile mai mici sunt mai bune.", + "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">poate fi găsit aici.", + "Mean Total Daily Change": "Variația medie totală zilnică", + "Mean Hourly Change": "Variația medie orară", + "FortyFiveDown": "scădere ușoară", + "FortyFiveUp": "creștere ușoară", + "Flat": "stabil", + "SingleUp": "creștere", + "SingleDown": "scădere", + "DoubleDown": "scădere rapidă", + "DoubleUp": "creștere rapidă", + "virtAsstUnknown": "Acea valoare este necunoscută în acest moment. Te rugăm să consulți site-ul Nightscout pentru mai multe detalii.", + "virtAsstTitleAR2Forecast": "Predicție AR2", + "virtAsstTitleCurrentBasal": "Bazala actuală", + "virtAsstTitleCurrentCOB": "COB actuali", + "virtAsstTitleCurrentIOB": "IOB actuală", + "virtAsstTitleLaunch": "Bine ați venit la Nightscout", + "virtAsstTitleLoopForecast": "Prognoză buclă", + "virtAsstTitleLastLoop": "Ultima buclă", + "virtAsstTitleOpenAPSForecast": "Predicție OpenAPS", + "virtAsstTitlePumpReservoir": "Insulină rămasă", + "virtAsstTitlePumpBattery": "Baterie pompă", + "virtAsstTitleRawBG": "Valorile primară a glicemiei actuale", + "virtAsstTitleUploaderBattery": "Baterie telefon uploader", + "virtAsstTitleCurrentBG": "Glicemie actuală", + "virtAsstTitleFullStatus": "Stare completă", + "virtAsstTitleCGMMode": "Mod CGM", + "virtAsstTitleCGMStatus": "Stare CGM", + "virtAsstTitleCGMSessionAge": "Vechime sesiune CGM", + "virtAsstTitleCGMTxStatus": "Stare transmițător CGM", + "virtAsstTitleCGMTxAge": "Vârsta transmițător CGM", + "virtAsstTitleCGMNoise": "Zgomot CGM", + "virtAsstTitleDelta": "Variația glicemiei", + "virtAsstStatus": "%1 și %2 din %3.", + "virtAsstBasal": "%1 bazala curentă este %2 unități pe oră", + "virtAsstBasalTemp": "%1 bazala temporară de %2 unități pe oră se va termina la %3", + "virtAsstIob": "și mai aveți %1 insulină activă.", + "virtAsstIobIntent": "Aveți %1 insulină activă", + "virtAsstIobUnits": "%1 unități", + "virtAsstLaunch": "Ce doriți să verificați pe Nightscout?", + "virtAsstPreamble": "Al tau", + "virtAsstPreamble3person": "%1 are ", + "virtAsstNoInsulin": "fără", + "virtAsstUploadBattery": "Bateria uploaderului este la %1", + "virtAsstReservoir": "Mai aveți %1 unități rămase", + "virtAsstPumpBattery": "Bateria pompei este la %1 %2", + "virtAsstUploaderBattery": "Bateria telefonului este la %1", + "virtAsstLastLoop": "Ultima decizie loop implementată cu succes a fost %1", + "virtAsstLoopNotAvailable": "Extensia loop pare a fi dezactivată", + "virtAsstLoopForecastAround": "Potrivit previziunii date de loop se estimează că vei fi pe la %1 pentru următoarele %2", + "virtAsstLoopForecastBetween": "Potrivit previziunii date de loop se estimează că vei fi între %1 și %2 pentru următoarele %3", + "virtAsstAR2ForecastAround": "Potrivit previziunii AR2 se estimează că vei fi pe la %1 in următoarele %2", + "virtAsstAR2ForecastBetween": "Potrivit previziunii AR2 se estimează că vei fi intre %1 și %2 in următoarele %3", + "virtAsstForecastUnavailable": "Estimarea este imposibilă pe baza datelor disponibile", + "virtAsstRawBG": "Valorile primară a glicemiei este %1", + "virtAsstOpenAPSForecast": "Glicemia estimată de OpenAPS este %1", + "virtAsstCob3person": "%1 are %2 carbohidrați la bord", + "virtAsstCob": "Ai %1 carbohidrați la bord", + "virtAsstCGMMode": "Modul tău CGM a fost %1 din %2.", + "virtAsstCGMStatus": "Starea CGM-ului tău a fost de %1 din %2.", + "virtAsstCGMSessAge": "Sesiunea dvs. CGM a fost activă de %1 zile și %2 ore.", + "virtAsstCGMSessNotStarted": "Nu există nici o sesiune activă CGM în acest moment.", + "virtAsstCGMTxStatus": "Starea transmițătorului CGM a fost %1 din %2.", + "virtAsstCGMTxAge": "Transmițătorul dvs. CGM are %1 zile vechime.", + "virtAsstCGMNoise": "Zgomotul CGM a fost %1 din %2.", + "virtAsstCGMBattOne": "Bateria CGM-ului a fost de %1 volți din %2.", + "virtAsstCGMBattTwo": "Nivelurile bateriei CGM au fost de %1 volți și %2 volți din %3.", + "virtAsstDelta": "Variatia a fost %1 între %2 și %3.", + "virtAsstDeltaEstimated": "Variația estimată a fost %1 intre %2 si %3.", + "virtAsstUnknownIntentTitle": "Intenție necunoscută", + "virtAsstUnknownIntentText": "Îmi pare rău, nu ştiu ce doriţi.", + "Fat [g]": "Grăsimi [g]", + "Protein [g]": "Proteine [g]", + "Energy [kJ]": "Energie [kJ]", + "Clock Views:": "Vizualizări ceas:", + "Clock": "Ceas", + "Color": "Culoare", + "Simple": "Simplu", + "TDD average": "Media Dozei Zilnice Totale de insulină (TDD)", + "Bolus average": "Media bolusului", + "Basal average": "Media bazalei", + "Base basal average:": "Media bazalei de bază:", + "Carbs average": "Media carbohidraților", + "Eating Soon": "Mâncare în curând", + "Last entry {0} minutes ago": "Ultima înregistrare acum {0} minute", + "change": "schimbare", + "Speech": "Vorbire", + "Target Top": "Țintă superioară", + "Target Bottom": "Țintă inferioară", + "Canceled": "Anulat", + "Meter BG": "Glicemie din glucometru", + "predicted": "estimat", + "future": "viitor", + "ago": "în trecut", + "Last data received": "Ultimele date primite", + "Clock View": "Vedere tip ceas", + "Protein": "Proteine", + "Fat": "Grăsimi", + "Protein average": "Media proteinelor", + "Fat average": "Media grăsimilor", + "Total carbs": "Total carbohidrați", + "Total protein": "Total proteine", + "Total fat": "Total grăsimi", + "Database Size": "Dimensiunea bazei de date", + "Database Size near its limits!": "Dimensiunea bazei de date se apropie de limita!", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "Dimensiunea bazei de date este %1 MB din %2 MB. Vă rugăm să faceți o copie de rezervă și să curățați baza de date!", + "Database file size": "Dimensiunea bazei de date", + "%1 MiB of %2 MiB (%3%)": "%1 MB din %2 MB (%3%)", + "Data size": "Dimensiune date", + "virtAsstDatabaseSize": "%1 MB. Aceasta este %2% din spațiul disponibil pentru baza de date.", + "virtAsstTitleDatabaseSize": "Dimensiunea bazei de date", + "Carbs/Food/Time": "Carbohidrati/Mâncare/Timp", + "You have administration messages": "Aveți mesaje de administrare", + "Admin messages in queue": "Mesajele administratorului în așteptare", + "Queue empty": "Coadă goală", + "There are no admin messages in queue": "Nu există mesaje de administrator în coadă", + "Please sign in using the API_SECRET to see your administration messages": "Te rugăm să te autentifici folosind API_SECRET pentru a vedea mesajele de administrare", + "Reads enabled in default permissions": "Citiri activate în permisiunile implicite", + "Data reads enabled": "Citire date activată", + "Data writes enabled": "Scriere date activată", + "Data writes not enabled": "Scriere date neactivată", + "Color prediction lines": "Culoare linii de predicție", + "Release Notes": "Note asupra ediției", + "Check for Updates": "Verificați dacă există actualizări", + "Open Source": "Cod sursă public", + "Nightscout Info": "Informații Nightscout", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "Scopul principal al Loopalyzer este de a vizualiza modul de funcționare a sistemului Loop în buclă închisă. Poate funcționa și cu alte configurații, atât cu buclă închisă, cât și deschisă, și non-buclă. Cu toate acestea, în funcție de uploaderul pe care îl folosiți, cât de frecvent poate captura datele și încărca, și modul în care este capabil să completeze datele care lipsesc, unele grafice pot avea lipsuri sau chiar să fie complet goale. Asigură-te întotdeauna că graficele arată rezonabil. Cel mai bine este să vizualizezi câte o zi pe rand si apoi sa derulezi cu un numar de zile.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer include o funcție de schimbare de timp (Time Shift). Dacă aveți, de exemplu, micul dejun la ora 07:00 într-o zi și la ora 08:00 în ziua următoare, curba glicemiei medii pe aceste două zile va apărea cel mai probabil aplatizata și nu va arăta răspunsul real după un mic dejun. Functia Time Shift va calcula timpul mediu în care aceste mese au fost mâncate şi apoi va schimba toate datele (carbohidraţi, insulină, bazală etc.) în ambele zile, diferenţa de timp corespunzătoare, astfel încât ambele mese să se alinieze cu ora medie de începere a mesei.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "În acest exemplu, toate datele din prima zi sunt împinse cu 30 de minute înainte şi toate datele din a doua zi cu 30 de minute înapoi în timp, astfel încât sa apară că aţi avut micul dejun la ora 07:30 în ambele zile. Acest lucru vă permite să vedeţi răspunsul mediu real al glicemiei după o masă.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Deplasarea timpului (Time Shift) evidenţiază cu gri perioada de după ora medie de incepere a mesei, pe durata DIA (Durata de Acţiune a Insulinei). Deoarece toate valorile de date din toată ziua sunt deplasate, curbele din afara zonei gri pot să nu fie prea exacte.", + "Note that time shift is available only when viewing multiple days.": "Reţineţi că deplasarea timpului (Time Shift) este disponibilă doar când vizualizaţi mai multe zile.", + "Please select a maximum of two weeks duration and click Show again.": "Te rugăm să selectezi maxim două săptămâni și să apeși din nou pe Arată.", + "Show profiles table": "Arată tabelul profilelor", + "Show predictions": "Arată predicții", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Timp intre mese mai mari de %1 g de carbohidrați consumați între %2 și %3", + "Previous": "Precedent", + "Previous day": "Ziua precedentă", + "Next day": "Ziua următoare", + "Next": "Următorul", + "Temp basal delta": "Variația bazalei temporare", + "Authorized by token": "Autorizat prin cheie de acces", + "Auth role": "Rolul de autentificare", + "view without token": "vizualizare fără cheie de acces", + "Remove stored token": "Elimină cheia de acces stocată", + "Weekly Distribution": "Distribuție săptămânală", + "Failed authentication": "Autentificare eșuată", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "Un dispozitiv cu adresa IP %1 a încercat autentificarea la Nightscout cu datele de autentificare greșite. Verificați dacă o instanta de încărcare a fost configurata cu API_SECRET sau token greșit?", + "Default (with leading zero and U)": "Implicit (zero-uri şi U)", + "Concise (with U, without leading zero)": "Concis (cu U, fără zero-uri)", + "Minimal (without leading zero and U)": "Minimal (fără zero-uri și U)", + "Small Bolus Display": "Afișaj bolus mic", + "Large Bolus Display": "Afișaj bolus mare", + "Bolus Display Threshold": "Prag de afişare bolus", + "%1 U and Over": "%1 U și peste", + "Event repeated %1 times.": "Eveniment repetat de %1 ori.", + "minutes": "minute", + "Last recorded %1 %2 ago.": "Ultima înregistrare %1 %2 în urmă.", + "Security issue": "Problemă de securitate", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "API_SECRET slab detectat. Te rugăm să folosești un amestec de litere mari și litere mici, numere și caractere non-alfanumerice, cum ar fi !#%&/ pentru a reduce riscul accesului neautorizat. Lungimea minimă a API_SECRET este de 12 caractere.", + "less than 1": "mai puțin de 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "Parola MongoDB și API_SECRET se potrivesc. Acesta este un lucru foarte rău. Vă rugăm să le schimbați pe ambele și să nu reutilizați parolele în sistem." +} diff --git a/translations/ru_RU.json b/translations/ru_RU.json new file mode 100644 index 00000000000..b613622a6ad --- /dev/null +++ b/translations/ru_RU.json @@ -0,0 +1,707 @@ +{ + "Listening on port": "Прослушивание порта", + "Mo": "Пон", + "Tu": "Вт", + "We": "Ср", + "Th": "Чт", + "Fr": "Пт", + "Sa": "Сб", + "Su": "Вс", + "Monday": "Понедельник", + "Tuesday": "Вторник", + "Wednesday": "Среда", + "Thursday": "Четверг", + "Friday": "Пятница", + "Saturday": "Суббота", + "Sunday": "Воскресенье", + "Category": "Категория", + "Subcategory": "Подкатегория", + "Name": "Имя", + "Today": "Сегодня", + "Last 2 days": "Прошедшие 2 дня", + "Last 3 days": "Прошедшие 3 дня", + "Last week": "Прошедшая неделя", + "Last 2 weeks": "Прошедшие 2 недели", + "Last month": "Прошедший месяц", + "Last 3 months": "Прошедшие 3 месяца", + "From": "С", + "To": "По", + "Notes": "Примечания", + "Food": "Еда", + "Insulin": "Инсулин", + "Carbs": "Углеводы", + "Notes contain": "Примечания содержат", + "Target BG range bottom": "Нижний порог целевых значений СК", + "top": "Верхний", + "Show": "Показать", + "Display": "Показывать", + "Loading": "Загрузка", + "Loading profile": "Загрузка профиля", + "Loading status": "Загрузка состояния", + "Loading food database": "Загрузка БД продуктов", + "not displayed": "Не отображено", + "Loading CGM data of": "Загрузка данных мониторинга", + "Loading treatments data of": "Загрузка данных терапии", + "Processing data of": "Обработка данных от", + "Portion": "Порция", + "Size": "Объем", + "(none)": "(нет)", + "None": "Нет", + "": "<нет>", + "Result is empty": "Результата нет ", + "Day to day": "По дням", + "Week to week": "По неделям", + "Daily Stats": "Ежедневная статистика", + "Percentile Chart": "Процентильная диаграмма", + "Distribution": "Распределение", + "Hourly stats": "Почасовая статистика", + "netIOB stats": "статистика нетто активн инс netIOB", + "temp basals must be rendered to display this report": "для этого отчета требуется прорисовка врем базала", + "No data available": "Нет данных", + "Low": "Низкая ГК", + "In Range": "В диапазоне", + "Period": "Период", + "High": "Высокая ГК", + "Average": "Cреднее значение", + "Low Quartile": "Нижняя четверть", + "Upper Quartile": "Верхняя четверть", + "Quartile": "Четверть", + "Date": "Дата", + "Normal": "Норма", + "Median": "Усредненный", + "Readings": "Значения", + "StDev": "Стандартное отклонение", + "Daily stats report": "Суточная статистика", + "Glucose Percentile report": "Процентильная ГК", + "Glucose distribution": "Распределение ГК", + "days total": "всего дней", + "Total per day": "всего за сутки", + "Overall": "Суммарно", + "Range": "Диапазон", + "% of Readings": "% измерений", + "# of Readings": "кол-во измерений", + "Mean": "Среднее значение", + "Standard Deviation": "Стандартное отклонение", + "Max": "Макс", + "Min": "Мин", + "A1c estimation*": "Ожидаемый HbA1c*", + "Weekly Success": "Итоги недели", + "There is not sufficient data to run this report. Select more days.": "Для этого отчета недостаточно данных. Выберите больше дней.", + "Using stored API secret hash": "Применение сохраненного пароля API", + "No API secret hash stored yet. You need to enter API secret.": "Пароля API нет в памяти. Введите пароль API", + "Database loaded": "База данных загружена", + "Error: Database failed to load": "Ошибка: Не удалось загрузить базу данных", + "Error": "Ошибка", + "Create new record": "Создайте новую запись", + "Save record": "Сохраните запись", + "Portions": "Порции", + "Unit": "Единица", + "GI": "гл индекс ГИ", + "Edit record": "Редактировать запись", + "Delete record": "Стереть запись", + "Move to the top": "Переместить наверх", + "Hidden": "Скрыт", + "Hide after use": "Скрыть после использования", + "Your API secret must be at least 12 characters long": "Ваш пароль API должен иметь не менее 12 знаков", + "Bad API secret": "Плохой пароль API", + "API secret hash stored": "Хэш пароля API сохранен", + "Status": "Статус", + "Not loaded": "Не загружено", + "Food Editor": "Редактор продуктов", + "Your database": "Ваша база данных ", + "Filter": "Фильтр", + "Save": "Сохранить", + "Clear": "Очистить", + "Record": "Запись", + "Quick picks": "Быстрый отбор", + "Show hidden": "Показать скрытые", + "Your API secret or token": "Ваш пароль API или код доступа ", + "Remember this device. (Do not enable this on public computers.)": "Запомнить это устройство (Не применяйте в общем доступе)", + "Treatments": "Терапия", + "Time": "Время", + "Event Type": "Тип события", + "Blood Glucose": "Гликемия", + "Entered By": "Внесено через", + "Delete this treatment?": "Удалить это событие?", + "Carbs Given": "Дано углеводов", + "Insulin Given": "Введено инсулина", + "Event Time": "Время события", + "Please verify that the data entered is correct": "Проверьте правильность вводимых данных", + "BG": "ГК", + "Use BG correction in calculation": "При расчете учитывать коррекцию ГК", + "BG from CGM (autoupdated)": "ГК с сенсора (автообновление)", + "BG from meter": "ГК по глюкометру", + "Manual BG": "ручной ввод ГК", + "Quickpick": "Быстрый отбор", + "or": "или", + "Add from database": "Добавить из базы данных", + "Use carbs correction in calculation": "Пользоваться коррекцией на углеводы при расчете", + "Use COB correction in calculation": "Учитывать активные углеводы COB при расчете", + "Use IOB in calculation": "Учитывать активный инсулин IOB при расчете", + "Other correction": "Иная коррекция", + "Rounding": "Округление", + "Enter insulin correction in treatment": "Внести коррекцию инсулина в терапию", + "Insulin needed": "Требуется инсулин", + "Carbs needed": "Требуются углеводы", + "Carbs needed if Insulin total is negative value": "Требуются углеводы если суммарный инсулин отрицательная величина", + "Basal rate": "Скорость базала", + "60 minutes earlier": "на 60 минут ранее", + "45 minutes earlier": "на 45 минут ранее", + "30 minutes earlier": "на 30 минут ранее", + "20 minutes earlier": "на 20 минут ранее", + "15 minutes earlier": "на 15 минут ранее", + "Time in minutes": "Время в минутах", + "15 minutes later": "на 15 мин позже", + "20 minutes later": "на 20 мин позже", + "30 minutes later": "на 30 мин позже", + "45 minutes later": "на 45 мин позже", + "60 minutes later": "на 60 мин позже", + "Additional Notes, Comments": "Дополнительные примечания", + "RETRO MODE": "режим РЕТРО", + "Now": "Сейчас", + "Other": "Другое", + "Submit Form": "Ввести форму", + "Profile Editor": "Редактор профиля", + "Reports": "Отчеты", + "Add food from your database": "Добавить продукт из вашей базы данных", + "Reload database": "Перезагрузить базу данных", + "Add": "Добавить", + "Unauthorized": "Не авторизовано", + "Entering record failed": "Ввод записи не состоялся", + "Device authenticated": "Устройство авторизовано", + "Device not authenticated": "Устройство не авторизовано", + "Authentication status": "Статус авторизации", + "Authenticate": "Авторизуйте", + "Remove": "Удалите", + "Your device is not authenticated yet": "Ваше устройство еще не авторизовано ", + "Sensor": "Сенсор", + "Finger": "Палец", + "Manual": "Вручную", + "Scale": "Масштаб", + "Linear": "Линейный", + "Logarithmic": "Логарифмический", + "Logarithmic (Dynamic)": "Логарифмический (Динамический)", + "Insulin-on-Board": "Активный инсулин IOB", + "Carbs-on-Board": "Активные углеводы COB", + "Bolus Wizard Preview": "Калькулятор болюса", + "Value Loaded": "Величина загружена", + "Cannula Age": "Катетеру", + "Basal Profile": "Профиль Базала", + "Silence for 30 minutes": "Тишина на 30 минут", + "Silence for 60 minutes": "Тишина 60 минут", + "Silence for 90 minutes": "Тишина 90 минут", + "Silence for 120 minutes": "Тишина 120 минут", + "Settings": "Настройки", + "Units": "Единицы", + "Date format": "Формат даты", + "12 hours": "12 часов", + "24 hours": "24 часа", + "Log a Treatment": "Записать терапию", + "BG Check": "Контроль ГК", + "Meal Bolus": "Болюс на еду", + "Snack Bolus": "Болюс на перекус", + "Correction Bolus": "Болюс на коррекцию", + "Carb Correction": "Углеводы на коррекцию", + "Note": "Примечания", + "Question": "Вопрос", + "Exercise": "Нагрузка", + "Pump Site Change": "Смена места катетера помпы", + "CGM Sensor Start": "Старт сенсора мониторинга", + "CGM Sensor Stop": "Останов сенсора мониторинга", + "CGM Sensor Insert": "Установка сенсора мониторинга", + "Sensor Code": "Код сенсора", + "Transmitter ID": "ID трансмиттера", + "Dexcom Sensor Start": "Старт сенсора Dexcom", + "Dexcom Sensor Change": "Замена сенсора Декском", + "Insulin Cartridge Change": "Замена картриджа инсулина", + "D.A.D. Alert": "Сигнал служебной собаки", + "Glucose Reading": "Значение ГК", + "Measurement Method": "Способ замера", + "Meter": "Глюкометр", + "Amount in grams": "Количество в граммах", + "Amount in units": "Количество в ед.", + "View all treatments": "Показать все события", + "Enable Alarms": "Активировать сигналы", + "Pump Battery Change": "Замена батареи помпы", + "Pump Battery Age": "Pump Battery Age", + "Pump Battery Low Alarm": "Внимание! низкий заряд батареи помпы", + "Pump Battery change overdue!": "Пропущен срок замены батареи!", + "When enabled an alarm may sound.": "При активации может звучать сигнал", + "Urgent High Alarm": "Внимание: высокая гликемия ", + "High Alarm": "Высокая гликемия", + "Low Alarm": "Низкая гликемия", + "Urgent Low Alarm": "Внимание: низкая гликемия", + "Stale Data: Warn": "Предупреждение: старые данные", + "Stale Data: Urgent": "Внимание: старые данные", + "mins": "мин", + "Night Mode": "Режим: ночь", + "When enabled the page will be dimmed from 10pm - 6am.": "При активации страница затемнена с 22.00 до 06.00", + "Enable": "Активировать", + "Show Raw BG Data": "Показывать необработанные данные RAW", + "Never": "Никогда", + "Always": "Всегда", + "When there is noise": "Когда есть шумовой фон", + "When enabled small white dots will be displayed for raw BG data": "При активации данные RAW будут видны как мелкие белые точки", + "Custom Title": "Произвольное название", + "Theme": "Тема", + "Default": "По умолчанию", + "Colors": "Цвета", + "Colorblind-friendly colors": "Цветовая гамма для людей с нарушениями восприятия цвета", + "Reset, and use defaults": "Сбросить и использовать настройки по умолчанию", + "Calibrations": "Калибровки", + "Alarm Test / Smartphone Enable": "Проверка зв. уведомлений / смартфон активен", + "Bolus Wizard": "калькулятор болюса", + "in the future": "в будущем", + "time ago": "времени назад", + "hr ago": "час назад", + "hrs ago": "часов назад", + "min ago": "мин назад", + "mins ago": "минут назад", + "day ago": "дн назад", + "days ago": "дней назад", + "long ago": "давно", + "Clean": "Чисто", + "Light": "Слабый", + "Medium": "Средний", + "Heavy": "Сильный", + "Treatment type": "Вид события", + "Raw BG": "необработанные данные ГК", + "Device": "Устройство", + "Noise": "Шумовой фон", + "Calibration": "Калибровка", + "Show Plugins": "Показать расширения", + "About": "О приложении", + "Value in": "Значения в", + "Carb Time": "Времени до приема углеводов", + "Language": "Язык", + "Add new": "Добавить новый", + "g": "г", + "ml": "мл", + "pcs": "шт", + "Drag&drop food here": "Перетащите еду сюда", + "Care Portal": "Портал терапии", + "Medium/Unknown": "Средний/Неизвестный", + "IN THE FUTURE": "В БУДУЩЕМ", + "Order": "Сортировать", + "oldest on top": "Старые наверху", + "newest on top": "Новые наверху", + "All sensor events": "Все события сенсора", + "Remove future items from mongo database": "Удалить будущие данные из базы Монго", + "Find and remove treatments in the future": "Найти и удалить будущие назначения", + "This task find and remove treatments in the future.": "Эта опция найдет и удалит данные из будущего", + "Remove treatments in the future": "Удалить назначения из будущего", + "Find and remove entries in the future": "Найти и удалить записи в будущем", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "Эта опция найдет и удалит данные сенсора созданные загрузчиком с неверными датой/временем", + "Remove entries in the future": "Удалить данные из будущего", + "Loading database ...": "Загрузка базы данных", + "Database contains %1 future records": "База данных содержит %1 записей в будущем", + "Remove %1 selected records?": "Удалить %1 выбранных записей?", + "Error loading database": "Ошибка загрузки базы данных", + "Record %1 removed ...": "запись %1 удалена", + "Error removing record %1": "Ошибка удаления записи %1", + "Deleting records ...": "Записи удаляются", + "%1 records deleted": "%1 записей удалено", + "Clean Mongo status database": "Очистить статус базы данных Mongo", + "Delete all documents from devicestatus collection": "Стереть все документы из коллекции статус устройства", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "Эта опция удаляет все документы из коллекции статус устройства. Полезно когда состояние батареи загрузчика не обновляется.", + "Delete all documents": "Удалить все документы", + "Delete all documents from devicestatus collection?": "Удалить все документы коллекции статус устройства?", + "Database contains %1 records": "База данных содержит %1 записей", + "All records removed ...": "Все записи удалены", + "Delete all documents from devicestatus collection older than 30 days": "Удалить все записи коллекции devicestatus старше 30 дней", + "Number of Days to Keep:": "Оставить дней", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "Это удалит все документы коллекции devicestatus которым более 30 дней. Полезно, когда статус батареи не обновляется или обновляется неверно.", + "Delete old documents from devicestatus collection?": "Удалить старыые документы коллекции devicestatus?", + "Clean Mongo entries (glucose entries) database": "Очистить записи данных ГК в базе Mongo", + "Delete all documents from entries collection older than 180 days": "Удалить все документы коллекции entries старше 180 дней ", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Это удалит все документы коллекции entries старше 180 дней. Полезно, когда статус батареи загрузчика должным образом не обновляется", + "Delete old documents": "Удалить старые документы", + "Delete old documents from entries collection?": "Удалить старые документы из коллекции entries?", + "%1 is not a valid number": "%1 не является допустимым значением", + "%1 is not a valid number - must be more than 2": "%1 не является допустимым значением - должно быть больше 2", + "Clean Mongo treatments database": "Очистить базу терапии Mongo", + "Delete all documents from treatments collection older than 180 days": "Удалить все документы коллекции терапии treatments старше 180 дней", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Это удалит все документы коллекции терапии treatments старше 180 дней. Полезно, когда статус батареи загрузчика не обновляется должным образом.", + "Delete old documents from treatments collection?": "Удалить старые документы из коллекции терапии treatments?", + "Admin Tools": "Инструменты администратора", + "Nightscout reporting": "Статистика Nightscout", + "Cancel": "Отмена", + "Edit treatment": "Редактировать событие", + "Duration": "Продолжительность", + "Duration in minutes": "Продолжительность в мин", + "Temp Basal": "Временный базал", + "Temp Basal Start": "Начало временного базала", + "Temp Basal End": "Окончание временного базала", + "Percent": "Процент", + "Basal change in %": "Изменение базала в %", + "Basal value": "Величина базала", + "Absolute basal value": "Абсолютная величина базала", + "Announcement": "Оповещение", + "Loading temp basal data": "Загрузка данных временного базала", + "Save current record before changing to new?": "Сохранить текущие данные перед переходом к новым?", + "Profile Switch": "Изменить профиль", + "Profile": "Профиль", + "General profile settings": "Общие настройки профиля", + "Title": "Название", + "Database records": "Записи в базе данных", + "Add new record": "Добавить новую запись", + "Remove this record": "Удалить эту запись", + "Clone this record to new": "Клонировать эту запись в новую", + "Record valid from": "Запись действительна от", + "Stored profiles": "Сохраненные профили", + "Timezone": "Часовой пояс", + "Duration of Insulin Activity (DIA)": "Время действия инсулина (DIA)", + "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.": "Отражает типичную продолжительность действия инсулина. Зависит от пациента и от типа инсулина. Обычно 3-4 часа для большинства помповых инсулинов и большинства пациентов", + "Insulin to carb ratio (I:C)": "Соотношение инсулин/углеводы I:C", + "Hours:": "час:", + "hours": "час", + "g/hour": "г/час", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "г углеводов на ед инсулина. Соотношение показывает количество гр углеводов компенсируемого каждой единицей инсулина.", + "Insulin Sensitivity Factor (ISF)": "Фактор чувствительности к инсулину ISF", + "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "мг/дл или ммол/л на единицу инсулина. Насколько меняется СК с каждой единицей инсулина на коррекцию.", + "Carbs activity / absorption rate": "Активность углеводов / скорость усвоения", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "грамм на ед времени. Представляет изменение кол-ва углеводов в организме COB за единицу времени a также количество активных углеводов. Кривая усвоения углеводов менее понятна чем активность инсулина но приблизительно может быть представлена в виде первоначальной задержки с последующей постоянной скоростью поглощения (грамм/час).", + "Basal rates [unit/hour]": "Скорость базала [ед./час]", + "Target BG range [mg/dL,mmol/L]": "Целевой диапазон ГК [mg/dL,mmol/L]", + "Start of record validity": "Начало валидности записей", + "Icicle": "Силуэт сосульки", + "Render Basal": "Отображать базал", + "Profile used": "Используемый профиль", + "Calculation is in target range.": "Расчетная величина в целевом диапазоне.", + "Loading profile records ...": "Загрузка записей профиля", + "Values loaded.": "Данные загружены", + "Default values used.": "Используются значения по умолчанию", + "Error. Default values used.": "Ошибка. Используются значения по умолчанию", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "Диапазоны нижних и верхних целевых значений не совпадают. Восстановлены значения по умолчанию.", + "Valid from:": "Действительно с", + "Save current record before switching to new?": "Сохранить текущие записи перед переходом к новым?", + "Add new interval before": "Добавить новый интервал перед этим", + "Delete interval": "Удалить интервал", + "I:C": "Инс:Углев", + "ISF": "Чувств к инс ISF", + "Combo Bolus": "Комбинир болюс", + "Difference": "Разность", + "New time": "Новое время", + "Edit Mode": "Режим редактирования", + "When enabled icon to start edit mode is visible": "При активации видна пиктограмма начать режим редактирования", + "Operation": "Операция", + "Move": "Переместить", + "Delete": "Удалить", + "Move insulin": "Переместить инсулин", + "Move carbs": "Переместить углеводы", + "Remove insulin": "Удалить инсулин", + "Remove carbs": "Удалить углеводы", + "Change treatment time to %1 ?": "Изменить время события на %1 ?", + "Change carbs time to %1 ?": "Изменить время приема углеводов на %1 ?", + "Change insulin time to %1 ?": "Изменить время подачи инсулина на %1 ?", + "Remove treatment ?": "Удалить событие ?", + "Remove insulin from treatment ?": "Удалить инсулин из событий ?", + "Remove carbs from treatment ?": "Удалить углеводы из событий ?", + "Rendering": "Построение графика", + "Loading OpenAPS data of": "Загрузка данных OpenAPS от", + "Loading profile switch data": "Загрузка данных нового профиля", + "Redirecting you to the Profile Editor to create a new profile.": "Переход к редактору профиля для создания нового", + "Pump": "Помпа", + "Sensor Age": "Сенсору", + "Insulin Age": "Инсулину", + "Temporary target": "Временная цель", + "Reason": "Основание", + "Eating soon": "Ожидаемый прием пищи", + "Top": "Верх", + "Bottom": "Низ", + "Activity": "Нагрузка", + "Targets": "Цели", + "Bolus insulin:": "Болюсный инсулин", + "Base basal insulin:": "Профильный базальный инсулин", + "Positive temp basal insulin:": "Положит знач временн базал инс ", + "Negative temp basal insulin:": "Отриц знач временн базал инс", + "Total basal insulin:": "Всего базал инсулина", + "Total daily insulin:": "Всего суточн базал инсулина", + "Unable to save Role": "Невозможно сохранить Роль", + "Unable to delete Role": "Невозможно удалить Роль", + "Database contains %1 roles": "База данных содержит %1 Ролей", + "Edit Role": "Редактировать Роль", + "admin, school, family, etc": "админ, школа, семья и т д", + "Permissions": "Разрешения", + "Are you sure you want to delete: ": "Подтвердите удаление", + "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.": "Каждая роль имеет 1 или более разрешений. Разрешение * это подстановочный символ, разрешения это иерархия, использующая : как разделитель.", + "Add new Role": "Добавить новую Роль", + "Roles - Groups of People, Devices, etc": "Роли- группы людей, устройств и т п", + "Edit this role": "Редактировать эту роль", + "Admin authorized": "Разрешено администратором", + "Subjects - People, Devices, etc": "Субъекты - Люди, устройства и т п", + "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "Каждый субъект получает уникальный код доступа и 1 или более ролей. Нажмите на иконку кода доступа чтобы открыть новое окно с выбранным субъектом, эту секретную ссылку можно переслать.", + "Add new Subject": "Добавить нового субъекта", + "Unable to save Subject": "Невозможно сохранить Субъект", + "Unable to delete Subject": "Невозможно удалить Субъект ", + "Database contains %1 subjects": "База данных содержит %1 субъекта/ов", + "Edit Subject": "Редактировать Субъект", + "person, device, etc": "лицо, устройство и т п", + "role1, role2": "Роль1, Роль2", + "Edit this subject": "Редактировать этот субъект", + "Delete this subject": "Удалить этот субъект", + "Roles": "Роли", + "Access Token": "Код доступа", + "hour ago": "час назад", + "hours ago": "часов назад", + "Silence for %1 minutes": "Молчание %1 минут", + "Check BG": "Проверьте гликемию", + "BASAL": "Базал", + "Current basal": "Актуальный базал", + "Sensitivity": "Чувствительность", + "Current Carb Ratio": "Актуальное соотношение инсулин:углеводы I:C", + "Basal timezone": "Часовой пояс базала", + "Active profile": "Действующий профиль", + "Active temp basal": "Активный временный базал", + "Active temp basal start": "Старт актуального временного базала", + "Active temp basal duration": "Длительность актуального временного базала", + "Active temp basal remaining": "Остается актуального временного базала", + "Basal profile value": "Величина базала профиля", + "Active combo bolus": "Активный комбинированный болюс", + "Active combo bolus start": "Старт активного комбинир болюса", + "Active combo bolus duration": "Длительность активного комбинир болюса", + "Active combo bolus remaining": "Остается активного комбинир болюса", + "BG Delta": "Изменение гликемии", + "Elapsed Time": "Прошло времени", + "Absolute Delta": "Абсолютное изменение", + "Interpolated": "Интерполировано", + "BWP": "Калькулятор болюса", + "Urgent": "Внимание", + "Warning": "Осторожно", + "Info": "Информация", + "Lowest": "Самое нижнее", + "Snoozing high alarm since there is enough IOB": "Отключение предупреждение о высоком СК ввиду достаточности инсулина в организме", + "Check BG, time to bolus?": "Проверьте ГК, дать болюс?", + "Notice": "Заметка", + "required info missing": "Отсутствует необходимая информация", + "Insulin on Board": "Активный инсулин (IOB)", + "Current target": "Актуальное целевое значение", + "Expected effect": "Ожидаемый эффект", + "Expected outcome": "Ожидаемый результат", + "Carb Equivalent": "Эквивалент в углеводах", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "Избыток инсулина равного %1ед, необходимого для достижения нижнего целевого значения, углеводы не приняты в расчет", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "Избыток инсулина, равного %1ед, необходимого для достижения нижнего целевого значения, ПОКРОЙТЕ АКТИВН IOB ИНСУЛИН УГЛЕВОДАМИ", + "%1U reduction needed in active insulin to reach low target, too much basal?": "Для достижения нижнего целевого значения необходимо понизить величину активного инсулина на %1ед, велика база?", + "basal adjustment out of range, give carbs?": "Корректировка базала вне диапазона, добавить углеводов?", + "basal adjustment out of range, give bolus?": "Корректировка базала вне диапазона, добавить болюс?", + "above high": "Выше верхней границы", + "below low": "Ниже нижней границы", + "Projected BG %1 target": "Расчетная целевая гликемия %1", + "aiming at": "цель на", + "Bolus %1 units": "Болюс %1 единиц", + "or adjust basal": "или корректировать базал", + "Check BG using glucometer before correcting!": "Перед корректировкой сверьте ГК с глюкометром", + "Basal reduction to account %1 units:": "Снижение базы из-за %1 единиц болюса", + "30m temp basal": "30 мин врем базал", + "1h temp basal": "1 час врем базал", + "Cannula change overdue!": "Срок замены катетера помпы истек", + "Time to change cannula": "Пора заменить катетер помпы", + "Change cannula soon": "Приближается время замены катетера помпы", + "Cannula age %1 hours": "Катетер помпы проработал %1 час", + "Inserted": "Установлен", + "CAGE": "КатПомп", + "COB": "АктУгл COB", + "Last Carbs": "Прошлые углеводы", + "IAGE": "Инсулину", + "Insulin reservoir change overdue!": "Срок замены резервуара инсулина истек", + "Time to change insulin reservoir": "Наступил срок замены резервуара инсулина", + "Change insulin reservoir soon": "Наступает срок замены резервуара инсулина", + "Insulin reservoir age %1 hours": "Картриджу инсулина %1часов", + "Changed": "Замена произведена", + "IOB": "АктИнс IOB", + "Careportal IOB": "АктИнс на портале терапии", + "Last Bolus": "Прошлый болюс", + "Basal IOB": "АктуальнБазал IOB", + "Source": "Источник", + "Stale data, check rig?": "Старые данные, проверьте загрузчик", + "Last received:": "Получено:", + "%1m ago": "%1 мин назад", + "%1h ago": "%1 час назад", + "%1d ago": "%1d назад", + "RETRO": "ПРОШЛОЕ", + "SAGE": "Сенсор работает", + "Sensor change/restart overdue!": "Рестарт сенсора пропущен", + "Time to change/restart sensor": "Время замены/рестарта сенсора", + "Change/restart sensor soon": "Приближается срок замены/рестарта сенсора", + "Sensor age %1 days %2 hours": "Сенсору %1 дн %2 час", + "Sensor Insert": "Сенсор установлен", + "Sensor Start": "Старт сенсора", + "days": "дней", + "Insulin distribution": "распределение инсулина", + "To see this report, press SHOW while in this view": "чтобы увидеть отчет, нажмите show/показать", + "AR2 Forecast": "прогноз AR2", + "OpenAPS Forecasts": "прогнозы OpenAPS", + "Temporary Target": "Временная цель", + "Temporary Target Cancel": "Отмена временной цели", + "OpenAPS Offline": "OpenAPS вне сети", + "Profiles": "Профили", + "Time in fluctuation": "Время флуктуаций", + "Time in rapid fluctuation": "Время быстрых флуктуаций", + "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:": "Это приблизительная оценка не заменяющая фактический анализ крови. Используемая формула взята из:", + "Filter by hours": "Почасовая фильтрация", + "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.": "Время флуктуаций и время быстрых флуктуаций означает % времени в рассматриваемый период в течение которого ГК менялась относительно быстро или просто быстро. Более низкие значения предпочтительней", + "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.": "Усредненное ежедневное изменение это сумма абсолютных величин всех отклонений ГК в рассматриваемый период, деленная на количество дней. Меньшая величина предпочтительней", + "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "Усредненное часовое изменение это сумма абсолютных величин всех отклонений ГК в рассматриваемый период, деленная на количество часов в этот период. Более низкое предпочтительней", + "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "Среднее квадратичное вне диапазона рассчитывается путем возведения в квадрат дистанции замеров вне диапазона для всех значений гликемии за рассматриваемый период, их суммирования, деления на общее количество и извлечения квадратные корни. Эта методика схожа с расчётом процента значений в диапазоне, но значения за пределами диапазона оказываются весомее. Чем ниже значение, тем лучше.", + "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">здесь.", + "Mean Total Daily Change": "Усредненное изменение за день", + "Mean Hourly Change": "Усредненное изменение за час", + "FortyFiveDown": "незначительное падение", + "FortyFiveUp": "незначительный подъем", + "Flat": "ровный", + "SingleUp": "растет", + "SingleDown": "падает", + "DoubleDown": "быстро падает", + "DoubleUp": "быстрый рост", + "virtAsstUnknown": "В настоящий момент величина неизвестна. Зайдите на сайт Nightscout.", + "virtAsstTitleAR2Forecast": "Прогноз AR2", + "virtAsstTitleCurrentBasal": "Актуальный Базал", + "virtAsstTitleCurrentCOB": "АктивнУгл COB", + "virtAsstTitleCurrentIOB": "АктИнс IOB", + "virtAsstTitleLaunch": "Добро пожаловать в Nightscout", + "virtAsstTitleLoopForecast": "Прогноз Loop", + "virtAsstTitleLastLoop": "Прошлый Loop", + "virtAsstTitleOpenAPSForecast": "Прогноз OpenAPS", + "virtAsstTitlePumpReservoir": "Осталось Инсулина", + "virtAsstTitlePumpBattery": "Батарея помпы", + "virtAsstTitleRawBG": "Актуальн RAW ГК ", + "virtAsstTitleUploaderBattery": "Батарея загрузчика", + "virtAsstTitleCurrentBG": "Актуальная ГК", + "virtAsstTitleFullStatus": "Полная информация о статусе", + "virtAsstTitleCGMMode": "Режим непрерывного мониторинга", + "virtAsstTitleCGMStatus": "Состояние непрерывного мониторинга", + "virtAsstTitleCGMSessionAge": "Текущей сессии мониторинга", + "virtAsstTitleCGMTxStatus": "Статус трансмиттера", + "virtAsstTitleCGMTxAge": "Трансмиттеру", + "virtAsstTitleCGMNoise": "Зашумленность мониторинга", + "virtAsstTitleDelta": "Дельта ГК", + "virtAsstStatus": "%1 и %2 начиная с %3.", + "virtAsstBasal": "%1 текущий базал %2 ед в час", + "virtAsstBasalTemp": "%1 временный базал %2 ед в час закончится через %3", + "virtAsstIob": "и вы имеете %1 инсулина в организме.", + "virtAsstIobIntent": "вы имеете %1 инсулина в организме", + "virtAsstIobUnits": "%1 единиц", + "virtAsstLaunch": "Что проверить в Nightscout?", + "virtAsstPreamble": "Ваш", + "virtAsstPreamble3person": "%1 имеет ", + "virtAsstNoInsulin": "нет", + "virtAsstUploadBattery": "батарея загрузчика %1", + "virtAsstReservoir": "остается %1 ед", + "virtAsstPumpBattery": "батарея помпы %1 %2", + "virtAsstUploaderBattery": "Батарея загрузчика %1", + "virtAsstLastLoop": "недавний успешный цикл был %1", + "virtAsstLoopNotAvailable": "Расширение ЗЦ Loop не активировано", + "virtAsstLoopForecastAround": "По прогнозу алгоритма ЗЦ ожидаемая ГК около %1 в следующие %2", + "virtAsstLoopForecastBetween": "По прогнозу алгоритма ЗЦ ожидаемая ГК между %1 и %2 в следующие %3", + "virtAsstAR2ForecastAround": "По прогнозу AR2 ГК ожидается в районе %1 в следующие %2", + "virtAsstAR2ForecastBetween": "По прогнозу AR2 ГК ожидается между %1 и %2 в следующие %3", + "virtAsstForecastUnavailable": "Прогноз при таких данных невозможен", + "virtAsstRawBG": "Ваши необработанные данные RAW %1", + "virtAsstOpenAPSForecast": "Прогнозируемая OpenAPS ГК равна %1", + "virtAsstCob3person": "%1 имеет %2 активных углеводов", + "virtAsstCob": "У вас %1 активных углеводов", + "virtAsstCGMMode": "Режим непрерывного мониторинга был %1 по состоянию на %2.", + "virtAsstCGMStatus": "Состояние непрерывного мониторинга было %1 по состоянию на %2.", + "virtAsstCGMSessAge": "Сессия мониторинга была активна %1 дн и %2 час.", + "virtAsstCGMSessNotStarted": "Сейчас нет активных сессий мониторинга.", + "virtAsstCGMTxStatus": "Состояние трансмиттера мониторинга было %1 по состоянию на %2.", + "virtAsstCGMTxAge": "Трансмиттеру мониторинга %1 дн.", + "virtAsstCGMNoise": "Зашумленность мониторинга была %1 по состоянию на %2.", + "virtAsstCGMBattOne": "Батарея мониторинга была %1 вольт по состоянию на %2.", + "virtAsstCGMBattTwo": "Уровни заряда аккумулятора были %1 вольт и %2 вольт по состоянию на %3.", + "virtAsstDelta": "Дельта была %1 между %2 и %3.", + "virtAsstDeltaEstimated": "Ваша ожидаемая дельта была %1 между %2 и %3.", + "virtAsstUnknownIntentTitle": "Неизвестное намерение", + "virtAsstUnknownIntentText": "Ваш запрос непонятен", + "Fat [g]": "жиры [g]", + "Protein [g]": "белки [g]", + "Energy [kJ]": "энергия [kJ]", + "Clock Views:": "цифры крупно:", + "Clock": "часы", + "Color": "цвет", + "Simple": "простой", + "TDD average": "средняя суточная доза инсулина", + "Bolus average": "Среднее значение болюсов", + "Basal average": "Среднее значение базала", + "Base basal average:": "Среднее значение базового базала:", + "Carbs average": "среднее кол-во углеводов за сутки", + "Eating Soon": "Ожидаемый прием пищи", + "Last entry {0} minutes ago": "предыдущая запись {0} минут назад", + "change": "замена", + "Speech": "речь", + "Target Top": "верхняя граница цели", + "Target Bottom": "нижняя граница цели", + "Canceled": "отменено", + "Meter BG": "ГК по глюкометру", + "predicted": "прогноз", + "future": "будущее", + "ago": "назад", + "Last data received": "прошлые данные получены", + "Clock View": "вид циферблата", + "Protein": "Белки", + "Fat": "Жиры", + "Protein average": "Средний белок", + "Fat average": "Средний жир", + "Total carbs": "Всего углеводов", + "Total protein": "Всего белков", + "Total fat": "Всего жиров", + "Database Size": "Размер базы данных", + "Database Size near its limits!": "Размер базы данных приближается к лимиту!", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "Размер базы данных %1 MiB из %2 MiB. Сделайте резервную копию и очистите базу данных!", + "Database file size": "Размер файла базы данных", + "%1 MiB of %2 MiB (%3%)": "%1 MiB из %2 MiB (%3%)", + "Data size": "Объем данных", + "virtAsstDatabaseSize": "%1 MiB Это %2% доступного места в базе данных.", + "virtAsstTitleDatabaseSize": "Размер файла базы данных", + "Carbs/Food/Time": "Углеводы/Еда/Время", + "You have administration messages": "У вас есть сообщения администрирования", + "Admin messages in queue": "Сообщения администрирования в очереди", + "Queue empty": "Очередь пуста", + "There are no admin messages in queue": "В очереди нет сообщений администрирования", + "Please sign in using the API_SECRET to see your administration messages": "Пожалуйста, войдите, используя API_SECRET, чтобы увидеть ваши сообщения администрирования", + "Reads enabled in default permissions": "Чтение включено в разрешениях по умолчанию", + "Data reads enabled": "Чтение данных включено", + "Data writes enabled": "Запись данных включена", + "Data writes not enabled": "Запись данных не включена", + "Color prediction lines": "Цветные линии прогнозов", + "Release Notes": "Заметки к релизу", + "Check for Updates": "Проверить наличие обновлений", + "Open Source": "Открытый код", + "Nightscout Info": "Информация о Nightscout", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "Основной целью Loopalyzer является визуализировать работу системы замкнутого цикла Loop. Он может работать и с другими установками, как с закрытыми и открытыми циклами, так и вне циклов. Однако, в зависимости от того, какой загрузчик вы используете, как часто он может получать и загружать данные, как способен заполнять недостающие. Всегда убедитесь, что графики выглядят разумно. Лучше всего просматривать по одному дню и пролистывать через несколько дней.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer включает в себя функцию сдвига по времени. Если вы, например, завтракаете в 07:00 один день и в 08:00 в другой, то средняя кривая глюкозы за эти два дня скорее всего выглядят сглаженной и не показывают фактический ответ после завтрака. Сдвиг по времени рассчитает среднее время приема этих блюд и затем переведет все данные (углеводы, инсулин, базал и т.д.) таким образом, что оба приема пищи совпадут со средним временем начала питания.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "В данном примере все данные первого дня сдвинуты на 30 мин вперед, а данные второго - на 30 минут назад, так что создается впечатление, что вы завтракали оба раза в 7:30. Это позволяет точнее увидеть вашу настоящую реакцию ГК на прием пищи.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Сдвиг по времени выделяет среднее время начала приема пищи серым на продолжительность действия инсулина.", + "Note that time shift is available only when viewing multiple days.": "Обратите внимание, что сдвиг по времени доступен только при просмотре нескольких дней.", + "Please select a maximum of two weeks duration and click Show again.": "Пожалуйста, выберите не более двух недель и нажмите Показать снова.", + "Show profiles table": "Показать таблицу профилей", + "Show predictions": "Показывать прогнозы", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Интервал приемов пищи больше %1 гу между %2 и%3", + "Previous": "Предыдущие", + "Previous day": "Предыдущий день", + "Next day": "Следующий день", + "Next": "Следующий", + "Temp basal delta": "Дельта временной базальной скорости", + "Authorized by token": "Авторизован по токену", + "Auth role": "Роль авторизующего", + "view without token": "просмотр без токена", + "Remove stored token": "Удалить сохраненный токен", + "Weekly Distribution": "Недельное распределение", + "Failed authentication": "Ошибка аутентификации", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "Устройство с IP-адресом %1 попыталось авторизоваться в Nightscout с неверными учетными данными. Проверьте, есть ли у вас загрузчик, настроенный с неверным API_SECRET или токеном.", + "Default (with leading zero and U)": "По умолчанию (с нулем впереди и словом ед.)", + "Concise (with U, without leading zero)": "Полный (со словом ед., без нуля впереди)", + "Minimal (without leading zero and U)": "Минимальный (без нуля и слова ед.)", + "Small Bolus Display": "Отображать болюсы мелкими значками", + "Large Bolus Display": "Отображать болюсы крупными значками", + "Bolus Display Threshold": "Порог отображения болюса", + "%1 U and Over": "%1 ед. и более", + "Event repeated %1 times.": "Событие повторяется %1 раз.", + "minutes": "минут", + "Last recorded %1 %2 ago.": "Записано %1 %2 назад.", + "Security issue": "Проблема безопасности", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Обнаружен слабый API_SECRET. Примените сочетание маленьких и CAPITAL букв, цифр и небуквенно-цифровых символов, таких как !#%&/ для уменьшения риска несанкционированного доступа. Минимальная длина API_SECRET составляет 12 символов.", + "less than 1": "менее 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "Пароли MongoDB и API_SECRET совпадают. Неудачное решение. Измените оба и не используйте пароли повторно в системе." +} diff --git a/translations/sk_SK.json b/translations/sk_SK.json new file mode 100644 index 00000000000..a44e0d8bc8f --- /dev/null +++ b/translations/sk_SK.json @@ -0,0 +1,707 @@ +{ + "Listening on port": "Načúvam na porte", + "Mo": "Po", + "Tu": "Ut", + "We": "St", + "Th": "Št", + "Fr": "Pi", + "Sa": "So", + "Su": "Ne", + "Monday": "Pondelok", + "Tuesday": "Utorok", + "Wednesday": "Streda", + "Thursday": "Štvrtok", + "Friday": "Piatok", + "Saturday": "Sobota", + "Sunday": "Nedeľa", + "Category": "Kategória", + "Subcategory": "Podkategória", + "Name": "Meno", + "Today": "Dnes", + "Last 2 days": "Posledné 2 dni", + "Last 3 days": "Posledné 3 dni", + "Last week": "Posledný týždeň", + "Last 2 weeks": "Posledné 2 týždne", + "Last month": "Posledný mesiac", + "Last 3 months": "Posledné 3 mesiace", + "From": "Od", + "To": "Do", + "Notes": "Poznámky", + "Food": "Jedlo", + "Insulin": "Inzulín", + "Carbs": "Sacharidy", + "Notes contain": "Poznámky obsahujú", + "Target BG range bottom": "Cieľová glykémia spodná", + "top": "horná", + "Show": "Ukáž", + "Display": "Zobraz", + "Loading": "Nahrávam", + "Loading profile": "Nahrávam profil", + "Loading status": "Nahrávam status", + "Loading food database": "Nahrávam databázu jedál", + "not displayed": "Nie je zobrazené", + "Loading CGM data of": "Nahrávam CGM dáta", + "Loading treatments data of": "Nahrávam dáta ošetrenia", + "Processing data of": "Spracovávam dáta", + "Portion": "Porcia", + "Size": "Veľkosť", + "(none)": "(žiadny)", + "None": "Žiadny", + "": "<žiadny>", + "Result is empty": "Prázdny výsledok", + "Day to day": "Deň po dni", + "Week to week": "Od tedna do tedna", + "Daily Stats": "Denné štatistiky", + "Percentile Chart": "Percentil", + "Distribution": "Distribúcia", + "Hourly stats": "Hodinové štatistiky", + "netIOB stats": "netIOB statistika", + "temp basals must be rendered to display this report": "zacasni basal mora biti prikazan za pregled tega porocila", + "No data available": "Žiadne dostupné dáta", + "Low": "Nízka", + "In Range": "V rozsahu", + "Period": "Obdobie", + "High": "Vysoká", + "Average": "Priemer", + "Low Quartile": "Nizky kvartil", + "Upper Quartile": "Vysoký kvartil", + "Quartile": "Kvartil", + "Date": "Dátum", + "Normal": "Normálny", + "Median": "Medián", + "Readings": "Záznamy", + "StDev": "Štand. odch.", + "Daily stats report": "Denné štatistiky", + "Glucose Percentile report": "Report percentilu glykémií", + "Glucose distribution": "Rozloženie glykémie", + "days total": "dní celkom", + "Total per day": "dní celkom", + "Overall": "Súhrn", + "Range": "Rozsah", + "% of Readings": "% záznamov", + "# of Readings": "Počet záznamov", + "Mean": "Stred", + "Standard Deviation": "Štandardná odchylka", + "Max": "Maksimalno", + "Min": "Minimalno", + "A1c estimation*": "Odhadované HbA1C*", + "Weekly Success": "Týždenná úspešnosť", + "There is not sufficient data to run this report. Select more days.": "Nedostatok dát. Vyberte dlhšie časové obdobie.", + "Using stored API secret hash": "Používam uložený API hash heslo", + "No API secret hash stored yet. You need to enter API secret.": "Nieje uložené žiadne API hash heslo. Musíte zadať API heslo.", + "Database loaded": "Databáza načítaná", + "Error: Database failed to load": "Chyba pri načítaní databázy", + "Error": "Napaka", + "Create new record": "Vytovriť nový záznam", + "Save record": "Uložiť záznam", + "Portions": "Porcií", + "Unit": "Jednot.", + "GI": "GI", + "Edit record": "Upraviť záznam", + "Delete record": "Zmazať záznam", + "Move to the top": "Presunúť na začiatok", + "Hidden": "Skrytý", + "Hide after use": "Skryť po použití", + "Your API secret must be at least 12 characters long": "Vaše API heslo musí mať najmenej 12 znakov", + "Bad API secret": "Nesprávne API heslo", + "API secret hash stored": "Hash API hesla uložený", + "Status": "Stanje", + "Not loaded": "Nenačítaný", + "Food Editor": "Editor jedál", + "Your database": "Vaša databáza", + "Filter": "Filtriraj", + "Save": "Uložiť", + "Clear": "Vymazať", + "Record": "Záznam", + "Quick picks": "Rýchly výber", + "Show hidden": "Zobraziť skryté", + "Your API secret or token": "Tvoja API koda ali token", + "Remember this device. (Do not enable this on public computers.)": "Zapomni si to napravo (ne omogoci tega na javnih racunalnikih)", + "Treatments": "Ošetrenie", + "Time": "Čas", + "Event Type": "Typ udalosti", + "Blood Glucose": "Glykémia", + "Entered By": "Zadal", + "Delete this treatment?": "Vymazať toto ošetrenie?", + "Carbs Given": "Sacharidov", + "Insulin Given": "Podaný inzulín", + "Event Time": "Čas udalosti", + "Please verify that the data entered is correct": "Prosím, skontrolujte správnosť zadaných údajov", + "BG": "Glykémia", + "Use BG correction in calculation": "Použite korekciu na glykémiu", + "BG from CGM (autoupdated)": "Glykémia z CGM (automatická aktualizácia) ", + "BG from meter": "Glykémia z glukomeru", + "Manual BG": "Ručne zadaná glykémia", + "Quickpick": "Rýchly výber", + "or": "alebo", + "Add from database": "Pridať z databázy", + "Use carbs correction in calculation": "Použite korekciu na sacharidy", + "Use COB correction in calculation": "Použite korekciu na COB", + "Use IOB in calculation": "Použite IOB vo výpočte", + "Other correction": "Iná korekcia", + "Rounding": "Zaokrúhlenie", + "Enter insulin correction in treatment": "Zadajte korekciu inzulínu do ošetrenia", + "Insulin needed": "Potrebný inzulín", + "Carbs needed": "Potrebné sacharidy", + "Carbs needed if Insulin total is negative value": "Potrebné sacharidy, ak je celkový inzulín záporná hodnota", + "Basal rate": "Bazál", + "60 minutes earlier": "60 min. pred", + "45 minutes earlier": "45 min. pred", + "30 minutes earlier": "30 min. pred", + "20 minutes earlier": "20 min. pred", + "15 minutes earlier": "15 min. pred", + "Time in minutes": "Čas v minútach", + "15 minutes later": "15 min. po", + "20 minutes later": "20 min. po", + "30 minutes later": "30 min. po", + "45 minutes later": "45 min. po", + "60 minutes later": "60 min. po", + "Additional Notes, Comments": "Ďalšie poznámky, komentáre", + "RETRO MODE": "V MINULOSTI", + "Now": "Teraz", + "Other": "Iný", + "Submit Form": "Odoslať formulár", + "Profile Editor": "Editor profilu", + "Reports": "Správy", + "Add food from your database": "Pridať jedlo z Vašej databázy", + "Reload database": "Obnoviť databázu", + "Add": "Pridať", + "Unauthorized": "Neautorizované", + "Entering record failed": "Zadanie záznamu zlyhalo", + "Device authenticated": "Zariadenie overené", + "Device not authenticated": "Zariadenie nieje overené", + "Authentication status": "Stav overenia", + "Authenticate": "Overiť", + "Remove": "Odstrániť", + "Your device is not authenticated yet": "Toto zariadenie zatiaľ nebolo overené", + "Sensor": "Senzor", + "Finger": "Glukomer", + "Manual": "Ručne", + "Scale": "Mierka", + "Linear": "Lineárne", + "Logarithmic": "Logaritmické", + "Logarithmic (Dynamic)": "Logaritmické (Dynamické)", + "Insulin-on-Board": "Aktívny inzulín (IOB)", + "Carbs-on-Board": "Aktívne sacharidy (COB)", + "Bolus Wizard Preview": "Bolus Wizard", + "Value Loaded": "Hodnoty načítané", + "Cannula Age": "Zavedenie kanyly (CAGE)", + "Basal Profile": "Bazál", + "Silence for 30 minutes": "Stíšiť na 30 minút", + "Silence for 60 minutes": "Stíšiť na 60 minút", + "Silence for 90 minutes": "Stíšiť na 90 minút", + "Silence for 120 minutes": "Stíšiť na 120 minút", + "Settings": "Nastavenia", + "Units": "Jednotky", + "Date format": "Formát času", + "12 hours": "12 hodín", + "24 hours": "24 hodín", + "Log a Treatment": "Záznam ošetrenia", + "BG Check": "Kontrola glykémie", + "Meal Bolus": "Bolus na jedlo", + "Snack Bolus": "Bolus na desiatu/olovrant", + "Correction Bolus": "Korekčný bolus", + "Carb Correction": "Prídavok sacharidov", + "Note": "Poznámka", + "Question": "Otázka", + "Exercise": "Cvičenie", + "Pump Site Change": "Výmena setu", + "CGM Sensor Start": "Spustenie senzoru", + "CGM Sensor Stop": "CGM Senzor Stop", + "CGM Sensor Insert": "Výmena senzoru", + "Sensor Code": "Sensor Code", + "Transmitter ID": "Transmitter ID", + "Dexcom Sensor Start": "Spustenie senzoru DEXCOM", + "Dexcom Sensor Change": "Výmena senzoru DEXCOM", + "Insulin Cartridge Change": "Výmena inzulínu", + "D.A.D. Alert": "Upozornenie signálneho psa", + "Glucose Reading": "Hodnota glykémie", + "Measurement Method": "Metóda merania", + "Meter": "Glukomer", + "Amount in grams": "Množstvo v gramoch", + "Amount in units": "Množstvo v jednotkách", + "View all treatments": "Zobraziť všetky ošetrenia", + "Enable Alarms": "Aktivovať alarmy", + "Pump Battery Change": "Zamenjaj baterijo crpalke", + "Pump Battery Age": "Pump Battery Age", + "Pump Battery Low Alarm": "Baterija crpalke nizka Alarm", + "Pump Battery change overdue!": "Pump Battery change overdue!", + "When enabled an alarm may sound.": "Pri aktivovanom alarme znie zvuk ", + "Urgent High Alarm": "Naliehavý alarm vysokej glykémie", + "High Alarm": "Alarm vysokej glykémie", + "Low Alarm": "Alarm nízkej glykémie", + "Urgent Low Alarm": "Naliehavý alarm nízkej glykémie", + "Stale Data: Warn": "Varovanie: Zastaralé dáta", + "Stale Data: Urgent": "Naliehavé: Zastaralé dáta", + "mins": "min.", + "Night Mode": "Nočný mód", + "When enabled the page will be dimmed from 10pm - 6am.": "Keď je povolený, obrazovka bude stlmená od 22:00 do 6:00.", + "Enable": "Povoliť", + "Show Raw BG Data": "Zobraziť RAW dáta", + "Never": "Nikdy", + "Always": "Vždy", + "When there is noise": "Pri šume", + "When enabled small white dots will be displayed for raw BG data": "Keď je povolené, malé bodky budú zobrazovať RAW dáta.", + "Custom Title": "Vlastný názov stránky", + "Theme": "Vzhľad", + "Default": "Predvolený", + "Colors": "Farebný", + "Colorblind-friendly colors": "Farby vhodné pre farboslepých", + "Reset, and use defaults": "Resetovať do pôvodného nastavenia", + "Calibrations": "Kalibrácie", + "Alarm Test / Smartphone Enable": "Test alarmu", + "Bolus Wizard": "Bolusový kalkulátor", + "in the future": "v budúcnosti", + "time ago": "čas pred", + "hr ago": "hod. pred", + "hrs ago": "hod. pred", + "min ago": "min. pred", + "mins ago": "min. pred", + "day ago": "deň pred", + "days ago": "dni pred", + "long ago": "veľmi dávno", + "Clean": "Čistý", + "Light": "Nízky", + "Medium": "Stredný", + "Heavy": "Veľký", + "Treatment type": "Typ ošetrenia", + "Raw BG": "RAW dáta glykémie", + "Device": "Zariadenie", + "Noise": "Šum", + "Calibration": "Kalibrácia", + "Show Plugins": "Zobraziť pluginy", + "About": "O aplikácii", + "Value in": "Hodnota v", + "Carb Time": "Čas jedla", + "Language": "Jazyk", + "Add new": "Pridať nový", + "g": "g", + "ml": "ml", + "pcs": "ks", + "Drag&drop food here": "Potiahni a pusti jedlo sem", + "Care Portal": "Portál starostlivosti", + "Medium/Unknown": "Stredný/Neznámi", + "IN THE FUTURE": "V BUDÚCNOSTI", + "Order": "Usporiadať", + "oldest on top": "najstaršie hore", + "newest on top": "najnovšie hore", + "All sensor events": "Všetky udalosti senzoru", + "Remove future items from mongo database": "Odobrať budúce položky z Mongo databázy", + "Find and remove treatments in the future": "Nájsť a odstrániť záznamy ošetrenia v budúcnosti", + "This task find and remove treatments in the future.": "Táto úloha nájde a odstáni záznamy ošetrenia v budúcnosti.", + "Remove treatments in the future": "Odstrániť záznamy ošetrenia v budúcnosti", + "Find and remove entries in the future": "Nájsť a odstrániť CGM dáta v budúcnosti", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "Táto úloha nájde a odstráni CGM dáta v budúcnosti vzniknuté zle nastaveným časom uploaderu.", + "Remove entries in the future": "Odstrániť CGM dáta v budúcnosti", + "Loading database ...": "Nahrávam databázu...", + "Database contains %1 future records": "Databáza obsahuje %1 záznamov v budúcnosti", + "Remove %1 selected records?": "Odstrániť %1 vybraných záznamov", + "Error loading database": "Chyba pri nahrávanií databázy", + "Record %1 removed ...": "%1 záznamov bolo odstránených...", + "Error removing record %1": "Chyba pri odstraňovaní záznamu %1", + "Deleting records ...": "Odstraňovanie záznamov...", + "%1 records deleted": "%1 records deleted", + "Clean Mongo status database": "Vyčistiť Mongo databázu statusov", + "Delete all documents from devicestatus collection": "Odstránenie všetkých záznamov z kolekcie \"devicestatus\"", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "Táto úloha vymaže všetky záznamy z kolekcie \"devicestatus\". Je to vhodné keď sa stav batérie nezobrazuje správne.", + "Delete all documents": "Zmazať všetky záznamy", + "Delete all documents from devicestatus collection?": "Zmazať všetky záznamy z kolekcie \"devicestatus\"?", + "Database contains %1 records": "Databáza obsahuje %1 záznamov", + "All records removed ...": "Všetky záznamy boli zmazané...", + "Delete all documents from devicestatus collection older than 30 days": "Delete all documents from devicestatus collection older than 30 days", + "Number of Days to Keep:": "Number of Days to Keep:", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.", + "Delete old documents from devicestatus collection?": "Delete old documents from devicestatus collection?", + "Clean Mongo entries (glucose entries) database": "Clean Mongo entries (glucose entries) database", + "Delete all documents from entries collection older than 180 days": "Delete all documents from entries collection older than 180 days", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.", + "Delete old documents": "Delete old documents", + "Delete old documents from entries collection?": "Delete old documents from entries collection?", + "%1 is not a valid number": "%1 is not a valid number", + "%1 is not a valid number - must be more than 2": "%1 is not a valid number - must be more than 2", + "Clean Mongo treatments database": "Clean Mongo treatments database", + "Delete all documents from treatments collection older than 180 days": "Delete all documents from treatments collection older than 180 days", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.", + "Delete old documents from treatments collection?": "Delete old documents from treatments collection?", + "Admin Tools": "Nástroje pre správu", + "Nightscout reporting": "Nightscout výkazy", + "Cancel": "Zrušiť", + "Edit treatment": "Upraviť ošetrenie", + "Duration": "Trvanie", + "Duration in minutes": "Trvanie v minútach", + "Temp Basal": "Dočasný bazál", + "Temp Basal Start": "Začiatok dočasného bazálu", + "Temp Basal End": "Koniec dočasného bazálu", + "Percent": "Percent", + "Basal change in %": "Zmena bazálu v %", + "Basal value": "Hodnota bazálu", + "Absolute basal value": "Absolútna hodnota bazálu", + "Announcement": "Oznámenia", + "Loading temp basal data": "Nahrávam dáta dočasného bazálu", + "Save current record before changing to new?": "Uložiť súčastny záznam pred zmenou na nový?", + "Profile Switch": "Zmena profilu", + "Profile": "Profil", + "General profile settings": "Obecné nastavenia profilu", + "Title": "Názov", + "Database records": "Záznamy databázi", + "Add new record": "Pridať nový záznam", + "Remove this record": "Zmazať záznam", + "Clone this record to new": "Skopírovať záznam do nového", + "Record valid from": "Záznam platný od", + "Stored profiles": "Uložené profily", + "Timezone": "Časové pásmo", + "Duration of Insulin Activity (DIA)": "Doba pôsobenia inzulínu (DIA)", + "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.": "Predstavuje typickú dobu počas ktorej inzulín pôsobí. Býva rôzna od pacienta a od typu inzulínu. Zvyčajne sa pohybuje medzi 3-4 hodinami u pacienta s pumpou.", + "Insulin to carb ratio (I:C)": "Inzulín-sacharidový pomer (I:C)", + "Hours:": "Hodiny:", + "hours": "hodiny", + "g/hour": "g/hod", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "gramy sacharidov na jednotku inzulínu. Pomer udáva aké množstvo sacharidov pokryje jednotka inzulínu.", + "Insulin Sensitivity Factor (ISF)": "Citlivosť na inzulín (ISF)", + "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "mg/dL alebo mmol/L na jednotku inzulínu. Pomer udáva o koľko sa zmení hodnota glykémie po podaní jednotky inzulínu.", + "Carbs activity / absorption rate": "Rýchlosť vstrebávania sacharidov", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "gramy za jednotku času. Reprezentuje súčasne zmenu COB za jednotku času, ako aj množstvo sacharidov ktoré sa za tú dobu prejavili. Krivka vstrebávania sacharidov je omnoho menej pochopiteľná ako pôsobenie inzulínu (IOB), ale môže byť približne s použitím počiatočného oneskorenia a následne s konštantným vstrebávaním (g/hod). ", + "Basal rates [unit/hour]": "Bazál [U/hod]", + "Target BG range [mg/dL,mmol/L]": "Rozsah cieľovej glykémie [mg/dL,mmol/L]", + "Start of record validity": "Začiatok platnosti záznamu", + "Icicle": "Inverzne", + "Render Basal": "Zobrazenie bazálu", + "Profile used": "Použitý profil", + "Calculation is in target range.": "Výpočet je v cieľovom rozsahu.", + "Loading profile records ...": "Nahrávam záznamy profilov", + "Values loaded.": "Hodnoty načítané.", + "Default values used.": "Použité východzie hodnoty.", + "Error. Default values used.": "CHYBA! Použité východzie hodnoty.", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "Časové rozsahy pre cieľové glykémie sa nezhodujú. Hodnoty nastavené na východzie.", + "Valid from:": "Platné od:", + "Save current record before switching to new?": "Uložiť súčastný záznam pred prepnutím na nový?", + "Add new interval before": "Pridať nový interval pred", + "Delete interval": "Zmazať interval", + "I:C": "I:C", + "ISF": "ISF", + "Combo Bolus": "Kombinovaný bolus", + "Difference": "Rozdiel", + "New time": "Nový čas", + "Edit Mode": "Editačný mód", + "When enabled icon to start edit mode is visible": "Keď je povolený, je zobrazená ikona editačného módu", + "Operation": "Operácia", + "Move": "Presunúť", + "Delete": "Zmazať", + "Move insulin": "Presunúť inzulín", + "Move carbs": "Presunúť sacharidy", + "Remove insulin": "Odstrániť inzulín", + "Remove carbs": "Odstrániť sacharidy", + "Change treatment time to %1 ?": "Zmeniť čas ošetrenia na %1 ?", + "Change carbs time to %1 ?": "Zmeniť čas sacharidov na %1 ?", + "Change insulin time to %1 ?": "Zmeniť čas inzulínu na %1 ?", + "Remove treatment ?": "Odstrániť ošetrenie?", + "Remove insulin from treatment ?": "Odstrániť inzulín z ošetrenia?", + "Remove carbs from treatment ?": "Odstrániť sacharidy z ošetrenia?", + "Rendering": "Vykresľujem", + "Loading OpenAPS data of": "Nahrávam OpenAPS dáta z", + "Loading profile switch data": "Nahrávam dáta prepnutia profilu", + "Redirecting you to the Profile Editor to create a new profile.": "Zle nastavený profil.\nK zobrazenému času nieje definovaný žiadny profil.\nPresmerovávam na vytvorenie profilu.", + "Pump": "Pumpa", + "Sensor Age": "Zavedenie senzoru (SAGE)", + "Insulin Age": "Výmena inzulínu (IAGE)", + "Temporary target": "Dočasný cieľ", + "Reason": "Dôvod", + "Eating soon": "Jesť čoskoro", + "Top": "Vrchná", + "Bottom": "Spodná", + "Activity": "Aktivita", + "Targets": "Ciele", + "Bolus insulin:": "Bolusový inzulín:", + "Base basal insulin:": "Základný bazálny inzulín:", + "Positive temp basal insulin:": "Pozitívny dočasný bazálny inzulín:", + "Negative temp basal insulin:": "Negatívny dočasný bazálny inzulín:", + "Total basal insulin:": "Celkový bazálny inzulín:", + "Total daily insulin:": "Celkový denný inzulín:", + "Unable to save Role": "Unable to save Role", + "Unable to delete Role": "Rola sa nedá zmazať", + "Database contains %1 roles": "Databáza obsahuje %1 rolí", + "Edit Role": "Editovať rolu", + "admin, school, family, etc": "administrátor, škola, rodina atď...", + "Permissions": "Oprávnenia", + "Are you sure you want to delete: ": "Naozaj zmazať:", + "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.": "Každá rola má 1 alebo viac oprávnení. Oprávnenie * je zástupný znak, oprávnenia sú hierarchie používajúce : ako oddelovač.", + "Add new Role": "Pridať novú rolu", + "Roles - Groups of People, Devices, etc": "Role - skupiny ľudí, zariadení atď...", + "Edit this role": "Editovať túto rolu", + "Admin authorized": "Admin autorizovaný", + "Subjects - People, Devices, etc": "Subjekty - ľudia, zariadenia atď...", + "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "Každý objekt má svoj unikátny prístupový token a 1 alebo viac rolí. Klikni na prístupový token pre otvorenie nového okna pre tento subjekt. Tento link je možné zdielať.", + "Add new Subject": "Pridať nový subjekt", + "Unable to save Subject": "Unable to save Subject", + "Unable to delete Subject": "Subjekt sa nedá odstrániť", + "Database contains %1 subjects": "Databáza obsahuje %1 subjektov", + "Edit Subject": "Editovať subjekt", + "person, device, etc": "osoba, zariadenie atď...", + "role1, role2": "rola1, rola2", + "Edit this subject": "Editovať tento subjekt", + "Delete this subject": "Zmazať tento subjekt", + "Roles": "Rola", + "Access Token": "Prístupový Token", + "hour ago": "pred hodinou", + "hours ago": "hodín pred", + "Silence for %1 minutes": "Stíšiť na %1 minút", + "Check BG": "Skontrolovať glykémiu", + "BASAL": "BAZÁL", + "Current basal": "Aktuálny bazál", + "Sensitivity": "Citlivosť (ISF)", + "Current Carb Ratio": "Aktuálny sacharidový pomer (I\"C)", + "Basal timezone": "Časová zóna pre bazál", + "Active profile": "Aktívny profil", + "Active temp basal": "Aktívny dočasný bazál", + "Active temp basal start": "Štart dočasného bazálu", + "Active temp basal duration": "Trvanie dočasného bazálu", + "Active temp basal remaining": "Zostatok dočasného bazálu", + "Basal profile value": "Základná hodnota bazálu", + "Active combo bolus": "Aktívny kombinovaný bolus", + "Active combo bolus start": "Štart kombinovaného bolusu", + "Active combo bolus duration": "Trvanie kombinovaného bolusu", + "Active combo bolus remaining": "Zostávajúci kombinovaný bolus", + "BG Delta": "Zmena glykémie", + "Elapsed Time": "Uplynutý čas", + "Absolute Delta": "Absolútny rozdiel", + "Interpolated": "Interpolované", + "BWP": "BK", + "Urgent": "Urgentné", + "Warning": "Varovanie", + "Info": "Info", + "Lowest": "Najnižsie", + "Snoozing high alarm since there is enough IOB": "Odloženie alarmu vysokej glykémie, pretože je dostatok IOB", + "Check BG, time to bolus?": "Skontrolovať glykémiu, čas na bolus?", + "Notice": "Poznámka", + "required info missing": "chýbajúca informácia", + "Insulin on Board": "Aktívny inzulín (IOB)", + "Current target": "Aktuálny cieľ", + "Expected effect": "Očakávaný efekt", + "Expected outcome": "Očakávaný výsledok", + "Carb Equivalent": "Sacharidový ekvivalent", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "Nadbytok inzulínu o %1U viac ako je potrebné na dosiahnutie spodnej cieľovej hranice. Neráta sa so sacharidmi.", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "Nadbytok inzulínu o %1U viac ako je potrebné na dosiahnutie spodnej cieľovej hranice. UISTITE SA, ŽE JE TO POKRYTÉ SACHARIDMI", + "%1U reduction needed in active insulin to reach low target, too much basal?": "Nutné zníženie aktívneho inzulínu o %1U pre dosiahnutie spodnej cieľovej hranice. Príliš veľa bazálu?", + "basal adjustment out of range, give carbs?": "úprava pomocou zmeny bazálu nie je možná. Podať sacharidy?", + "basal adjustment out of range, give bolus?": "úprava pomocou zmeny bazálu nie je možná. Podať bolus?", + "above high": "nad horným", + "below low": "pod spodným", + "Projected BG %1 target": "Predpokladaná glykémia %1 cieľ", + "aiming at": "cieľom", + "Bolus %1 units": "Bolus %1 jednotiek", + "or adjust basal": "alebo úprava bazálu", + "Check BG using glucometer before correcting!": "Pred korekciou skontrolujte glykémiu glukometrom!", + "Basal reduction to account %1 units:": "Úprava bazálu pre výpočet %1 jednotiek:", + "30m temp basal": "30 minutový dočasný bazál", + "1h temp basal": "hodinový dočasný bazál", + "Cannula change overdue!": "Výmena kanyli po lehote!", + "Time to change cannula": "Čas na výmenu kanyli", + "Change cannula soon": "Čoskoro bude potrebné vymeniť kanylu", + "Cannula age %1 hours": "Vek kanyli %1 hodín", + "Inserted": "Zavedený", + "CAGE": "SET", + "COB": "SACH", + "Last Carbs": "Posledné sacharidy", + "IAGE": "INZ", + "Insulin reservoir change overdue!": "Čas na výmenu inzulínu po lehote!", + "Time to change insulin reservoir": "Čas na výmenu inzulínu", + "Change insulin reservoir soon": "Čoskoro bude potrebné vymeniť inzulín", + "Insulin reservoir age %1 hours": "Vek inzulínu %1 hodín", + "Changed": "Vymenený", + "IOB": "IOB", + "Careportal IOB": "IOB z portálu starostlivosti", + "Last Bolus": "Posledný bolus", + "Basal IOB": "Bazálny IOB", + "Source": "Zdroj", + "Stale data, check rig?": "Zastaralé dáta, skontrolujte uploader", + "Last received:": "Naposledy prijaté:", + "%1m ago": "pred %1m", + "%1h ago": "pred %1h", + "%1d ago": "pred %1d", + "RETRO": "RETRO", + "SAGE": "SENZ", + "Sensor change/restart overdue!": "Čas na výmenu/reštart sensoru uplynul!", + "Time to change/restart sensor": "Čas na výmenu/reštart senzoru", + "Change/restart sensor soon": "Čoskoro bude potrebné vymeniť/reštartovať senzor", + "Sensor age %1 days %2 hours": "Vek senzoru %1 dní %2 hodín", + "Sensor Insert": "Výmena senzoru", + "Sensor Start": "Štart senzoru", + "days": "dní", + "Insulin distribution": "Insulin distribution", + "To see this report, press SHOW while in this view": "To see this report, press SHOW while in this view", + "AR2 Forecast": "AR2 Forecast", + "OpenAPS Forecasts": "OpenAPS Forecasts", + "Temporary Target": "Temporary Target", + "Temporary Target Cancel": "Temporary Target Cancel", + "OpenAPS Offline": "OpenAPS Offline", + "Profiles": "Profiles", + "Time in fluctuation": "Time in fluctuation", + "Time in rapid fluctuation": "Time in rapid fluctuation", + "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:": "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:", + "Filter by hours": "Filter by hours", + "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.": "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.", + "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.": "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.", + "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.", + "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.", + "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">can be found here.", + "Mean Total Daily Change": "Mean Total Daily Change", + "Mean Hourly Change": "Mean Hourly Change", + "FortyFiveDown": "slightly dropping", + "FortyFiveUp": "slightly rising", + "Flat": "holding", + "SingleUp": "rising", + "SingleDown": "dropping", + "DoubleDown": "rapidly dropping", + "DoubleUp": "rapidly rising", + "virtAsstUnknown": "That value is unknown at the moment. Please see your Nightscout site for more details.", + "virtAsstTitleAR2Forecast": "AR2 Forecast", + "virtAsstTitleCurrentBasal": "Current Basal", + "virtAsstTitleCurrentCOB": "Current COB", + "virtAsstTitleCurrentIOB": "Current IOB", + "virtAsstTitleLaunch": "Welcome to Nightscout", + "virtAsstTitleLoopForecast": "Loop Forecast", + "virtAsstTitleLastLoop": "Last Loop", + "virtAsstTitleOpenAPSForecast": "OpenAPS Forecast", + "virtAsstTitlePumpReservoir": "Insulin Remaining", + "virtAsstTitlePumpBattery": "Pump Battery", + "virtAsstTitleRawBG": "Current Raw BG", + "virtAsstTitleUploaderBattery": "Uploader Battery", + "virtAsstTitleCurrentBG": "Current BG", + "virtAsstTitleFullStatus": "Full Status", + "virtAsstTitleCGMMode": "CGM Mode", + "virtAsstTitleCGMStatus": "CGM Status", + "virtAsstTitleCGMSessionAge": "CGM Session Age", + "virtAsstTitleCGMTxStatus": "CGM Transmitter Status", + "virtAsstTitleCGMTxAge": "CGM Transmitter Age", + "virtAsstTitleCGMNoise": "CGM Noise", + "virtAsstTitleDelta": "Blood Glucose Delta", + "virtAsstStatus": "%1 and %2 as of %3.", + "virtAsstBasal": "%1 current basal is %2 units per hour", + "virtAsstBasalTemp": "%1 temp basal of %2 units per hour will end %3", + "virtAsstIob": "and you have %1 insulin on board.", + "virtAsstIobIntent": "You have %1 insulin on board", + "virtAsstIobUnits": "%1 units of", + "virtAsstLaunch": "What would you like to check on Nightscout?", + "virtAsstPreamble": "Your", + "virtAsstPreamble3person": "%1 has a ", + "virtAsstNoInsulin": "no", + "virtAsstUploadBattery": "Your uploader battery is at %1", + "virtAsstReservoir": "You have %1 units remaining", + "virtAsstPumpBattery": "Your pump battery is at %1 %2", + "virtAsstUploaderBattery": "Your uploader battery is at %1", + "virtAsstLastLoop": "The last successful loop was %1", + "virtAsstLoopNotAvailable": "Loop plugin does not seem to be enabled", + "virtAsstLoopForecastAround": "According to the loop forecast you are expected to be around %1 over the next %2", + "virtAsstLoopForecastBetween": "According to the loop forecast you are expected to be between %1 and %2 over the next %3", + "virtAsstAR2ForecastAround": "According to the AR2 forecast you are expected to be around %1 over the next %2", + "virtAsstAR2ForecastBetween": "According to the AR2 forecast you are expected to be between %1 and %2 over the next %3", + "virtAsstForecastUnavailable": "Unable to forecast with the data that is available", + "virtAsstRawBG": "Your raw bg is %1", + "virtAsstOpenAPSForecast": "The OpenAPS Eventual BG is %1", + "virtAsstCob3person": "%1 has %2 carbohydrates on board", + "virtAsstCob": "You have %1 carbohydrates on board", + "virtAsstCGMMode": "Your CGM mode was %1 as of %2.", + "virtAsstCGMStatus": "Your CGM status was %1 as of %2.", + "virtAsstCGMSessAge": "Your CGM session has been active for %1 days and %2 hours.", + "virtAsstCGMSessNotStarted": "There is no active CGM session at the moment.", + "virtAsstCGMTxStatus": "Your CGM transmitter status was %1 as of %2.", + "virtAsstCGMTxAge": "Your CGM transmitter is %1 days old.", + "virtAsstCGMNoise": "Your CGM noise was %1 as of %2.", + "virtAsstCGMBattOne": "Your CGM battery was %1 volts as of %2.", + "virtAsstCGMBattTwo": "Your CGM battery levels were %1 volts and %2 volts as of %3.", + "virtAsstDelta": "Your delta was %1 between %2 and %3.", + "virtAsstDeltaEstimated": "Your estimated delta was %1 between %2 and %3.", + "virtAsstUnknownIntentTitle": "Unknown Intent", + "virtAsstUnknownIntentText": "I'm sorry, I don't know what you're asking for.", + "Fat [g]": "Fat [g]", + "Protein [g]": "Protein [g]", + "Energy [kJ]": "Energy [kJ]", + "Clock Views:": "Clock Views:", + "Clock": "Clock", + "Color": "Color", + "Simple": "Simple", + "TDD average": "TDD average", + "Bolus average": "Bolus average", + "Basal average": "Basal average", + "Base basal average:": "Base basal average:", + "Carbs average": "Carbs average", + "Eating Soon": "Eating Soon", + "Last entry {0} minutes ago": "Last entry {0} minutes ago", + "change": "change", + "Speech": "Speech", + "Target Top": "Target Top", + "Target Bottom": "Target Bottom", + "Canceled": "Canceled", + "Meter BG": "Meter BG", + "predicted": "predicted", + "future": "future", + "ago": "ago", + "Last data received": "Last data received", + "Clock View": "Clock View", + "Protein": "Protein", + "Fat": "Fat", + "Protein average": "Protein average", + "Fat average": "Fat average", + "Total carbs": "Total carbs", + "Total protein": "Total protein", + "Total fat": "Total fat", + "Database Size": "Database Size", + "Database Size near its limits!": "Database Size near its limits!", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!", + "Database file size": "Database file size", + "%1 MiB of %2 MiB (%3%)": "%1 MiB of %2 MiB (%3%)", + "Data size": "Data size", + "virtAsstDatabaseSize": "%1 MiB. That is %2% of available database space.", + "virtAsstTitleDatabaseSize": "Database file size", + "Carbs/Food/Time": "Carbs/Food/Time", + "You have administration messages": "You have administration messages", + "Admin messages in queue": "Admin messages in queue", + "Queue empty": "Queue empty", + "There are no admin messages in queue": "There are no admin messages in queue", + "Please sign in using the API_SECRET to see your administration messages": "Please sign in using the API_SECRET to see your administration messages", + "Reads enabled in default permissions": "Reads enabled in default permissions", + "Data reads enabled": "Data reads enabled", + "Data writes enabled": "Data writes enabled", + "Data writes not enabled": "Data writes not enabled", + "Color prediction lines": "Color prediction lines", + "Release Notes": "Release Notes", + "Check for Updates": "Check for Updates", + "Open Source": "Open Source", + "Nightscout Info": "Nightscout Info", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.", + "Note that time shift is available only when viewing multiple days.": "Note that time shift is available only when viewing multiple days.", + "Please select a maximum of two weeks duration and click Show again.": "Please select a maximum of two weeks duration and click Show again.", + "Show profiles table": "Show profiles table", + "Show predictions": "Show predictions", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Timeshift on meals larger than %1 g carbs consumed between %2 and %3", + "Previous": "Previous", + "Previous day": "Previous day", + "Next day": "Next day", + "Next": "Next", + "Temp basal delta": "Temp basal delta", + "Authorized by token": "Authorized by token", + "Auth role": "Auth role", + "view without token": "view without token", + "Remove stored token": "Remove stored token", + "Weekly Distribution": "Weekly Distribution", + "Failed authentication": "Failed authentication", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?", + "Default (with leading zero and U)": "Default (with leading zero and U)", + "Concise (with U, without leading zero)": "Concise (with U, without leading zero)", + "Minimal (without leading zero and U)": "Minimal (without leading zero and U)", + "Small Bolus Display": "Small Bolus Display", + "Large Bolus Display": "Large Bolus Display", + "Bolus Display Threshold": "Bolus Display Threshold", + "%1 U and Over": "%1 U and Over", + "Event repeated %1 times.": "Event repeated %1 times.", + "minutes": "minutes", + "Last recorded %1 %2 ago.": "Last recorded %1 %2 ago.", + "Security issue": "Security issue", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.", + "less than 1": "less than 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system." +} diff --git a/translations/sl_SI.json b/translations/sl_SI.json new file mode 100644 index 00000000000..563e6c6d164 --- /dev/null +++ b/translations/sl_SI.json @@ -0,0 +1,707 @@ +{ + "Listening on port": "Poslušam na vratih", + "Mo": "Pon", + "Tu": "Tor", + "We": "Sre", + "Th": "Čet", + "Fr": "Pet", + "Sa": "Sob", + "Su": "Ned", + "Monday": "Pondelok", + "Tuesday": "Utorok", + "Wednesday": "Streda", + "Thursday": "Štvrtok", + "Friday": "Piatok", + "Saturday": "Sobota", + "Sunday": "Nedeľa", + "Category": "Kategória", + "Subcategory": "Podkategória", + "Name": "Meno", + "Today": "Dnes", + "Last 2 days": "Posledné 2 dni", + "Last 3 days": "Posledné 3 dni", + "Last week": "Posledný týždeň", + "Last 2 weeks": "Posledné 2 týždne", + "Last month": "Posledný mesiac", + "Last 3 months": "Posledné 3 mesiace", + "From": "Od", + "To": "Do", + "Notes": "Poznámky", + "Food": "Jedlo", + "Insulin": "Inzulín", + "Carbs": "Sacharidy", + "Notes contain": "Poznámky obsahujú", + "Target BG range bottom": "Cieľová glykémia spodná", + "top": "horná", + "Show": "Ukáž", + "Display": "Zobraz", + "Loading": "Nahrávam", + "Loading profile": "Nahrávam profil", + "Loading status": "Nahrávam status", + "Loading food database": "Nahrávam databázu jedál", + "not displayed": "Nie je zobrazené", + "Loading CGM data of": "Nahrávam CGM dáta", + "Loading treatments data of": "Nahrávam dáta ošetrenia", + "Processing data of": "Spracovávam dáta", + "Portion": "Porcia", + "Size": "Veľkosť", + "(none)": "(žiadny)", + "None": "Žiadny", + "": "<žiadny>", + "Result is empty": "Prázdny výsledok", + "Day to day": "Od dne do dne", + "Week to week": "Od tedna do tedna", + "Daily Stats": "Dnevna statistika", + "Percentile Chart": "Procentni Graf", + "Distribution": "Distribucija", + "Hourly stats": "Urna statistika", + "netIOB stats": "netIOB statistika", + "temp basals must be rendered to display this report": "zacasni basal mora biti prikazan za pregled tega porocila", + "No data available": "Podatki niso na voljo", + "Low": "Nizek", + "In Range": "V rozsahu", + "Period": "Obdobie", + "High": "Vysoká", + "Average": "Priemer", + "Low Quartile": "Nizky kvartil", + "Upper Quartile": "Vysoký kvartil", + "Quartile": "Kvartil", + "Date": "Dátum", + "Normal": "Normálny", + "Median": "Medián", + "Readings": "Záznamy", + "StDev": "Štand. odch.", + "Daily stats report": "Denné štatistiky", + "Glucose Percentile report": "Report percentilu glykémií", + "Glucose distribution": "Rozloženie glykémie", + "days total": "dní celkom", + "Total per day": "dní celkom", + "Overall": "Súhrn", + "Range": "Rozsah", + "% of Readings": "% záznamov", + "# of Readings": "Počet záznamov", + "Mean": "Stred", + "Standard Deviation": "Štandardná odchylka", + "Max": "Maksimalno", + "Min": "Minimalno", + "A1c estimation*": "Odhadované HbA1C*", + "Weekly Success": "Týždenná úspešnosť", + "There is not sufficient data to run this report. Select more days.": "Nedostatok dát. Vyberte dlhšie časové obdobie.", + "Using stored API secret hash": "Používam uložený API hash heslo", + "No API secret hash stored yet. You need to enter API secret.": "Nieje uložené žiadne API hash heslo. Musíte zadať API heslo.", + "Database loaded": "Databáza načítaná", + "Error: Database failed to load": "Chyba pri načítaní databázy", + "Error": "Napaka", + "Create new record": "Vytovriť nový záznam", + "Save record": "Uložiť záznam", + "Portions": "Porcií", + "Unit": "Jednot.", + "GI": "GI", + "Edit record": "Upraviť záznam", + "Delete record": "Zmazať záznam", + "Move to the top": "Presunúť na začiatok", + "Hidden": "Skrytý", + "Hide after use": "Skryť po použití", + "Your API secret must be at least 12 characters long": "Vaše API heslo musí mať najmenej 12 znakov", + "Bad API secret": "Nesprávne API heslo", + "API secret hash stored": "Hash API hesla uložený", + "Status": "Stanje", + "Not loaded": "Nenačítaný", + "Food Editor": "Editor jedál", + "Your database": "Vaša databáza", + "Filter": "Filtriraj", + "Save": "Uložiť", + "Clear": "Vymazať", + "Record": "Záznam", + "Quick picks": "Rýchly výber", + "Show hidden": "Zobraziť skryté", + "Your API secret or token": "Tvoja API koda ali token", + "Remember this device. (Do not enable this on public computers.)": "Zapomni si to napravo (ne omogoci tega na javnih racunalnikih)", + "Treatments": "Ošetrenie", + "Time": "Čas", + "Event Type": "Typ udalosti", + "Blood Glucose": "Glykémia", + "Entered By": "Zadal", + "Delete this treatment?": "Vymazať toto ošetrenie?", + "Carbs Given": "Sacharidov", + "Insulin Given": "Podaný inzulín", + "Event Time": "Čas udalosti", + "Please verify that the data entered is correct": "Prosím, skontrolujte správnosť zadaných údajov", + "BG": "Glykémia", + "Use BG correction in calculation": "Použite korekciu na glykémiu", + "BG from CGM (autoupdated)": "Glykémia z CGM (automatická aktualizácia) ", + "BG from meter": "Glykémia z glukomeru", + "Manual BG": "Ručne zadaná glykémia", + "Quickpick": "Rýchly výber", + "or": "alebo", + "Add from database": "Pridať z databázy", + "Use carbs correction in calculation": "Použite korekciu na sacharidy", + "Use COB correction in calculation": "Použite korekciu na COB", + "Use IOB in calculation": "Použite IOB vo výpočte", + "Other correction": "Iná korekcia", + "Rounding": "Zaokrúhlenie", + "Enter insulin correction in treatment": "Zadajte korekciu inzulínu do ošetrenia", + "Insulin needed": "Potrebný inzulín", + "Carbs needed": "Potrebné sacharidy", + "Carbs needed if Insulin total is negative value": "Potrebné sacharidy, ak je celkový inzulín záporná hodnota", + "Basal rate": "Bazál", + "60 minutes earlier": "60 min. pred", + "45 minutes earlier": "45 min. pred", + "30 minutes earlier": "30 min. pred", + "20 minutes earlier": "20 min. pred", + "15 minutes earlier": "15 min. pred", + "Time in minutes": "Čas v minútach", + "15 minutes later": "15 min. po", + "20 minutes later": "20 min. po", + "30 minutes later": "30 min. po", + "45 minutes later": "45 min. po", + "60 minutes later": "60 min. po", + "Additional Notes, Comments": "Ďalšie poznámky, komentáre", + "RETRO MODE": "V MINULOSTI", + "Now": "Teraz", + "Other": "Iný", + "Submit Form": "Odoslať formulár", + "Profile Editor": "Editor profilu", + "Reports": "Správy", + "Add food from your database": "Pridať jedlo z Vašej databázy", + "Reload database": "Obnoviť databázu", + "Add": "Pridať", + "Unauthorized": "Neautorizované", + "Entering record failed": "Zadanie záznamu zlyhalo", + "Device authenticated": "Zariadenie overené", + "Device not authenticated": "Zariadenie nieje overené", + "Authentication status": "Stav overenia", + "Authenticate": "Overiť", + "Remove": "Odstrániť", + "Your device is not authenticated yet": "Toto zariadenie zatiaľ nebolo overené", + "Sensor": "Senzor", + "Finger": "Glukomer", + "Manual": "Ručne", + "Scale": "Mierka", + "Linear": "Lineárne", + "Logarithmic": "Logaritmické", + "Logarithmic (Dynamic)": "Logaritmické (Dynamické)", + "Insulin-on-Board": "Aktívny inzulín (IOB)", + "Carbs-on-Board": "Aktívne sacharidy (COB)", + "Bolus Wizard Preview": "Bolus Wizard", + "Value Loaded": "Hodnoty načítané", + "Cannula Age": "Zavedenie kanyly (CAGE)", + "Basal Profile": "Bazál", + "Silence for 30 minutes": "Stíšiť na 30 minút", + "Silence for 60 minutes": "Stíšiť na 60 minút", + "Silence for 90 minutes": "Stíšiť na 90 minút", + "Silence for 120 minutes": "Stíšiť na 120 minút", + "Settings": "Nastavenia", + "Units": "Jednotky", + "Date format": "Formát času", + "12 hours": "12 hodín", + "24 hours": "24 hodín", + "Log a Treatment": "Záznam ošetrenia", + "BG Check": "Kontrola glykémie", + "Meal Bolus": "Bolus na jedlo", + "Snack Bolus": "Bolus na desiatu/olovrant", + "Correction Bolus": "Korekčný bolus", + "Carb Correction": "Prídavok sacharidov", + "Note": "Poznámka", + "Question": "Otázka", + "Exercise": "Cvičenie", + "Pump Site Change": "Výmena setu", + "CGM Sensor Start": "Spustenie senzoru", + "CGM Sensor Stop": "CGM Senzor Stop", + "CGM Sensor Insert": "Výmena senzoru", + "Sensor Code": "Koda senzorja", + "Transmitter ID": "Koda oddajnika", + "Dexcom Sensor Start": "Spustenie senzoru DEXCOM", + "Dexcom Sensor Change": "Výmena senzoru DEXCOM", + "Insulin Cartridge Change": "Výmena inzulínu", + "D.A.D. Alert": "Upozornenie signálneho psa", + "Glucose Reading": "Hodnota glykémie", + "Measurement Method": "Metóda merania", + "Meter": "Glukomer", + "Amount in grams": "Množstvo v gramoch", + "Amount in units": "Množstvo v jednotkách", + "View all treatments": "Zobraziť všetky ošetrenia", + "Enable Alarms": "Aktivovať alarmy", + "Pump Battery Change": "Zamenjaj baterijo crpalke", + "Pump Battery Age": "Pump Battery Age", + "Pump Battery Low Alarm": "Baterija crpalke nizka Alarm", + "Pump Battery change overdue!": "Čas za zamenjavo baterije črpalke prekoračen!", + "When enabled an alarm may sound.": "Pri aktivovanom alarme znie zvuk ", + "Urgent High Alarm": "Naliehavý alarm vysokej glykémie", + "High Alarm": "Alarm vysokej glykémie", + "Low Alarm": "Alarm nízkej glykémie", + "Urgent Low Alarm": "Naliehavý alarm nízkej glykémie", + "Stale Data: Warn": "Varovanie: Zastaralé dáta", + "Stale Data: Urgent": "Naliehavé: Zastaralé dáta", + "mins": "min.", + "Night Mode": "Nočný mód", + "When enabled the page will be dimmed from 10pm - 6am.": "Keď je povolený, obrazovka bude stlmená od 22:00 do 6:00.", + "Enable": "Povoliť", + "Show Raw BG Data": "Zobraziť RAW dáta", + "Never": "Nikdy", + "Always": "Vždy", + "When there is noise": "Pri šume", + "When enabled small white dots will be displayed for raw BG data": "Keď je povolené, malé bodky budú zobrazovať RAW dáta.", + "Custom Title": "Vlastný názov stránky", + "Theme": "Vzhľad", + "Default": "Predvolený", + "Colors": "Farebný", + "Colorblind-friendly colors": "Farby vhodné pre farboslepých", + "Reset, and use defaults": "Resetovať do pôvodného nastavenia", + "Calibrations": "Kalibrácie", + "Alarm Test / Smartphone Enable": "Test alarmu", + "Bolus Wizard": "Bolusový kalkulátor", + "in the future": "v budúcnosti", + "time ago": "čas pred", + "hr ago": "hod. pred", + "hrs ago": "hod. pred", + "min ago": "min. pred", + "mins ago": "min. pred", + "day ago": "deň pred", + "days ago": "dni pred", + "long ago": "veľmi dávno", + "Clean": "Čistý", + "Light": "Nízky", + "Medium": "Stredný", + "Heavy": "Veľký", + "Treatment type": "Typ ošetrenia", + "Raw BG": "RAW dáta glykémie", + "Device": "Zariadenie", + "Noise": "Šum", + "Calibration": "Kalibrácia", + "Show Plugins": "Zobraziť pluginy", + "About": "O aplikácii", + "Value in": "Hodnota v", + "Carb Time": "Čas jedla", + "Language": "Jazyk", + "Add new": "Pridať nový", + "g": "g", + "ml": "ml", + "pcs": "ks", + "Drag&drop food here": "Potiahni a pusti jedlo sem", + "Care Portal": "Portál starostlivosti", + "Medium/Unknown": "Stredný/Neznámi", + "IN THE FUTURE": "V BUDÚCNOSTI", + "Order": "Usporiadať", + "oldest on top": "najstaršie hore", + "newest on top": "najnovšie hore", + "All sensor events": "Všetky udalosti senzoru", + "Remove future items from mongo database": "Odobrať budúce položky z Mongo databázy", + "Find and remove treatments in the future": "Nájsť a odstrániť záznamy ošetrenia v budúcnosti", + "This task find and remove treatments in the future.": "Táto úloha nájde a odstáni záznamy ošetrenia v budúcnosti.", + "Remove treatments in the future": "Odstrániť záznamy ošetrenia v budúcnosti", + "Find and remove entries in the future": "Nájsť a odstrániť CGM dáta v budúcnosti", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "Táto úloha nájde a odstráni CGM dáta v budúcnosti vzniknuté zle nastaveným časom uploaderu.", + "Remove entries in the future": "Odstrániť CGM dáta v budúcnosti", + "Loading database ...": "Nahrávam databázu...", + "Database contains %1 future records": "Databáza obsahuje %1 záznamov v budúcnosti", + "Remove %1 selected records?": "Odstrániť %1 vybraných záznamov", + "Error loading database": "Chyba pri nahrávanií databázy", + "Record %1 removed ...": "%1 záznamov bolo odstránených...", + "Error removing record %1": "Chyba pri odstraňovaní záznamu %1", + "Deleting records ...": "Odstraňovanie záznamov...", + "%1 records deleted": "%1 podatkov izbrisanih", + "Clean Mongo status database": "Vyčistiť Mongo databázu statusov", + "Delete all documents from devicestatus collection": "Odstránenie všetkých záznamov z kolekcie \"devicestatus\"", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "Táto úloha vymaže všetky záznamy z kolekcie \"devicestatus\". Je to vhodné keď sa stav batérie nezobrazuje správne.", + "Delete all documents": "Zmazať všetky záznamy", + "Delete all documents from devicestatus collection?": "Zmazať všetky záznamy z kolekcie \"devicestatus\"?", + "Database contains %1 records": "Databáza obsahuje %1 záznamov", + "All records removed ...": "Všetky záznamy boli zmazané...", + "Delete all documents from devicestatus collection older than 30 days": "Izbriši vse dokumente starejše od 30 dni iz podatkov za stanje črpalke", + "Number of Days to Keep:": "Število dni, ki jih želite obdržati:", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "Ta funkcija izbriše vse dokumente starejše od 30 dni iz podatkov za stanje črpalke. Uporabno, v primeru ko stanje baterije uploader-ja ni pravilno osveženo.", + "Delete old documents from devicestatus collection?": "Izbriši vse stare dokumente iz podatkov za stanje črpalke?", + "Clean Mongo entries (glucose entries) database": "Izbriši vse Mongo vpise (meritve glukoze) v bazi podatkov", + "Delete all documents from entries collection older than 180 days": "Izbriši vse dokumente iz base podatkov za vnose starejše od 180 dni", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Ta funkcija izbriše vse dokumente starejše od 180 dni iz baze podatkov za vnose. Uporabno, v primeru ko stanje baterije uploader-ja ni pravilno osveženo.", + "Delete old documents": "Izbriši stare dokumente", + "Delete old documents from entries collection?": "Izbriši stare dokumente iz baze podatkov za vnose?", + "%1 is not a valid number": "%1 ni veljavna številka", + "%1 is not a valid number - must be more than 2": "%1 ni veljavna številka - mora biti večja od 2", + "Clean Mongo treatments database": "Izbriši vnose iz Mongo baze podatkov za zdravljenje", + "Delete all documents from treatments collection older than 180 days": "Izbriši vse dokumente starejše od 180 dni iz baze podatkov za zdravljenje", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Ta funkcija izbriše vse dokumente starejše od 180 dni iz podatkov za zdravljenje. Uporabno, v primeru ko stanje baterije uploader-ja ni pravilno osveženo.", + "Delete old documents from treatments collection?": "Izbriši stare dokumente iz baze podatkov za zdravljenje?", + "Admin Tools": "Nástroje pre správu", + "Nightscout reporting": "Nightscout výkazy", + "Cancel": "Zrušiť", + "Edit treatment": "Upraviť ošetrenie", + "Duration": "Trvanie", + "Duration in minutes": "Trvanie v minútach", + "Temp Basal": "Dočasný bazál", + "Temp Basal Start": "Začiatok dočasného bazálu", + "Temp Basal End": "Koniec dočasného bazálu", + "Percent": "Procent", + "Basal change in %": "Zmena bazálu v %", + "Basal value": "Hodnota bazálu", + "Absolute basal value": "Absolútna hodnota bazálu", + "Announcement": "Oznámenia", + "Loading temp basal data": "Nahrávam dáta dočasného bazálu", + "Save current record before changing to new?": "Uložiť súčastny záznam pred zmenou na nový?", + "Profile Switch": "Zmena profilu", + "Profile": "Profil", + "General profile settings": "Obecné nastavenia profilu", + "Title": "Názov", + "Database records": "Záznamy databázi", + "Add new record": "Pridať nový záznam", + "Remove this record": "Zmazať záznam", + "Clone this record to new": "Skopírovať záznam do nového", + "Record valid from": "Záznam platný od", + "Stored profiles": "Uložené profily", + "Timezone": "Časové pásmo", + "Duration of Insulin Activity (DIA)": "Doba pôsobenia inzulínu (DIA)", + "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.": "Predstavuje typickú dobu počas ktorej inzulín pôsobí. Býva rôzna od pacienta a od typu inzulínu. Zvyčajne sa pohybuje medzi 3-4 hodinami u pacienta s pumpou.", + "Insulin to carb ratio (I:C)": "Inzulín-sacharidový pomer (I:C)", + "Hours:": "Hodiny:", + "hours": "hodiny", + "g/hour": "g/hod", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "gramy sacharidov na jednotku inzulínu. Pomer udáva aké množstvo sacharidov pokryje jednotka inzulínu.", + "Insulin Sensitivity Factor (ISF)": "Citlivosť na inzulín (ISF)", + "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "mg/dL alebo mmol/L na jednotku inzulínu. Pomer udáva o koľko sa zmení hodnota glykémie po podaní jednotky inzulínu.", + "Carbs activity / absorption rate": "Rýchlosť vstrebávania sacharidov", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "gramy za jednotku času. Reprezentuje súčasne zmenu COB za jednotku času, ako aj množstvo sacharidov ktoré sa za tú dobu prejavili. Krivka vstrebávania sacharidov je omnoho menej pochopiteľná ako pôsobenie inzulínu (IOB), ale môže byť približne s použitím počiatočného oneskorenia a následne s konštantným vstrebávaním (g/hod). ", + "Basal rates [unit/hour]": "Bazál [U/hod]", + "Target BG range [mg/dL,mmol/L]": "Rozsah cieľovej glykémie [mg/dL,mmol/L]", + "Start of record validity": "Začiatok platnosti záznamu", + "Icicle": "Inverzne", + "Render Basal": "Zobrazenie bazálu", + "Profile used": "Použitý profil", + "Calculation is in target range.": "Výpočet je v cieľovom rozsahu.", + "Loading profile records ...": "Nahrávam záznamy profilov", + "Values loaded.": "Hodnoty načítané.", + "Default values used.": "Použité východzie hodnoty.", + "Error. Default values used.": "CHYBA! Použité východzie hodnoty.", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "Časové rozsahy pre cieľové glykémie sa nezhodujú. Hodnoty nastavené na východzie.", + "Valid from:": "Platné od:", + "Save current record before switching to new?": "Uložiť súčastný záznam pred prepnutím na nový?", + "Add new interval before": "Pridať nový interval pred", + "Delete interval": "Zmazať interval", + "I:C": "I:C", + "ISF": "ISF", + "Combo Bolus": "Kombinovaný bolus", + "Difference": "Rozdiel", + "New time": "Nový čas", + "Edit Mode": "Editačný mód", + "When enabled icon to start edit mode is visible": "Keď je povolený, je zobrazená ikona editačného módu", + "Operation": "Operácia", + "Move": "Presunúť", + "Delete": "Zmazať", + "Move insulin": "Presunúť inzulín", + "Move carbs": "Presunúť sacharidy", + "Remove insulin": "Odstrániť inzulín", + "Remove carbs": "Odstrániť sacharidy", + "Change treatment time to %1 ?": "Zmeniť čas ošetrenia na %1 ?", + "Change carbs time to %1 ?": "Zmeniť čas sacharidov na %1 ?", + "Change insulin time to %1 ?": "Zmeniť čas inzulínu na %1 ?", + "Remove treatment ?": "Odstrániť ošetrenie?", + "Remove insulin from treatment ?": "Odstrániť inzulín z ošetrenia?", + "Remove carbs from treatment ?": "Odstrániť sacharidy z ošetrenia?", + "Rendering": "Vykresľujem", + "Loading OpenAPS data of": "Nahrávam OpenAPS dáta z", + "Loading profile switch data": "Nahrávam dáta prepnutia profilu", + "Redirecting you to the Profile Editor to create a new profile.": "Zle nastavený profil.\nK zobrazenému času nieje definovaný žiadny profil.\nPresmerovávam na vytvorenie profilu.", + "Pump": "Pumpa", + "Sensor Age": "Zavedenie senzoru (SAGE)", + "Insulin Age": "Výmena inzulínu (IAGE)", + "Temporary target": "Dočasný cieľ", + "Reason": "Dôvod", + "Eating soon": "Jesť čoskoro", + "Top": "Vrchná", + "Bottom": "Spodná", + "Activity": "Aktivita", + "Targets": "Ciele", + "Bolus insulin:": "Bolusový inzulín:", + "Base basal insulin:": "Základný bazálny inzulín:", + "Positive temp basal insulin:": "Pozitívny dočasný bazálny inzulín:", + "Negative temp basal insulin:": "Negatívny dočasný bazálny inzulín:", + "Total basal insulin:": "Celkový bazálny inzulín:", + "Total daily insulin:": "Celkový denný inzulín:", + "Unable to save Role": "Napaka pri shranjevanju Vloge", + "Unable to delete Role": "Rola sa nedá zmazať", + "Database contains %1 roles": "Databáza obsahuje %1 rolí", + "Edit Role": "Editovať rolu", + "admin, school, family, etc": "administrátor, škola, rodina atď...", + "Permissions": "Oprávnenia", + "Are you sure you want to delete: ": "Naozaj zmazať:", + "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.": "Každá rola má 1 alebo viac oprávnení. Oprávnenie * je zástupný znak, oprávnenia sú hierarchie používajúce : ako oddelovač.", + "Add new Role": "Pridať novú rolu", + "Roles - Groups of People, Devices, etc": "Role - skupiny ľudí, zariadení atď...", + "Edit this role": "Editovať túto rolu", + "Admin authorized": "Admin autorizovaný", + "Subjects - People, Devices, etc": "Subjekty - ľudia, zariadenia atď...", + "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "Každý objekt má svoj unikátny prístupový token a 1 alebo viac rolí. Klikni na prístupový token pre otvorenie nového okna pre tento subjekt. Tento link je možné zdielať.", + "Add new Subject": "Pridať nový subjekt", + "Unable to save Subject": "Napaka pri shranjevanju Predmeta", + "Unable to delete Subject": "Subjekt sa nedá odstrániť", + "Database contains %1 subjects": "Databáza obsahuje %1 subjektov", + "Edit Subject": "Editovať subjekt", + "person, device, etc": "osoba, zariadenie atď...", + "role1, role2": "rola1, rola2", + "Edit this subject": "Editovať tento subjekt", + "Delete this subject": "Zmazať tento subjekt", + "Roles": "Rola", + "Access Token": "Prístupový Token", + "hour ago": "pred hodinou", + "hours ago": "hodín pred", + "Silence for %1 minutes": "Stíšiť na %1 minút", + "Check BG": "Skontrolovať glykémiu", + "BASAL": "BAZÁL", + "Current basal": "Aktuálny bazál", + "Sensitivity": "Citlivosť (ISF)", + "Current Carb Ratio": "Aktuálny sacharidový pomer (I\"C)", + "Basal timezone": "Časová zóna pre bazál", + "Active profile": "Aktívny profil", + "Active temp basal": "Aktívny dočasný bazál", + "Active temp basal start": "Štart dočasného bazálu", + "Active temp basal duration": "Trvanie dočasného bazálu", + "Active temp basal remaining": "Zostatok dočasného bazálu", + "Basal profile value": "Základná hodnota bazálu", + "Active combo bolus": "Aktívny kombinovaný bolus", + "Active combo bolus start": "Štart kombinovaného bolusu", + "Active combo bolus duration": "Trvanie kombinovaného bolusu", + "Active combo bolus remaining": "Zostávajúci kombinovaný bolus", + "BG Delta": "Zmena glykémie", + "Elapsed Time": "Uplynutý čas", + "Absolute Delta": "Absolútny rozdiel", + "Interpolated": "Interpolované", + "BWP": "BK", + "Urgent": "Urgentné", + "Warning": "Varovanie", + "Info": "Informacija", + "Lowest": "Najnižsie", + "Snoozing high alarm since there is enough IOB": "Odloženie alarmu vysokej glykémie, pretože je dostatok IOB", + "Check BG, time to bolus?": "Skontrolovať glykémiu, čas na bolus?", + "Notice": "Poznámka", + "required info missing": "chýbajúca informácia", + "Insulin on Board": "Aktívny inzulín (IOB)", + "Current target": "Aktuálny cieľ", + "Expected effect": "Očakávaný efekt", + "Expected outcome": "Očakávaný výsledok", + "Carb Equivalent": "Sacharidový ekvivalent", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "Nadbytok inzulínu o %1U viac ako je potrebné na dosiahnutie spodnej cieľovej hranice. Neráta sa so sacharidmi.", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "Nadbytok inzulínu o %1U viac ako je potrebné na dosiahnutie spodnej cieľovej hranice. UISTITE SA, ŽE JE TO POKRYTÉ SACHARIDMI", + "%1U reduction needed in active insulin to reach low target, too much basal?": "Nutné zníženie aktívneho inzulínu o %1U pre dosiahnutie spodnej cieľovej hranice. Príliš veľa bazálu?", + "basal adjustment out of range, give carbs?": "úprava pomocou zmeny bazálu nie je možná. Podať sacharidy?", + "basal adjustment out of range, give bolus?": "úprava pomocou zmeny bazálu nie je možná. Podať bolus?", + "above high": "nad horným", + "below low": "pod spodným", + "Projected BG %1 target": "Predpokladaná glykémia %1 cieľ", + "aiming at": "cieľom", + "Bolus %1 units": "Bolus %1 jednotiek", + "or adjust basal": "alebo úprava bazálu", + "Check BG using glucometer before correcting!": "Pred korekciou skontrolujte glykémiu glukometrom!", + "Basal reduction to account %1 units:": "Úprava bazálu pre výpočet %1 jednotiek:", + "30m temp basal": "30 minutový dočasný bazál", + "1h temp basal": "hodinový dočasný bazál", + "Cannula change overdue!": "Výmena kanyli po lehote!", + "Time to change cannula": "Čas na výmenu kanyli", + "Change cannula soon": "Čoskoro bude potrebné vymeniť kanylu", + "Cannula age %1 hours": "Vek kanyli %1 hodín", + "Inserted": "Zavedený", + "CAGE": "SET", + "COB": "SACH", + "Last Carbs": "Posledné sacharidy", + "IAGE": "INZ", + "Insulin reservoir change overdue!": "Čas na výmenu inzulínu po lehote!", + "Time to change insulin reservoir": "Čas na výmenu inzulínu", + "Change insulin reservoir soon": "Čoskoro bude potrebné vymeniť inzulín", + "Insulin reservoir age %1 hours": "Vek inzulínu %1 hodín", + "Changed": "Vymenený", + "IOB": "IOB", + "Careportal IOB": "IOB z portálu starostlivosti", + "Last Bolus": "Posledný bolus", + "Basal IOB": "Bazálny IOB", + "Source": "Zdroj", + "Stale data, check rig?": "Zastaralé dáta, skontrolujte uploader", + "Last received:": "Naposledy prijaté:", + "%1m ago": "pred %1m", + "%1h ago": "pred %1h", + "%1d ago": "pred %1d", + "RETRO": "RETRO", + "SAGE": "SENZ", + "Sensor change/restart overdue!": "Čas na výmenu/reštart sensoru uplynul!", + "Time to change/restart sensor": "Čas na výmenu/reštart senzoru", + "Change/restart sensor soon": "Čoskoro bude potrebné vymeniť/reštartovať senzor", + "Sensor age %1 days %2 hours": "Vek senzoru %1 dní %2 hodín", + "Sensor Insert": "Výmena senzoru", + "Sensor Start": "Štart senzoru", + "days": "dní", + "Insulin distribution": "Distribucija Insulina", + "To see this report, press SHOW while in this view": "Za pregled tega poročila, klikni SHOW v temu oknu", + "AR2 Forecast": "AR2 Napoved", + "OpenAPS Forecasts": "OpenAPS Napovedi", + "Temporary Target": "Začasni Cilj", + "Temporary Target Cancel": "Prekliči Začasni Cilj", + "OpenAPS Offline": "OpenAPS brez povezave", + "Profiles": "Profili", + "Time in fluctuation": "Čas v nihanju", + "Time in rapid fluctuation": "Čas v hitrem nihanju", + "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:": "Tole je samo groba ocena, ki je lahko zelo nenatančna in ne nadomesti dejanskega merjenja na krvi. Formula, ki je uporabljena je izpeljana iz:", + "Filter by hours": "Filtriraj po urah", + "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.": "Čas v nihanju in Čas v hitrem nihanju predstavljajo % časa izbranega časovnega intervala, v katerem se je glukoza spreminjala relativno hitro. Manjše vrednosti so boljše.", + "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.": "Povprečna Skupna Dnevna Sprememba je vsota vseh meritev glukoze v izbranem obdobju deljena s številom dni v izbranem obdobju. Nizka številka je boljša.", + "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "Povprečna Urna Sprememba je vsota vseh meritev glukoze v izbranem obdobju deljena s številom ur izbranega obdobja. Manjša številka je boljša.", + "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "\"RMS meritev izven izbranega področja\" je izračunana kot kvadratni koren vsote vseh kvadratnih vrednosti presežkov meritev izven izbranega ciljnega področja deljene s številom meritev. Ta metoda je podobna metodi za procent meritev, ki so v obsegu izbranega ciljnega področja, vendar daje večjo težo meritvam, ki so izven ciljnega področja. Manjše vrednosti so boljše.", + "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">najdete tukaj.", + "Mean Total Daily Change": "Pocprečna Skupna Dnevna Sprememba", + "Mean Hourly Change": "Povprečna Urna Sprememba", + "FortyFiveDown": "malce pada", + "FortyFiveUp": "malce narašča", + "Flat": "stabilno", + "SingleUp": "narašča", + "SingleDown": "pada", + "DoubleDown": "hitro pada", + "DoubleUp": "hitro narašča", + "virtAsstUnknown": "Ta vrednost je trenutno neznana. Prosim poglejte si Nightscout stran za več informacij.", + "virtAsstTitleAR2Forecast": "AR2 Napoved", + "virtAsstTitleCurrentBasal": "Trenutni Basal", + "virtAsstTitleCurrentCOB": "Trenutni COB", + "virtAsstTitleCurrentIOB": "Trenutni IOB", + "virtAsstTitleLaunch": "Dobrodošli na Nightscout", + "virtAsstTitleLoopForecast": "Loop Napoved", + "virtAsstTitleLastLoop": "Zadnji Loop", + "virtAsstTitleOpenAPSForecast": "OpenAPS Napoved", + "virtAsstTitlePumpReservoir": "Preostali Insulin", + "virtAsstTitlePumpBattery": "Baterija Črpalke", + "virtAsstTitleRawBG": "Trenutni RAW BG", + "virtAsstTitleUploaderBattery": "Baterija Uploader-ja", + "virtAsstTitleCurrentBG": "Trenutni BG", + "virtAsstTitleFullStatus": "Popolno Stanje", + "virtAsstTitleCGMMode": "CGM Način", + "virtAsstTitleCGMStatus": "CGM Stanje", + "virtAsstTitleCGMSessionAge": "CGM Dolžina Seje", + "virtAsstTitleCGMTxStatus": "CGM Transmitter Stanje", + "virtAsstTitleCGMTxAge": "CGM Transmitter Starost", + "virtAsstTitleCGMNoise": "CGM Motnje", + "virtAsstTitleDelta": "Sprememba Glukoze v krvi", + "virtAsstStatus": "%1 in %2 od %3.", + "virtAsstBasal": "%1 trenutni basal je %2 enot na uro", + "virtAsstBasalTemp": "%1 začasni basal od %2 enot na uro bo končal %3", + "virtAsstIob": "imaš %1 insulina v telesu.", + "virtAsstIobIntent": "Imaš %1 insulina v telesu", + "virtAsstIobUnits": "%1 enot od", + "virtAsstLaunch": "Kaj želite preveriti na Nightscout?", + "virtAsstPreamble": "Vaš", + "virtAsstPreamble3person": "%1 ima ", + "virtAsstNoInsulin": "ne", + "virtAsstUploadBattery": "Baterija tvojega uploader-ja je na %1", + "virtAsstReservoir": "Imaš %1 preostalih enot", + "virtAsstPumpBattery": "Baterija črpalke je na %1 %2", + "virtAsstUploaderBattery": "Baterija tvojega uploader-ja je na %1", + "virtAsstLastLoop": "Zadnji uspešen loop je bil %1", + "virtAsstLoopNotAvailable": "Kaže da Loop plugin ni omogočen", + "virtAsstLoopForecastAround": "Glede na loop napoved se pričakuje da bo približno %1 čez naslednjih %2", + "virtAsstLoopForecastBetween": "Glede na loop napoved se pričakuje da bo med %1 in %2 čez naslednjih %3", + "virtAsstAR2ForecastAround": "Glede na AR2 napoved se pričakuje da bo približno %1 čez naslednjih %2", + "virtAsstAR2ForecastBetween": "Glede na AR2 napoved se pričakuje da bo med %1 in %2 čez naslednjih %3", + "virtAsstForecastUnavailable": "Napoved ni možna na podlagi podatkov, ki so na voljo", + "virtAsstRawBG": "Tvoj raw bg je %1", + "virtAsstOpenAPSForecast": "OpenAPS Morebitni BG je %1", + "virtAsstCob3person": "%1 ima %2 ogljikovih hidratov v telesu", + "virtAsstCob": "Ti imaš %1 ogljikovih hidratov v telesu", + "virtAsstCGMMode": "Tvoj SGM način je bil %1 od %2.", + "virtAsstCGMStatus": "Tvoje CGM stanje je bilo %1 od %2.", + "virtAsstCGMSessAge": "Tvoja CGM seja je bila aktivna %1 dni in %2 ur.", + "virtAsstCGMSessNotStarted": "Trenutno ni aktivne CGM seje.", + "virtAsstCGMTxStatus": "Tvoj CGM oddajnik je bil %1 od %2.", + "virtAsstCGMTxAge": "Tvoj CGM oddajnik je star %1 dni.", + "virtAsstCGMNoise": "CGM motnje so bile %1 od %2.", + "virtAsstCGMBattOne": "Your CGM battery was %1 volts as of %2.", + "virtAsstCGMBattTwo": "Your CGM battery levels were %1 volts and %2 volts as of %3.", + "virtAsstDelta": "Your delta was %1 between %2 and %3.", + "virtAsstDeltaEstimated": "Your estimated delta was %1 between %2 and %3.", + "virtAsstUnknownIntentTitle": "Unknown Intent", + "virtAsstUnknownIntentText": "I'm sorry, I don't know what you're asking for.", + "Fat [g]": "Fat [g]", + "Protein [g]": "Protein [g]", + "Energy [kJ]": "Energy [kJ]", + "Clock Views:": "Clock Views:", + "Clock": "Clock", + "Color": "Color", + "Simple": "Simple", + "TDD average": "TDD average", + "Bolus average": "Bolus average", + "Basal average": "Basal average", + "Base basal average:": "Base basal average:", + "Carbs average": "Carbs average", + "Eating Soon": "Eating Soon", + "Last entry {0} minutes ago": "Last entry {0} minutes ago", + "change": "change", + "Speech": "Speech", + "Target Top": "Target Top", + "Target Bottom": "Target Bottom", + "Canceled": "Canceled", + "Meter BG": "Meter BG", + "predicted": "predicted", + "future": "future", + "ago": "ago", + "Last data received": "Last data received", + "Clock View": "Clock View", + "Protein": "Protein", + "Fat": "Fat", + "Protein average": "Protein average", + "Fat average": "Fat average", + "Total carbs": "Total carbs", + "Total protein": "Total protein", + "Total fat": "Total fat", + "Database Size": "Database Size", + "Database Size near its limits!": "Database Size near its limits!", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!", + "Database file size": "Database file size", + "%1 MiB of %2 MiB (%3%)": "%1 MiB of %2 MiB (%3%)", + "Data size": "Data size", + "virtAsstDatabaseSize": "%1 MiB. That is %2% of available database space.", + "virtAsstTitleDatabaseSize": "Database file size", + "Carbs/Food/Time": "Carbs/Food/Time", + "You have administration messages": "You have administration messages", + "Admin messages in queue": "Admin messages in queue", + "Queue empty": "Queue empty", + "There are no admin messages in queue": "Ni sporočil za administratorja v čakalni vrsti", + "Please sign in using the API_SECRET to see your administration messages": "Prosim prijavi se s pomočjo API_SECRET kode za pregled sporočil za administratorja", + "Reads enabled in default permissions": "Branje omogočeno v privzetih pravicah", + "Data reads enabled": "Branje podatkov omogočeno", + "Data writes enabled": "Pisanje podatkov omogočeno", + "Data writes not enabled": "Pisanje podatkov onemogočeno", + "Color prediction lines": "Barve črt za napovedi", + "Release Notes": "Opombe Izdaje", + "Check for Updates": "Preveri za posodobitve", + "Open Source": "Open Source", + "Nightscout Info": "Nightscout Informacije", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "Primarni namen Loopalyzer-ja je grafično prikazati delovanje Loop zaprte zanke. Mogoče bo deloval tudi z drugimi zaprtimi zankami, odprtimi zankami in drugi sistemi. Vendar odvisno od uploader-ja, ki ga uporabljate in s kako frekvenco shranjuje podatke in kako zapolnjuje manjkajoče podatke bodo nekateri grafi imeli luknje ali pa bodo popolnoma prazni. Vedno pazi na to, da so grafi smiselni. Najboljše je pregledati grafe po dnevih in se prepričati da so ustrezni.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer vključuje funkcijo časovnega zamika. Na primer, če imate zajtrk of 07:00 en dan in 08:00 naslednji dan bo krivulja povprečne glukoze teh dveh dni verjetno izgledala sploščena ne bo kazala dejanskega odziva po zajtrku. Funkcija časovnega zamika bo izračunala povprečni čas teh obrokov in zamaknila podatke (oglikovi hidrati, insulin, basal itd) tako, da čas teh obrokov poravnana s povprečnim časom teh obrokov.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "V temu primeru so vsi podatki prvega dne premaknjeni za 30 minut naprej v času in vsi podatki naslednjega dne za 30 minut nazaj v času, tako da izgleda kot da bi imeli zajtrk ob 07:30 dva dni zapored. To omogoča pregled dejanskega odziva povprečnega krvnega sladkorja na obroke.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Časovni zamik poudari čas po povprečnem času začetka obroka v sivi barvi za čas DIA (Duration of Insulin Action - Čas delovanja insulina). Ker so podatki celotnega dne zamaknjeni, pomeni da so lahko podatki izven sivega področja nenatančni.", + "Note that time shift is available only when viewing multiple days.": "Upoštevajte, da je časovni zamik omogočen samo pri pregledu več dni.", + "Please select a maximum of two weeks duration and click Show again.": "Prosim izberi časovni termin največ dveh tednov in klikni Show again.", + "Show profiles table": "Pokaži tabelo profilov", + "Show predictions": "Pokaži napovedi", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Časovni zamik jedi večjih od %1 g ogljikovih hidratov zaužitih med %2 in %3", + "Previous": "Prejšnji", + "Previous day": "Prejšnji dan", + "Next day": "Naslednji dan", + "Next": "Naslednji", + "Temp basal delta": "Sprememba začasni basal", + "Authorized by token": "Pooblaščen s žetonom", + "Auth role": "Pooblaščena vloga", + "view without token": "pregled brez žetona", + "Remove stored token": "Odstrani shranjeni žeton", + "Weekly Distribution": "Tedenska Distribucija", + "Failed authentication": "Neuspešno preverjanje pristnosti", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "Naprava z IP naslovom %1 je poskusila odpreti Nightscout z napačnimi dostopnimi podatki. Preveri, če imaš uploader z napačnim API_SECRET ali žetonom?", + "Default (with leading zero and U)": "Privzeto (vodilna ničla in U)", + "Concise (with U, without leading zero)": "Kratko (z U, brez vodilne ničle)", + "Minimal (without leading zero and U)": "Minimalno (brez vodilne ničle in U)", + "Small Bolus Display": "Mali Bolus Zaslon", + "Large Bolus Display": "Velik Bolus Zaslon", + "Bolus Display Threshold": "Meja za Bolus Zaslon", + "%1 U and Over": "%1 U in več", + "Event repeated %1 times.": "Dogodek ponovljen %1 - krat.", + "minutes": "minut", + "Last recorded %1 %2 ago.": "Zadnji zapis %1 pred %2.", + "Security issue": "Security issue", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.", + "less than 1": "less than 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system." +} diff --git a/translations/sv_SE.json b/translations/sv_SE.json new file mode 100644 index 00000000000..c6817eb61ae --- /dev/null +++ b/translations/sv_SE.json @@ -0,0 +1,707 @@ +{ + "Listening on port": "Lyssnar på port", + "Mo": "Mån", + "Tu": "Tis", + "We": "Ons", + "Th": "Tor", + "Fr": "Fre", + "Sa": "Lör", + "Su": "Sön", + "Monday": "Måndag", + "Tuesday": "Tisdag", + "Wednesday": "Onsdag", + "Thursday": "Torsdag", + "Friday": "Fredag", + "Saturday": "Lördag", + "Sunday": "Söndag", + "Category": "Kategori", + "Subcategory": "Underkategori", + "Name": "Namn", + "Today": "Idag", + "Last 2 days": "Senaste 2 dagarna", + "Last 3 days": "Senaste 3 dagarna", + "Last week": "Senaste veckan", + "Last 2 weeks": "Senaste 2 veckorna", + "Last month": "Senaste månaden", + "Last 3 months": "Senaste 3 månaderna", + "From": "Från", + "To": "Till", + "Notes": "Anteckningar", + "Food": "Mat", + "Insulin": "Insulin", + "Carbs": "Kolhydrater", + "Notes contain": "Anteckningar innehåller", + "Target BG range bottom": "Gräns för nedre blodsockervärde", + "top": "topp", + "Show": "Visa", + "Display": "Visa", + "Loading": "Laddar", + "Loading profile": "Laddar profil", + "Loading status": "Laddar status", + "Loading food database": "Laddar livsmedelsdatabas", + "not displayed": "visas inte", + "Loading CGM data of": "Laddar CGM-data för", + "Loading treatments data of": "Laddar behandlingsdata för", + "Processing data of": "Behandlar data för", + "Portion": "Portion", + "Size": "Storlek", + "(none)": "(ingen)", + "None": "Ingen", + "": "", + "Result is empty": "Resultat saknas", + "Day to day": "Dag för dag", + "Week to week": "Vecka till vecka", + "Daily Stats": "Dygnsstatistik", + "Percentile Chart": "Percentilgraf", + "Distribution": "Distribution", + "Hourly stats": "Timstatistik", + "netIOB stats": "Netto IOB statistik", + "temp basals must be rendered to display this report": "tempbasal måste visas för att visa denna rapport", + "No data available": "Data saknas", + "Low": "Låg", + "In Range": "Inom intervallet", + "Period": "Period", + "High": "Hög", + "Average": "Genomsnittligt", + "Low Quartile": "Nedre kvartil", + "Upper Quartile": "Övre kvartil", + "Quartile": "Kvartil", + "Date": "Datum", + "Normal": "Normal", + "Median": "Median", + "Readings": "Avläsningar", + "StDev": "Standardavvikelse", + "Daily stats report": "Dygnsstatistik", + "Glucose Percentile report": "Glukosrapport i procent", + "Glucose distribution": "Glukosdistribution", + "days total": "antal dagar", + "Total per day": "Totalt per dag", + "Overall": "Genomsnitt", + "Range": "Intervall", + "% of Readings": "% av avläsningar", + "# of Readings": "# av avläsningar", + "Mean": "Genomsnitt", + "Standard Deviation": "Standardavvikelse", + "Max": "Max", + "Min": "Min", + "A1c estimation*": "Beräknad A1c*", + "Weekly Success": "Veckoresultat", + "There is not sufficient data to run this report. Select more days.": "Inte tillräckling med data för att visa rapporten. Välj fler dagar.", + "Using stored API secret hash": "Använd hemlig API-nyckel", + "No API secret hash stored yet. You need to enter API secret.": "Hemlig API-nyckel saknas. Du måste ange API hemlighet.", + "Database loaded": "Databas laddad", + "Error: Database failed to load": "Fel: Databasen kunde inte läsas in", + "Error": "Fel", + "Create new record": "Skapa ny post", + "Save record": "Spara post", + "Portions": "Portion", + "Unit": "Enhet", + "GI": "GI", + "Edit record": "Editera post", + "Delete record": "Radera post", + "Move to the top": "Gå till toppen", + "Hidden": "Dold", + "Hide after use": "Dölj efter användning", + "Your API secret must be at least 12 characters long": "Hemlig API-nyckel måsta innehålla 12 tecken", + "Bad API secret": "Felaktig API-nyckel", + "API secret hash stored": "Lagrad hemlig API-hash", + "Status": "Status", + "Not loaded": "Ej laddad", + "Food Editor": "Födoämneseditor", + "Your database": "Din databas", + "Filter": "Filter", + "Save": "Spara", + "Clear": "Rensa", + "Record": "Post", + "Quick picks": "Snabbval", + "Show hidden": "Visa dolda", + "Your API secret or token": "Din API hemlighet eller token", + "Remember this device. (Do not enable this on public computers.)": "Kom ihåg den här enheten. (Aktivera inte detta på offentliga datorer.)", + "Treatments": "Behandlingar", + "Time": "Tid", + "Event Type": "Händelsetyp", + "Blood Glucose": "Blodsocker", + "Entered By": "Inlagt av", + "Delete this treatment?": "Ta bort händelse?", + "Carbs Given": "Antal kolhydrater", + "Insulin Given": "Insulindos", + "Event Time": "Klockslag", + "Please verify that the data entered is correct": "Vänligen verifiera att inlagd data är korrekt", + "BG": "BS", + "Use BG correction in calculation": "Använd BS för beräkning av korrigering", + "BG from CGM (autoupdated)": "BS från CGM (automatiskt)", + "BG from meter": "BS från blodsockermätare", + "Manual BG": "Manuellt BS", + "Quickpick": "Snabbval", + "or": "eller", + "Add from database": "Lägg till från databas", + "Use carbs correction in calculation": "Använd kolhydratkorrektion för beräkning", + "Use COB correction in calculation": "Använd aktiva kolhydrater för beräkning", + "Use IOB in calculation": "Använd aktivt insulin för beräkning", + "Other correction": "Övrig korrektion", + "Rounding": "Avrundning", + "Enter insulin correction in treatment": "Ange insulinkorrektion för händelse", + "Insulin needed": "Beräknad insulinmängd", + "Carbs needed": "Beräknad kolhydratmängd", + "Carbs needed if Insulin total is negative value": "Nödvändig kolhydratmängd för angiven insulinmängd", + "Basal rate": "Basaldos", + "60 minutes earlier": "60 min tidigare", + "45 minutes earlier": "45 min tidigare", + "30 minutes earlier": "30 min tidigare", + "20 minutes earlier": "20 min tidigare", + "15 minutes earlier": "15 min tidigare", + "Time in minutes": "Tid i minuter", + "15 minutes later": "15 min senare", + "20 minutes later": "20 min senare", + "30 minutes later": "30 min senare", + "45 minutes later": "45 min senare", + "60 minutes later": "60 min senare", + "Additional Notes, Comments": "Notering, övrigt", + "RETRO MODE": "Retroläge", + "Now": "Nu", + "Other": "Övrigt", + "Submit Form": "Överför händelse", + "Profile Editor": "Editera profil", + "Reports": "Rapportverktyg", + "Add food from your database": "Lägg till livsmedel från databas", + "Reload database": "Ladda om databas", + "Add": "Lägg till", + "Unauthorized": "Ej behörig", + "Entering record failed": "Lägga till post nekas", + "Device authenticated": "Enhet autentiserad", + "Device not authenticated": "Enhet EJ autentiserad", + "Authentication status": "Autentiseringsstatus", + "Authenticate": "Autentisera", + "Remove": "Ta bort", + "Your device is not authenticated yet": "Din enhet är ej autentiserad", + "Sensor": "Sensor", + "Finger": "Finger", + "Manual": "Manuell", + "Scale": "Skala", + "Linear": "Linjär", + "Logarithmic": "Logaritmisk", + "Logarithmic (Dynamic)": "Logaritmisk (Dynamisk)", + "Insulin-on-Board": "Aktivt insulin (IOB)", + "Carbs-on-Board": "Aktiva kolhydrater (COB)", + "Bolus Wizard Preview": "Boluskalkylator (BWP)", + "Value Loaded": "Laddat värde", + "Cannula Age": "Kanylålder (CAGE)", + "Basal Profile": "Basalprofil", + "Silence for 30 minutes": "Tyst i 30 min", + "Silence for 60 minutes": "Tyst i 60 min", + "Silence for 90 minutes": "Tyst i 90 min", + "Silence for 120 minutes": "Tyst i 120 min", + "Settings": "Inställningar", + "Units": "Enheter", + "Date format": "Datumformat", + "12 hours": "12-timmars", + "24 hours": "24-timmars", + "Log a Treatment": "Ange händelse", + "BG Check": "Blodsockerkontroll", + "Meal Bolus": "Måltidsbolus", + "Snack Bolus": "Mellanmålsbolus", + "Correction Bolus": "Korrektionsbolus", + "Carb Correction": "Kolhydratskorrektion", + "Note": "Notering", + "Question": "Fråga", + "Exercise": "Aktivitet", + "Pump Site Change": "Pump/nålbyte", + "CGM Sensor Start": "Sensorstart", + "CGM Sensor Stop": "CGM Sensor Stoppa", + "CGM Sensor Insert": "Sensorbyte", + "Sensor Code": "Sensor Kod", + "Transmitter ID": "Sändare ID", + "Dexcom Sensor Start": "Dexcom sensorstart", + "Dexcom Sensor Change": "Dexcom sensorbyte", + "Insulin Cartridge Change": "Insulinreservoarbyte", + "D.A.D. Alert": "Diabeteshundlarm (Duktig vovve!)", + "Glucose Reading": "Glukosvärde", + "Measurement Method": "Mätmetod", + "Meter": "Mätare", + "Amount in grams": "Antal gram", + "Amount in units": "Antal enheter", + "View all treatments": "Visa behandlingar", + "Enable Alarms": "Aktivera larm", + "Pump Battery Change": "Byte av pumpbatteri", + "Pump Battery Age": "Pump Batteriets ålder", + "Pump Battery Low Alarm": "Pumpbatteri lågt Alarm", + "Pump Battery change overdue!": "Pumpbatteriet måste bytas!", + "When enabled an alarm may sound.": "När markerad är ljudlarm aktivt", + "Urgent High Alarm": "Brådskande högt larmvärde", + "High Alarm": "Högt larmvärde", + "Low Alarm": "Lågt larmvärde", + "Urgent Low Alarm": "Brådskande lågt larmvärde", + "Stale Data: Warn": "Förfluten data: Varning!", + "Stale Data: Urgent": "Brådskande varning, inaktuell data", + "mins": "min", + "Night Mode": "Nattläge", + "When enabled the page will be dimmed from 10pm - 6am.": "När aktiverad dimmas sidan mellan 22:00 - 06:00", + "Enable": "Aktivera", + "Show Raw BG Data": "Visa RAW-data", + "Never": "Aldrig", + "Always": "Alltid", + "When there is noise": "När det är brus", + "When enabled small white dots will be displayed for raw BG data": "När aktiverad visar de vita punkterna RAW-blodglukosevärden", + "Custom Title": "Egen titel", + "Theme": "Tema", + "Default": "Standard", + "Colors": "Färg", + "Colorblind-friendly colors": "Högkontrastfärger", + "Reset, and use defaults": "Återställ standardvärden", + "Calibrations": "Kalibreringar", + "Alarm Test / Smartphone Enable": "Testa alarm / Aktivera Smatphone", + "Bolus Wizard": "Boluskalkylator", + "in the future": "framtida", + "time ago": "förfluten tid", + "hr ago": "timmar sedan", + "hrs ago": "Timmar sedan", + "min ago": "minut sedan", + "mins ago": "minuter sedan", + "day ago": "dag sedan", + "days ago": "dagar sedan", + "long ago": "länge sedan", + "Clean": "Rent", + "Light": "Lätt", + "Medium": "Måttligt", + "Heavy": "Rikligt", + "Treatment type": "Behandlingstyp", + "Raw BG": "RAW-BS", + "Device": "Enhet", + "Noise": "Brus", + "Calibration": "Kalibrering", + "Show Plugins": "Visa tillägg", + "About": "Om", + "Value in": "Värde om", + "Carb Time": "Kolhydratstid", + "Language": "Språk", + "Add new": "Lägg till ny", + "g": "g", + "ml": "ml", + "pcs": "st", + "Drag&drop food here": "Dra&Släpp mat här", + "Care Portal": "Vård Portal", + "Medium/Unknown": "Medium/Okänt", + "IN THE FUTURE": "Framtida", + "Order": "Sortering", + "oldest on top": "Äldst först", + "newest on top": "Nyast först", + "All sensor events": "Alla sensorhändelser", + "Remove future items from mongo database": "Ta bort framtida händelser från mongodatabasen", + "Find and remove treatments in the future": "Hitta och ta bort framtida behandlingar", + "This task find and remove treatments in the future.": "Denna uppgift hittar och rensar framtida händelser", + "Remove treatments in the future": "Ta bort framtida händelser", + "Find and remove entries in the future": "Hitta och ta bort framtida händelser", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "Denna uppgift hittar och tar bort framtida CGM-data skapad vid felaktig tidsinställning", + "Remove entries in the future": "Ta bort framtida händelser", + "Loading database ...": "Laddar databas ...", + "Database contains %1 future records": "Databas innehåller %1 framtida händelser", + "Remove %1 selected records?": "Ta bort %1 valda händelser", + "Error loading database": "Fel vid laddning av databas", + "Record %1 removed ...": "Händelse %1 borttagen ...", + "Error removing record %1": "Fel vid borttagning av %1", + "Deleting records ...": "Tar bort händelser ...", + "%1 records deleted": "%1 poster raderade", + "Clean Mongo status database": "Rensa Mongo status databas", + "Delete all documents from devicestatus collection": "Ta bort alla dokument i devicestatus-samlingen", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "Denna uppgift tar bort alla dokument från devicestatus-samlingen. Användbar när uppladdarens batteristatus inte uppdateras ordentligt.", + "Delete all documents": "Ta bort alla dokument", + "Delete all documents from devicestatus collection?": "Ta bort alla dokument från devicestatus-samlingen?", + "Database contains %1 records": "Databasen innehåller %1 händelser", + "All records removed ...": "Alla händelser raderade ...", + "Delete all documents from devicestatus collection older than 30 days": "Ta bort alla dokument från devicestatus-samling äldre än 30 dagar", + "Number of Days to Keep:": "Antal dagar att behålla:", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "Denna uppgift tar bort alla dokument från devicestatus-samling som är äldre än 30 dagar. Användbart när uppladdarens batteristatus inte är korrekt uppdaterad.", + "Delete old documents from devicestatus collection?": "Ta bort gamla dokument från devicestatus-samling?", + "Clean Mongo entries (glucose entries) database": "Rensa Mongo poster (glukos-poster) databas", + "Delete all documents from entries collection older than 180 days": "Ta bort alla dokument från insamling äldre än 180 dagar", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Denna uppgift tar bort alla dokument från insamlingsuppgifter som är äldre än 180 dagar. Användbar när uppladdarens batteristatus inte uppdateras ordentligt.", + "Delete old documents": "Ta bort gamla dokument", + "Delete old documents from entries collection?": "Ta bort gamla dokument från postsamlingen?", + "%1 is not a valid number": "%1 är inte ett giltigt nummer", + "%1 is not a valid number - must be more than 2": "%1 är inte ett giltigt tal - måste vara mer än 2", + "Clean Mongo treatments database": "Clean Mongo behandlingar databas", + "Delete all documents from treatments collection older than 180 days": "Ta bort alla dokument från behandlingar som är äldre än 180 dagar", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "Denna uppgift tar bort alla dokument från behandlingar som är äldre än 180 dagar. Användbar när uppladdarens batteristatus inte är korrekt uppdaterad.", + "Delete old documents from treatments collection?": "Ta bort gamla dokument från samlingen av behandlingar?", + "Admin Tools": "Adminverktyg", + "Nightscout reporting": "Nightscout - Statistik", + "Cancel": "Avbryt", + "Edit treatment": "Redigera behandling", + "Duration": "Varaktighet", + "Duration in minutes": "Varaktighet i minuter", + "Temp Basal": "Temporär basal", + "Temp Basal Start": "Temporär basalstart", + "Temp Basal End": "Temporär basalavslut", + "Percent": "Procent", + "Basal change in %": "Basaländring i %", + "Basal value": "Basalvärde", + "Absolute basal value": "Absolut basalvärde", + "Announcement": "Avisering", + "Loading temp basal data": "Laddar temporär basaldata", + "Save current record before changing to new?": "Spara aktuell data innan skifte till ny?", + "Profile Switch": "Ny profil", + "Profile": "Profil", + "General profile settings": "Allmän profilinställning", + "Title": "Titel", + "Database records": "Databashändelser", + "Add new record": "Lägg till ny händelse", + "Remove this record": "Ta bort denna händelse", + "Clone this record to new": "Kopiera denna händelse till ny", + "Record valid from": "Händelse giltig från", + "Stored profiles": "Lagrad profil", + "Timezone": "Tidszon", + "Duration of Insulin Activity (DIA)": "Verkningstid för insulin (DIA)", + "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.": "Beskriver under hur lång tid insulinet verkar. Varierar mellan patienter. Typisk varaktighet 3-4 timmar.", + "Insulin to carb ratio (I:C)": "Insulin-Kolhydratskvot", + "Hours:": "Timmar:", + "hours": "timmar", + "g/hour": "g/timme", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "gram kolhydrater per enhet insulin. Antal gram kolhydrater varje enhet insulin sänker", + "Insulin Sensitivity Factor (ISF)": "Insulinkänslighetsfaktor (ISF)", + "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "mg/dl eller mmol per enhet insulin. Hur varje enhet insulin sänker blodsockret", + "Carbs activity / absorption rate": "Kolhydratstid", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "gram per tidsenhet. Representerar både ändring i aktiva kolhydrater per tidsenhet som mängden kolhydrater som tas upp under denna tid. Kolhydratsupptag / aktivitetskurvor är svårare att förutspå än aktivt insulin men kan beräknas genom att använda en startfördröjning följd av en konstant absorbtionsgrad (g/timme) ", + "Basal rates [unit/hour]": "Basal [enhet/t]", + "Target BG range [mg/dL,mmol/L]": "Önskvärt blodsockerintervall [mg/dl,mmol]", + "Start of record validity": "Starttid för händelse", + "Icicle": "Istapp", + "Render Basal": "Generera Basal", + "Profile used": "Vald profil", + "Calculation is in target range.": "Inom intervallområde", + "Loading profile records ...": "Laddar profildata ...", + "Values loaded.": "Värden laddas", + "Default values used.": "Standardvärden valda", + "Error. Default values used.": "Error. Standardvärden valda.", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "Tidsintervall för målområde låg och hög stämmer ej", + "Valid from:": "Giltig från:", + "Save current record before switching to new?": "Spara före byte till nytt?", + "Add new interval before": "Lägg till nytt intervall före", + "Delete interval": "Ta bort intervall", + "I:C": "I:C", + "ISF": "ISF", + "Combo Bolus": "Combo-bolus", + "Difference": "Skillnad", + "New time": "Ny tid", + "Edit Mode": "Editeringsläge", + "When enabled icon to start edit mode is visible": "Ikon visas när editeringsläge är aktivt", + "Operation": "Åtgärd", + "Move": "Flytta", + "Delete": "Ta bort", + "Move insulin": "Flytta insulin", + "Move carbs": "Flytta kolhydrater", + "Remove insulin": "Ta bort insulin", + "Remove carbs": "Ta bort kolhydrater", + "Change treatment time to %1 ?": "Ändra behandlingstid till %1 ?", + "Change carbs time to %1 ?": "Ändra kolhydratstid till %1 ?", + "Change insulin time to %1 ?": "Ändra insulintid till %1 ?", + "Remove treatment ?": "Ta bort behandling ?", + "Remove insulin from treatment ?": "Ta bort insulin från behandling ?", + "Remove carbs from treatment ?": "Ta bort kolhydrater från behandling ?", + "Rendering": "Renderar", + "Loading OpenAPS data of": "Laddar OpenAPS data för", + "Loading profile switch data": "Laddar ny profildata", + "Redirecting you to the Profile Editor to create a new profile.": "Fel profilinställning.\nIngen profil vald för vald tid.\nOmdirigerar för att skapa ny profil.", + "Pump": "Pump", + "Sensor Age": "Sensorålder (SAGE)", + "Insulin Age": "Insulinålder (IAGE)", + "Temporary target": "Tillfälligt mål", + "Reason": "Orsak", + "Eating soon": "Snart matdags", + "Top": "Toppen", + "Bottom": "Botten", + "Activity": "Aktivitet", + "Targets": "Mål", + "Bolus insulin:": "Bolusinsulin:", + "Base basal insulin:": "Basalinsulin:", + "Positive temp basal insulin:": "Positiv tempbasal insulin:", + "Negative temp basal insulin:": "Negativ tempbasal för insulin:", + "Total basal insulin:": "Total dagsdos basalinsulin:", + "Total daily insulin:": "Total dagsdos insulin", + "Unable to save Role": "Det går inte att spara Roll", + "Unable to delete Role": "Kan ej ta bort roll", + "Database contains %1 roles": "Databasen innehåller %1 roller", + "Edit Role": "Editera roll", + "admin, school, family, etc": "Administratör, skola, familj, etc", + "Permissions": "Rättigheter", + "Are you sure you want to delete: ": "Är du säker att du vill ta bort:", + "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.": "Varje roll kommer få en eller flera rättigheter. * är en wildcard, rättigheter sätts hirarkiskt med : som avgränsare.", + "Add new Role": "Lägg till roll", + "Roles - Groups of People, Devices, etc": "Roller - Grupp av användare, Enheter, etc", + "Edit this role": "Editera denna roll", + "Admin authorized": "Administratorgodkänt", + "Subjects - People, Devices, etc": "Ämnen - Användare, Enheter, etc", + "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "Varje ämne får en unik säkerhetsnyckel och en eller flera roller. Klicka på accessnyckeln för att öppna en ny vy med det valda ämnet, denna hemliga länk kan sedan delas.", + "Add new Subject": "Lägg till nytt ämne", + "Unable to save Subject": "Det gick inte att spara Ämnet", + "Unable to delete Subject": "Kan ej ta bort ämne", + "Database contains %1 subjects": "Databasen innehåller %1 ämnen", + "Edit Subject": "Editera ämne", + "person, device, etc": "person,enhet,etc", + "role1, role2": "Roll1, Roll2", + "Edit this subject": "Editera ämnet", + "Delete this subject": "Ta bort ämnet", + "Roles": "Roller", + "Access Token": "Åtkomstnyckel", + "hour ago": "timme sedan", + "hours ago": "timmar sedan", + "Silence for %1 minutes": "Tyst i %1 minuter", + "Check BG": "Kontrollera blodglukos", + "BASAL": "BASAL", + "Current basal": "Nuvarande basal", + "Sensitivity": "Insulinkönslighet (ISF)", + "Current Carb Ratio": "Gällande kolhydratkvot", + "Basal timezone": "Basal tidszon", + "Active profile": "Aktiv profil", + "Active temp basal": "Aktiv tempbasal", + "Active temp basal start": "Aktiv tempbasal start", + "Active temp basal duration": "Aktiv tempbasal varaktighetstid", + "Active temp basal remaining": "Återstående tempbasaltid", + "Basal profile value": "Basalprofil värde", + "Active combo bolus": "Aktiv kombobolus", + "Active combo bolus start": "Aktiv kombobolus start", + "Active combo bolus duration": "Aktiv kombibolus varaktighet", + "Active combo bolus remaining": "Återstående aktiv kombibolus", + "BG Delta": "BS deltavärde", + "Elapsed Time": "Förfluten tid", + "Absolute Delta": "Absolut deltavärde", + "Interpolated": "Interpolerad", + "BWP": "Boluskalkylator", + "Urgent": "Akut", + "Warning": "Varning", + "Info": "Information", + "Lowest": "Lägsta", + "Snoozing high alarm since there is enough IOB": "Snoozar höglarm då aktivt insulin är tillräckligt", + "Check BG, time to bolus?": "Kontrollera BS, dags att ge bolus?", + "Notice": "Notering", + "required info missing": "Nödvändig information saknas", + "Insulin on Board": "Aktivt insulin (IOB)", + "Current target": "Aktuellt mål", + "Expected effect": "Förväntad effekt", + "Expected outcome": "Förväntat resultat", + "Carb Equivalent": "Kolhydratsinnehåll", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "Överskott av insulin motsvarande %1U mer än nödvändigt för att nå lågt målvärde, kolhydrater ej medräknade", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "Överskott av insulin motsvarande %1U mer än nödvändigt för att nå lågt målvärde, SÄKERSTÄLL ATT IOB TÄCKS AV KOLHYDRATER", + "%1U reduction needed in active insulin to reach low target, too much basal?": "%1U minskning nödvändig i aktivt insulin för att nå lågt målvärde, för hög basal?", + "basal adjustment out of range, give carbs?": "basaländring utanför gräns, ge kolhydrater?", + "basal adjustment out of range, give bolus?": "basaländring utanför gräns, ge bolus?", + "above high": "över hög nivå", + "below low": "under låg nivå", + "Projected BG %1 target": "Önskat BS %1 mål", + "aiming at": "önskad utgång", + "Bolus %1 units": "Bolus %1 enheter", + "or adjust basal": "eller justera basal", + "Check BG using glucometer before correcting!": "Kontrollera blodglukos med fingerstick före korrigering!", + "Basal reduction to account %1 units:": "Basalsänkning för att nå %1 enheter", + "30m temp basal": "30 minuters temporär basal", + "1h temp basal": "60 minuters temporär basal", + "Cannula change overdue!": "Infusionsset, bytestid överskriden", + "Time to change cannula": "Dags att byta infusionsset", + "Change cannula soon": "Byt infusionsset snart", + "Cannula age %1 hours": "Infusionsset tid %1 timmar", + "Inserted": "Applicerad", + "CAGE": "Nål", + "COB": "COB", + "Last Carbs": "Senaste kolhydrater", + "IAGE": "Insulinålder", + "Insulin reservoir change overdue!": "Insulinbytestid överskriden", + "Time to change insulin reservoir": "Dags att byta insulinreservoar", + "Change insulin reservoir soon": "Byt insulinreservoar snart", + "Insulin reservoir age %1 hours": "Insulinreservoarsålder %1 timmar", + "Changed": "Bytt", + "IOB": "IOB", + "Careportal IOB": "IOB i Careportal", + "Last Bolus": "Senaste Bolus", + "Basal IOB": "Basal IOB", + "Source": "Källa", + "Stale data, check rig?": "Gammal data, kontrollera rigg?", + "Last received:": "Senast mottagen:", + "%1m ago": "%1m sedan", + "%1h ago": "%1h sedan", + "%1d ago": "%1d sedan", + "RETRO": "RETRO", + "SAGE": "Sensor", + "Sensor change/restart overdue!": "Sensor byte/omstart överskriden!", + "Time to change/restart sensor": "Dags att byta/starta om sensorn", + "Change/restart sensor soon": "Byt/starta om sensorn snart", + "Sensor age %1 days %2 hours": "Sensorålder %1 dagar %2 timmar", + "Sensor Insert": "Sensor insättning", + "Sensor Start": "Sensorstart", + "days": "dagar", + "Insulin distribution": "Insulindistribution", + "To see this report, press SHOW while in this view": "För att se denna rapport, klicka på \"Visa\"", + "AR2 Forecast": "AR2 Förutsägelse", + "OpenAPS Forecasts": "OpenAPS Förutsägelse", + "Temporary Target": "Tillfälligt mål", + "Temporary Target Cancel": "Avsluta tillfälligt mål", + "OpenAPS Offline": "OpenAPS Offline", + "Profiles": "Profiler", + "Time in fluctuation": "Tid i fluktation", + "Time in rapid fluctuation": "Tid i snabb fluktation", + "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:": "Detta är en grov uppskattning som kan vara missvisande. Det ersätter inte blodprov. Formeln är hämtad från:", + "Filter by hours": "Filtrera per timme", + "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.": "Tid i fluktuation och tid i snabb fluktuation mäter% av tiden under den undersökta perioden, under vilken blodsockret har förändrats relativt snabbt eller snabbt. Lägre värden är bättre", + "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.": "Medel Total Daglig Förändring är summan av absolutvärdet av alla glukosförändringar under den undersökta perioden, dividerat med antalet dagar. Lägre är bättre.", + "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "Medelvärde per timme är summan av absolutvärdet av alla glukosförändringar under den undersökta perioden dividerat med antalet timmar under perioden. Lägre är bättre.", + "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "Utanför intervall RMS beräknas genom att kvadrera avståndet utanför intervallet för alla glukosavläsningar under den undersökta perioden, summera dem, dividera med räkningen och ta kvadratroten. Denna mätning liknar procentandelen inom intervallet men väger avläsningar långt utanför området högre. Lägre värden är bättre.", + "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">här.", + "Mean Total Daily Change": "Medel Total Daglig Förändring", + "Mean Hourly Change": "Medelvärde per timme", + "FortyFiveDown": "något sjunkande", + "FortyFiveUp": "något stigande", + "Flat": "håller", + "SingleUp": "stiger", + "SingleDown": "sjunker", + "DoubleDown": "snabbt sjunkande", + "DoubleUp": "snabbt stigande", + "virtAsstUnknown": "Det värdet är okänt just nu. Se din Nightscout sida för mer information.", + "virtAsstTitleAR2Forecast": "AR2 Prognos", + "virtAsstTitleCurrentBasal": "Nuvarande basal", + "virtAsstTitleCurrentCOB": "Nuvarande COB", + "virtAsstTitleCurrentIOB": "Nuvarande IOB", + "virtAsstTitleLaunch": "Välkommen till Nightscout", + "virtAsstTitleLoopForecast": "Loop prognos", + "virtAsstTitleLastLoop": "Senaste Loopen", + "virtAsstTitleOpenAPSForecast": "OpenAPS Prognos", + "virtAsstTitlePumpReservoir": "Återstående insulin", + "virtAsstTitlePumpBattery": "Pump Batteri", + "virtAsstTitleRawBG": "Nuvarande Rå BG", + "virtAsstTitleUploaderBattery": "Batteri uppladdare", + "virtAsstTitleCurrentBG": "Nuvarande BG", + "virtAsstTitleFullStatus": "Fullständig status", + "virtAsstTitleCGMMode": "CGM läge", + "virtAsstTitleCGMStatus": "CGM Status", + "virtAsstTitleCGMSessionAge": "CGM session ålder", + "virtAsstTitleCGMTxStatus": "CGM Sändarstatus", + "virtAsstTitleCGMTxAge": "CGM Sändare Ålder", + "virtAsstTitleCGMNoise": "CGM Brus", + "virtAsstTitleDelta": "Blodsocker Delta", + "virtAsstStatus": "%1 och %2 från och med %3.", + "virtAsstBasal": "%1 nuvarande basal är %2 enheter per timme", + "virtAsstBasalTemp": "%1 temp basal av %2 enheter per timme kommer att sluta %3", + "virtAsstIob": "och du har %1 insulin ombord.", + "virtAsstIobIntent": "Du har %1 insulin ombord", + "virtAsstIobUnits": "%1 enheter av", + "virtAsstLaunch": "Vad skulle du vilja kolla på Nightscout?", + "virtAsstPreamble": "Din", + "virtAsstPreamble3person": "%1 har en ", + "virtAsstNoInsulin": "nej", + "virtAsstUploadBattery": "Din uppladdares batteri är %1", + "virtAsstReservoir": "Du har %1 enheter kvar", + "virtAsstPumpBattery": "Din pumps batteri är %1 %2", + "virtAsstUploaderBattery": "Din uppladdares batteri är %1", + "virtAsstLastLoop": "Senaste lyckade loop var %1", + "virtAsstLoopNotAvailable": "Loop plugin verkar inte vara aktiverad", + "virtAsstLoopForecastAround": "Enligt Loops förutsägelse förväntas du bli around %1 inom %2", + "virtAsstLoopForecastBetween": "Enligt Loops förutsägelse förväntas du bli between %1 and %2 inom %3", + "virtAsstAR2ForecastAround": "Enligt AR2 prognosen förväntas du vara runt %1 under nästa %2", + "virtAsstAR2ForecastBetween": "Enligt AR2 prognosen förväntas du vara mellan %1 och %2 under de kommande %3", + "virtAsstForecastUnavailable": "Förutsägelse ej möjlig med tillgänlig data", + "virtAsstRawBG": "Ditt raw blodsocker är %1", + "virtAsstOpenAPSForecast": "OpenAPS slutgiltigt blodsocker är %1", + "virtAsstCob3person": "%1 har %2 kolhydrater ombord", + "virtAsstCob": "Du har %1 kolhydrater ombord", + "virtAsstCGMMode": "Ditt CGM läge var %1 från och med %2.", + "virtAsstCGMStatus": "Din CGM status var %1 från och med %2.", + "virtAsstCGMSessAge": "Din CGM session har varit aktiv i %1 dagar och %2 timmar.", + "virtAsstCGMSessNotStarted": "Det finns för närvarande ingen aktiv GMO-session.", + "virtAsstCGMTxStatus": "Din CGM sändarstatus var %1 från och med %2.", + "virtAsstCGMTxAge": "Din CGM sändare är %1 dagar gammal.", + "virtAsstCGMNoise": "Ditt CGM brus var %1 från och med %2.", + "virtAsstCGMBattOne": "Ditt CGM batteri var %1 volt från och med %2.", + "virtAsstCGMBattTwo": "Dina CGM batterinivåer var %1 volt och %2 volt från och med %3.", + "virtAsstDelta": "Ditt delta var %1 mellan %2 och %3.", + "virtAsstDeltaEstimated": "Ditt uppskattade delta var %1 mellan %2 och %3.", + "virtAsstUnknownIntentTitle": "Okänd Avsikt", + "virtAsstUnknownIntentText": "Jag är ledsen, jag vet inte vad du ber om.", + "Fat [g]": "Fett [g]", + "Protein [g]": "Protein [g]", + "Energy [kJ]": "Energi [kJ]", + "Clock Views:": "Visa klocka:", + "Clock": "Klocka", + "Color": "Färg", + "Simple": "Simpel", + "TDD average": "Genomsnittlig daglig mängd insulin", + "Bolus average": "Bolus genomsnitt", + "Basal average": "Basal genomsnitt", + "Base basal average:": "Bas basal genomsnitt:", + "Carbs average": "Genomsnittlig mängd kolhydrater per dag", + "Eating Soon": "Äter snart", + "Last entry {0} minutes ago": "Senaste värde {0} minuter sedan", + "change": "byta", + "Speech": "Tal", + "Target Top": "Högt målvärde", + "Target Bottom": "Lågt målvärde", + "Canceled": "Avbruten", + "Meter BG": "Blodsockermätare BG", + "predicted": "prognos", + "future": "framtida", + "ago": "förfluten", + "Last data received": "Data senast mottagen", + "Clock View": "Visa klocka", + "Protein": "Protein", + "Fat": "Fett", + "Protein average": "Protein genomsnitt", + "Fat average": "Fett genomsnitt", + "Total carbs": "Totalt kolhydrater", + "Total protein": "Totalt protein", + "Total fat": "Totalt fett", + "Database Size": "Databasens Storlek", + "Database Size near its limits!": "Databasens Storlek nära dess gränser!", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "Databasens storlek är %1 MiB av %2 MiB. Säkerhetskopiera och rensa upp databasen!", + "Database file size": "Databasens filstorlek", + "%1 MiB of %2 MiB (%3%)": "%1 MiB av %2 MiB (%3%)", + "Data size": "Datastorlek", + "virtAsstDatabaseSize": "%1 MiB. Det är %2% av tillgänglig databasutrymme.", + "virtAsstTitleDatabaseSize": "Databasens filstorlek", + "Carbs/Food/Time": "Kolhydrater/Mat/Tid", + "You have administration messages": "Du har administrationsmeddelanden", + "Admin messages in queue": "Admin meddelanden i kö", + "Queue empty": "Kön är tom", + "There are no admin messages in queue": "Det finns inga administratörsmeddelanden i kön", + "Please sign in using the API_SECRET to see your administration messages": "Logga in med API_SECRET för att se dina administrationsmeddelanden", + "Reads enabled in default permissions": "Läser aktiverade i standardbehörigheter", + "Data reads enabled": "Dataläsningar aktiverade", + "Data writes enabled": "Dataskrivningar aktiverade", + "Data writes not enabled": "Dataskrivningar är inte aktiverade", + "Color prediction lines": "Färgsätt prognosrader", + "Release Notes": "Ändringslogg", + "Check for Updates": "Sök efter uppdateringar", + "Open Source": "Öppen källkod", + "Nightscout Info": "Nightscout Info", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "Det primära syftet med Loopalyzer är att visualisera hur Loop slutna loop-systemet fungerar. Det kan fungera med andra installationer också, både stängda och öppna loop, och icke loop. Men beroende på vilken uppladdare du använder, hur ofta den kan samla in dina data och ladda upp, och hur den kan återfylla saknade data vissa grafer kan ha luckor eller till och med vara helt tom. Se alltid till att graferna ser rimliga ut. Bäst är att se en dag i taget och bläddra igenom ett antal dagar först att se.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer innehåller en time shift-funktion. Om du till exempel äter frukost kl 07:00 en dag och kl 08:00 dagen efter din genomsnittliga blodsockerkurva dessa två dagar kommer sannolikt att se tillplattad ut och inte visa det faktiska svaret efter en frukost. Tidsskiftet kommer att beräkna den genomsnittliga tiden dessa måltider äts och sedan flytta alla data (kolhydrater, insulin, basal etc.) under båda dagarna motsvarande tidsskillnad så att båda måltiderna överensstämmer med den genomsnittliga måltiden starttid.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "I detta exempel skjuts all data från första dagen 30 minuter framåt i tid och all data från andra dagen 30 minuter bakåt i tiden så det verkar som om du hade haft frukost klockan 07:30 båda dagarna. Detta gör att du kan se din faktiska genomsnittliga blodsockersvar från en måltid.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Tidsskiftet belyser perioden efter den genomsnittliga måltidens starttid i grått, under tiden för DIA (Varaktighet av Insulin Action). Eftersom alla datapunkter hela dagen skiftas kurvorna utanför det gråa området kanske inte är korrekta.", + "Note that time shift is available only when viewing multiple days.": "Observera att tidsförskjutning endast är tillgänglig vid visning av flera dagar.", + "Please select a maximum of two weeks duration and click Show again.": "Välj högst två veckor varaktighet och klicka på Visa igen.", + "Show profiles table": "Visa profiltabellen", + "Show predictions": "Visa förutsägelser", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Timeshift på måltider större än %1 g kolhydrater konsumeras mellan %2 och %3", + "Previous": "Föregående", + "Previous day": "Föregående dag", + "Next day": "Nästa dag", + "Next": "Nästa", + "Temp basal delta": "Temp basal delta", + "Authorized by token": "Auktoriserad av token", + "Auth role": "Auth roll", + "view without token": "visa utan token", + "Remove stored token": "Ta bort sparad token", + "Weekly Distribution": "Fördelning veckovis", + "Failed authentication": "Misslyckad autentisering", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "En enhet på IP-adress %1 försökte autentisera med Nightscout med fel uppgifter. Kontrollera om du har en uppladdare med fel API_SECRET eller token?", + "Default (with leading zero and U)": "Standard (med ledande nolla och U)", + "Concise (with U, without leading zero)": "Kortfattad (med U, utan ledande nolla)", + "Minimal (without leading zero and U)": "Minimal (utan ledande nolla och U)", + "Small Bolus Display": "Liten bolusskärm", + "Large Bolus Display": "Stor bolusskärm", + "Bolus Display Threshold": "Tröskelvärde för bolusdisplay", + "%1 U and Over": "%1 U och Över", + "Event repeated %1 times.": "Händelsen upprepas %1 gånger.", + "minutes": "minuter", + "Last recorded %1 %2 ago.": "Senast inspelad för %1 %2 sedan.", + "Security issue": "Säkerhetsproblem", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Svag API_SECRET upptäckt. Använd en blandning av små och KAPITALA bokstäver, siffror och icke-alfanumeriska tecken som !#%&/ för att minska risken för obehörig åtkomst. Den minsta längden på API_SECRET är 12 tecken.", + "less than 1": "mindre än 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "MongoDB lösenordet och API_SECRET matchar. Detta är en riktigt dålig idé. Vänligen ändra båda och återanvänd inte lösenorden i systemet." +} diff --git a/translations/tr_TR.json b/translations/tr_TR.json new file mode 100644 index 00000000000..ff7be104a7c --- /dev/null +++ b/translations/tr_TR.json @@ -0,0 +1,707 @@ +{ + "Listening on port": "Port dinleniyor", + "Mo": "Pzt", + "Tu": "Sal", + "We": "Çar", + "Th": "Per", + "Fr": "Cum", + "Sa": "Cmt", + "Su": "Paz", + "Monday": "Pazartesi", + "Tuesday": "Salı", + "Wednesday": "Çarşamba", + "Thursday": "Perşembe", + "Friday": "Cuma", + "Saturday": "Cumartesi", + "Sunday": "Pazar", + "Category": "Kategori", + "Subcategory": "Altkategori", + "Name": "İsim", + "Today": "Bugün", + "Last 2 days": "Son 2 gün", + "Last 3 days": "Son 3 gün", + "Last week": "Geçen Hafta", + "Last 2 weeks": "Son 2 hafta", + "Last month": "Geçen Ay", + "Last 3 months": "Son 3 ay", + "From": "Başlangıç", + "To": "Bitiş", + "Notes": "Not", + "Food": "Gıda", + "Insulin": "İnsülin", + "Carbs": "Karbonhidrat", + "Notes contain": "Notlar içerir", + "Target BG range bottom": "Hedef KŞ aralığı düşük", + "top": "Üstü", + "Show": "Göster", + "Display": "Görüntüle", + "Loading": "Yükleniyor", + "Loading profile": "Profil yükleniyor", + "Loading status": "Durum Yükleniyor", + "Loading food database": "Gıda veritabanı yükleniyor", + "not displayed": "görüntülenmedi", + "Loading CGM data of": "den CGM veriler yükleniyor", + "Loading treatments data of": "dan Tedavi verilerini yükle", + "Processing data of": "dan Veri işleme", + "Portion": "Porsiyon", + "Size": "Boyut", + "(none)": "(hiç)", + "None": "Hiç", + "": "", + "Result is empty": "Sonuç boş", + "Day to day": "Günden Güne", + "Week to week": "Week to week", + "Daily Stats": "Günlük İstatistikler", + "Percentile Chart": "Yüzdelik Grafiği", + "Distribution": "Dağılım", + "Hourly stats": "Saatlik istatistikler", + "netIOB stats": "netIOB istatistikleri", + "temp basals must be rendered to display this report": "Bu raporu görüntülemek için geçici bazal oluşturulmalıdır", + "No data available": "Veri yok", + "Low": "Düşük", + "In Range": "Hedef alanında", + "Period": "Periyot", + "High": "Yüksek", + "Average": "Ortalama", + "Low Quartile": "Alt Çeyrek", + "Upper Quartile": "Üst Çeyrek", + "Quartile": "Çeyrek", + "Date": "Tarih", + "Normal": "Normal", + "Median": "Orta Değer", + "Readings": "Ölçüm", + "StDev": "Standart Sapma", + "Daily stats report": "Günlük istatistikler raporu", + "Glucose Percentile report": "Glikoz Yüzdelik raporu", + "Glucose distribution": "Glikoz dağılımı", + "days total": "toplam gün", + "Total per day": "Günlük toplam", + "Overall": "Tüm", + "Range": "Alan", + "% of Readings": "% Okumaların", + "# of Readings": "# Okumaların", + "Mean": "ortalama", + "Standard Deviation": "Standart Sapma", + "Max": "Max", + "Min": "Min", + "A1c estimation*": "Tahmini A1c *", + "Weekly Success": "Haftalık Başarı", + "There is not sufficient data to run this report. Select more days.": "Bu raporu çalıştırmak için yeterli veri yok. Daha fazla gün seçin.", + "Using stored API secret hash": "Kaydedilmiş API secret hash kullan", + "No API secret hash stored yet. You need to enter API secret.": "Henüz bir API secret hash saklanmadı. API parolasını girmeniz gerekiyor.", + "Database loaded": "Veritabanı yüklendi", + "Error: Database failed to load": "Hata: Veritabanı yüklenemedi", + "Error": "Error", + "Create new record": "Yeni kayıt oluştur", + "Save record": "Kayıtları kaydet", + "Portions": "Porsiyonlar", + "Unit": "Birim", + "GI": "GI-Glisemik İndeks", + "Edit record": "Kaydı düzenle", + "Delete record": "Kaydı sil", + "Move to the top": "En üste taşı", + "Hidden": "Gizli", + "Hide after use": "Kullandıktan sonra gizle", + "Your API secret must be at least 12 characters long": "PI parolanız en az 12 karakter uzunluğunda olmalıdır", + "Bad API secret": "Hatalı API parolası", + "API secret hash stored": "API secret hash parolası saklandı", + "Status": "Durum", + "Not loaded": "Yüklü değil", + "Food Editor": "Gıda Editörü", + "Your database": "Sizin Veritabanınız", + "Filter": "Filtre", + "Save": "Kaydet", + "Clear": "Temizle", + "Record": "Kayıt", + "Quick picks": "Hızlı seçim", + "Show hidden": "Gizli göster", + "Your API secret or token": "Your API secret or token", + "Remember this device. (Do not enable this on public computers.)": "Remember this device. (Do not enable this on public computers.)", + "Treatments": "Tedaviler", + "Time": "Zaman", + "Event Type": "Etkinlik tipi", + "Blood Glucose": "Kan Şekeri", + "Entered By": "Tarafından girildi", + "Delete this treatment?": "Bu tedaviyi sil?", + "Carbs Given": "Karbonhidrat Verilen", + "Insulin Given": "Verilen İnsülin", + "Event Time": "Etkinliğin zamanı", + "Please verify that the data entered is correct": "Lütfen girilen verilerin doğru olduğunu kontrol edin.", + "BG": "KŞ", + "Use BG correction in calculation": "Hesaplamada KŞ düzeltmesini kullan", + "BG from CGM (autoupdated)": "CGM den KŞ (otomatik güncelleme)", + "BG from meter": "Glikometre KŞ", + "Manual BG": "Manuel KŞ", + "Quickpick": "Hızlı seçim", + "or": "veya", + "Add from database": "Veritabanından ekle", + "Use carbs correction in calculation": "Hesaplamada karbonhidrat düzeltmesini kullan", + "Use COB correction in calculation": "Hesaplamada COB aktif karbonhidrat düzeltmesini kullan", + "Use IOB in calculation": "Hesaplamada IOB aktif insülin düzeltmesini kullan", + "Other correction": "Diğer düzeltme", + "Rounding": "yuvarlama", + "Enter insulin correction in treatment": "Tedavide insülin düzeltmesini girin", + "Insulin needed": "İnsülin gerekli", + "Carbs needed": "Karbonhidrat gerekli", + "Carbs needed if Insulin total is negative value": "Toplam insülin negatif değer olduğunda karbonhidrat gereklidir", + "Basal rate": "Basal oranı", + "60 minutes earlier": "60 dak. önce", + "45 minutes earlier": "45 dak. önce", + "30 minutes earlier": "30 dak. önce", + "20 minutes earlier": "20 dak. önce", + "15 minutes earlier": "15 dak. önce", + "Time in minutes": "Dakika cinsinden süre", + "15 minutes later": "15 dak. sonra", + "20 minutes later": "20 dak. sonra", + "30 minutes later": "30 dak. sonra", + "45 minutes later": "45 dak. sonra", + "60 minutes later": "60 dak. sonra", + "Additional Notes, Comments": "Ek Notlar, Yorumlar", + "RETRO MODE": "RETRO MODE", + "Now": "Şimdi", + "Other": "Diğer", + "Submit Form": "Formu gönder", + "Profile Editor": "Profil Düzenleyicisi", + "Reports": "Raporlar", + "Add food from your database": "Veritabanınızdan yemek ekleyin", + "Reload database": "Veritabanını yeniden yükle", + "Add": "Ekle", + "Unauthorized": "Yetkisiz", + "Entering record failed": "Kayıt girişi başarısız oldu", + "Device authenticated": "Cihaz kimliği doğrulandı", + "Device not authenticated": "Cihaz kimliği doğrulanmamış", + "Authentication status": "Kimlik doğrulama durumu", + "Authenticate": "Kimlik doğrulaması", + "Remove": "Kaldır", + "Your device is not authenticated yet": "Cihazınız henüz doğrulanmamış", + "Sensor": "Sensor", + "Finger": "Parmak", + "Manual": "Elle", + "Scale": "Ölçek", + "Linear": "Doğrusal", + "Logarithmic": "Logaritmik", + "Logarithmic (Dynamic)": "Logaritmik (Dinamik)", + "Insulin-on-Board": "Aktif İnsülin (IOB)", + "Carbs-on-Board": "Aktif Karbonhidrat (COB)", + "Bolus Wizard Preview": "Bolus hesaplama Sihirbazı Önizlemesi (BWP)", + "Value Loaded": "Yüklenen Değer", + "Cannula Age": "Kanül yaşı", + "Basal Profile": "Bazal Profil", + "Silence for 30 minutes": "30 dakika sessizlik", + "Silence for 60 minutes": "60 dakika sessizlik", + "Silence for 90 minutes": "90 dakika sessizlik", + "Silence for 120 minutes": "120 dakika sessizlik", + "Settings": "Ayarlar", + "Units": "Birim", + "Date format": "Veri formatı", + "12 hours": "12 saat", + "24 hours": "24 saat", + "Log a Treatment": "Tedaviyi günlüğe kaydet", + "BG Check": "KŞ Kontol", + "Meal Bolus": "Yemek bolus", + "Snack Bolus": "Aperatif (Snack) Bolus", + "Correction Bolus": "Düzeltme Bolusu", + "Carb Correction": "Karbonhidrat Düzeltme", + "Note": "Not", + "Question": "Soru", + "Exercise": "Egzersiz", + "Pump Site Change": "Pompa Kanül değişimi", + "CGM Sensor Start": "CGM Sensörü Başlat", + "CGM Sensor Stop": "CGM Sensor Stop", + "CGM Sensor Insert": "CGM Sensor yerleştir", + "Sensor Code": "Sensor Code", + "Transmitter ID": "Transmitter ID", + "Dexcom Sensor Start": "Dexcom Sensör Başlat", + "Dexcom Sensor Change": "Dexcom Sensör değiştir", + "Insulin Cartridge Change": "İnsülin rezervuar değişimi", + "D.A.D. Alert": "D.A.D(Diabetes Alert Dog)", + "Glucose Reading": "Glikoz Değeri", + "Measurement Method": "Ölçüm Metodu", + "Meter": "Glikometre", + "Amount in grams": "Gram cinsinden miktar", + "Amount in units": "Birim miktarı", + "View all treatments": "Tüm tedavileri görüntüle", + "Enable Alarms": "Alarmları Etkinleştir", + "Pump Battery Change": "Pompa pil değişimi", + "Pump Battery Age": "Pump Battery Age", + "Pump Battery Low Alarm": "Pompa Düşük pil alarmı", + "Pump Battery change overdue!": "Pompa pil değişimi gecikti!", + "When enabled an alarm may sound.": "Etkinleştirilirse, alarm çalar.", + "Urgent High Alarm": "Acil Yüksek Alarm", + "High Alarm": "Yüksek Alarmı", + "Low Alarm": "Düşük Alarmı", + "Urgent Low Alarm": "Acil Düşük Alarmı", + "Stale Data: Warn": "Eski Veri: Uyarı", + "Stale Data: Urgent": "Eski Veri: Acil", + "mins": "dk.", + "Night Mode": "Gece Modu", + "When enabled the page will be dimmed from 10pm - 6am.": "Etkinleştirildiğinde, ekran akşam 22'den sabah 6'ya kadar kararır.", + "Enable": "Etkinleştir", + "Show Raw BG Data": "Ham KŞ verilerini göster", + "Never": "Hiçbir zaman", + "Always": "Her zaman", + "When there is noise": "Gürültü olduğunda", + "When enabled small white dots will be displayed for raw BG data": "Etkinleştirildiğinde, ham KŞ verileri için küçük beyaz noktalar görüntülenecektir.", + "Custom Title": "Özel Başlık", + "Theme": "Tema", + "Default": "Varsayılan", + "Colors": "Renkler", + "Colorblind-friendly colors": "Renk körü dostu görünüm", + "Reset, and use defaults": "Sıfırla ve varsayılanları kullan", + "Calibrations": "Kalibrasyon", + "Alarm Test / Smartphone Enable": "Alarm Testi / Akıllı Telefon için Etkin", + "Bolus Wizard": "Bolus Hesaplayıcısı", + "in the future": "gelecekte", + "time ago": "süre önce", + "hr ago": "saat önce", + "hrs ago": "saat önce", + "min ago": "dk. önce", + "mins ago": "dakika önce", + "day ago": "gün önce", + "days ago": "günler önce", + "long ago": "uzun zaman önce", + "Clean": "Temiz", + "Light": "Kolay", + "Medium": "Orta", + "Heavy": "Ağır", + "Treatment type": "Tedavi tipi", + "Raw BG": "Ham KŞ", + "Device": "Cihaz", + "Noise": "parazit", + "Calibration": "Kalibrasyon", + "Show Plugins": "Eklentileri Göster", + "About": "Hakkında", + "Value in": "Değer cinsinden", + "Carb Time": "Karbonhidratların alım zamanı", + "Language": "Dil", + "Add new": "Yeni ekle", + "g": "g", + "ml": "ml", + "pcs": "parça", + "Drag&drop food here": "Yiyecekleri buraya sürükle bırak", + "Care Portal": "Care Portal", + "Medium/Unknown": "Orta/Bilinmeyen", + "IN THE FUTURE": "GELECEKTE", + "Order": "Sıra", + "oldest on top": "en eski üste", + "newest on top": "en yeni üste", + "All sensor events": "Tüm sensör olayları", + "Remove future items from mongo database": "Gelecekteki öğeleri mongo veritabanından kaldır", + "Find and remove treatments in the future": "Gelecekte tedavileri bulun ve kaldır", + "This task find and remove treatments in the future.": "Bu görev gelecekte tedavileri bul ve kaldır.", + "Remove treatments in the future": "Gelecekte tedavileri kaldır", + "Find and remove entries in the future": "Gelecekteki girdileri bul ve kaldır", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "Yükleyicinin oluşturduğu gelecekteki CGM verilerinin yanlış tarih/saat olanlarını bul ve kaldır.", + "Remove entries in the future": "Gelecekteki girdileri kaldır", + "Loading database ...": "Veritabanı yükleniyor ...", + "Database contains %1 future records": "Veritabanı %1 gelecekteki girdileri içeriyor", + "Remove %1 selected records?": "Seçilen %1 kayıtlar kaldırılsın? ", + "Error loading database": "Veritabanını yüklerken hata oluştu", + "Record %1 removed ...": "%1 kaydı silindi ...", + "Error removing record %1": "%1 kayıt kaldırılırken hata oluştu", + "Deleting records ...": "Kayıtlar siliniyor ...", + "%1 records deleted": "%1 records deleted", + "Clean Mongo status database": "Mongo durum veritabanını temizle", + "Delete all documents from devicestatus collection": "Devicestatus koleksiyonundan tüm dokümanları sil", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "Bu görev tüm durumları Devicestatus koleksiyonundan kaldırır. Yükleyici pil durumu güncellenmiyorsa kullanışlıdır.", + "Delete all documents": "Tüm Belgeleri sil", + "Delete all documents from devicestatus collection?": "Tüm Devicestatus koleksiyon belgeleri silinsin mi?", + "Database contains %1 records": "Veritabanı %1 kayıt içeriyor", + "All records removed ...": "Tüm kayıtlar kaldırıldı ...", + "Delete all documents from devicestatus collection older than 30 days": "Delete all documents from devicestatus collection older than 30 days", + "Number of Days to Keep:": "Number of Days to Keep:", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.", + "Delete old documents from devicestatus collection?": "Delete old documents from devicestatus collection?", + "Clean Mongo entries (glucose entries) database": "Clean Mongo entries (glucose entries) database", + "Delete all documents from entries collection older than 180 days": "Delete all documents from entries collection older than 180 days", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.", + "Delete old documents": "Delete old documents", + "Delete old documents from entries collection?": "Delete old documents from entries collection?", + "%1 is not a valid number": "%1 is not a valid number", + "%1 is not a valid number - must be more than 2": "%1 is not a valid number - must be more than 2", + "Clean Mongo treatments database": "Clean Mongo treatments database", + "Delete all documents from treatments collection older than 180 days": "Delete all documents from treatments collection older than 180 days", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.", + "Delete old documents from treatments collection?": "Delete old documents from treatments collection?", + "Admin Tools": "Yönetici araçları", + "Nightscout reporting": "NightScout raporları", + "Cancel": "İptal", + "Edit treatment": "Tedaviyi düzenle", + "Duration": "süre", + "Duration in minutes": "Süre dakika cinsinden", + "Temp Basal": "Geçici Bazal Oranı", + "Temp Basal Start": "Geçici Bazal Oranını Başlanğıcı", + "Temp Basal End": "Geçici bazal oranını Bitişi", + "Percent": "Yüzde", + "Basal change in %": "Bazal değişimi % cinsinden", + "Basal value": "Bazal değeri", + "Absolute basal value": "Mutlak bazal değeri", + "Announcement": "Duyuru", + "Loading temp basal data": "Geçici bazal verileri yükleniyor", + "Save current record before changing to new?": "Yenisine geçmeden önce mevcut girişleri kaydet?", + "Profile Switch": "Profil Değiştir", + "Profile": "Profil", + "General profile settings": "Genel profil ayarları", + "Title": "Başlık", + "Database records": "Veritabanı kayıtları", + "Add new record": "Yeni kayıt ekle", + "Remove this record": "Bu kaydı kaldır", + "Clone this record to new": "Bu kaydı yeniden kopyala", + "Record valid from": "Kayıt itibaren geçerli", + "Stored profiles": "Kaydedilmiş profiller", + "Timezone": "Saat dilimi", + "Duration of Insulin Activity (DIA)": "İnsülin Etki Süresi (DIA)", + "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.": "İnsülinin etki ettiği tipik süreye karşılık gelir. Hastaya ve insülin tipine göre değişir. Çoğu pompa insülini ve çoğu hasta için genellikle 3-4 saattir. Bazen de insülin etki süresi de denir.", + "Insulin to carb ratio (I:C)": "İnsülin/Karbonhidrat oranı (I:C)", + "Hours:": "Saat:", + "hours": "saat", + "g/hour": "g/saat", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "İnsülin ünite başına g karbonhidrat. İnsülin ünite başına kaç gram karbonhidrat tüketildiği oranıdır.", + "Insulin Sensitivity Factor (ISF)": "(ISF) İnsülin Duyarlılık Faktörü", + "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "Ünite insülin başına mg/dL veya mmol/L. Her bir Ünite düzeltme insülin ile KŞ'nin ne kadar değiştiğini gösteren orandır.", + "Carbs activity / absorption rate": "Karbonhidrat aktivitesi / emilim oranı", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "Ur birim zaman başına gram. Birim zamanda (COB) Aktif Krabonhidratdaki değişimin yanı sıra o zaman üzerinde etki etmesi gereken karbonhidrat miktarını ifade eder. Karbonhidrat emme/aktivite eğrileri, insülin aktivitesinden daha zor anlaşılmaktadır, ancak bir başlangıç gecikmesi ve ardından sabit bir emilim oranı (g/hr) kullanılarak yaklaşık olarak tahmin edilebilmektedir.", + "Basal rates [unit/hour]": "Bazal oranı [ünite/saat]", + "Target BG range [mg/dL,mmol/L]": "Hedef KŞ aralığı [mg / dL, mmol / L]", + "Start of record validity": "Kayıt geçerliliği başlangıcı", + "Icicle": "Buzsaçağı", + "Render Basal": "Bazal Grafik", + "Profile used": "Kullanılan profil", + "Calculation is in target range.": "Hesaplama hedef aralıktadır.", + "Loading profile records ...": "Profil kayıtları yükleniyor ...", + "Values loaded.": "Değerler yüklendi.", + "Default values used.": "Varsayılan değerler kullanıldı.", + "Error. Default values used.": "Hata. Varsayılan değerler kullanıldı.", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "Target_low ve target_high öğelerinin zaman aralıkları eşleşmiyor. Değerler varsayılanlara geri yüklendi.", + "Valid from:": "Tarihinden itibaren geçerli", + "Save current record before switching to new?": "Yenisine geçmeden önce mevcut kaydı kaydet", + "Add new interval before": "Daha önce yeni aralık ekle", + "Delete interval": "Aralığı sil", + "I:C": "İ:K", + "ISF": "ISF", + "Combo Bolus": "Kombo (Yayma) Bolus", + "Difference": "fark", + "New time": "Yeni zaman", + "Edit Mode": "Düzenleme Modu", + "When enabled icon to start edit mode is visible": "Etkinleştirildiğinde düzenleme modunun başında simgesi görünecektir.", + "Operation": "İşlem", + "Move": "Taşı", + "Delete": "Sil", + "Move insulin": "İnsülini taşı", + "Move carbs": "Karbonhidratları taşı", + "Remove insulin": "İnsülini kaldır", + "Remove carbs": "Karbonhidratları kaldır", + "Change treatment time to %1 ?": "Tedavi tarihini %1 e değiştirilsin mi?", + "Change carbs time to %1 ?": "Karbonhidrat zamanını %1 e değiştirilsin mi?", + "Change insulin time to %1 ?": "İnsülin tarihini %1 e değiştirilsin mi?", + "Remove treatment ?": "Tedavi kaldırılsın mı? ", + "Remove insulin from treatment ?": "İnsülini tedaviden çıkartılsın mı?", + "Remove carbs from treatment ?": "Karbonhidratları tedaviden çıkartılsın mı ?", + "Rendering": "Grafik oluşturuluyor...", + "Loading OpenAPS data of": "dan OpenAPS verileri yükleniyor", + "Loading profile switch data": "Veri profili değişikliği yükleniyor", + "Redirecting you to the Profile Editor to create a new profile.": "Yanlış profil ayarı.\nGörüntülenen zamana göre profil tanımlanmamış.\nYeni profil oluşturmak için profil düzenleyicisine yönlendiriliyor.", + "Pump": "Pompa", + "Sensor Age": "(SAGE) Sensör yaşı ", + "Insulin Age": "(IAGE) İnsülin yaşı", + "Temporary target": "Geçici hedef", + "Reason": "Neden", + "Eating soon": "Yakında yemek", + "Top": "Üst", + "Bottom": "Alt", + "Activity": "Aktivite", + "Targets": "Hedefler", + "Bolus insulin:": "Bolus insülin:", + "Base basal insulin:": "Temel bazal insülin", + "Positive temp basal insulin:": "Pozitif geçici bazal insülin:", + "Negative temp basal insulin:": "Negatif geçici bazal insülin:", + "Total basal insulin:": "Toplam bazal insülin:", + "Total daily insulin:": "Günlük toplam insülin:", + "Unable to save Role": "Unable to save Role", + "Unable to delete Role": "Rol silinemedi", + "Database contains %1 roles": "Veritabanı %1 rol içerir", + "Edit Role": "Rolü düzenle", + "admin, school, family, etc": "yönetici, okul, aile, vb", + "Permissions": "İzinler", + "Are you sure you want to delete: ": "Silmek istediğinizden emin misiniz:", + "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.": "Her rolün bir veya daha fazla izni vardır.*izni bir yer tutucudur ve izinler ayırıcı olarak : ile hiyerarşiktir.", + "Add new Role": "Yeni Rol ekle", + "Roles - Groups of People, Devices, etc": "Roller - İnsan grupları, Cihazlar vb.", + "Edit this role": "Bu rolü düzenle", + "Admin authorized": "Yönetici yetkilendirildi", + "Subjects - People, Devices, etc": "Konular - İnsanlar, Cihazlar, vb.", + "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "Her konu benzersiz bir erişim anahtarı ve bir veya daha fazla rol alır. Seçilen konuyla ilgili yeni bir görünüm elde etmek için erişim tuşuna tıklayın. Bu gizli bağlantı paylaşılabilinir.", + "Add new Subject": "Yeni konu ekle", + "Unable to save Subject": "Unable to save Subject", + "Unable to delete Subject": "Konu silinemedi", + "Database contains %1 subjects": "Veritabanı %1 konu içeriyor", + "Edit Subject": "Konuyu düzenle", + "person, device, etc": "kişi, cihaz, vb", + "role1, role2": "rol1, rol2", + "Edit this subject": "Bu konuyu düzenle", + "Delete this subject": "Bu konuyu sil", + "Roles": "Roller", + "Access Token": "Erişim Simgesi (Access Token)", + "hour ago": "saat önce", + "hours ago": "saat önce", + "Silence for %1 minutes": "%1 dakika sürelik sessizlik", + "Check BG": "KŞ'ini kontrol et", + "BASAL": "Bazal", + "Current basal": "Geçerli Bazal", + "Sensitivity": "Duyarlılık Faktörü (ISF)", + "Current Carb Ratio": "Geçerli Karbonhidrat oranı I/C (ICR)", + "Basal timezone": "Bazal saat dilimi", + "Active profile": "Aktif profil", + "Active temp basal": "Aktif geçici bazal oranı", + "Active temp basal start": "Aktif geçici bazal oranı başlangıcı", + "Active temp basal duration": "Aktif geçici bazal süresi", + "Active temp basal remaining": "Aktif geçici bazal kalan", + "Basal profile value": "Bazal profil değeri", + "Active combo bolus": "Aktive kombo bolus", + "Active combo bolus start": "Aktif gecikmeli bolus başlangıcı", + "Active combo bolus duration": "Active combo bolus süresi", + "Active combo bolus remaining": "Aktif kombo (yayım) bolus kaldı", + "BG Delta": "KŞ farkı", + "Elapsed Time": "Geçen zaman", + "Absolute Delta": "Mutlak fark", + "Interpolated": "Aralıklı", + "BWP": "BWP", + "Urgent": "Acil", + "Warning": "Uyarı", + "Info": "Info", + "Lowest": "En düşük değer", + "Snoozing high alarm since there is enough IOB": "Yeterli IOB(Aktif İnsülin) olduğundan KŞ yüksek uyarımını ertele", + "Check BG, time to bolus?": "KŞine bakın, gerekirse bolus verin?", + "Notice": "Not", + "required info missing": "gerekli bilgi eksik", + "Insulin on Board": "(IOB) Aktif İnsülin", + "Current target": "Mevcut hedef", + "Expected effect": "Beklenen etki", + "Expected outcome": "Beklenen sonuç", + "Carb Equivalent": "Karbonhidrat eşdeğeri", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "Fazla insülin: Karbonhidratları dikkate alınmadan, alt hedefe ulaşmak için gerekenden %1U'den daha fazla", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "Fazla insülin: Alt KŞ hedefine ulaşmak için gerekenden %1 daha fazla insülin.IOB(Aktif İnsülin) Karbonhidrat tarafından karşılandığından emin olun.", + "%1U reduction needed in active insulin to reach low target, too much basal?": "Alt KŞ hedefi için %1U aktif insülin azaltılmalı, bazal oranı çok mu yüksek?", + "basal adjustment out of range, give carbs?": "Bazal oran ayarlaması limit dışı, karbonhidrat alınsın mı?", + "basal adjustment out of range, give bolus?": "Bazal oran ayarlaması limit dışı, bolus alınsın mı?", + "above high": "üzerinde yüksek", + "below low": "altında düşük", + "Projected BG %1 target": "Beklenen KŞ %1 hedefi", + "aiming at": "istenen sonuç", + "Bolus %1 units": "Bolus %1 Ünite", + "or adjust basal": "ya da bazal ayarlama", + "Check BG using glucometer before correcting!": "Düzeltme bolusu öncesi glikometreyle parmaktan KŞini kontrol edin!", + "Basal reduction to account %1 units:": "%1 birimi telafi etmek için azaltılmış Bazaloranı:", + "30m temp basal": "30 dk. geçici Bazal ", + "1h temp basal": "1 sa. geçici bazal", + "Cannula change overdue!": "Kanül değişimi gecikmiş!", + "Time to change cannula": "Kanül değiştirme zamanı", + "Change cannula soon": "Yakında kanül değiştirin", + "Cannula age %1 hours": "Kanül yaşı %1 saat", + "Inserted": "Yerleştirilmiş", + "CAGE": "CAGE", + "COB": "COB", + "Last Carbs": "Son Karbonhidrat", + "IAGE": "IAGE", + "Insulin reservoir change overdue!": "İnsülin rezervuarı değişimi gecikmiş!", + "Time to change insulin reservoir": "İnsülin rezervuarını değiştirme zamanı!", + "Change insulin reservoir soon": "Yakında insülin rezervuarını değiştirin", + "Insulin reservoir age %1 hours": "İnsülin rezervuar yaşı %1 saat", + "Changed": "Değişmiş", + "IOB": "IOB", + "Careportal IOB": "Careportal IOB (Aktif İnsülin)", + "Last Bolus": "Son Bolus", + "Basal IOB": "Bazal IOB", + "Source": "Kaynak", + "Stale data, check rig?": "Veri güncel değil, vericiyi kontrol et?", + "Last received:": "Son alınan:", + "%1m ago": "%1 dk. önce", + "%1h ago": "%1 sa. önce", + "%1d ago": "%1 gün önce", + "RETRO": "RETRO Geçmiş", + "SAGE": "SAGE", + "Sensor change/restart overdue!": "Sensör değişimi/yeniden başlatma gecikti!", + "Time to change/restart sensor": "Sensörü değiştirme/yeniden başlatma zamanı", + "Change/restart sensor soon": "Sensörü yakında değiştir/yeniden başlat", + "Sensor age %1 days %2 hours": "Sensör yaşı %1 gün %2 saat", + "Sensor Insert": "Sensor yerleştirme", + "Sensor Start": "Sensör başlatma", + "days": "Gün", + "Insulin distribution": "İnsülin dağılımı", + "To see this report, press SHOW while in this view": "Bu raporu görmek için bu görünümde GÖSTER düğmesine basın.", + "AR2 Forecast": "AR2 Tahmini", + "OpenAPS Forecasts": "OpenAPS Tahminleri", + "Temporary Target": "Geçici Hedef", + "Temporary Target Cancel": "Geçici Hedef İptal", + "OpenAPS Offline": "OpenAPS Offline (çevrimdışı)", + "Profiles": "Profiller", + "Time in fluctuation": "Dalgalanmada geçen süre", + "Time in rapid fluctuation": "Hızlı dalgalanmalarda geçen süre", + "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:": "Bu bir kaba tahmindir ve çok hata içerebilir gerçek kan şekeri testlerinin yerini tutmayacaktır. Kullanılan formülde buradandır:", + "Filter by hours": "Saatlere göre filtrele", + "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.": "Dalgalanmadaki zaman ve Hızlı dalgalanmadaki zaman, kan şekerinin nispeten hızlı veya çok hızlı bir şekilde değiştiği, incelenen dönemdeki zamanın %'sini ölçer. Düşük değerler daha iyidir.", + "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.": "Toplam Günlük Değişim, incelenen süre için, gün sayısına bölünen tüm glukoz değerlerinin mutlak değerinin toplamıdır. Düşük değer daha iyidir.", + "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "Saat başına ortalama değişim, gözlem periyodu üzerindeki tüm glikoz değişikliklerinin mutlak değerlerinin saat sayısına bölünmesiyle elde edilen toplam değerdir. Düşük değerler daha iyidir.", + "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.", + "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">buradan.", + "Mean Total Daily Change": "Günde toplam ortalama değişim", + "Mean Hourly Change": "Saatte ortalama değişim", + "FortyFiveDown": "biraz düşen", + "FortyFiveUp": "biraz yükselen", + "Flat": "sabit", + "SingleUp": "yükseliyor", + "SingleDown": "düşüyor", + "DoubleDown": "hızlı düşen", + "DoubleUp": "hızla yükselen", + "virtAsstUnknown": "That value is unknown at the moment. Please see your Nightscout site for more details.", + "virtAsstTitleAR2Forecast": "AR2 Forecast", + "virtAsstTitleCurrentBasal": "Current Basal", + "virtAsstTitleCurrentCOB": "Current COB", + "virtAsstTitleCurrentIOB": "Current IOB", + "virtAsstTitleLaunch": "Welcome to Nightscout", + "virtAsstTitleLoopForecast": "Loop Forecast", + "virtAsstTitleLastLoop": "Last Loop", + "virtAsstTitleOpenAPSForecast": "OpenAPS Forecast", + "virtAsstTitlePumpReservoir": "Insulin Remaining", + "virtAsstTitlePumpBattery": "Pump Battery", + "virtAsstTitleRawBG": "Current Raw BG", + "virtAsstTitleUploaderBattery": "Uploader Battery", + "virtAsstTitleCurrentBG": "Current BG", + "virtAsstTitleFullStatus": "Full Status", + "virtAsstTitleCGMMode": "CGM Mode", + "virtAsstTitleCGMStatus": "CGM Status", + "virtAsstTitleCGMSessionAge": "CGM Session Age", + "virtAsstTitleCGMTxStatus": "CGM Transmitter Status", + "virtAsstTitleCGMTxAge": "CGM Transmitter Age", + "virtAsstTitleCGMNoise": "CGM Noise", + "virtAsstTitleDelta": "Blood Glucose Delta", + "virtAsstStatus": "%1 ve %2 e kadar %3.", + "virtAsstBasal": "%1 geçerli bazal oranı saatte %2 ünite", + "virtAsstBasalTemp": "%1 geçici bazal %2 ünite %3 sona eriyor", + "virtAsstIob": "ve Sizde %1 aktif insulin var", + "virtAsstIobIntent": "Sizde %1 aktif insülin var", + "virtAsstIobUnits": "hala %1 birim", + "virtAsstLaunch": "What would you like to check on Nightscout?", + "virtAsstPreamble": "Senin", + "virtAsstPreamble3person": "%1 bir tane var", + "virtAsstNoInsulin": "yok", + "virtAsstUploadBattery": "Yükleyici piliniz %1", + "virtAsstReservoir": "%1 birim kaldı", + "virtAsstPumpBattery": "Pompa piliniz %1 %2", + "virtAsstUploaderBattery": "Your uploader battery is at %1", + "virtAsstLastLoop": "Son başarılı döngü %1 oldu", + "virtAsstLoopNotAvailable": "Döngü eklentisi etkin görünmüyor", + "virtAsstLoopForecastAround": "Döngü tahminine göre sonraki %2 ye göre around %1 olması bekleniyor", + "virtAsstLoopForecastBetween": "Döngü tahminine göre sonraki %3 ye göre between %1 and %2 olması bekleniyor", + "virtAsstAR2ForecastAround": "According to the AR2 forecast you are expected to be around %1 over the next %2", + "virtAsstAR2ForecastBetween": "According to the AR2 forecast you are expected to be between %1 and %2 over the next %3", + "virtAsstForecastUnavailable": "Mevcut verilerle tahmin edilemedi", + "virtAsstRawBG": "Ham kan şekeriniz %1", + "virtAsstOpenAPSForecast": "OpenAPS tarafından tahmin edilen kan şekeri %1", + "virtAsstCob3person": "%1 has %2 carbohydrates on board", + "virtAsstCob": "You have %1 carbohydrates on board", + "virtAsstCGMMode": "Your CGM mode was %1 as of %2.", + "virtAsstCGMStatus": "Your CGM status was %1 as of %2.", + "virtAsstCGMSessAge": "Your CGM session has been active for %1 days and %2 hours.", + "virtAsstCGMSessNotStarted": "There is no active CGM session at the moment.", + "virtAsstCGMTxStatus": "Your CGM transmitter status was %1 as of %2.", + "virtAsstCGMTxAge": "Your CGM transmitter is %1 days old.", + "virtAsstCGMNoise": "Your CGM noise was %1 as of %2.", + "virtAsstCGMBattOne": "Your CGM battery was %1 volts as of %2.", + "virtAsstCGMBattTwo": "Your CGM battery levels were %1 volts and %2 volts as of %3.", + "virtAsstDelta": "Your delta was %1 between %2 and %3.", + "virtAsstDeltaEstimated": "Your estimated delta was %1 between %2 and %3.", + "virtAsstUnknownIntentTitle": "Ismeretlen szándék", + "virtAsstUnknownIntentText": "I'm sorry, I don't know what you're asking for.", + "Fat [g]": "Yağ [g]", + "Protein [g]": "Protein [g]", + "Energy [kJ]": "Enerji [kJ]", + "Clock Views:": "Saat Görünümü", + "Clock": "Saat", + "Color": "Renk", + "Simple": "Basit", + "TDD average": "Ortalama günlük Toplam Doz (TDD)", + "Bolus average": "Bolus average", + "Basal average": "Basal average", + "Base basal average:": "Base basal average:", + "Carbs average": "Günde ortalama karbonhidrat", + "Eating Soon": "Yakında Yenecek", + "Last entry {0} minutes ago": "Son giriş {0} dakika önce", + "change": "değişiklik", + "Speech": "Konuş", + "Target Top": "Hedef Üst", + "Target Bottom": "Hedef Alt", + "Canceled": "İptal edildi", + "Meter BG": "Glikometre KŞ", + "predicted": "tahmin", + "future": "gelecek", + "ago": "önce", + "Last data received": "Son veri alındı", + "Clock View": "Saat Görünümü", + "Protein": "Protein", + "Fat": "Yağ", + "Protein average": "Protein Ortalaması", + "Fat average": "Yağ Ortalaması", + "Total carbs": "Toplam Karbonhidrat", + "Total protein": "Toplam Protein", + "Total fat": "Toplam Yağ", + "Database Size": "Database Size", + "Database Size near its limits!": "Database Size near its limits!", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!", + "Database file size": "Database file size", + "%1 MiB of %2 MiB (%3%)": "%1 MiB of %2 MiB (%3%)", + "Data size": "Data size", + "virtAsstDatabaseSize": "%1 MiB. That is %2% of available database space.", + "virtAsstTitleDatabaseSize": "Database file size", + "Carbs/Food/Time": "Carbs/Food/Time", + "You have administration messages": "You have administration messages", + "Admin messages in queue": "Admin messages in queue", + "Queue empty": "Queue empty", + "There are no admin messages in queue": "There are no admin messages in queue", + "Please sign in using the API_SECRET to see your administration messages": "Please sign in using the API_SECRET to see your administration messages", + "Reads enabled in default permissions": "Reads enabled in default permissions", + "Data reads enabled": "Data reads enabled", + "Data writes enabled": "Data writes enabled", + "Data writes not enabled": "Data writes not enabled", + "Color prediction lines": "Color prediction lines", + "Release Notes": "Release Notes", + "Check for Updates": "Check for Updates", + "Open Source": "Open Source", + "Nightscout Info": "Nightscout Info", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.", + "Note that time shift is available only when viewing multiple days.": "Note that time shift is available only when viewing multiple days.", + "Please select a maximum of two weeks duration and click Show again.": "Please select a maximum of two weeks duration and click Show again.", + "Show profiles table": "Show profiles table", + "Show predictions": "Show predictions", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Timeshift on meals larger than %1 g carbs consumed between %2 and %3", + "Previous": "Previous", + "Previous day": "Previous day", + "Next day": "Next day", + "Next": "Next", + "Temp basal delta": "Temp basal delta", + "Authorized by token": "Authorized by token", + "Auth role": "Auth role", + "view without token": "view without token", + "Remove stored token": "Remove stored token", + "Weekly Distribution": "Weekly Distribution", + "Failed authentication": "Failed authentication", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?", + "Default (with leading zero and U)": "Default (with leading zero and U)", + "Concise (with U, without leading zero)": "Concise (with U, without leading zero)", + "Minimal (without leading zero and U)": "Minimal (without leading zero and U)", + "Small Bolus Display": "Small Bolus Display", + "Large Bolus Display": "Large Bolus Display", + "Bolus Display Threshold": "Bolus Display Threshold", + "%1 U and Over": "%1 U and Over", + "Event repeated %1 times.": "Event repeated %1 times.", + "minutes": "minutes", + "Last recorded %1 %2 ago.": "Last recorded %1 %2 ago.", + "Security issue": "Security issue", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.", + "less than 1": "less than 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system." +} diff --git a/translations/zh_CN.json b/translations/zh_CN.json new file mode 100644 index 00000000000..992fc83c816 --- /dev/null +++ b/translations/zh_CN.json @@ -0,0 +1,707 @@ +{ + "Listening on port": "正在监听端口", + "Mo": "一", + "Tu": "二", + "We": "三", + "Th": "四", + "Fr": "五", + "Sa": "六", + "Su": "日", + "Monday": "星期一", + "Tuesday": "星期二", + "Wednesday": "星期三", + "Thursday": "星期四", + "Friday": "星期五", + "Saturday": "星期六", + "Sunday": "星期日", + "Category": "类别", + "Subcategory": "子类别", + "Name": "名称", + "Today": "今天", + "Last 2 days": "过去2天", + "Last 3 days": "过去3天", + "Last week": "上周", + "Last 2 weeks": "过去2周", + "Last month": "上个月", + "Last 3 months": "过去3个月", + "From": "从", + "To": "到", + "Notes": "记录", + "Food": "食物", + "Insulin": "胰岛素", + "Carbs": "碳水化合物", + "Notes contain": "记录包括", + "Target BG range bottom": "目标血糖范围 下限", + "top": "上限", + "Show": "生成", + "Display": "显示", + "Loading": "载入中", + "Loading profile": "载入配置文件", + "Loading status": "载入状态", + "Loading food database": "载入食物数据库", + "not displayed": "未显示", + "Loading CGM data of": "载入CGM(连续血糖监测)数据从", + "Loading treatments data of": "载入操作数据从", + "Processing data of": "处理数据从", + "Portion": "部分", + "Size": "大小", + "(none)": "(无)", + "None": "无", + "": "<无>", + "Result is empty": "结果为空", + "Day to day": "日到日", + "Week to week": "周到周", + "Daily Stats": "每日状态", + "Percentile Chart": "百分位图形", + "Distribution": "分布", + "Hourly stats": "每小时状态", + "netIOB stats": "netIOB stats", + "temp basals must be rendered to display this report": "temp basals must be rendered to display this report", + "No data available": "无可用数据", + "Low": "低血糖", + "In Range": "范围内", + "Period": "期间", + "High": "高血糖", + "Average": "平均", + "Low Quartile": "下四分位数", + "Upper Quartile": "上四分位数", + "Quartile": "四分位数", + "Date": "日期", + "Normal": "正常", + "Median": "中值", + "Readings": "读数", + "StDev": "标准偏差", + "Daily stats report": "每日状态报表", + "Glucose Percentile report": "血糖百分位报表", + "Glucose distribution": "血糖分布", + "days total": "天总计", + "Total per day": "天总计", + "Overall": "概览", + "Range": "范围", + "% of Readings": "%已读取", + "# of Readings": "#已读取", + "Mean": "平均", + "Standard Deviation": "标准偏差", + "Max": "最大值", + "Min": "最小值", + "A1c estimation*": "糖化血红蛋白估算", + "Weekly Success": "每周统计", + "There is not sufficient data to run this report. Select more days.": "没有足够的数据生成报表,请选择更长时间段。", + "Using stored API secret hash": "使用已存储的API密钥哈希值", + "No API secret hash stored yet. You need to enter API secret.": "没有已存储的API密钥,请输入API密钥。", + "Database loaded": "数据库已载入", + "Error: Database failed to load": "错误:数据库载入失败", + "Error": "Error", + "Create new record": "新增记录", + "Save record": "保存记录", + "Portions": "部分", + "Unit": "单位", + "GI": "GI(血糖生成指数)", + "Edit record": "编辑记录", + "Delete record": "删除记录", + "Move to the top": "移至顶端", + "Hidden": "隐藏", + "Hide after use": "使用后隐藏", + "Your API secret must be at least 12 characters long": "API密钥最少需要12个字符", + "Bad API secret": "API密钥错误", + "API secret hash stored": "API密钥已存储", + "Status": "状态", + "Not loaded": "未载入", + "Food Editor": "食物编辑器", + "Your database": "你的数据库", + "Filter": "过滤器", + "Save": "保存", + "Clear": "清除", + "Record": "记录", + "Quick picks": "快速选择", + "Show hidden": "显示隐藏值", + "Your API secret or token": "Your API secret or token", + "Remember this device. (Do not enable this on public computers.)": "Remember this device. (Do not enable this on public computers.)", + "Treatments": "操作", + "Time": "时间", + "Event Type": "事件类型", + "Blood Glucose": "血糖值", + "Entered By": "输入人", + "Delete this treatment?": "删除这个操作?", + "Carbs Given": "碳水化合物量", + "Insulin Given": "胰岛素输注量", + "Event Time": "事件时间", + "Please verify that the data entered is correct": "请验证输入的数据是否正确", + "BG": "血糖", + "Use BG correction in calculation": "使用血糖值修正计算", + "BG from CGM (autoupdated)": "CGM(连续血糖监测)测量的血糖值(自动更新)", + "BG from meter": "血糖仪测量的血糖值", + "Manual BG": "手动输入的血糖值", + "Quickpick": "快速选择", + "or": "或", + "Add from database": "从数据库增加", + "Use carbs correction in calculation": "使用碳水化合物修正计算结果", + "Use COB correction in calculation": "使用COB(活性碳水化合物)修正计算结果", + "Use IOB in calculation": "使用IOB(活性胰岛素)修正计算结果", + "Other correction": "其它修正", + "Rounding": "取整", + "Enter insulin correction in treatment": "在操作中输入胰岛素修正", + "Insulin needed": "需要的胰岛素量", + "Carbs needed": "需要的碳水量", + "Carbs needed if Insulin total is negative value": "如果胰岛素总量为负时所需的碳水化合物量", + "Basal rate": "基础率", + "60 minutes earlier": "60分钟前", + "45 minutes earlier": "45分钟前", + "30 minutes earlier": "30分钟前", + "20 minutes earlier": "20分钟前", + "15 minutes earlier": "15分钟前", + "Time in minutes": "1分钟前", + "15 minutes later": "15分钟后", + "20 minutes later": "20分钟后", + "30 minutes later": "30分钟后", + "45 minutes later": "45分钟后", + "60 minutes later": "60分钟后", + "Additional Notes, Comments": "备注", + "RETRO MODE": "历史模式", + "Now": "现在", + "Other": "其它", + "Submit Form": "提交", + "Profile Editor": "配置文件编辑器", + "Reports": "生成报表", + "Add food from your database": "从数据库增加食物", + "Reload database": "重新载入数据库", + "Add": "增加", + "Unauthorized": "未授权", + "Entering record failed": "输入记录失败", + "Device authenticated": "设备已认证", + "Device not authenticated": "设备未认证", + "Authentication status": "认证状态", + "Authenticate": "认证", + "Remove": "取消", + "Your device is not authenticated yet": "此设备还未进行认证", + "Sensor": "CGM探头", + "Finger": "手指", + "Manual": "手动", + "Scale": "函数", + "Linear": "线性", + "Logarithmic": "对数", + "Logarithmic (Dynamic)": "对数(动态)", + "Insulin-on-Board": "活性胰岛素(IOB)", + "Carbs-on-Board": "活性碳水化合物(COB)", + "Bolus Wizard Preview": "大剂量向导预览(BWP)", + "Value Loaded": "数值已读取", + "Cannula Age": "管路使用时间(CAGE)", + "Basal Profile": "基础率配置文件", + "Silence for 30 minutes": "静音30分钟", + "Silence for 60 minutes": "静音60分钟", + "Silence for 90 minutes": "静音90分钟", + "Silence for 120 minutes": "静音2小时", + "Settings": "设置", + "Units": "计量单位", + "Date format": "时间格式", + "12 hours": "12小时制", + "24 hours": "24小时制", + "Log a Treatment": "记录操作", + "BG Check": "测量血糖", + "Meal Bolus": "正餐大剂量", + "Snack Bolus": "加餐大剂量", + "Correction Bolus": "临时大剂量", + "Carb Correction": "碳水修正", + "Note": "备忘", + "Question": "问题", + "Exercise": "运动", + "Pump Site Change": "更换胰岛素输注部位", + "CGM Sensor Start": "启动CGM(连续血糖监测)探头", + "CGM Sensor Stop": "CGM 传感器停止", + "CGM Sensor Insert": "植入CGM(连续血糖监测)探头", + "Sensor Code": "G6 传感器代码(code)", + "Transmitter ID": "发射器编号", + "Dexcom Sensor Start": "启动Dexcom探头", + "Dexcom Sensor Change": "更换Dexcom探头", + "Insulin Cartridge Change": "更换胰岛素储液器", + "D.A.D. Alert": "D.A.D(低血糖通报犬)警告", + "Glucose Reading": "血糖数值", + "Measurement Method": "测量方法", + "Meter": "血糖仪", + "Amount in grams": "总量(g)", + "Amount in units": "总量(U)", + "View all treatments": "查看所有操作", + "Enable Alarms": "启用报警", + "Pump Battery Change": "更换泵电池", + "Pump Battery Age": "Pump Battery Age", + "Pump Battery Low Alarm": "胰岛素泵电量低", + "Pump Battery change overdue!": "Pump Battery change overdue!", + "When enabled an alarm may sound.": "启用后可发出声音报警", + "Urgent High Alarm": "血糖过高报警", + "High Alarm": "高血糖报警", + "Low Alarm": "低血糖报警", + "Urgent Low Alarm": "血糖过低报警", + "Stale Data: Warn": "数据过期:提醒", + "Stale Data: Urgent": "数据过期:警告", + "mins": "分", + "Night Mode": "夜间模式", + "When enabled the page will be dimmed from 10pm - 6am.": "启用后将在夜间22点至早晨6点降低页面亮度", + "Enable": "启用", + "Show Raw BG Data": "显示原始血糖数据", + "Never": "不显示", + "Always": "一直显示", + "When there is noise": "当有噪声时显示", + "When enabled small white dots will be displayed for raw BG data": "启用后将使用小白点标注原始血糖数据", + "Custom Title": "自定义标题", + "Theme": "主题", + "Default": "默认", + "Colors": "彩色", + "Colorblind-friendly colors": "色盲患者可辨识的颜色", + "Reset, and use defaults": "使用默认值重置", + "Calibrations": "校准", + "Alarm Test / Smartphone Enable": "报警测试/智能手机启用", + "Bolus Wizard": "大剂量向导", + "in the future": "在未来", + "time ago": "在过去", + "hr ago": "小时前", + "hrs ago": "小时前", + "min ago": "分钟前", + "mins ago": "分钟前", + "day ago": "天前", + "days ago": "天前", + "long ago": "很长时间前", + "Clean": "无", + "Light": "轻度", + "Medium": "中度", + "Heavy": "重度", + "Treatment type": "操作类型", + "Raw BG": "原始血糖", + "Device": "设备", + "Noise": "噪声", + "Calibration": "校准", + "Show Plugins": "校准", + "About": "关于", + "Value in": "数值", + "Carb Time": "数值", + "Language": "语言", + "Add new": "新增", + "g": "克", + "ml": "毫升", + "pcs": "件", + "Drag&drop food here": "拖放食物到这", + "Care Portal": "服务面板", + "Medium/Unknown": "中等/不知道", + "IN THE FUTURE": "在未来", + "Order": "排序", + "oldest on top": "按时间升序排列", + "newest on top": "按时间降序排列", + "All sensor events": "所有探头事件", + "Remove future items from mongo database": "从数据库中清除所有未来条目", + "Find and remove treatments in the future": "查找并清除所有未来的操作", + "This task find and remove treatments in the future.": "此功能查找并清除所有未来的操作。", + "Remove treatments in the future": "清除未来操作", + "Find and remove entries in the future": "查找并清除所有的未来的记录", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "此功能查找并清除所有上传时日期时间错误导致生成在未来时间的CGM数据。", + "Remove entries in the future": "清除未来记录", + "Loading database ...": "载入数据库...", + "Database contains %1 future records": "数据库包含%1条未来记录", + "Remove %1 selected records?": "清除%1条选择的记录?", + "Error loading database": "载入数据库错误", + "Record %1 removed ...": "%1条记录已清除", + "Error removing record %1": "%1条记录清除出错", + "Deleting records ...": "正在删除记录...", + "%1 records deleted": "%1 records deleted", + "Clean Mongo status database": "清除状态数据库", + "Delete all documents from devicestatus collection": "从设备状态采集删除所有文档", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "此功能从设备状态采集中删除所有文档。适用于上传设备电量信息不能正常同步时使用。", + "Delete all documents": "删除所有文档", + "Delete all documents from devicestatus collection?": "从设备状态采集删除所有文档?", + "Database contains %1 records": "数据库包含%1条记录", + "All records removed ...": "所有记录已经被清除", + "Delete all documents from devicestatus collection older than 30 days": "Delete all documents from devicestatus collection older than 30 days", + "Number of Days to Keep:": "Number of Days to Keep:", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.", + "Delete old documents from devicestatus collection?": "Delete old documents from devicestatus collection?", + "Clean Mongo entries (glucose entries) database": "Clean Mongo entries (glucose entries) database", + "Delete all documents from entries collection older than 180 days": "Delete all documents from entries collection older than 180 days", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.", + "Delete old documents": "Delete old documents", + "Delete old documents from entries collection?": "Delete old documents from entries collection?", + "%1 is not a valid number": "%1 is not a valid number", + "%1 is not a valid number - must be more than 2": "%1 is not a valid number - must be more than 2", + "Clean Mongo treatments database": "Clean Mongo treatments database", + "Delete all documents from treatments collection older than 180 days": "Delete all documents from treatments collection older than 180 days", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.", + "Delete old documents from treatments collection?": "Delete old documents from treatments collection?", + "Admin Tools": "管理工具", + "Nightscout reporting": "Nightscout报表生成器", + "Cancel": "取消", + "Edit treatment": "编辑操作", + "Duration": "持续", + "Duration in minutes": "持续时间(分钟)", + "Temp Basal": "临时基础率", + "Temp Basal Start": "临时基础率开始", + "Temp Basal End": "临时基础率结束", + "Percent": "百分比", + "Basal change in %": "基础率变化百分比", + "Basal value": "基础率值", + "Absolute basal value": "绝对基础率值", + "Announcement": "通告", + "Loading temp basal data": "载入临时基础率数据", + "Save current record before changing to new?": "在修改至新值前保存当前记录?", + "Profile Switch": "切换配置文件", + "Profile": "配置文件", + "General profile settings": "通用配置文件设置", + "Title": "标题", + "Database records": "数据库记录", + "Add new record": "新增记录", + "Remove this record": "删除记录", + "Clone this record to new": "复制记录", + "Record valid from": "有效记录,从", + "Stored profiles": "配置文件已存储", + "Timezone": "时区", + "Duration of Insulin Activity (DIA)": "胰岛素作用时间(DIA)", + "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.": "体现典型的胰岛素活性持续时间。 通过百分比和胰岛素类型体现。对于大多数胰岛素和患者来说是3至4个小时。也称为胰岛素生命周期。", + "Insulin to carb ratio (I:C)": "碳水化合物系数(ICR)", + "Hours:": "小时:", + "hours": "小时", + "g/hour": "g/小时", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "克碳水每单位胰岛素。每单位胰岛素可以抵消的碳水化合物克值比例。", + "Insulin Sensitivity Factor (ISF)": "胰岛素敏感系数(ISF)", + "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "mg/dL或mmol/L每单位胰岛素。每单位输入胰岛素导致血糖变化的比例", + "Carbs activity / absorption rate": "碳水化合物活性/吸收率", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "克每单位时间。表示每单位时间COB(活性碳水化合物)的变化,以及在该时间应该生效的碳水化合物的量。碳水化合物活性/吸收曲线比胰岛素活性难理解,但可以使用初始延迟,接着恒定吸收速率(克/小时)来近似模拟。", + "Basal rates [unit/hour]": "基础率 [U/小时]", + "Target BG range [mg/dL,mmol/L]": "目标血糖范围 [mg/dL,mmol/L]", + "Start of record validity": "有效记录开始", + "Icicle": "Icicle", + "Render Basal": "使用基础率", + "Profile used": "配置文件已使用", + "Calculation is in target range.": "预计在目标范围内", + "Loading profile records ...": "载入配置文件记录...", + "Values loaded.": "已载入数值", + "Default values used.": "已使用默认值", + "Error. Default values used.": "错误,已使用默认值", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "时间范围内的目标高低血糖值不匹配。已恢复使用默认值。", + "Valid from:": "生效从:", + "Save current record before switching to new?": "切换至新记录前保存当前记录?", + "Add new interval before": "在此前新增区间", + "Delete interval": "删除区间", + "I:C": "ICR", + "ISF": "ISF胰岛素敏感系数", + "Combo Bolus": "双波", + "Difference": "差别", + "New time": "新时间", + "Edit Mode": "编辑模式", + "When enabled icon to start edit mode is visible": "启用后开始编辑模式图标可见", + "Operation": "操作", + "Move": "移动", + "Delete": "删除", + "Move insulin": "移动胰岛素", + "Move carbs": "移动碳水", + "Remove insulin": "去除胰岛素", + "Remove carbs": "去除碳水", + "Change treatment time to %1 ?": "修改操作时间到%1?", + "Change carbs time to %1 ?": "修改碳水时间到%1?", + "Change insulin time to %1 ?": "修改胰岛素时间到%1?", + "Remove treatment ?": "去除操作?", + "Remove insulin from treatment ?": "从操作中去除胰岛素?", + "Remove carbs from treatment ?": "从操作中去除碳水化合物?", + "Rendering": "渲染", + "Loading OpenAPS data of": "载入OpenAPS数据从", + "Loading profile switch data": "载入配置文件交换数据", + "Redirecting you to the Profile Editor to create a new profile.": "配置文件设置错误。\n没有配置文件定义为显示时间。\n返回配置文件编辑器以新建配置文件。", + "Pump": "胰岛素泵", + "Sensor Age": "探头使用时间(SAGE)", + "Insulin Age": "胰岛素使用时间(IAGE)", + "Temporary target": "临时目标", + "Reason": "原因", + "Eating soon": "接近用餐时间", + "Top": "顶部", + "Bottom": "底部", + "Activity": "有效的", + "Targets": "目标", + "Bolus insulin:": "大剂量胰岛素", + "Base basal insulin:": "基础率胰岛素", + "Positive temp basal insulin:": "实际临时基础率胰岛素", + "Negative temp basal insulin:": "其余临时基础率胰岛素", + "Total basal insulin:": "基础率胰岛素合计", + "Total daily insulin:": "每日胰岛素合计", + "Unable to save Role": "Unable to save Role", + "Unable to delete Role": "无法删除角色", + "Database contains %1 roles": "数据库包含%1个角色", + "Edit Role": "编辑角色", + "admin, school, family, etc": "政府、学校、家庭等", + "Permissions": "权限", + "Are you sure you want to delete: ": "你确定要删除:", + "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.": "每个角色都具有一个或多个权限。权限设置时使用*作为通配符,层次结构使用:作为分隔符。", + "Add new Role": "添加新角色", + "Roles - Groups of People, Devices, etc": "角色 - 一组人或设备等", + "Edit this role": "编辑角色", + "Admin authorized": "已授权", + "Subjects - People, Devices, etc": "用户 - 人、设备等", + "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "每个用户具有唯一的访问令牌和一个或多个角色。在访问令牌上单击打开新窗口查看已选择用户,此时该链接可分享。", + "Add new Subject": "添加新用户", + "Unable to save Subject": "Unable to save Subject", + "Unable to delete Subject": "无法删除用户", + "Database contains %1 subjects": "数据库包含%1个用户", + "Edit Subject": "编辑用户", + "person, device, etc": "人、设备等", + "role1, role2": "角色1、角色2", + "Edit this subject": "编辑此用户", + "Delete this subject": "删除此用户", + "Roles": "角色", + "Access Token": "访问令牌", + "hour ago": "小时前", + "hours ago": "小时前", + "Silence for %1 minutes": "静音%1分钟", + "Check BG": "测量血糖", + "BASAL": "基础率", + "Current basal": "当前基础率", + "Sensitivity": "胰岛素敏感系数", + "Current Carb Ratio": "当前碳水化合物系数", + "Basal timezone": "基础率时区", + "Active profile": "当前配置文件", + "Active temp basal": "当前临时基础率", + "Active temp basal start": "当前临时基础率开始", + "Active temp basal duration": "当前临时基础率期间", + "Active temp basal remaining": "当前临时基础率剩余", + "Basal profile value": "基础率配置文件值", + "Active combo bolus": "当前双波大剂量", + "Active combo bolus start": "当前双波大剂量开始", + "Active combo bolus duration": "当前双波大剂量期间", + "Active combo bolus remaining": "当前双波大剂量剩余", + "BG Delta": "血糖增量", + "Elapsed Time": "所需时间", + "Absolute Delta": "绝对增量", + "Interpolated": "插值", + "BWP": "BWP", + "Urgent": "紧急", + "Warning": "警告", + "Info": "信息", + "Lowest": "血糖极低", + "Snoozing high alarm since there is enough IOB": "有足够的IOB(活性胰岛素),暂停高血糖警报", + "Check BG, time to bolus?": "测量血糖,该输注大剂量了?", + "Notice": "提示", + "required info missing": "所需信息不全", + "Insulin on Board": "活性胰岛素(IOB)", + "Current target": "当前目标", + "Expected effect": "预期效果", + "Expected outcome": "预期结果", + "Carb Equivalent": "碳水当量", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "胰岛素超过至血糖下限目标所需剂量%1单位,不计算碳水化合物", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "胰岛素超过至血糖下限目标所需剂量%1单位,确认IOB(活性胰岛素)被碳水化合物覆盖", + "%1U reduction needed in active insulin to reach low target, too much basal?": "活性胰岛素已可至血糖下限目标,需减少%1单位,基础率过高?", + "basal adjustment out of range, give carbs?": "基础率调整在范围之外,需要碳水化合物?", + "basal adjustment out of range, give bolus?": "基础率调整在范围之外,需要大剂量?", + "above high": "血糖过高", + "below low": "血糖过低", + "Projected BG %1 target": "预计血糖%1目标", + "aiming at": "目标在", + "Bolus %1 units": "大剂量%1单位", + "or adjust basal": "或调整基础率", + "Check BG using glucometer before correcting!": "校正前请使用血糖仪测量血糖!", + "Basal reduction to account %1 units:": "基础率减少到%1单位", + "30m temp basal": "30分钟临时基础率", + "1h temp basal": "1小时临时基础率", + "Cannula change overdue!": "超过更换管路的时间", + "Time to change cannula": "已到更换管路的时间", + "Change cannula soon": "接近更换管路的时间", + "Cannula age %1 hours": "管路已使用%1小时", + "Inserted": "已植入", + "CAGE": "管路", + "COB": "活性碳水COB", + "Last Carbs": "上次碳水", + "IAGE": "胰岛素", + "Insulin reservoir change overdue!": "超过更换胰岛素储液器的时间", + "Time to change insulin reservoir": "已到更换胰岛素储液器的时间", + "Change insulin reservoir soon": "接近更换胰岛素储液器的时间", + "Insulin reservoir age %1 hours": "胰岛素储液器已使用%1小时", + "Changed": "已更换", + "IOB": "活性胰岛素IOB", + "Careportal IOB": "服务面板IOB(活性胰岛素)", + "Last Bolus": "上次大剂量", + "Basal IOB": "基础率IOB(活性胰岛素)", + "Source": "来源", + "Stale data, check rig?": "数据过期,检查一下设备?", + "Last received:": "上次接收:", + "%1m ago": "%1分钟前", + "%1h ago": "%1小时前", + "%1d ago": "%1天前", + "RETRO": "历史数据", + "SAGE": "探头", + "Sensor change/restart overdue!": "超过更换/重启探头的时间", + "Time to change/restart sensor": "已到更换/重启探头的时间", + "Change/restart sensor soon": "接近更换/重启探头的时间", + "Sensor age %1 days %2 hours": "探头使用了%1天%2小时", + "Sensor Insert": "植入探头", + "Sensor Start": "启动探头", + "days": "天", + "Insulin distribution": "胰岛素分布", + "To see this report, press SHOW while in this view": "要查看此报告,请在此视图中按生成", + "AR2 Forecast": "AR2 预测", + "OpenAPS Forecasts": "OpenAPS 预测", + "Temporary Target": "临时目标", + "Temporary Target Cancel": "临时目标取消", + "OpenAPS Offline": "OpenAPS 离线", + "Profiles": "配置文件", + "Time in fluctuation": "波动时间", + "Time in rapid fluctuation": "快速波动时间", + "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:": "这只是一个粗略的估计,可能非常不准确,并不能取代测指血", + "Filter by hours": "按小时过滤", + "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.": "在检查期间血糖波动时间和快速波动时间占的时间百分比,在此期间血糖相对快速或快速地变化。百分比值越低越好。", + "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.": "平均每日总变化是检查期间所有血糖偏移的绝对值之和除以天数。越低越好", + "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "平均每小时变化是检查期间所有血糖偏移的绝对值之和除以该期间的小时数。 越低越好", + "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.", + "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">here.", + "Mean Total Daily Change": "平均每日总变化", + "Mean Hourly Change": "平均每小时变化", + "FortyFiveDown": "缓慢下降", + "FortyFiveUp": "缓慢上升", + "Flat": "平", + "SingleUp": "上升", + "SingleDown": "下降", + "DoubleDown": "快速下降", + "DoubleUp": "快速上升", + "virtAsstUnknown": "当前状态未知,请查看您的 Nightscout 站点了解更多详情。", + "virtAsstTitleAR2Forecast": "AR2 预测", + "virtAsstTitleCurrentBasal": "当前基础率", + "virtAsstTitleCurrentCOB": "当前COB", + "virtAsstTitleCurrentIOB": "当前IOB", + "virtAsstTitleLaunch": "欢迎使用 Nightscout", + "virtAsstTitleLoopForecast": "Loop预测", + "virtAsstTitleLastLoop": "最近一次闭环运行", + "virtAsstTitleOpenAPSForecast": "OpenAPS 预测", + "virtAsstTitlePumpReservoir": "胰岛素余量", + "virtAsstTitlePumpBattery": "泵电池", + "virtAsstTitleRawBG": "Current Raw BG", + "virtAsstTitleUploaderBattery": "Uploader Battery", + "virtAsstTitleCurrentBG": "Current BG", + "virtAsstTitleFullStatus": "Full Status", + "virtAsstTitleCGMMode": "CGM Mode", + "virtAsstTitleCGMStatus": "CGM Status", + "virtAsstTitleCGMSessionAge": "CGM Session Age", + "virtAsstTitleCGMTxStatus": "CGM Transmitter Status", + "virtAsstTitleCGMTxAge": "CGM Transmitter Age", + "virtAsstTitleCGMNoise": "CGM Noise", + "virtAsstTitleDelta": "Blood Glucose Delta", + "virtAsstStatus": "%1 和 %2 到 %3.", + "virtAsstBasal": "%1 当前基础率是 %2 U/小时", + "virtAsstBasalTemp": "%1 临时基础率 %2 U/小时将会在 %3结束", + "virtAsstIob": "并且你有 %1 的活性胰岛素.", + "virtAsstIobIntent": "你有 %1 的活性胰岛素", + "virtAsstIobUnits": "%1 单位", + "virtAsstLaunch": "What would you like to check on Nightscout?", + "virtAsstPreamble": "你的", + "virtAsstPreamble3person": "%1 有一个 ", + "virtAsstNoInsulin": "否", + "virtAsstUploadBattery": "你的手机电池电量是 %1 ", + "virtAsstReservoir": "你剩余%1 U的胰岛素", + "virtAsstPumpBattery": "你的泵电池电量是%1 %2", + "virtAsstUploaderBattery": "Your uploader battery is at %1", + "virtAsstLastLoop": "最后一次成功闭环的是在%1", + "virtAsstLoopNotAvailable": "Loop插件看起来没有被启用", + "virtAsstLoopForecastAround": "根据loop的预测,在接下来的%2你的血糖将会是around %1", + "virtAsstLoopForecastBetween": "根据loop的预测,在接下来的%3你的血糖将会是between %1 and %2", + "virtAsstAR2ForecastAround": "According to the AR2 forecast you are expected to be around %1 over the next %2", + "virtAsstAR2ForecastBetween": "According to the AR2 forecast you are expected to be between %1 and %2 over the next %3", + "virtAsstForecastUnavailable": "血糖数据不可用,无法预测未来走势", + "virtAsstRawBG": "你的血糖是 %1", + "virtAsstOpenAPSForecast": "OpenAPS 预测最终血糖是 %1", + "virtAsstCob3person": "%1 has %2 carbohydrates on board", + "virtAsstCob": "You have %1 carbohydrates on board", + "virtAsstCGMMode": "Your CGM mode was %1 as of %2.", + "virtAsstCGMStatus": "Your CGM status was %1 as of %2.", + "virtAsstCGMSessAge": "Your CGM session has been active for %1 days and %2 hours.", + "virtAsstCGMSessNotStarted": "There is no active CGM session at the moment.", + "virtAsstCGMTxStatus": "Your CGM transmitter status was %1 as of %2.", + "virtAsstCGMTxAge": "Your CGM transmitter is %1 days old.", + "virtAsstCGMNoise": "Your CGM noise was %1 as of %2.", + "virtAsstCGMBattOne": "Your CGM battery was %1 volts as of %2.", + "virtAsstCGMBattTwo": "Your CGM battery levels were %1 volts and %2 volts as of %3.", + "virtAsstDelta": "Your delta was %1 between %2 and %3.", + "virtAsstDeltaEstimated": "Your estimated delta was %1 between %2 and %3.", + "virtAsstUnknownIntentTitle": "Unknown Intent", + "virtAsstUnknownIntentText": "I'm sorry, I don't know what you're asking for.", + "Fat [g]": "脂肪[g]", + "Protein [g]": "蛋白质[g]", + "Energy [kJ]": "能量 [kJ]", + "Clock Views:": "时钟视图", + "Clock": "时钟", + "Color": "彩色", + "Simple": "简单", + "TDD average": "日胰岛素用量平均值", + "Bolus average": "Bolus average", + "Basal average": "Basal average", + "Base basal average:": "Base basal average:", + "Carbs average": "碳水化合物平均值", + "Eating Soon": "过会吃饭", + "Last entry {0} minutes ago": "最后一个条目 {0} 分钟之前", + "change": "改变", + "Speech": "朗读", + "Target Top": "目标高值", + "Target Bottom": "目标低值", + "Canceled": "被取消了", + "Meter BG": "指血血糖值", + "predicted": "预测", + "future": "将来", + "ago": "之前", + "Last data received": "上次收到数据", + "Clock View": "时钟视图", + "Protein": "Protein", + "Fat": "Fat", + "Protein average": "Protein average", + "Fat average": "Fat average", + "Total carbs": "Total carbs", + "Total protein": "Total protein", + "Total fat": "Total fat", + "Database Size": "Database Size", + "Database Size near its limits!": "Database Size near its limits!", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!", + "Database file size": "Database file size", + "%1 MiB of %2 MiB (%3%)": "%1 MiB of %2 MiB (%3%)", + "Data size": "Data size", + "virtAsstDatabaseSize": "%1 MiB. That is %2% of available database space.", + "virtAsstTitleDatabaseSize": "Database file size", + "Carbs/Food/Time": "Carbs/Food/Time", + "You have administration messages": "You have administration messages", + "Admin messages in queue": "Admin messages in queue", + "Queue empty": "Queue empty", + "There are no admin messages in queue": "There are no admin messages in queue", + "Please sign in using the API_SECRET to see your administration messages": "Please sign in using the API_SECRET to see your administration messages", + "Reads enabled in default permissions": "Reads enabled in default permissions", + "Data reads enabled": "Data reads enabled", + "Data writes enabled": "Data writes enabled", + "Data writes not enabled": "Data writes not enabled", + "Color prediction lines": "Color prediction lines", + "Release Notes": "Release Notes", + "Check for Updates": "Check for Updates", + "Open Source": "Open Source", + "Nightscout Info": "Nightscout Info", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.", + "Note that time shift is available only when viewing multiple days.": "Note that time shift is available only when viewing multiple days.", + "Please select a maximum of two weeks duration and click Show again.": "Please select a maximum of two weeks duration and click Show again.", + "Show profiles table": "Show profiles table", + "Show predictions": "Show predictions", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Timeshift on meals larger than %1 g carbs consumed between %2 and %3", + "Previous": "Previous", + "Previous day": "Previous day", + "Next day": "Next day", + "Next": "Next", + "Temp basal delta": "Temp basal delta", + "Authorized by token": "Authorized by token", + "Auth role": "Auth role", + "view without token": "view without token", + "Remove stored token": "Remove stored token", + "Weekly Distribution": "Weekly Distribution", + "Failed authentication": "Failed authentication", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?", + "Default (with leading zero and U)": "Default (with leading zero and U)", + "Concise (with U, without leading zero)": "Concise (with U, without leading zero)", + "Minimal (without leading zero and U)": "Minimal (without leading zero and U)", + "Small Bolus Display": "Small Bolus Display", + "Large Bolus Display": "Large Bolus Display", + "Bolus Display Threshold": "Bolus Display Threshold", + "%1 U and Over": "%1 U and Over", + "Event repeated %1 times.": "Event repeated %1 times.", + "minutes": "minutes", + "Last recorded %1 %2 ago.": "Last recorded %1 %2 ago.", + "Security issue": "Security issue", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.", + "less than 1": "less than 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system." +} diff --git a/translations/zh_TW.json b/translations/zh_TW.json new file mode 100644 index 00000000000..eefd243fd67 --- /dev/null +++ b/translations/zh_TW.json @@ -0,0 +1,707 @@ +{ + "Listening on port": "Listening on port", + "Mo": "Mo", + "Tu": "Tu", + "We": "We", + "Th": "Th", + "Fr": "Fr", + "Sa": "Sa", + "Su": "Su", + "Monday": "Monday", + "Tuesday": "Tuesday", + "Wednesday": "Wednesday", + "Thursday": "Thursday", + "Friday": "Friday", + "Saturday": "Saturday", + "Sunday": "Sunday", + "Category": "Category", + "Subcategory": "Subcategory", + "Name": "Name", + "Today": "Today", + "Last 2 days": "Last 2 days", + "Last 3 days": "Last 3 days", + "Last week": "Last week", + "Last 2 weeks": "Last 2 weeks", + "Last month": "Last month", + "Last 3 months": "Last 3 months", + "From": "From", + "To": "To", + "Notes": "Notes", + "Food": "Food", + "Insulin": "Insulin", + "Carbs": "Carbs", + "Notes contain": "Notes contain", + "Target BG range bottom": "Target BG range bottom", + "top": "top", + "Show": "Show", + "Display": "Display", + "Loading": "Loading", + "Loading profile": "Loading profile", + "Loading status": "Loading status", + "Loading food database": "Loading food database", + "not displayed": "not displayed", + "Loading CGM data of": "Loading CGM data of", + "Loading treatments data of": "Loading treatments data of", + "Processing data of": "Processing data of", + "Portion": "Portion", + "Size": "Size", + "(none)": "(無)", + "None": "無", + "": "", + "Result is empty": "Result is empty", + "Day to day": "Day to day", + "Week to week": "Week to week", + "Daily Stats": "Daily Stats", + "Percentile Chart": "Percentile Chart", + "Distribution": "Distribution", + "Hourly stats": "Hourly stats", + "netIOB stats": "netIOB stats", + "temp basals must be rendered to display this report": "temp basals must be rendered to display this report", + "No data available": "No data available", + "Low": "Low", + "In Range": "In Range", + "Period": "Period", + "High": "High", + "Average": "Average", + "Low Quartile": "Low Quartile", + "Upper Quartile": "Upper Quartile", + "Quartile": "Quartile", + "Date": "Date", + "Normal": "Normal", + "Median": "Median", + "Readings": "Readings", + "StDev": "StDev", + "Daily stats report": "Daily stats report", + "Glucose Percentile report": "Glucose Percentile report", + "Glucose distribution": "Glucose distribution", + "days total": "days total", + "Total per day": "Total per day", + "Overall": "Overall", + "Range": "Range", + "% of Readings": "% of Readings", + "# of Readings": "# of Readings", + "Mean": "Mean", + "Standard Deviation": "Standard Deviation", + "Max": "Max", + "Min": "Min", + "A1c estimation*": "A1c estimation*", + "Weekly Success": "Weekly Success", + "There is not sufficient data to run this report. Select more days.": "There is not sufficient data to run this report. Select more days.", + "Using stored API secret hash": "使用已存儲的API密鑰哈希值", + "No API secret hash stored yet. You need to enter API secret.": "沒有已存儲的API密鑰,請輸入API密鑰。", + "Database loaded": "Database loaded", + "Error: Database failed to load": "Error: Database failed to load", + "Error": "Error", + "Create new record": "Create new record", + "Save record": "Save record", + "Portions": "Portions", + "Unit": "Unit", + "GI": "GI", + "Edit record": "Edit record", + "Delete record": "Delete record", + "Move to the top": "Move to the top", + "Hidden": "Hidden", + "Hide after use": "Hide after use", + "Your API secret must be at least 12 characters long": "API密鑰最少需要12個字符", + "Bad API secret": "API密鑰錯誤", + "API secret hash stored": "API密鑰已存儲", + "Status": "Status", + "Not loaded": "Not loaded", + "Food Editor": "Food Editor", + "Your database": "Your database", + "Filter": "Filter", + "Save": "保存", + "Clear": "Clear", + "Record": "Record", + "Quick picks": "Quick picks", + "Show hidden": "Show hidden", + "Your API secret or token": "Your API secret or token", + "Remember this device. (Do not enable this on public computers.)": "Remember this device. (Do not enable this on public computers.)", + "Treatments": "Treatments", + "Time": "時間", + "Event Type": "Event Type", + "Blood Glucose": "Blood Glucose", + "Entered By": "Entered By", + "Delete this treatment?": "Delete this treatment?", + "Carbs Given": "Carbs Given", + "Insulin Given": "Insulin Given", + "Event Time": "Event Time", + "Please verify that the data entered is correct": "Please verify that the data entered is correct", + "BG": "BG", + "Use BG correction in calculation": "Use BG correction in calculation", + "BG from CGM (autoupdated)": "BG from CGM (autoupdated)", + "BG from meter": "BG from meter", + "Manual BG": "Manual BG", + "Quickpick": "Quickpick", + "or": "or", + "Add from database": "Add from database", + "Use carbs correction in calculation": "Use carbs correction in calculation", + "Use COB correction in calculation": "Use COB correction in calculation", + "Use IOB in calculation": "Use IOB in calculation", + "Other correction": "Other correction", + "Rounding": "Rounding", + "Enter insulin correction in treatment": "Enter insulin correction in treatment", + "Insulin needed": "Insulin needed", + "Carbs needed": "Carbs needed", + "Carbs needed if Insulin total is negative value": "Carbs needed if Insulin total is negative value", + "Basal rate": "Basal rate", + "60 minutes earlier": "60 minutes earlier", + "45 minutes earlier": "45 minutes earlier", + "30 minutes earlier": "30 minutes earlier", + "20 minutes earlier": "20 minutes earlier", + "15 minutes earlier": "15 minutes earlier", + "Time in minutes": "Time in minutes", + "15 minutes later": "15 minutes later", + "20 minutes later": "20 minutes later", + "30 minutes later": "30 minutes later", + "45 minutes later": "45 minutes later", + "60 minutes later": "60 minutes later", + "Additional Notes, Comments": "Additional Notes, Comments", + "RETRO MODE": "RETRO MODE", + "Now": "Now", + "Other": "Other", + "Submit Form": "Submit Form", + "Profile Editor": "配置文件編輯器", + "Reports": "生成報表", + "Add food from your database": "Add food from your database", + "Reload database": "Reload database", + "Add": "Add", + "Unauthorized": "未授權", + "Entering record failed": "Entering record failed", + "Device authenticated": "設備已認證", + "Device not authenticated": "設備未認證", + "Authentication status": "認證狀態", + "Authenticate": "認證", + "Remove": "取消", + "Your device is not authenticated yet": "這個設備還未進行認證", + "Sensor": "Sensor", + "Finger": "Finger", + "Manual": "Manual", + "Scale": "函數", + "Linear": "線性", + "Logarithmic": "對數", + "Logarithmic (Dynamic)": "對數(動態)", + "Insulin-on-Board": "活性胰島素(IOB)", + "Carbs-on-Board": "活性碳水化合物(COB)", + "Bolus Wizard Preview": "大劑量嚮導預覽(BWP)", + "Value Loaded": "數值已讀取", + "Cannula Age": "管路使用時間(CAGE)", + "Basal Profile": "基礎率配置文件", + "Silence for 30 minutes": "靜音30分鐘", + "Silence for 60 minutes": "靜音60分鐘", + "Silence for 90 minutes": "靜音90分鐘", + "Silence for 120 minutes": "靜音2小時", + "Settings": "設置", + "Units": "计量單位", + "Date format": "時間格式", + "12 hours": "12小時制", + "24 hours": "24小時制", + "Log a Treatment": "Log a Treatment", + "BG Check": "BG Check", + "Meal Bolus": "Meal Bolus", + "Snack Bolus": "Snack Bolus", + "Correction Bolus": "Correction Bolus", + "Carb Correction": "Carb Correction", + "Note": "Note", + "Question": "Question", + "Exercise": "Exercise", + "Pump Site Change": "Pump Site Change", + "CGM Sensor Start": "CGM Sensor Start", + "CGM Sensor Stop": "CGM Sensor Stop", + "CGM Sensor Insert": "CGM Sensor Insert", + "Sensor Code": "Sensor Code", + "Transmitter ID": "Transmitter ID", + "Dexcom Sensor Start": "Dexcom Sensor Start", + "Dexcom Sensor Change": "Dexcom Sensor Change", + "Insulin Cartridge Change": "Insulin Cartridge Change", + "D.A.D. Alert": "D.A.D. Alert", + "Glucose Reading": "Glucose Reading", + "Measurement Method": "Measurement Method", + "Meter": "Meter", + "Amount in grams": "Amount in grams", + "Amount in units": "Amount in units", + "View all treatments": "View all treatments", + "Enable Alarms": "啟用報警", + "Pump Battery Change": "Pump Battery Change", + "Pump Battery Age": "Pump Battery Age", + "Pump Battery Low Alarm": "Pump Battery Low Alarm", + "Pump Battery change overdue!": "Pump Battery change overdue!", + "When enabled an alarm may sound.": "啟用後可發出聲音報警", + "Urgent High Alarm": "血糖過高報警", + "High Alarm": "高血糖報警", + "Low Alarm": "低血糖報警", + "Urgent Low Alarm": "血糖過低報警", + "Stale Data: Warn": "數據過期:提醒", + "Stale Data: Urgent": "數據過期:警告", + "mins": "分", + "Night Mode": "夜間模式", + "When enabled the page will be dimmed from 10pm - 6am.": "啟用後將在夜間22點至早晨6點降低頁面亮度", + "Enable": "啟用", + "Show Raw BG Data": "顯示原始血糖數據", + "Never": "不顯示", + "Always": "一直顯示", + "When there is noise": "當有噪聲時顯示", + "When enabled small white dots will be displayed for raw BG data": "啟用後將使用小白點標註原始血糖數據", + "Custom Title": "自定義標題", + "Theme": "主題", + "Default": "默認", + "Colors": "彩色", + "Colorblind-friendly colors": "色盲患者可辨識的顏色", + "Reset, and use defaults": "使用默認值重置", + "Calibrations": "Calibrations", + "Alarm Test / Smartphone Enable": "報警測試/智能手機啟用", + "Bolus Wizard": "大劑量嚮導", + "in the future": "在未來", + "time ago": "在過去", + "hr ago": "小時前", + "hrs ago": "小時前", + "min ago": "分鐘前", + "mins ago": "分鐘前", + "day ago": "天前", + "days ago": "天前", + "long ago": "很長時間前", + "Clean": "無", + "Light": "輕度", + "Medium": "中度", + "Heavy": "嚴重", + "Treatment type": "Treatment type", + "Raw BG": "Raw BG", + "Device": "Device", + "Noise": "Noise", + "Calibration": "Calibration", + "Show Plugins": "Show Plugins", + "About": "關於", + "Value in": "Value in", + "Carb Time": "Carb Time", + "Language": "語言", + "Add new": "Add new", + "g": "克", + "ml": "克", + "pcs": "件", + "Drag&drop food here": "Drag&drop food here", + "Care Portal": "服務面板", + "Medium/Unknown": "Medium/Unknown", + "IN THE FUTURE": "IN THE FUTURE", + "Order": "Order", + "oldest on top": "oldest on top", + "newest on top": "newest on top", + "All sensor events": "All sensor events", + "Remove future items from mongo database": "從數據庫中清除所有未來條目", + "Find and remove treatments in the future": "查找並清除所有未來的操作", + "This task find and remove treatments in the future.": "此功能查找並清除所有未來的操作。", + "Remove treatments in the future": "清除未來操作", + "Find and remove entries in the future": "查找並清除所有的未來的記錄", + "This task find and remove CGM data in the future created by uploader with wrong date/time.": "此功能查找並清除所有上傳時日期時間錯誤導致生成在未來時間的CGM數據。", + "Remove entries in the future": "清除未來記錄", + "Loading database ...": "載入數據庫...", + "Database contains %1 future records": "數據庫包含%1條未來記錄", + "Remove %1 selected records?": "清除%1條選擇的記錄?", + "Error loading database": "載入數據庫錯誤", + "Record %1 removed ...": "%1條記錄已清除", + "Error removing record %1": "%1條記錄清除出錯", + "Deleting records ...": "正在刪除記錄...", + "%1 records deleted": "%1 records deleted", + "Clean Mongo status database": "Clean Mongo status database", + "Delete all documents from devicestatus collection": "Delete all documents from devicestatus collection", + "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.": "This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.", + "Delete all documents": "Delete all documents", + "Delete all documents from devicestatus collection?": "Delete all documents from devicestatus collection?", + "Database contains %1 records": "Database contains %1 records", + "All records removed ...": "All records removed ...", + "Delete all documents from devicestatus collection older than 30 days": "Delete all documents from devicestatus collection older than 30 days", + "Number of Days to Keep:": "Number of Days to Keep:", + "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.": "This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.", + "Delete old documents from devicestatus collection?": "Delete old documents from devicestatus collection?", + "Clean Mongo entries (glucose entries) database": "Clean Mongo entries (glucose entries) database", + "Delete all documents from entries collection older than 180 days": "Delete all documents from entries collection older than 180 days", + "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.", + "Delete old documents": "Delete old documents", + "Delete old documents from entries collection?": "Delete old documents from entries collection?", + "%1 is not a valid number": "%1 is not a valid number", + "%1 is not a valid number - must be more than 2": "%1 is not a valid number - must be more than 2", + "Clean Mongo treatments database": "Clean Mongo treatments database", + "Delete all documents from treatments collection older than 180 days": "Delete all documents from treatments collection older than 180 days", + "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.": "This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.", + "Delete old documents from treatments collection?": "Delete old documents from treatments collection?", + "Admin Tools": "管理工具", + "Nightscout reporting": "Nightscout reporting", + "Cancel": "Cancel", + "Edit treatment": "Edit treatment", + "Duration": "Duration", + "Duration in minutes": "Duration in minutes", + "Temp Basal": "Temp Basal", + "Temp Basal Start": "Temp Basal Start", + "Temp Basal End": "Temp Basal End", + "Percent": "Percent", + "Basal change in %": "Basal change in %", + "Basal value": "Basal value", + "Absolute basal value": "Absolute basal value", + "Announcement": "Announcement", + "Loading temp basal data": "Loading temp basal data", + "Save current record before changing to new?": "Save current record before changing to new?", + "Profile Switch": "Profile Switch", + "Profile": "Profile", + "General profile settings": "General profile settings", + "Title": "Title", + "Database records": "Database records", + "Add new record": "Add new record", + "Remove this record": "Remove this record", + "Clone this record to new": "Clone this record to new", + "Record valid from": "Record valid from", + "Stored profiles": "Stored profiles", + "Timezone": "Timezone", + "Duration of Insulin Activity (DIA)": "Duration of Insulin Activity (DIA)", + "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.": "Represents the typical duration over which insulin takes effect. Varies per patient and per insulin type. Typically 3-4 hours for most pumped insulin and most patients. Sometimes also called insulin lifetime.", + "Insulin to carb ratio (I:C)": "Insulin to carb ratio (I:C)", + "Hours:": "Hours:", + "hours": "hours", + "g/hour": "g/hour", + "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.": "g carbs per U insulin. The ratio of how many grams of carbohydrates are offset by each U of insulin.", + "Insulin Sensitivity Factor (ISF)": "Insulin Sensitivity Factor (ISF)", + "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.": "mg/dL or mmol/L per U insulin. The ratio of how much BG changes with each U of corrective insulin.", + "Carbs activity / absorption rate": "Carbs activity / absorption rate", + "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).": "grams per unit time. Represents both the change in COB per unit of time, as well as the amount of carbs that should take effect over that time. Carb absorption / activity curves are less well understood than insulin activity, but can be approximated using an initial delay followed by a constant rate of absorption (g/hr).", + "Basal rates [unit/hour]": "Basal rates [unit/hour]", + "Target BG range [mg/dL,mmol/L]": "Target BG range [mg/dL,mmol/L]", + "Start of record validity": "Start of record validity", + "Icicle": "Icicle", + "Render Basal": "使用基礎率", + "Profile used": "Profile used", + "Calculation is in target range.": "Calculation is in target range.", + "Loading profile records ...": "Loading profile records ...", + "Values loaded.": "Values loaded.", + "Default values used.": "Default values used.", + "Error. Default values used.": "Error. Default values used.", + "Time ranges of target_low and target_high don't match. Values are restored to defaults.": "Time ranges of target_low and target_high don't match. Values are restored to defaults.", + "Valid from:": "Valid from:", + "Save current record before switching to new?": "Save current record before switching to new?", + "Add new interval before": "Add new interval before", + "Delete interval": "Delete interval", + "I:C": "I:C", + "ISF": "ISF", + "Combo Bolus": "Combo Bolus", + "Difference": "Difference", + "New time": "New time", + "Edit Mode": "編輯模式", + "When enabled icon to start edit mode is visible": "啟用後開始編輯模式圖標可見", + "Operation": "Operation", + "Move": "Move", + "Delete": "Delete", + "Move insulin": "Move insulin", + "Move carbs": "Move carbs", + "Remove insulin": "Remove insulin", + "Remove carbs": "Remove carbs", + "Change treatment time to %1 ?": "Change treatment time to %1 ?", + "Change carbs time to %1 ?": "Change carbs time to %1 ?", + "Change insulin time to %1 ?": "Change insulin time to %1 ?", + "Remove treatment ?": "Remove treatment ?", + "Remove insulin from treatment ?": "Remove insulin from treatment ?", + "Remove carbs from treatment ?": "Remove carbs from treatment ?", + "Rendering": "Rendering", + "Loading OpenAPS data of": "Loading OpenAPS data of", + "Loading profile switch data": "Loading profile switch data", + "Redirecting you to the Profile Editor to create a new profile.": "Redirecting you to the Profile Editor to create a new profile.", + "Pump": "Pump", + "Sensor Age": "探頭使用時間(SAGE)", + "Insulin Age": "胰島素使用時間(IAGE)", + "Temporary target": "Temporary target", + "Reason": "Reason", + "Eating soon": "Eating soon", + "Top": "Top", + "Bottom": "Bottom", + "Activity": "Activity", + "Targets": "Targets", + "Bolus insulin:": "Bolus insulin:", + "Base basal insulin:": "Base basal insulin:", + "Positive temp basal insulin:": "Positive temp basal insulin:", + "Negative temp basal insulin:": "Negative temp basal insulin:", + "Total basal insulin:": "Total basal insulin:", + "Total daily insulin:": "Total daily insulin:", + "Unable to save Role": "Unable to save Role", + "Unable to delete Role": "Unable to delete Role", + "Database contains %1 roles": "Database contains %1 roles", + "Edit Role": "Edit Role", + "admin, school, family, etc": "admin, school, family, etc", + "Permissions": "Permissions", + "Are you sure you want to delete: ": "Are you sure you want to delete: ", + "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.": "Each role will have a 1 or more permissions. The * permission is a wildcard, permissions are a hierarchy using : as a separator.", + "Add new Role": "Add new Role", + "Roles - Groups of People, Devices, etc": "Roles - Groups of People, Devices, etc", + "Edit this role": "Edit this role", + "Admin authorized": "已授權", + "Subjects - People, Devices, etc": "Subjects - People, Devices, etc", + "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.": "Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.", + "Add new Subject": "Add new Subject", + "Unable to save Subject": "Unable to save Subject", + "Unable to delete Subject": "Unable to delete Subject", + "Database contains %1 subjects": "Database contains %1 subjects", + "Edit Subject": "Edit Subject", + "person, device, etc": "person, device, etc", + "role1, role2": "role1, role2", + "Edit this subject": "Edit this subject", + "Delete this subject": "Delete this subject", + "Roles": "Roles", + "Access Token": "Access Token", + "hour ago": "hour ago", + "hours ago": "hours ago", + "Silence for %1 minutes": "靜音%1分鐘", + "Check BG": "Check BG", + "BASAL": "基礎率", + "Current basal": "Current basal", + "Sensitivity": "Sensitivity", + "Current Carb Ratio": "Current Carb Ratio", + "Basal timezone": "Basal timezone", + "Active profile": "Active profile", + "Active temp basal": "Active temp basal", + "Active temp basal start": "Active temp basal start", + "Active temp basal duration": "Active temp basal duration", + "Active temp basal remaining": "Active temp basal remaining", + "Basal profile value": "Basal profile value", + "Active combo bolus": "Active combo bolus", + "Active combo bolus start": "Active combo bolus start", + "Active combo bolus duration": "Active combo bolus duration", + "Active combo bolus remaining": "Active combo bolus remaining", + "BG Delta": "血糖增量", + "Elapsed Time": "所需時間", + "Absolute Delta": "絕對增量", + "Interpolated": "插值", + "BWP": "BWP", + "Urgent": "緊急", + "Warning": "警告", + "Info": "資訊", + "Lowest": "血糖極低", + "Snoozing high alarm since there is enough IOB": "Snoozing high alarm since there is enough IOB", + "Check BG, time to bolus?": "Check BG, time to bolus?", + "Notice": "Notice", + "required info missing": "required info missing", + "Insulin on Board": "Insulin on Board", + "Current target": "Current target", + "Expected effect": "Expected effect", + "Expected outcome": "Expected outcome", + "Carb Equivalent": "Carb Equivalent", + "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs": "Excess insulin equivalent %1U more than needed to reach low target, not accounting for carbs", + "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS": "Excess insulin equivalent %1U more than needed to reach low target, MAKE SURE IOB IS COVERED BY CARBS", + "%1U reduction needed in active insulin to reach low target, too much basal?": "%1U reduction needed in active insulin to reach low target, too much basal?", + "basal adjustment out of range, give carbs?": "basal adjustment out of range, give carbs?", + "basal adjustment out of range, give bolus?": "basal adjustment out of range, give bolus?", + "above high": "血糖過高", + "below low": "血糖過低", + "Projected BG %1 target": "Projected BG %1 target", + "aiming at": "aiming at", + "Bolus %1 units": "Bolus %1 units", + "or adjust basal": "or adjust basal", + "Check BG using glucometer before correcting!": "Check BG using glucometer before correcting!", + "Basal reduction to account %1 units:": "Basal reduction to account %1 units:", + "30m temp basal": "30m temp basal", + "1h temp basal": "1h temp basal", + "Cannula change overdue!": "Cannula change overdue!", + "Time to change cannula": "Time to change cannula", + "Change cannula soon": "Change cannula soon", + "Cannula age %1 hours": "Cannula age %1 hours", + "Inserted": "已植入", + "CAGE": "管路", + "COB": "COB", + "Last Carbs": "Last Carbs", + "IAGE": "胰島素", + "Insulin reservoir change overdue!": "Insulin reservoir change overdue!", + "Time to change insulin reservoir": "Time to change insulin reservoir", + "Change insulin reservoir soon": "Change insulin reservoir soon", + "Insulin reservoir age %1 hours": "Insulin reservoir age %1 hours", + "Changed": "Changed", + "IOB": "IOB", + "Careportal IOB": "Careportal IOB", + "Last Bolus": "Last Bolus", + "Basal IOB": "Basal IOB", + "Source": "Source", + "Stale data, check rig?": "Stale data, check rig?", + "Last received:": "Last received:", + "%1m ago": "%1m ago", + "%1h ago": "%1h ago", + "%1d ago": "%1d ago", + "RETRO": "RETRO", + "SAGE": "探頭", + "Sensor change/restart overdue!": "Sensor change/restart overdue!", + "Time to change/restart sensor": "Time to change/restart sensor", + "Change/restart sensor soon": "Change/restart sensor soon", + "Sensor age %1 days %2 hours": "Sensor age %1 days %2 hours", + "Sensor Insert": "Sensor Insert", + "Sensor Start": "Sensor Start", + "days": "days", + "Insulin distribution": "Insulin distribution", + "To see this report, press SHOW while in this view": "To see this report, press SHOW while in this view", + "AR2 Forecast": "AR2 Forecast", + "OpenAPS Forecasts": "OpenAPS Forecasts", + "Temporary Target": "Temporary Target", + "Temporary Target Cancel": "Temporary Target Cancel", + "OpenAPS Offline": "OpenAPS Offline", + "Profiles": "Profiles", + "Time in fluctuation": "Time in fluctuation", + "Time in rapid fluctuation": "Time in rapid fluctuation", + "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:": "This is only a rough estimation that can be very inaccurate and does not replace actual blood testing. The formula used is taken from:", + "Filter by hours": "Filter by hours", + "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.": "Time in fluctuation and Time in rapid fluctuation measure the % of time during the examined period, during which the blood glucose has been changing relatively fast or rapidly. Lower values are better.", + "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.": "Mean Total Daily Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of days. Lower is better.", + "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.": "Mean Hourly Change is a sum of the absolute value of all glucose excursions for the examined period, divided by the number of hours in the period. Lower is better.", + "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.": "Out of Range RMS is calculated by squaring the distance out of range for all glucose readings for the examined period, summing them, dividing by the count and taking the square root. This metric is similar to in-range percentage but weights readings far out of range higher. Lower values are better.", + "GVI (Glycemic Variability Index) and PGS (Patient Glycemic Status) are measures developed by Dexcom, detailed can be found here.": "\">can be found here.", + "Mean Total Daily Change": "Mean Total Daily Change", + "Mean Hourly Change": "Mean Hourly Change", + "FortyFiveDown": "slightly dropping", + "FortyFiveUp": "slightly rising", + "Flat": "holding", + "SingleUp": "rising", + "SingleDown": "dropping", + "DoubleDown": "rapidly dropping", + "DoubleUp": "rapidly rising", + "virtAsstUnknown": "That value is unknown at the moment. Please see your Nightscout site for more details.", + "virtAsstTitleAR2Forecast": "AR2 Forecast", + "virtAsstTitleCurrentBasal": "Current Basal", + "virtAsstTitleCurrentCOB": "Current COB", + "virtAsstTitleCurrentIOB": "Current IOB", + "virtAsstTitleLaunch": "Welcome to Nightscout", + "virtAsstTitleLoopForecast": "Loop Forecast", + "virtAsstTitleLastLoop": "Last Loop", + "virtAsstTitleOpenAPSForecast": "OpenAPS Forecast", + "virtAsstTitlePumpReservoir": "Insulin Remaining", + "virtAsstTitlePumpBattery": "Pump Battery", + "virtAsstTitleRawBG": "Current Raw BG", + "virtAsstTitleUploaderBattery": "Current Raw BG", + "virtAsstTitleCurrentBG": "Current BG", + "virtAsstTitleFullStatus": "Full Status", + "virtAsstTitleCGMMode": "CGM Mode", + "virtAsstTitleCGMStatus": "CGM Status", + "virtAsstTitleCGMSessionAge": "CGM Session Age", + "virtAsstTitleCGMTxStatus": "CGM Transmitter Status", + "virtAsstTitleCGMTxAge": "CGM Transmitter Age", + "virtAsstTitleCGMNoise": "CGM Noise", + "virtAsstTitleDelta": "Blood Glucose Delta", + "virtAsstStatus": "%1 and %2 as of %3.", + "virtAsstBasal": "%1 current basal is %2 units per hour", + "virtAsstBasalTemp": "%1 temp basal of %2 units per hour will end %3", + "virtAsstIob": "and you have %1 insulin on board.", + "virtAsstIobIntent": "You have %1 insulin on board", + "virtAsstIobUnits": "%1 units of", + "virtAsstLaunch": "What would you like to check on Nightscout?", + "virtAsstPreamble": "Your", + "virtAsstPreamble3person": "%1 has a ", + "virtAsstNoInsulin": "no", + "virtAsstUploadBattery": "Your uploader battery is at %1", + "virtAsstReservoir": "You have %1 units remaining", + "virtAsstPumpBattery": "Your pump battery is at %1 %2", + "virtAsstUploaderBattery": "Your uploader battery is at %1", + "virtAsstLastLoop": "The last successful loop was %1", + "virtAsstLoopNotAvailable": "Loop plugin does not seem to be enabled", + "virtAsstLoopForecastAround": "According to the loop forecast you are expected to be around %1 over the next %2", + "virtAsstLoopForecastBetween": "According to the loop forecast you are expected to be between %1 and %2 over the next %3", + "virtAsstAR2ForecastAround": "According to the AR2 forecast you are expected to be around %1 over the next %2", + "virtAsstAR2ForecastBetween": "According to the AR2 forecast you are expected to be between %1 and %2 over the next %3", + "virtAsstForecastUnavailable": "Unable to forecast with the data that is available", + "virtAsstRawBG": "Your raw bg is %1", + "virtAsstOpenAPSForecast": "The OpenAPS Eventual BG is %1", + "virtAsstCob3person": "%1 has %2 carbohydrates on board", + "virtAsstCob": "You have %1 carbohydrates on board", + "virtAsstCGMMode": "Your CGM mode was %1 as of %2.", + "virtAsstCGMStatus": "Your CGM status was %1 as of %2.", + "virtAsstCGMSessAge": "Your CGM session has been active for %1 days and %2 hours.", + "virtAsstCGMSessNotStarted": "There is no active CGM session at the moment.", + "virtAsstCGMTxStatus": "Your CGM transmitter status was %1 as of %2.", + "virtAsstCGMTxAge": "Your CGM transmitter is %1 days old.", + "virtAsstCGMNoise": "Your CGM noise was %1 as of %2.", + "virtAsstCGMBattOne": "Your CGM battery was %1 volts as of %2.", + "virtAsstCGMBattTwo": "Your CGM battery levels were %1 volts and %2 volts as of %3.", + "virtAsstDelta": "Your delta was %1 between %2 and %3.", + "virtAsstDeltaEstimated": "Your estimated delta was %1 between %2 and %3.", + "virtAsstUnknownIntentTitle": "Unknown Intent", + "virtAsstUnknownIntentText": "I'm sorry, I don't know what you're asking for.", + "Fat [g]": "Fat [g]", + "Protein [g]": "Protein [g]", + "Energy [kJ]": "Energy [kJ]", + "Clock Views:": "Clock Views:", + "Clock": "Clock", + "Color": "Color", + "Simple": "Simple", + "TDD average": "TDD average", + "Bolus average": "Bolus average", + "Basal average": "Basal average", + "Base basal average:": "Base basal average:", + "Carbs average": "Carbs average", + "Eating Soon": "Eating Soon", + "Last entry {0} minutes ago": "Last entry {0} minutes ago", + "change": "change", + "Speech": "Speech", + "Target Top": "Target Top", + "Target Bottom": "Target Bottom", + "Canceled": "Canceled", + "Meter BG": "Meter BG", + "predicted": "predicted", + "future": "future", + "ago": "ago", + "Last data received": "Last data received", + "Clock View": "Clock View", + "Protein": "Protein", + "Fat": "Fat", + "Protein average": "Protein average", + "Fat average": "Fat average", + "Total carbs": "Total carbs", + "Total protein": "Total protein", + "Total fat": "Total fat", + "Database Size": "Database Size", + "Database Size near its limits!": "Database Size near its limits!", + "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!": "Database size is %1 MiB out of %2 MiB. Please backup and clean up database!", + "Database file size": "Database file size", + "%1 MiB of %2 MiB (%3%)": "%1 MiB of %2 MiB (%3%)", + "Data size": "Data size", + "virtAsstDatabaseSize": "%1 MiB. That is %2% of available database space.", + "virtAsstTitleDatabaseSize": "Database file size", + "Carbs/Food/Time": "Carbs/Food/Time", + "You have administration messages": "You have administration messages", + "Admin messages in queue": "Admin messages in queue", + "Queue empty": "Queue empty", + "There are no admin messages in queue": "There are no admin messages in queue", + "Please sign in using the API_SECRET to see your administration messages": "Please sign in using the API_SECRET to see your administration messages", + "Reads enabled in default permissions": "Reads enabled in default permissions", + "Data reads enabled": "Data reads enabled", + "Data writes enabled": "Data writes enabled", + "Data writes not enabled": "Data writes not enabled", + "Color prediction lines": "Color prediction lines", + "Release Notes": "Release Notes", + "Check for Updates": "Check for Updates", + "Open Source": "Open Source", + "Nightscout Info": "Nightscout Info", + "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.": "The primary purpose of Loopalyzer is to visualise how the Loop closed loop system performs. It may work with other setups as well, both closed and open loop, and non loop. However depending on which uploader you use, how frequent it is able to capture your data and upload, and how it is able to backfill missing data some graphs may have gaps or even be completely empty. Always ensure the graphs look reasonable. Best is to view one day at a time and scroll through a number of days first to see.", + "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.": "Loopalyzer includes a time shift feature. If you for example have breakfast at 07:00 one day and at 08:00 the day after your average blood glucose curve these two days will most likely look flattened and not show the actual response after a breakfast. Time shift will compute the average time these meals were eaten and then shift all data (carbs, insulin, basal etc.) during both days the corresponding time difference so that both meals align with the average meal start time.", + "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.": "In this example all data from first day is pushed 30 minutes forward in time and all data from second day 30 minutes backward in time so it appears as if you had had breakfast at 07:30 both days. This allows you to see your actual average blood glucose response from a meal.", + "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.": "Time shift highlights the period after the average meal start time in gray, for the duration of the DIA (Duration of Insulin Action). As all data points the entire day are shifted the curves outside the gray area may not be accurate.", + "Note that time shift is available only when viewing multiple days.": "Note that time shift is available only when viewing multiple days.", + "Please select a maximum of two weeks duration and click Show again.": "Please select a maximum of two weeks duration and click Show again.", + "Show profiles table": "Show profiles table", + "Show predictions": "Show predictions", + "Timeshift on meals larger than %1 g carbs consumed between %2 and %3": "Timeshift on meals larger than %1 g carbs consumed between %2 and %3", + "Previous": "Previous", + "Previous day": "Previous day", + "Next day": "Next day", + "Next": "Next", + "Temp basal delta": "Temp basal delta", + "Authorized by token": "Authorized by token", + "Auth role": "Auth role", + "view without token": "view without token", + "Remove stored token": "Remove stored token", + "Weekly Distribution": "Weekly Distribution", + "Failed authentication": "Failed authentication", + "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?": "A device at IP address %1 attempted authenticating with Nightscout with wrong credentials. Check if you have an uploader setup with wrong API_SECRET or token?", + "Default (with leading zero and U)": "Default (with leading zero and U)", + "Concise (with U, without leading zero)": "Concise (with U, without leading zero)", + "Minimal (without leading zero and U)": "Minimal (without leading zero and U)", + "Small Bolus Display": "Small Bolus Display", + "Large Bolus Display": "Large Bolus Display", + "Bolus Display Threshold": "Bolus Display Threshold", + "%1 U and Over": "%1 U and Over", + "Event repeated %1 times.": "Event repeated %1 times.", + "minutes": "minutes", + "Last recorded %1 %2 ago.": "Last recorded %1 %2 ago.", + "Security issue": "Security issue", + "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.": "Weak API_SECRET detected. Please use a mix of small and CAPITAL letters, numbers and non-alphanumeric characters such as !#%&/ to reduce the risk of unauthorized access. The minimum length of the API_SECRET is 12 characters.", + "less than 1": "less than 1", + "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system.": "MongoDB password and API_SECRET match. This is a really bad idea. Please change both and do not reuse passwords across the system." +} diff --git a/views/adminindex.html b/views/adminindex.html index 9b4ff750d2e..c47b64b9323 100644 --- a/views/adminindex.html +++ b/views/adminindex.html @@ -29,8 +29,9 @@ + - <% include preloadCSS %> + <%- include('preloadCSS')%> <%- include('partials/toolbar') %> diff --git a/views/foodindex.html b/views/foodindex.html index 7168897467f..ddfd0e50d0b 100644 --- a/views/foodindex.html +++ b/views/foodindex.html @@ -29,7 +29,7 @@ - <% include preloadCSS %> + <%- include('preloadCSS')%> @@ -114,6 +114,6 @@ - + diff --git a/views/index.html b/views/index.html index 8e60b30f471..08e4507d5d8 100644 --- a/views/index.html +++ b/views/index.html @@ -31,6 +31,8 @@ + + - <% include preloadCSS %> + <%- include('preloadCSS')%> @@ -166,9 +168,9 @@