diff --git a/.eslintrc.json b/.eslintrc.json
index b7bff54145143b..4a87d628a733a9 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -17,6 +17,7 @@
"plugin:jsx-a11y/recommended",
"prettier"
],
+ "plugins": ["no-only-tests"],
"globals": {
"Promise": true,
"window": true,
@@ -31,11 +32,12 @@
}
},
"rules": {
- "import/named": 2,
- "import/no-named-as-default": 0,
- "import/no-named-as-default-member": 0,
- "import/order": 2,
- "react/prop-types": "off"
+ "import/named": "error",
+ "import/no-named-as-default": "off",
+ "import/no-named-as-default-member": "off",
+ "import/order": "error",
+ "react/prop-types": "off",
+ "no-only-tests/no-only-tests": "error"
},
"overrides": [
{
@@ -66,7 +68,20 @@
"leadingUnderscore": "allow",
"trailingUnderscore": "allow"
},
-
+ {
+ "selector": [
+ "classProperty",
+ "objectLiteralProperty",
+ "typeProperty",
+ "classMethod",
+ "objectLiteralMethod",
+ "typeMethod",
+ "accessor",
+ "enumMember"
+ ],
+ "format": null,
+ "modifiers": ["requiresQuotes"]
+ },
{
"selector": "variable",
"format": ["camelCase", "UPPER_CASE", "PascalCase"],
diff --git a/.github/workflows/autoclose.yml b/.github/workflows/autoclose.yml
index 79ce9508339739..68ccb947d14082 100644
--- a/.github/workflows/autoclose.yml
+++ b/.github/workflows/autoclose.yml
@@ -1,4 +1,4 @@
-name: Autoclose
+name: GitHub - Autoclose Invalid PRs
on:
pull_request_target:
branches:
@@ -10,7 +10,7 @@ jobs:
autoclose:
runs-on: ubuntu-20.04
steps:
- - uses: actions/github-script@v6
+ - uses: actions/github-script@c713e510dbd7d213d92d41b7a7805a986f4c5c66 # tag=v6
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 843e1e1a8e443d..b602ca2bc36038 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -1,5 +1,4 @@
-name: 'CodeQL'
-
+name: CI - Run CodeQL Analysis
on:
push:
branches: [main]
@@ -31,10 +30,10 @@ jobs:
language: ['javascript']
steps:
- name: Checkout repository
- uses: actions/checkout@v3
+ uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3
- name: Setup CodeQL
- uses: github/codeql-action/init@v1
+ uses: github/codeql-action/init@d5cec099b513fccc2cfcc9247113ecc9edbdacc5 # tag=v1
with:
languages: ${{ matrix.language }}
- name: Perform Analysis
- uses: github/codeql-action/analyze@v1
+ uses: github/codeql-action/analyze@d5cec099b513fccc2cfcc9247113ecc9edbdacc5 # tag=v1
diff --git a/.github/workflows/codesee-diagram.yml b/.github/workflows/codesee-diagram.yml
index 5eaa815fd559a1..d5849fd7a6538e 100644
--- a/.github/workflows/codesee-diagram.yml
+++ b/.github/workflows/codesee-diagram.yml
@@ -1,3 +1,4 @@
+name: CI - Create CodeSee Maps
on:
workflow_dispatch:
schedule:
@@ -8,8 +9,6 @@ on:
- 'docs/**'
types: [opened, synchronize, reopened]
-name: CodeSee Map
-
jobs:
test_map_action:
runs-on: ubuntu-20.04
@@ -19,7 +18,7 @@ jobs:
steps:
- name: checkout
id: checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3
with:
repository: ${{ github.event.pull_request.head.repo.full_name }}
ref: ${{ github.event.pull_request.head.ref }}
@@ -31,7 +30,7 @@ jobs:
uses: Codesee-io/codesee-detect-languages-action@latest
- name: Configure JDK 16
- uses: actions/setup-java@v3
+ uses: actions/setup-java@2c7a4878f5d120bd643426d54ae1209b29cc01a3 # tag=v3
if: ${{ fromJSON(steps.detect-languages.outputs.languages).java }}
with:
java-version: '16'
@@ -40,14 +39,13 @@ jobs:
# CodeSee Maps Go support uses a static binary so there's no setup step required.
- name: Configure Node.js 16
- uses: actions/setup-node@v3
+ uses: actions/setup-node@2fddd8803e2f5c9604345a0b591c3020ee971a93 # tag=v3
if: ${{ fromJSON(steps.detect-languages.outputs.languages).javascript }}
with:
node-version: '16'
- cache: npm
- name: Configure Python 3.x
- uses: actions/setup-python@v3
+ uses: actions/setup-python@b55428b1882923874294fa556849718a1d7f2ca5 # tag=v4
if: ${{ fromJSON(steps.detect-languages.outputs.languages).python }}
with:
python-version: '3.x'
diff --git a/.github/workflows/crowdin-download.client-ui.yml b/.github/workflows/crowdin-download.client-ui.yml
index d8205bb2a4d1dc..9e22c07852cd67 100644
--- a/.github/workflows/crowdin-download.client-ui.yml
+++ b/.github/workflows/crowdin-download.client-ui.yml
@@ -1,4 +1,4 @@
-name: Crowdin Client UI Download
+name: i18n - Download Client UI
on:
workflow_dispatch:
schedule:
@@ -18,7 +18,7 @@ jobs:
steps:
- name: Checkout Source Files
- uses: actions/checkout@v3
+ uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3
with:
token: ${{ secrets.CROWDIN_CAMPERBOT_PAT }}
@@ -209,6 +209,35 @@ jobs:
# Uncomment below to debug
# dryrun_action: true
+ ##### Download German #####
+ - name: Crowdin Download German Translations
+ uses: crowdin/github-action@master
+ # options: https://github.com/crowdin/github-action/blob/master/action.yml
+ with:
+ # uploads
+ upload_sources: false
+ upload_translations: false
+ auto_approve_imported: false
+ import_eq_suggestions: false
+
+ # downloads
+ download_translations: true
+ download_language: de
+ skip_untranslated_files: false
+ export_only_approved: true
+
+ push_translations: false
+
+ # pull-request
+ create_pull_request: false
+
+ # global options
+ config: './crowdin-config.yml'
+ base_url: ${{ secrets.CROWDIN_BASE_URL_FCC }}
+
+ # Uncomment below to debug
+ # dryrun_action: true
+
# Create Commit
- name: Commit Changes
uses: freecodecamp/crowdin-action@main
diff --git a/.github/workflows/crowdin-download.curriculum.yml b/.github/workflows/crowdin-download.curriculum.yml
index dfa9883ae9a74d..95a337c7c208f4 100644
--- a/.github/workflows/crowdin-download.curriculum.yml
+++ b/.github/workflows/crowdin-download.curriculum.yml
@@ -1,4 +1,4 @@
-name: Crowdin Curriculum Download
+name: i18n - Download Curriculum
on:
workflow_dispatch:
schedule:
@@ -18,7 +18,7 @@ jobs:
steps:
- name: Checkout Source Files
- uses: actions/checkout@v3
+ uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3
with:
token: ${{ secrets.CROWDIN_CAMPERBOT_PAT }}
@@ -209,6 +209,35 @@ jobs:
# Uncomment below to debug
# dryrun_action: true
+ ##### Download German #####
+ - name: Crowdin Download German Translations
+ uses: crowdin/github-action@master
+ # options: https://github.com/crowdin/github-action/blob/master/action.yml
+ with:
+ # uploads
+ upload_sources: false
+ upload_translations: false
+ auto_approve_imported: false
+ import_eq_suggestions: false
+
+ # downloads
+ download_translations: true
+ download_language: de
+ skip_untranslated_files: true
+ export_only_approved: true
+
+ push_translations: false
+
+ # pull-request
+ create_pull_request: false
+
+ # global options
+ config: './crowdin-config.yml'
+ base_url: ${{ secrets.CROWDIN_BASE_URL_FCC }}
+
+ # Uncomment below to debug
+ # dryrun_action: true
+
# Create Commit
- name: Commit Changes
uses: freecodecamp/crowdin-action@main
diff --git a/.github/workflows/crowdin-download.docs.yml b/.github/workflows/crowdin-download.docs.yml
index 4a14c4c6b20d81..dceeb4c2ebc90c 100644
--- a/.github/workflows/crowdin-download.docs.yml
+++ b/.github/workflows/crowdin-download.docs.yml
@@ -1,4 +1,4 @@
-name: Crowdin Docs Download
+name: i18n - Download Docs
on:
workflow_dispatch:
schedule:
@@ -18,7 +18,7 @@ jobs:
steps:
- name: Checkout Source Files
- uses: actions/checkout@v3
+ uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3
with:
token: ${{ secrets.CROWDIN_CAMPERBOT_PAT }}
diff --git a/.github/workflows/crowdin-upload.client-ui.yml b/.github/workflows/crowdin-upload.client-ui.yml
index dbee7d79a5f573..8aea723250c5b2 100644
--- a/.github/workflows/crowdin-upload.client-ui.yml
+++ b/.github/workflows/crowdin-upload.client-ui.yml
@@ -1,4 +1,4 @@
-name: Crowdin Client UI Upload
+name: i18n - Upload Client UI
on:
workflow_dispatch:
schedule:
@@ -18,7 +18,7 @@ jobs:
steps:
- name: Checkout Source Files
- uses: actions/checkout@v3
+ uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3
- name: Generate Crowdin Config
uses: freecodecamp/crowdin-action@main
diff --git a/.github/workflows/crowdin-upload.curriculum.yml b/.github/workflows/crowdin-upload.curriculum.yml
index 314660afb337f1..65aeefdc90927e 100644
--- a/.github/workflows/crowdin-upload.curriculum.yml
+++ b/.github/workflows/crowdin-upload.curriculum.yml
@@ -1,4 +1,4 @@
-name: Crowdin Curriculum Upload
+name: i18n - Upload Curriculum
on:
workflow_dispatch:
schedule:
@@ -18,7 +18,7 @@ jobs:
steps:
- name: Checkout Source Files
- uses: actions/checkout@v3
+ uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3
- name: Generate Crowdin Config
uses: freecodecamp/crowdin-action@main
diff --git a/.github/workflows/crowdin-upload.docs.yml b/.github/workflows/crowdin-upload.docs.yml
index 090556b1c13932..61efcd71feb1b8 100644
--- a/.github/workflows/crowdin-upload.docs.yml
+++ b/.github/workflows/crowdin-upload.docs.yml
@@ -1,4 +1,4 @@
-name: Crowdin Docs Upload
+name: i18n - Upload Docs
on:
workflow_dispatch:
schedule:
@@ -18,7 +18,7 @@ jobs:
steps:
- name: Checkout Source Files
- uses: actions/checkout@v3
+ uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3
- name: Generate Crowdin Config
uses: freecodecamp/crowdin-action@main
diff --git a/.github/workflows/cypress-third-party.yml b/.github/workflows/cypress-third-party.yml
new file mode 100644
index 00000000000000..f2dc1916374b8d
--- /dev/null
+++ b/.github/workflows/cypress-third-party.yml
@@ -0,0 +1,67 @@
+name: CI - Cypress (e2e) 3rd party donation tests
+on:
+ push:
+ branches:
+ - main
+
+jobs:
+ do-everything:
+ name: Build
+ runs-on: ubuntu-20.04
+ strategy:
+ fail-fast: false
+ services:
+ mongodb:
+ image: mongo:4
+ ports:
+ - 27017:27017
+ # We need mailhog to catch any emails the api tries to send.
+ mailhog:
+ image: mailhog/mailhog
+ ports:
+ - 1025:1025
+
+ steps:
+ - name: Checkout Source Files
+ uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3
+
+ - name: Checkout client-config
+ uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3
+ with:
+ repository: freeCodeCamp/client-config
+ path: client-config
+
+ - name: Use Node.js 16.x
+ uses: actions/setup-node@eeb10cff27034e7acf239c5d29f62154018672fd # tag=v3
+ with:
+ node-version: 16.x
+ cache: 'npm'
+
+ - name: Set freeCodeCamp Environment Variables
+ run: |
+ sed '/STRIPE/d; /PAYPAL/d;' sample.env > .env
+ echo 'STRIPE_PUBLIC_KEY=${{ secrets.STRIPE_PUBLIC_KEY }}' >> .env
+ echo 'STRIPE_SECRET_KEY=${{ secrets.STRIPE_SECRET_KEY }}' >> .env
+ echo 'PAYPAL_CLIENT_ID=${{ secrets.PAYPAL_CLIENT_ID }}' >> .env
+ echo 'PAYPAL_SECRET=${{ secrets.PAYPAL_SECRET }}' >> .env
+
+ - name: Install and Build
+ run: |
+ npm ci
+ npm run build
+ - name: Seed Database
+ run: npm run seed
+ - name: Move serve.json to Public Folder
+ run: cp client-config/serve.json client/public/serve.json
+
+ - name: Cypress run
+ uses: cypress-io/github-action@v2
+ with:
+ record: ${{ env.CYPRESS_RECORD_KEY != 0 }}
+ start: npm run start-ci
+ wait-on: http://localhost:8000
+ wait-on-timeout: 1200
+ config: baseUrl=http://localhost:8000
+ browser: chrome
+ headless: true
+ spec: cypress/integration/third-party/*.js
diff --git a/.github/workflows/cypress.yml b/.github/workflows/cypress.yml
index 41baaf1c9435e3..3ba03a196cb86d 100644
--- a/.github/workflows/cypress.yml
+++ b/.github/workflows/cypress.yml
@@ -1,4 +1,4 @@
-name: Cypress
+name: CI - Cypress (e2e) tests
on:
push:
paths-ignore:
@@ -16,16 +16,16 @@ jobs:
steps:
- name: Checkout Source Files
- uses: actions/checkout@v3
+ uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3
- name: Checkout client-config
- uses: actions/checkout@v3
+ uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3
with:
repository: freeCodeCamp/client-config
path: client-config
- name: Use Node.js 16.x
- uses: actions/setup-node@v3
+ uses: actions/setup-node@2fddd8803e2f5c9604345a0b591c3020ee971a93 # tag=v3
with:
node-version: 16.x
cache: 'npm'
@@ -46,13 +46,13 @@ jobs:
run: tar -cf client-artifact.tar client/public
- name: Upload Client Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # tag=v3
with:
name: client-artifact
path: client-artifact.tar
- name: Upload Webpack Stats
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # tag=v3
with:
name: webpack-stats
path: client/public/stats.json
@@ -81,18 +81,15 @@ jobs:
- 1025:1025
steps:
- # We use .npmrc to set the default version to 0, and prevents download during development.
- # This installs it specifically in the CI runs.
- name: Set Action Environment Variables
run: |
echo "CYPRESS_RECORD_KEY=${{ secrets.CYPRESS_RECORD_KEY }}" >> $GITHUB_ENV
echo "GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }}" >> $GITHUB_ENV
- echo "CYPRESS_INSTALL_BINARY=7.7.0" >> $GITHUB_ENV
- name: Checkout Source Files
- uses: actions/checkout@v3
+ uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3
- - uses: actions/download-artifact@v3
+ - uses: actions/download-artifact@fb598a63ae348fa914e94cd0ff38f362e927b741 # tag=v3
with:
name: client-artifact
@@ -101,8 +98,16 @@ jobs:
tar -xf client-artifact.tar
rm client-artifact.tar
+ - name: Downgrade Firefox
+ run: |
+ curl https://ftp.mozilla.org/pub/firefox/releases/101.0/linux-x86_64/en-US/firefox-101.0.tar.bz2 --output firefox-101.0.tar.bz2
+ tar -xjf firefox-101.0.tar.bz2
+ sudo mv firefox /opt/
+ sudo mv /usr/bin/firefox /usr/bin/firefox_old
+ sudo ln -s /opt/firefox/firefox /usr/bin/firefox
+
- name: Use Node.js ${{ matrix.node-version }}
- uses: actions/setup-node@v3
+ uses: actions/setup-node@2fddd8803e2f5c9604345a0b591c3020ee971a93 # tag=v3
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
@@ -130,4 +135,6 @@ jobs:
config: baseUrl=http://localhost:8000
browser: ${{ matrix.browsers }}
headless: true
- spec: ${{ matrix.spec }}
+ spec: |
+ ${{ matrix.spec }}
+ cypress/integration/default/**/*.js
diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml
deleted file mode 100644
index 8966511e0545b1..00000000000000
--- a/.github/workflows/dependency-review.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-# Dependency Review Action
-#
-# This Action will scan dependency manifest files that change as part of a Pull Request, surfacing known-vulnerable versions of the packages declared or updated in the PR. Once installed, if the workflow run is marked as required, PRs introducing known-vulnerable packages will be blocked from merging.
-#
-# Source repository: https://github.com/actions/dependency-review-action
-# Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement
-name: 'Dependency Review'
-on: [pull_request]
-
-permissions:
- contents: read
-
-jobs:
- dependency-review:
- runs-on: ubuntu-latest
- steps:
- - name: 'Checkout Repository'
- uses: actions/checkout@v3
- - name: 'Dependency Review'
- uses: actions/dependency-review-action@v1
diff --git a/.github/workflows/i18n-builds.yml b/.github/workflows/i18n-builds.yml
new file mode 100644
index 00000000000000..5027b5664209f6
--- /dev/null
+++ b/.github/workflows/i18n-builds.yml
@@ -0,0 +1,32 @@
+name: i18n - Build Validation
+on:
+ push:
+ branches:
+ - main
+
+jobs:
+ ci:
+ name: Validate i18n Builds
+ runs-on: ubuntu-latest
+
+ strategy:
+ matrix:
+ node-version: [16.x]
+
+ steps:
+ - name: Checkout Source Files
+ uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3
+
+ - name: Use Node.js v${{ matrix.node-version }}
+ uses: actions/setup-node@2fddd8803e2f5c9604345a0b591c3020ee971a93 # tag=v3
+ with:
+ node-version: ${{ matrix.node-version }}
+
+ - name: Set freeCodeCamp Environment Variables
+ run: cp sample.env .env
+
+ - name: Install Dependencies
+ run: npm ci
+
+ - name: Validate Challenge Files
+ run: npm run audit-challenges
diff --git a/.github/workflows/i18n-prs.yml b/.github/workflows/i18n-prs.yml
new file mode 100644
index 00000000000000..8a3fddc0b919be
--- /dev/null
+++ b/.github/workflows/i18n-prs.yml
@@ -0,0 +1,48 @@
+name: i18n - Curriculum PR Validation
+on:
+ pull_request:
+ branches:
+ - main
+
+jobs:
+ ci:
+ name: Validate i18n Builds
+ runs-on: ubuntu-latest
+ # run only on PRs that camperbot opens with title that matches the curriculum sync
+ if: ${{ github.event.pull_request.user.login == 'camperbot' && contains(github.event.pull_request.title, 'chore(i18n,learn)') }}
+ strategy:
+ matrix:
+ node-version: [16.x]
+
+ steps:
+ - name: Checkout Source Files
+ uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3
+
+ - name: Use Node.js v${{ matrix.node-version }}
+ uses: actions/setup-node@2fddd8803e2f5c9604345a0b591c3020ee971a93 # tag=v3
+ with:
+ node-version: ${{ matrix.node-version }}
+
+ - name: Set freeCodeCamp Environment Variables
+ run: cp sample.env .env
+
+ - name: Install Dependencies
+ run: npm ci
+
+ - name: Validate Challenge Files
+ id: validate
+ run: npm run audit-challenges
+
+ - name: Create Comment
+ # Run if the validate challenge files step fails, specifically. Note that we need the failure() call for this step to trigger if the action fails.
+ if: ${{ failure() && steps.validate.conclusion == 'failure' }}
+ uses: actions/github-script@c713e510dbd7d213d92d41b7a7805a986f4c5c66 # tag=v6
+ with:
+ github-token: ${{secrets.CAMPERBOT_NO_TRANSLATE}}
+ script: |
+ github.rest.issues.createComment({
+ issue_number: context.issue.number,
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ body: "Hey @freecodecamp/i18n, it looks like we have new English curriculum files that need to be translated."
+ })
diff --git a/.github/workflows/labeler.yaml b/.github/workflows/labeler.yaml
index 9d29a16e5aed14..ffe5a5d059db67 100644
--- a/.github/workflows/labeler.yaml
+++ b/.github/workflows/labeler.yaml
@@ -1,4 +1,4 @@
-name: 'Pull Request Labeler'
+name: GitHub - Label PRs
on:
- pull_request_target
@@ -14,7 +14,7 @@ jobs:
pull-requests: write
runs-on: ubuntu-20.04
steps:
- - uses: actions/labeler@v4
+ - uses: actions/labeler@9fd24f1f9d6ceb64ba34d181b329ee72f99978a0 # tag=v4
with:
repo-token: '${{ secrets.GITHUB_TOKEN }}'
sync-labels: true
diff --git a/.github/workflows/no-prs-to-translation.yml b/.github/workflows/no-prs-to-translation.yml
index 252031ea0c00e8..9b40ba97b00b8b 100644
--- a/.github/workflows/no-prs-to-translation.yml
+++ b/.github/workflows/no-prs-to-translation.yml
@@ -1,4 +1,4 @@
-name: No translate on GitHub
+name: GitHub - No translations via PRs
on:
pull_request_target:
branches:
@@ -15,7 +15,7 @@ jobs:
has-translation:
runs-on: ubuntu-20.04
steps:
- - uses: actions/github-script@v6
+ - uses: actions/github-script@c713e510dbd7d213d92d41b7a7805a986f4c5c66 # tag=v6
with:
github-token: ${{secrets.CAMPERBOT_NO_TRANSLATE}}
script: |
@@ -30,7 +30,7 @@ jobs:
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
- body: "Thanks for your pull-request.\n\nWe are no longer accepting changes to the non-English versions of files in parts of this codebase. This pull-request seems to change some of those. Please visit [our contributing guidelines](https://contribute.freecodecamp.org) to learn more about translating freeCodeCamp's resources.\n\nAs always, we value all of your contributions.\n\nHappy contributing!\n\n---\n_**Note:** This message was automatically generated by a bot. If you feel this message is in error or would like help resolving it, feel free to reach us [in our contributor chat](https://chat.freecodecamp.org/channel/contributors)._"
+ body: "Thanks for your pull-request.\n\nWe are no longer accepting changes to the non-English versions of files in parts of this codebase. This pull-request seems to change some of those. Please visit [our contributing guidelines](https://contribute.freecodecamp.org) to learn more about translating freeCodeCamp's resources.\n\nAs always, we value all of your contributions.\n\nHappy contributing!\n\n---\n_**Note:** This message was automatically generated by a bot. If you feel this message is in error or would like help resolving it, feel free to reach us [in our contributor chat](https://discord.gg/PRyKn3Vbay)._"
})
} else if (isDev.status === 200) {
core.setFailed('This PR appears to touch translated curriculum files, but since you are on the dev team there is no message.');
diff --git a/.github/workflows/node.js-tests-upcoming.yml b/.github/workflows/node.js-tests-upcoming.yml
index 547b70287badab..601db6e258668a 100644
--- a/.github/workflows/node.js-tests-upcoming.yml
+++ b/.github/workflows/node.js-tests-upcoming.yml
@@ -1,4 +1,4 @@
-name: Node.js CI - Test Upcoming
+name: CI - Node.js Test Upcoming
on:
push:
branches:
@@ -25,10 +25,10 @@ jobs:
steps:
- name: Checkout Source Files
- uses: actions/checkout@v3
+ uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3
- name: Use Node.js ${{ matrix.node-version }}
- uses: actions/setup-node@v3
+ uses: actions/setup-node@2fddd8803e2f5c9604345a0b591c3020ee971a93 # tag=v3
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
@@ -61,13 +61,12 @@ jobs:
steps:
- name: Checkout Source Files
- uses: actions/checkout@v3
+ uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3
- name: Use Node.js ${{ matrix.node-version }}
- uses: actions/setup-node@v3
+ uses: actions/setup-node@2fddd8803e2f5c9604345a0b591c3020ee971a93 # tag=v3
with:
node-version: ${{ matrix.node-version }}
- cache: npm
- name: Set Environment variables
run: |
diff --git a/.github/workflows/node.js-tests.yml b/.github/workflows/node.js-tests.yml
index 01245394a68a6e..68ca47d176c570 100644
--- a/.github/workflows/node.js-tests.yml
+++ b/.github/workflows/node.js-tests.yml
@@ -1,4 +1,4 @@
-name: Node.js CI
+name: CI - Node.js Test Current
on:
push:
branches-ignore:
@@ -20,7 +20,7 @@ jobs:
steps:
- name: Checkout Source Files
- uses: actions/checkout@v3
+ uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3
- name: Check number of lockfiles
run: |
@@ -31,7 +31,7 @@ jobs:
fi
- name: Use Node.js ${{ matrix.node-version }}
- uses: actions/setup-node@v3
+ uses: actions/setup-node@2fddd8803e2f5c9604345a0b591c3020ee971a93 # tag=v3
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
@@ -66,13 +66,12 @@ jobs:
steps:
- name: Checkout Source Files
- uses: actions/checkout@v3
+ uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3
- name: Use Node.js ${{ matrix.node-version }}
- uses: actions/setup-node@v3
+ uses: actions/setup-node@2fddd8803e2f5c9604345a0b591c3020ee971a93 # tag=v3
with:
node-version: ${{ matrix.node-version }}
- cache: npm
- name: Set Environment variables
run: |
@@ -101,13 +100,12 @@ jobs:
steps:
- name: Checkout Source Files
- uses: actions/checkout@v3
+ uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3
- name: Use Node.js ${{ matrix.node-version }}
- uses: actions/setup-node@v3
+ uses: actions/setup-node@2fddd8803e2f5c9604345a0b591c3020ee971a93 # tag=v3
with:
node-version: ${{ matrix.node-version }}
- cache: npm
- name: Set Environment variables
run: |
@@ -138,13 +136,12 @@ jobs:
steps:
- name: Checkout Source Files
- uses: actions/checkout@v3
+ uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3
- name: Use Node.js ${{ matrix.node-version }}
- uses: actions/setup-node@v3
+ uses: actions/setup-node@2fddd8803e2f5c9604345a0b591c3020ee971a93 # tag=v3
with:
node-version: ${{ matrix.node-version }}
- cache: npm
- name: Set Environment variables
run: |
diff --git a/.gitignore b/.gitignore
index 286a2e722b191d..63bd214a9e96cb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -169,6 +169,7 @@ config/certification-settings.js
### Generated utils files ###
utils/slugs.js
utils/slugs.test.js
+utils/index.js
### vim ###
# Swap
@@ -206,6 +207,7 @@ curriculum/dist
curriculum/build
client/static/_redirects
client/static/mobile
+client/static/curriculum-data
### UI Components ###
tools/ui-components/dist
diff --git a/.gitpod.yml b/.gitpod.yml
index 76a4c749236f49..46ccd89059a9b5 100644
--- a/.gitpod.yml
+++ b/.gitpod.yml
@@ -14,6 +14,10 @@ ports:
onOpen: ignore
- port: 9230 # client node debug
onOpen: ignore
+ - port: 3200 # challenge editor api
+ visibility: public
+ - port: 3300 # challenge editor client
+ visibility: public
tasks:
- before: |
@@ -22,6 +26,8 @@ tasks:
export HOME_LOCATION=$(gp url 8000)
export API_LOCATION=$(gp url 3000)
export CYPRESS_BASE_URL=$(gp url 8000)
+ export REACT_APP_CHALLENGE_EDITOR_API_LOCATION=$(gp url 3200)
+ export CHALLENGE_EDITOR_CLIENT_LOCATION=$(gp url 3300)
' >> ~/.bashrc;
exit;
diff --git a/.prettierignore b/.prettierignore
index 8e56696477f80d..688a16d9c73c85 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -11,6 +11,7 @@ client/i18n/**/*.json
docs/i18n
utils/slugs.js
utils/slugs.test.js
+utils/index.js
**/package-lock.json
web/.next
-curriculum-server/data/curriculum.json
+curriculum-server/data/curriculum.json
\ No newline at end of file
diff --git a/README.md b/README.md
index 42c980c7c08ca0..cba5e2d6053ab1 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
[](http://www.firsttimersonly.com/)
[](https://www.codetriage.com/freecodecamp/freecodecamp)
[](https://gitpod.io/from-referrer/)
-[](https://chat.freecodecamp.org/)
+[](https://discord.gg/PRyKn3Vbay)
## freeCodeCamp.org's open-source codebase and curriculum
@@ -36,18 +36,26 @@ The one exception to this is if we discover violations of our [Academic Honesty
Here are our ten core certifications:
-#### 1. [Responsive Web Design Certification](https://www.freecodecamp.org/learn/responsive-web-design/)
+#### 1. [Responsive Web Design Certification](https://www.freecodecamp.org/learn/2022/responsive-web-design/)
-- [Basic HTML and HTML5](https://www.freecodecamp.org/learn/responsive-web-design/#basic-html-and-html5)
-- [Basic CSS](https://www.freecodecamp.org/learn/responsive-web-design/#basic-css)
-- [Applied Visual Design](https://www.freecodecamp.org/learn/responsive-web-design/#applied-visual-design)
-- [Applied Accessibility](https://www.freecodecamp.org/learn/responsive-web-design/#applied-accessibility)
-- [Responsive Web Design Principles](https://www.freecodecamp.org/learn/responsive-web-design/#responsive-web-design-principles)
-- [CSS Flexbox](https://www.freecodecamp.org/learn/responsive-web-design/#css-flexbox)
-- [CSS Grid](https://www.freecodecamp.org/learn/responsive-web-design/#css-grid)
+- [Learn HTML by Building a Cat Photo App](https://www.freecodecamp.org/learn/2022/responsive-web-design/#learn-html-by-building-a-cat-photo-app)
+- [Learn Basic CSS by Building a Cafe Menu](https://www.freecodecamp.org/learn/2022/responsive-web-design/#learn-basic-css-by-building-a-cafe-menu)
+- [Learn CSS Colors by Building a Set of Colored Markers](https://www.freecodecamp.org/learn/2022/responsive-web-design/#learn-css-colors-by-building-a-set-of-colored-markers)
+- [Learn HTML Forms by Building a Registration Form](https://www.freecodecamp.org/learn/2022/responsive-web-design/#learn-html-forms-by-building-a-registration-form)
+- [Learn the CSS Box Model by Building a Rothko Painting](https://www.freecodecamp.org/learn/2022/responsive-web-design/#learn-the-css-box-model-by-building-a-rothko-painting)
+- [Learn CSS Flexbox by Building a Photo Gallery](https://www.freecodecamp.org/learn/2022/responsive-web-design/#learn-css-flexbox-by-building-a-photo-gallery)
+- [Learn Typography by Building a Nutrition Label](https://www.freecodecamp.org/learn/2022/responsive-web-design/#learn-typography-by-building-a-nutrition-label)
+- [Learn Accessibility by Building a Quiz](https://www.freecodecamp.org/learn/2022/responsive-web-design/#learn-accessibility-by-building-a-quiz)
+- [Learn More About CSS Pseudo Selectors By Building A Balance Sheet](https://www.freecodecamp.org/learn/2022/responsive-web-design/#learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet)
+- [Learn Intermediate CSS by Building a Picasso Painting](https://www.freecodecamp.org/learn/2022/responsive-web-design/#learn-intermediate-css-by-building-a-picasso-painting)
+- [Learn Responsive Web Design by Building a Piano](https://www.freecodecamp.org/learn/2022/responsive-web-design/#learn-responsive-web-design-by-building-a-piano)
+- [Learn CSS Variables by Building a City Skyline](https://www.freecodecamp.org/learn/2022/responsive-web-design/#learn-css-variables-by-building-a-city-skyline)
+- [Learn CSS Grid by Building a Magazine](https://www.freecodecamp.org/learn/2022/responsive-web-design/#learn-css-grid-by-building-a-magazine)
+- [Learn CSS Transforms by Building a Penguin](https://www.freecodecamp.org/learn/2022/responsive-web-design/#learn-css-transforms-by-building-a-penguin)
+- [Learn CSS Animations by Building a Ferris Wheel](https://www.freecodecamp.org/learn/2022/responsive-web-design/#learn-css-animation-by-building-a-ferris-wheel)
- **Projects**: [Tribute Page](https://www.freecodecamp.org/learn/responsive-web-design/responsive-web-design-projects/build-a-tribute-page), [Survey Form](https://www.freecodecamp.org/learn/responsive-web-design/responsive-web-design-projects/build-a-survey-form), [Product Landing Page](https://www.freecodecamp.org/learn/responsive-web-design/responsive-web-design-projects/build-a-product-landing-page), [Technical Documentation Page](https://www.freecodecamp.org/learn/responsive-web-design/responsive-web-design-projects/build-a-technical-documentation-page), [Personal Portfolio Webpage](https://www.freecodecamp.org/learn/responsive-web-design/responsive-web-design-projects/build-a-personal-portfolio-webpage)
+ **Projects**: [Survey Form](https://www.freecodecamp.org/learn/2022/responsive-web-design/build-a-survey-form-project/build-a-survey-form), [Tribute Page](https://www.freecodecamp.org/learn/2022/responsive-web-design/build-a-tribute-page-project/build-a-tribute-page), [Technical Documentation Page](https://www.freecodecamp.org/learn/2022/responsive-web-design/build-a-technical-documentation-page-project/build-a-technical-documentation-page), [Product Landing Page](https://www.freecodecamp.org/learn/2022/responsive-web-design/build-a-product-landing-page-project/build-a-product-landing-page), [Personal Portfolio Webpage](https://www.freecodecamp.org/learn/2022/responsive-web-design/build-a-personal-portfolio-webpage-project/build-a-personal-portfolio-webpage)
#### 2. [JavaScript Algorithms and Data Structures Certification](https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/)
@@ -154,7 +162,7 @@ Our community also has:
- A [forum](https://forum.freecodecamp.org) where you can usually get programming help or project feedback within hours.
- A [YouTube channel](https://youtube.com/freecodecamp) with free courses on Python, SQL, Android, and a wide variety of other technologies.
- A [technical publication](https://www.freecodecamp.org/news) with thousands of programming tutorials and articles about math and computer science.
-- A [chat server](https://chat.freecodecamp.org/home) where you can hang out and talk with developers and people who are learning to code.
+- A [Discord server](https://discord.gg/Z7Fm39aNtZ) where you can hang out and talk with developers and people who are learning to code.
> #### [Join the community here](https://www.freecodecamp.org/signin).
diff --git a/api-server/package.json b/api-server/package.json
index c80c0e0b1bd689..a234fbda1b02b9 100644
--- a/api-server/package.json
+++ b/api-server/package.json
@@ -29,14 +29,14 @@
},
"dependencies": {
"@freecodecamp/loopback-component-passport": "1.2.0",
- "@sentry/node": "6.18.0",
+ "@sentry/node": "6.19.7",
"accepts": "1.3.8",
"axios": "0.23.0",
"bad-words": "3.0.4",
- "body-parser": "1.19.2",
+ "body-parser": "1.20.0",
"compression": "1.7.4",
"connect-mongo": "3.2.0",
- "cookie-parser": "1.4.5",
+ "cookie-parser": "1.4.6",
"cors": "2.8.5",
"cross-env": "7.0.3",
"csurf": "1.11.0",
@@ -45,8 +45,8 @@
"dedent": "0.7.0",
"dotenv": "6.2.0",
"express-flash": "0.0.2",
- "express-session": "1.17.2",
- "express-validator": "6.14.0",
+ "express-session": "1.17.3",
+ "express-validator": "6.14.1",
"helmet": "3.23.3",
"helmet-csp": "2.10.0",
"jsonwebtoken": "8.5.1",
@@ -55,11 +55,11 @@
"loopback-boot": "2.28.0",
"loopback-connector-mongodb": "4.2.0",
"method-override": "3.0.0",
- "moment": "2.29.1",
+ "moment": "2.29.3",
"moment-timezone": "0.5.33",
"mongodb": "3.6.9",
"morgan": "1.10.0",
- "nanoid": "3.2.0",
+ "nanoid": "3.3.4",
"nodemailer-ses-transport": "1.5.1",
"passport": "0.4.1",
"passport-auth0": "1.4.2",
@@ -69,22 +69,22 @@
"rx": "4.1.0",
"stripe": "8.205.0",
"uuid": "3.4.0",
- "validator": "13.6.0"
+ "validator": "13.7.0"
},
"devDependencies": {
- "@babel/cli": "7.17.6",
- "@babel/core": "7.15.8",
- "@babel/node": "7.16.8",
- "@babel/plugin-proposal-class-properties": "7.14.5",
- "@babel/plugin-proposal-object-rest-spread": "7.17.3",
- "@babel/plugin-proposal-optional-chaining": "7.14.5",
- "@babel/preset-env": "7.15.8",
- "@babel/register": "7.15.3",
+ "@babel/cli": "7.17.10",
+ "@babel/core": "7.18.0",
+ "@babel/node": "7.17.10",
+ "@babel/plugin-proposal-class-properties": "7.17.12",
+ "@babel/plugin-proposal-object-rest-spread": "7.18.0",
+ "@babel/plugin-proposal-optional-chaining": "7.17.12",
+ "@babel/preset-env": "7.18.0",
+ "@babel/register": "7.17.7",
"babel-core": "7.0.0-bridge.0",
"babel-plugin-transform-function-bind": "6.22.0",
"babel-plugin-transform-imports": "1.5.1",
"loopback-component-explorer": "6.4.0",
- "nodemon": "2.0.14",
- "smee-client": "1.2.2"
+ "nodemon": "2.0.16",
+ "smee-client": "1.2.3"
}
}
diff --git a/api-server/src/common/models/user.json b/api-server/src/common/models/user.json
index 9469518ada7116..9d279d3014c10e 100644
--- a/api-server/src/common/models/user.json
+++ b/api-server/src/common/models/user.json
@@ -317,6 +317,10 @@
"type": "boolean",
"default": false
},
+ "keyboardShortcuts": {
+ "type": "boolean",
+ "default": false
+ },
"profileUI": {
"type": "object",
"default": {
diff --git a/api-server/src/server/boot/settings.js b/api-server/src/server/boot/settings.js
index 8d0bdf44c702c5..d1a4b4006cf6e1 100644
--- a/api-server/src/server/boot/settings.js
+++ b/api-server/src/server/boot/settings.js
@@ -45,6 +45,11 @@ export default function settingsController(app) {
api.put('/update-user-flag', ifNoUser401, updateUserFlag);
api.put('/update-my-socials', ifNoUser401, updateMySocials);
api.put('/update-my-sound', ifNoUser401, updateMySound);
+ api.put(
+ '/update-my-keyboard-shortcuts',
+ ifNoUser401,
+ updateMyKeyboardShortcuts
+ );
api.put('/update-my-honesty', ifNoUser401, updateMyHonesty);
api.put('/update-my-quincy-email', ifNoUser401, updateMyQuincyEmail);
@@ -234,6 +239,13 @@ function updateMySound(...args) {
createUpdateUserProperties(buildUpdate, validate)(...args);
}
+function updateMyKeyboardShortcuts(...args) {
+ const buildUpdate = body => _.pick(body, 'keyboardShortcuts');
+ const validate = ({ keyboardShortcuts }) =>
+ typeof keyboardShortcuts === 'boolean';
+ createUpdateUserProperties(buildUpdate, validate)(...args);
+}
+
function updateMyHonesty(...args) {
const buildUpdate = body => _.pick(body, 'isHonest');
const validate = ({ isHonest }) => isHonest === true;
@@ -271,6 +283,7 @@ function updateUserFlag(req, res, next) {
const allowedKeys = [
'theme',
'sound',
+ 'keyboardShortcuts',
'isHonest',
'portfolio',
'sendQuincyEmail',
diff --git a/api-server/src/server/middlewares/csurf.js b/api-server/src/server/middlewares/csurf.js
index 2d7a70f2483182..4a7b12056ad352 100644
--- a/api-server/src/server/middlewares/csurf.js
+++ b/api-server/src/server/middlewares/csurf.js
@@ -8,7 +8,7 @@ export const csrfOptions = {
export default function getCsurf() {
const protection = csurf({
- cookie: csrfOptions
+ cookie: { ...csrfOptions, httpOnly: true }
});
return function csrf(req, res, next) {
const { path } = req;
diff --git a/api-server/src/server/middlewares/request-authorization.js b/api-server/src/server/middlewares/request-authorization.js
index 33d3c0f1f653ab..93d27911884657 100644
--- a/api-server/src/server/middlewares/request-authorization.js
+++ b/api-server/src/server/middlewares/request-authorization.js
@@ -5,8 +5,7 @@ import { jwtSecret as _jwtSecret } from '../../../../config/secrets';
import { wrapHandledError } from '../utils/create-handled-error';
import {
getAccessTokenFromRequest,
- errorTypes,
- authHeaderNS
+ errorTypes
} from '../utils/getSetAccessToken';
import { getRedirectParams } from '../utils/redirection';
// TOPCODER: we need to use the external ID (i.e. Auth0 ID)
@@ -73,10 +72,7 @@ export default function getRequestAuthorisation({
const { origin } = getRedirectParams(req);
const { path } = req;
if (!isAllowedPath(path)) {
- const { accessToken, error, jwt } = getAccessTokenFromRequest(
- req,
- jwtSecret
- );
+ const { accessToken, error } = getAccessTokenFromRequest(req, jwtSecret);
if (!accessToken && error === errorTypes.noTokenFound) {
throw wrapHandledError(
new Error('Access token is required for this request'),
@@ -104,7 +100,6 @@ export default function getRequestAuthorisation({
status: 403
});
}
- res.set(authHeaderNS, jwt);
if (isEmpty(req.user)) {
// TOPCODER: the accessToken.sub value is the Auth0 ID
// (e.g. auth0|12345) that we use to link the
diff --git a/api-server/src/server/middlewares/request-authorization.test.js b/api-server/src/server/middlewares/request-authorization.test.js
index 593d5930ed9269..3ecfb3ad83287e 100644
--- a/api-server/src/server/middlewares/request-authorization.test.js
+++ b/api-server/src/server/middlewares/request-authorization.test.js
@@ -168,104 +168,6 @@ describe('request-authorization', () => {
expect(req.user).toEqual(users['456def']);
});
- it('adds the jwt to the headers', async () => {
- const validJWT = jwt.sign({ accessToken }, validJWTSecret);
- const req = mockReq({
- path: '/some-path/that-needs/auth',
- // eslint-disable-next-line camelcase
- cookie: { jwt_access_token: validJWT }
- });
- const res = mockRes();
- const next = jest.fn();
- await requestAuthorization(req, res, next);
- expect(res.set).toHaveBeenCalledWith('X-fcc-access-token', validJWT);
- });
-
- it('calls next if request does not require authorization', async () => {
- // currently /unsubscribe does not require authorization
- const req = mockReq({ path: '/unsubscribe/another/route' });
- const res = mockRes();
- const next = jest.fn();
- await requestAuthorization(req, res, next);
- expect(next).toHaveBeenCalled();
- });
- });
-
- describe('Auth header', () => {
- it('throws when no access token is present', () => {
- expect.assertions(2);
- const req = mockReq({ path: '/some-path/that-needs/auth' });
- const res = mockRes();
- const next = jest.fn();
- expect(() => requestAuthorization(req, res, next)).toThrowError(
- 'Access token is required for this request'
- );
- expect(next).not.toHaveBeenCalled();
- });
-
- it('throws when the access token is invalid', () => {
- expect.assertions(2);
- const invalidJWT = jwt.sign({ accessToken }, invalidJWTSecret);
- const req = mockReq({
- path: '/some-path/that-needs/auth',
- headers: { 'X-fcc-access-token': invalidJWT }
- });
- const res = mockRes();
- const next = jest.fn();
-
- expect(() => requestAuthorization(req, res, next)).toThrowError(
- 'Access token is invalid'
- );
- expect(next).not.toHaveBeenCalled();
- });
-
- it('throws when the access token has expired', () => {
- expect.assertions(2);
- const invalidJWT = jwt.sign(
- { accessToken: { ...accessToken, created: theBeginningOfTime } },
- validJWTSecret
- );
- const req = mockReq({
- path: '/some-path/that-needs/auth',
- headers: { 'X-fcc-access-token': invalidJWT }
- });
- const res = mockRes();
- const next = jest.fn();
-
- expect(() => requestAuthorization(req, res, next)).toThrowError(
- 'Access token is no longer valid'
- );
- expect(next).not.toHaveBeenCalled();
- });
-
- it('adds the user to the request object', async () => {
- expect.assertions(3);
- const validJWT = jwt.sign({ accessToken }, validJWTSecret);
- const req = mockReq({
- path: '/some-path/that-needs/auth',
- headers: { 'X-fcc-access-token': validJWT }
- });
- const res = mockRes();
- const next = jest.fn();
- await requestAuthorization(req, res, next);
- expect(next).toHaveBeenCalled();
- expect(req).toHaveProperty('user');
- expect(req.user).toEqual(users['456def']);
- });
-
- it('adds the jwt to the headers', async () => {
- const validJWT = jwt.sign({ accessToken }, validJWTSecret);
- const req = mockReq({
- path: '/some-path/that-needs/auth',
- // eslint-disable-next-line camelcase
- cookie: { jwt_access_token: validJWT }
- });
- const res = mockRes();
- const next = jest.fn();
- await requestAuthorization(req, res, next);
- expect(res.set).toHaveBeenCalledWith('X-fcc-access-token', validJWT);
- });
-
it('calls next if request does not require authorization', async () => {
// currently /unsubscribe does not require authorization
const req = mockReq({ path: '/unsubscribe/another/route' });
diff --git a/api-server/src/server/utils/getSetAccessToken.js b/api-server/src/server/utils/getSetAccessToken.js
index 885ded28fa6283..aad4ec4bb2b585 100644
--- a/api-server/src/server/utils/getSetAccessToken.js
+++ b/api-server/src/server/utils/getSetAccessToken.js
@@ -3,7 +3,6 @@ import jwt from 'jsonwebtoken';
import { jwtSecret as _jwtSecret } from '../../../../config/secrets';
-export const authHeaderNS = 'X-fcc-access-token';
// TOPCODER: we are using the name of the cookie created
// by the TC Auth0 implementation
export const jwtCookieNS = 'tcjwt';
@@ -33,7 +32,6 @@ export function setAccessTokenToResponse(
export function getAccessTokenFromRequest(req, jwtSecret = _jwtSecret) {
const maybeToken =
- (req.headers && req.headers[authHeaderNS]) ||
(req.signedCookies && req.signedCookies[jwtCookieNS]) ||
(req.cookie && req.cookie[jwtCookieNS]) ||
// TOPCODER: the jwt cookie is in the cookies var instead
@@ -74,10 +72,9 @@ export function getAccessTokenFromRequest(req, jwtSecret = _jwtSecret) {
// token, so we just use the token itself.
return {
accessToken: token,
- error: '',
- jwt: maybeToken
+ error: ''
};
- // return { accessToken, error: '', jwt: maybeToken };
+ // return { accessToken, error: '' };
}
export function removeCookies(req, res) {
diff --git a/api-server/src/server/utils/getSetAccessToken.test.js b/api-server/src/server/utils/getSetAccessToken.test.js
index 768d0ea0d0b6da..2e1aa39980cbad 100644
--- a/api-server/src/server/utils/getSetAccessToken.test.js
+++ b/api-server/src/server/utils/getSetAccessToken.test.js
@@ -62,61 +62,6 @@ describe('getSetAccessToken', () => {
created: accessToken.created.toISOString()
});
});
-
- it('returns the signed jwt if found', () => {
- const validJWT = jwt.sign({ accessToken }, validJWTSecret);
- // eslint-disable-next-line camelcase
- const req = mockReq({ cookie: { jwt_access_token: validJWT } });
- const result = getAccessTokenFromRequest(req, validJWTSecret);
-
- expect(result.jwt).toEqual(validJWT);
- });
- });
-
- describe('Auth headers', () => {
- it('returns `invalid token` error for malformed tokens', () => {
- const invalidJWT = jwt.sign({ accessToken }, invalidJWTSecret);
- // eslint-disable-next-line camelcase
- const req = mockReq({ headers: { 'X-fcc-access-token': invalidJWT } });
- const result = getAccessTokenFromRequest(req, validJWTSecret);
-
- expect(result.error).toEqual(errorTypes.invalidToken);
- });
-
- it('returns `expired token` error for expired tokens', () => {
- const invalidJWT = jwt.sign(
- { accessToken: { ...accessToken, created: theBeginningOfTime } },
- validJWTSecret
- );
- // eslint-disable-next-line camelcase
- const req = mockReq({ headers: { 'X-fcc-access-token': invalidJWT } });
- const result = getAccessTokenFromRequest(req, validJWTSecret);
-
- expect(result.error).toEqual(errorTypes.expiredToken);
- });
-
- it('returns a valid access token with no errors ', () => {
- expect.assertions(2);
- const validJWT = jwt.sign({ accessToken }, validJWTSecret);
- // eslint-disable-next-line camelcase
- const req = mockReq({ headers: { 'X-fcc-access-token': validJWT } });
- const result = getAccessTokenFromRequest(req, validJWTSecret);
-
- expect(result.error).toBeFalsy();
- expect(result.accessToken).toEqual({
- ...accessToken,
- created: accessToken.created.toISOString()
- });
- });
-
- it('returns the signed jwt if found', () => {
- const validJWT = jwt.sign({ accessToken }, validJWTSecret);
- // eslint-disable-next-line camelcase
- const req = mockReq({ headers: { 'X-fcc-access-token': validJWT } });
- const result = getAccessTokenFromRequest(req, validJWTSecret);
-
- expect(result.jwt).toEqual(validJWT);
- });
});
});
diff --git a/api-server/src/server/utils/publicUserProps.js b/api-server/src/server/utils/publicUserProps.js
index e6b8871e699ba9..e4ff3dc9196205 100644
--- a/api-server/src/server/utils/publicUserProps.js
+++ b/api-server/src/server/utils/publicUserProps.js
@@ -55,6 +55,7 @@ export const userPropsForSession = [
'sendQuincyEmail',
'theme',
'sound',
+ 'keyboardShortcuts',
'completedChallengeCount',
'completedProjectCount',
'completedCertCount',
diff --git a/client/gatsby-browser.js b/client/gatsby-browser.js
index e2292ec15cc668..11616f7cd30c61 100644
--- a/client/gatsby-browser.js
+++ b/client/gatsby-browser.js
@@ -30,9 +30,6 @@ export const wrapPageElement = layoutSelector;
export const disableCorePrefetching = () => true;
export const onClientEntry = () => {
- // purge the csrf cookies, rather than relying what the browser decides a
- // Session duration is
- cookies.erase('_csrf');
// the token must be erased since it is only valid for the old _csrf secret
cookies.erase('csrf_token');
};
diff --git a/client/i18n/locales/chinese-traditional/intro.json b/client/i18n/locales/chinese-traditional/intro.json
index 5ff0f08db2cca4..e4c0427b59373c 100644
--- a/client/i18n/locales/chinese-traditional/intro.json
+++ b/client/i18n/locales/chinese-traditional/intro.json
@@ -1,6 +1,6 @@
{
"responsive-web-design": {
- "title": "Legacy Responsive Web Design",
+ "title": "(舊版)響應式網頁設計",
"intro": [
"在響應式網頁設計認證中,你將學習開發者用來編寫網頁的語言:HTML(超文本標記語言)用於創建內容,CSS(級聯樣式表)用於樣式設計。",
"首先,你將通過編寫一個展示貓咪圖片的應用,學習 HTML 和 CSS 的基本知識。 然後,通過畫企鵝來學習像 CSS 變量這樣的現代技術,以及通過構建網頁表單來學習無障礙的最佳實踐。",
@@ -67,11 +67,11 @@
}
},
"2022/responsive-web-design": {
- "title": "(New) Responsive Web Design",
+ "title": "(新版)響應式網頁設計",
"intro": [
"在響應式網頁設計的認證課程中,你將學習用於構建網頁的語言: HTML(超文本標記語言)用於創建內容,CSS(級聯樣式表)用於樣式設計。",
- "首先,你將通過編寫一個貓咪相冊應用,學習 HTML 和 CSS 的基本知識。 然後,通過畫企鵝來學習像 CSS 變量這樣的現代技術,並通過編寫網頁表單來學習無障礙的最佳實踐。",
- "最後,你將通過編寫一個 Twitter 卡片,學習如何使用 Flexbox 實現能夠適應不同屏幕大小的網頁 ,以及如何使用 CSS Grid 實現一個複雜的博客佈局。"
+ "首先,你將通過編寫一個展示貓咪圖片的應用來學習 HTML 和 CSS 的基本知識。 然後,通過構建一隻企鵝來學習像 CSS 變量這樣的現代技術,並通過搭建網頁表單來學習無障礙的最佳實踐。",
+ "最後,你將通過編寫一個 Twitter 卡片,學習如何使用 Flexbox 實現適應不同屏幕大小的網頁 ,以及如何用 CSS Grid 實現一個複雜的博客佈局。"
],
"note": "注意:某些瀏覽器擴展程序(例如廣告攔截器和深色模式)可能干擾測試。如果遇到問題,我們建議你在學習課程時禁用那些修改網頁內容或佈局的擴展程序。",
"blocks": {
@@ -300,64 +300,64 @@
}
},
"2022/javascript-algorithms-and-data-structures": {
- "title": "JavaScript Algorithms and Data Structures (Beta)",
+ "title": "JavaScript 算法和數據結構項目(Beta 測試版本)",
"intro": [
- "placeholder",
- "placeholder"
+ "佔位符",
+ "佔位符"
],
"note": "",
"blocks": {
"build-a-caesars-cipher-project": {
- "title": "Build a Casears Cipher Project",
+ "title": "構建一個愷撒密碼項目",
"intro": [
"",
""
]
},
"build-a-cash-register-project": {
- "title": "Build a Cash Register Project",
+ "title": "構建一個收銀機項目",
"intro": [
"",
""
]
},
"build-a-palindrome-checker-project": {
- "title": "Build a Palindrome Checker Project",
+ "title": "構建一個迴文檢測器項目",
"intro": [
"",
""
]
},
"build-a-roman-numeral-converter-project": {
- "title": "Build a Roman Numeral Converter Project",
+ "title": "搭建一個羅馬數字轉換器項目",
"intro": [
"",
""
]
},
"build-a-telephone-number-validator-project": {
- "title": "Build a Telephone Number Validator Project",
+ "title": "構建一個電話號碼檢驗器項目",
"intro": [
"",
""
]
},
"learn-basic-javascript-by-building-a-role-playing-game": {
- "title": "Learn Basic JavaScript by Building a Role Playing Game",
+ "title": "通過構建角色扮演遊戲來學習 JavaScript",
"intro": [
"",
""
]
},
"learn-form-validation-by-building-a-calorie-counter": {
- "title": "Learn Form Validation by Building a Calorie Counter",
+ "title": "通過構建卡路里計數器來學習表單驗證",
"intro": [
"",
""
]
},
"learn-functional-programming-by-building-a-spreadsheet": {
- "title": "Learn Functional Programming by Building a Spreadsheet",
+ "title": "通過構建電子表格學習函數式編程",
"intro": [
"",
""
@@ -606,7 +606,7 @@
"mongodb-and-mongoose": {
"title": "MongoDB 和 Mongoose",
"intro": [
- "MongoDB 是一個存儲你可以在應用程序中使用的 JSON 文件(或記錄)的數據庫應用程序。不同於SQL,另一種類型的數據庫。Mongo 是一個非關係型或 “NoSQL” 數據庫。這意味着 Mongo 將所有相關數據存儲在一個記錄中,而不是像 SQL 數據庫中那樣在許多預設表中存儲數據。",
+ "MongoDB 是一個存儲 JSON 文件(或記錄)的數據庫程序,你可以在自己的程序中使用這些 JSON 文件。與 SQL——另一種類型的數據庫——所不同的是,MongoDB 是一個非關係型數據庫,也被稱爲 “NoSQL”。這意味着 MongoDB 將所有相關數據都存儲在一個記錄中,而不是像 SQL 數據庫中那樣把數據存儲在許多預設表中。",
"Mongoose 是一個廣泛使用的 npm 包,通常和 Mongo 一起安裝。通過 Mongoose,你可以使用 JavaScript 對象而不是 JSON ,這樣就更容易與 Mongo 配合使用。此外,它允許你創建文件架構,即 schema,所以你不會意外地保存錯誤的數據類型並出現 bug。",
"在 MongoDB 和 Mongoose 課程中,你將學習處理數據的基本知識,包括如何建立模型,保存、刪除並在數據庫中查找文檔。"
]
@@ -804,7 +804,8 @@
"title": "羅塞塔代碼",
"intro": [
"通過完成經典的羅塞塔代碼庫中的這些免費編程任務來提升你的創造性問題解決能力。",
- "這些挑戰可能很困難,但是它們會將進一步提升你的算法邏輯。"
+ "這些挑戰可能很困難,但是它們會將進一步提升你的算法邏輯。",
+ "屬性:Rosetta 代碼"
]
},
"project-euler": {
@@ -825,9 +826,9 @@
"collapse": "收起課程",
"legacy-header": "舊版課程",
"legacy-desc": "這些課程不再是認證路徑的一部分,但仍可供你進一步學習。",
- "legacy-go-back": "Go to the current version of the curriculum.",
- "new-rwd-desc": "We have updated our Responsive Web Design Curriculum. If you were previously working on the RWD curriculum, your progress is still saved! You can find it under the Legacy Responsive Web Design section.",
- "new-rwd-article": "We encourage you to read about the changes we made and consider exploring the updated curriculum.",
+ "legacy-go-back": "進入當前版本的課程。",
+ "new-rwd-desc": "我們更新了響應式網頁設計課程。 如果你之前正在使用該課程,你的進度仍然可以保存!你可以在舊版響應式網頁設計課程裏找到你的進度。",
+ "new-rwd-article": "我們希望你閱讀我們所作的修改,並能考慮探索新課程。",
"viewing-upcoming-change": "你正在查看Beta頁面。 ",
"go-back-to-learn": "回到正式版課程",
"read-database-cert-article": "請在繼續之前閱讀這個論壇帖子。",
diff --git a/client/i18n/locales/chinese-traditional/links.json b/client/i18n/locales/chinese-traditional/links.json
index c77d3408058552..51bec130ca2156 100644
--- a/client/i18n/locales/chinese-traditional/links.json
+++ b/client/i18n/locales/chinese-traditional/links.json
@@ -1,5 +1,5 @@
{
- "help-translate-url": "https://contribute.freecodecamp.org/#/i18n/chinese/how-to-translate-files",
+ "help-translate-link-url": "https://contribute.freecodecamp.org/#/i18n/chinese/how-to-translate-files",
"top-contributors": "https://www.freecodecamp.org/news/freecodecamp-top-contributors/",
"footer": {
"about-url": "https://chinese.freecodecamp.org/news/about/",
@@ -13,16 +13,19 @@
"copyright-url": "https://www.freecodecamp.org/news/copyright-policy/"
},
"donate": {
- "other-ways-url": "https://chinese.freecodecamp.org/news/how-to-donate-to-free-code-camp/"
+ "other-ways-url": "https://chinese.freecodecamp.org/news/how-to-donate-to-free-code-camp/",
+ "download-irs-url": "https://s3.amazonaws.com/freecodecamp/Free+Code+Camp+Inc+IRS+Determination+Letter.pdf",
+ "download-990-url": "https://freecodecamp.s3.amazonaws.com/freeCodeCamp+2019+f990.pdf",
+ "one-time-url": "https://paypal.me/freecodecamp"
},
"nav": {
- "forum": "https://chinese.freecodecamp.org/forum/",
+ "forum": "https://forum.freecodecamp.org/c/chinese/533",
"news": "https://chinese.freecodecamp.org/news/"
},
"help": {
- "HTML-CSS": "front-end",
- "JavaScript": "front-end",
- "Python": "curriculum",
- "Relational Databases": "curriculum"
+ "HTML-CSS": "chinese/html-css",
+ "JavaScript": "chinese/javascript",
+ "Python": "chinese/python",
+ "Backend Development": "chinese/programming-help"
}
}
diff --git a/client/i18n/locales/chinese-traditional/translations.json b/client/i18n/locales/chinese-traditional/translations.json
index 8c4d57e0b189c0..09f6b06f5652c4 100644
--- a/client/i18n/locales/chinese-traditional/translations.json
+++ b/client/i18n/locales/chinese-traditional/translations.json
@@ -50,7 +50,8 @@
"reset-lesson": "重置課程",
"run": "運行",
"run-test": "運行測試(Ctrl + Enter)",
- "check-code": "Check Your Code (Ctrl + Enter)",
+ "check-code": "檢查您的代碼 (Ctrl + Enter)",
+ "check-code-2": "檢查你的代碼",
"reset": "重置",
"reset-code": "重置所有代碼",
"help": "幫助",
@@ -70,7 +71,11 @@
"start-coding": "開始編碼!",
"go-to-settings": "轉到設置以申請你的認證",
"click-start-course": "開始課程",
- "click-start-project": "啓動項目"
+ "click-start-project": "啓動項目",
+ "change-language": "修改語言",
+ "cancel-change": "撤銷修改",
+ "resume-project": "繼續項目",
+ "start-project": "開始項目"
},
"landing": {
"big-heading-1": "免費學習編程",
@@ -101,7 +106,7 @@
},
"settings": {
"share-projects": "分享你在 freeCodeCamp 之外做的項目,寫的文章或者在 GitHub 上被接受的 pull requests。",
- "privacy": "The settings in this section enable you to control what is shown on your freeCodeCamp public portfolio. Press save to save your changes.",
+ "privacy": "你可以在本節的設置中管理哪些內容可以展示在 freeCodeCamp 公開作品集,點擊“保存”以存儲你的修改。",
"data": "請點擊下面的 \"下載你的數據\" 按鈕,查看我們在你的賬號上保存的數據",
"disabled": "如果設置爲僅自己可見,其他人將無法訪問你的認證。",
"private-name": "如果你將姓名設置爲私密,你的證書上不會顯示你的姓名。",
@@ -143,7 +148,8 @@
"my-timeline": "我的時間線",
"my-donations": "我的捐款",
"night-mode": "夜間模式",
- "sound-mode": "篝火模式"
+ "sound-mode": "篝火模式",
+ "keyboard-shortcuts": "啓用鍵盤快捷鍵"
},
"headings": {
"certs": "認證",
@@ -269,7 +275,7 @@
"solution-link": "解決方案鏈接",
"github-link": "GitHub 鏈接",
"submit-and-go": "提交併訪問下一個挑戰",
- "congradulations": "Congratulations, your code passes. Submit your code to complete this step and move on to the next one.",
+ "congratulations": "恭喜,你的代碼已通過。請提交你的代碼以繼續。",
"i-completed": "我已經完成這個挑戰",
"test-output": "你的測試輸出將在這裏顯示",
"running-tests": "// 運行測試",
@@ -280,14 +286,14 @@
"percent-complete": "完成 {{percent}}%",
"tried-rsa": "如果你已經嘗試了 <0>Read-Search-Ask(閱讀-搜索-提問)0>方法,那麼你可以在 freeCodeCamp 論壇請求幫助。",
"rsa": "閱讀,搜索,提問",
+ "rsa-forum": "Before making a new post please see if your question has <0>already been answered on the forum0>.",
"reset": "重置這一節課程?",
"reset-warn": "你確定要重置這一節課程嗎?編輯器和測試將被重置。",
"reset-warn-2": "這個操作不可撤銷",
"scrimba-tip": "注意:如果這個小瀏覽器窗口覆蓋了代碼,點擊拖動它。同時,你可以隨時暫停,在視頻中編輯代碼。",
"chal-preview": "挑戰預覽",
"cert-map-estimates": {
- "certs": "{{title}} 認證 (300小時)",
- "coding-prep": "{{title}}(數千小時的挑戰)"
+ "certs": "{{title}} 認證"
},
"editor-tabs": {
"info": "信息",
@@ -296,6 +302,7 @@
"restart": "重啓",
"restart-step": "重啓步驟",
"console": "控制檯",
+ "instructions": "說明",
"notes": "注意",
"preview": "預覽"
},
@@ -308,15 +315,16 @@
"submit-public-url": "當你完成項目後,將所有所需文件保存到公共倉庫並將 URL 填寫到下方。",
"complete-both-steps": "完成下面的兩個步驟來完成這一挑戰。",
"runs-in-vm": "該項目在虛擬機中運行,完成在那裏描述的用戶故事,獲取所有測試並通過它們以完成步驟 1。",
- "completed": "Completed",
- "not-started": "Not started",
- "hint": "Hint",
- "test": "Test",
- "sorry-try-again": "Sorry, your code does not pass. Try again.",
- "sorry-keep-trying": "Sorry, your code does not pass. Keep trying.",
- "sorry-getting-there": "Sorry, your code does not pass. You're getting there.",
- "sorry-hang-in-there": "Sorry, your code does not pass. Hang in there.",
- "sorry-dont-giveup": "Sorry, your code does not pass. Don't give up."
+ "completed": "已完成",
+ "not-started": "未開始",
+ "hint": "提示",
+ "test": "測試",
+ "sorry-try-again": "抱歉,你的代碼未通過,再試一次。",
+ "sorry-keep-trying": "抱歉,你的代碼未通過,再試試看。",
+ "sorry-getting-there": "抱歉,你的代碼未通過,就快要成功了。",
+ "sorry-hang-in-there": "抱歉,你的代碼未通過,堅持一下。",
+ "sorry-dont-giveup": "抱歉,你的代碼未通過,不要放棄。",
+ "challenges-completed": "已完成 {{completedCount}}/{{totalChallenges}}"
},
"donate": {
"title": "支持我們的非營利組織",
@@ -324,7 +332,6 @@
"redirecting": "重新引導中...",
"thanks": "謝謝捐款",
"thank-you": "謝謝你成爲我們的支持者。",
- "thank-you-2": "謝謝你成爲 freeCodeCamp 的支持者。現在你已設置定期捐款。",
"additional": "你可以使用這個鏈接 <0>{{url}}0> 額外進行一次性捐款:",
"help-more": "幫助我們做更多",
"error": "你的捐款處理有點問題。",
@@ -423,7 +430,7 @@
},
"search": {
"label": "搜索",
- "placeholder": "搜索 800+ 篇教程",
+ "placeholder": "搜索 1,000+ 篇教程",
"see-results": "查看 {{searchQuery}} 的所有結果",
"no-tutorials": "未找到教程",
"try": "想要搜索信息?試試使用頁面上的搜索框。",
@@ -443,7 +450,9 @@
"and": "和",
"change-theme": "登錄以更改主題。",
"translation-pending": "幫我們翻譯",
- "certification-project": "認證項目"
+ "certification-project": "認證項目",
+ "iframe-alert": "通常,此鏈接會將你帶到另一個網站!一切正常,這個鏈接指向:{{externalLink}}。",
+ "document-notfound": "找不到文件"
},
"icons": {
"gold-cup": "金獎盃",
@@ -452,8 +461,10 @@
"donate": "使用 PayPal 捐款",
"fail": "測試失敗",
"not-passed": "未通過",
+ "waiting": "等待中",
"passed": "通過",
- "hint": "Hint",
+ "failed": "失敗",
+ "hint": "提示",
"heart": "愛心",
"initial": "初始",
"info": "介紹信息",
@@ -474,8 +485,11 @@
"last-page": "訪問最後一頁",
"primary-nav": "主要的",
"breadcrumb-nav": "麪包屑導航",
- "submit": "Use Ctrl + Enter to submit.",
- "running-tests": "Running tests"
+ "submit": "按下 Ctrl + Enter 鍵提交。",
+ "running-tests": "正在運行測試",
+ "step": "步驟",
+ "steps": "步驟",
+ "steps-for": "{{blockTitle}} 的步驟"
},
"flash": {
"honest-first": "申請認證之前,你必須先接受我們的《學術誠信條例》",
@@ -681,5 +695,16 @@
"delete-p3": "您需要創建一個新的令牌來保存使用虛擬機的課程部分的未來進度。",
"no-thanks": "不,謝謝,我想保留我的令牌",
"yes-please": "是的,我想刪除我的令牌"
+ },
+ "shortcuts": {
+ "title": "鍵盤快捷鍵",
+ "table-header-action": "行動",
+ "table-header-key": "關鍵字",
+ "navigation-mode": "導航模式",
+ "execute-challenge": "開始挑戰",
+ "focus-editor": "聚焦編輯器",
+ "focus-instructions-panel": "聚焦指示面板",
+ "navigate-previous": "跳轉至上一個練習",
+ "navigate-next": "跳轉至下一個練習"
}
}
diff --git a/client/i18n/locales/chinese/intro.json b/client/i18n/locales/chinese/intro.json
index b70a6b2137dcdf..c4501ae4514988 100644
--- a/client/i18n/locales/chinese/intro.json
+++ b/client/i18n/locales/chinese/intro.json
@@ -1,6 +1,6 @@
{
"responsive-web-design": {
- "title": "Legacy Responsive Web Design",
+ "title": "(旧版)响应式网页设计",
"intro": [
"在响应式网页设计认证中,你将学习开发者用来编写网页的语言:HTML(超文本标记语言)用于创建内容,CSS(级联样式表)用于样式设计。",
"首先,你将通过编写一个展示猫咪图片的应用,学习 HTML 和 CSS 的基本知识。 然后,通过画企鹅来学习像 CSS 变量这样的现代技术,以及通过构建网页表单来学习无障碍的最佳实践。",
@@ -67,11 +67,11 @@
}
},
"2022/responsive-web-design": {
- "title": "(New) Responsive Web Design",
+ "title": "(新版)响应式网页设计",
"intro": [
"在响应式网页设计的认证课程中,你将学习用于构建网页的语言: HTML(超文本标记语言)用于创建内容,CSS(级联样式表)用于样式设计。",
- "首先,你将通过编写一个猫咪相册应用,学习 HTML 和 CSS 的基本知识。 然后,通过画企鹅来学习像 CSS 变量这样的现代技术,并通过编写网页表单来学习无障碍的最佳实践。",
- "最后,你将通过编写一个 Twitter 卡片,学习如何使用 Flexbox 实现能够适应不同屏幕大小的网页 ,以及如何使用 CSS Grid 实现一个复杂的博客布局。"
+ "首先,你将通过编写一个展示猫咪图片的应用来学习 HTML 和 CSS 的基本知识。 然后,通过构建一只企鹅来学习像 CSS 变量这样的现代技术,并通过搭建网页表单来学习无障碍的最佳实践。",
+ "最后,你将通过编写一个 Twitter 卡片,学习如何使用 Flexbox 实现适应不同屏幕大小的网页 ,以及如何用 CSS Grid 实现一个复杂的博客布局。"
],
"note": "注意:某些浏览器扩展程序(例如广告拦截器和深色模式)可能干扰测试。如果遇到问题,我们建议你在学习课程时禁用那些修改网页内容或布局的扩展程序。",
"blocks": {
@@ -300,64 +300,64 @@
}
},
"2022/javascript-algorithms-and-data-structures": {
- "title": "JavaScript Algorithms and Data Structures (Beta)",
+ "title": "JavaScript 算法和数据结构项目(Beta 测试版本)",
"intro": [
- "placeholder",
- "placeholder"
+ "占位符",
+ "占位符"
],
"note": "",
"blocks": {
"build-a-caesars-cipher-project": {
- "title": "Build a Casears Cipher Project",
+ "title": "构建一个恺撒密码项目",
"intro": [
"",
""
]
},
"build-a-cash-register-project": {
- "title": "Build a Cash Register Project",
+ "title": "构建一个收银机项目",
"intro": [
"",
""
]
},
"build-a-palindrome-checker-project": {
- "title": "Build a Palindrome Checker Project",
+ "title": "构建一个回文检测器项目",
"intro": [
"",
""
]
},
"build-a-roman-numeral-converter-project": {
- "title": "Build a Roman Numeral Converter Project",
+ "title": "搭建一个罗马数字转换器项目",
"intro": [
"",
""
]
},
"build-a-telephone-number-validator-project": {
- "title": "Build a Telephone Number Validator Project",
+ "title": "构建一个电话号码检验器项目",
"intro": [
"",
""
]
},
"learn-basic-javascript-by-building-a-role-playing-game": {
- "title": "Learn Basic JavaScript by Building a Role Playing Game",
+ "title": "通过构建角色扮演游戏来学习 JavaScript",
"intro": [
"",
""
]
},
"learn-form-validation-by-building-a-calorie-counter": {
- "title": "Learn Form Validation by Building a Calorie Counter",
+ "title": "通过构建卡路里计数器来学习表单验证",
"intro": [
"",
""
]
},
"learn-functional-programming-by-building-a-spreadsheet": {
- "title": "Learn Functional Programming by Building a Spreadsheet",
+ "title": "通过构建电子表格学习函数式编程",
"intro": [
"",
""
@@ -606,7 +606,7 @@
"mongodb-and-mongoose": {
"title": "MongoDB 和 Mongoose",
"intro": [
- "MongoDB 是一个存储你可以在应用程序中使用的 JSON 文件(或记录)的数据库应用程序。不同于SQL,另一种类型的数据库。Mongo 是一个非关系型或 “NoSQL” 数据库。这意味着 Mongo 将所有相关数据存储在一个记录中,而不是像 SQL 数据库中那样在许多预设表中存储数据。",
+ "MongoDB 是一个存储 JSON 文件(或记录)的数据库程序,你可以在自己的程序中使用这些 JSON 文件。与 SQL——另一种类型的数据库——所不同的是,MongoDB 是一个非关系型数据库,也被称为 “NoSQL”。这意味着 MongoDB 将所有相关数据都存储在一个记录中,而不是像 SQL 数据库中那样把数据存储在许多预设表中。",
"Mongoose 是一个广泛使用的 npm 包,通常和 Mongo 一起安装。通过 Mongoose,你可以使用 JavaScript 对象而不是 JSON ,这样就更容易与 Mongo 配合使用。此外,它允许你创建文件架构,即 schema,所以你不会意外地保存错误的数据类型并出现 bug。",
"在 MongoDB 和 Mongoose 课程中,你将学习处理数据的基本知识,包括如何建立模型,保存、删除并在数据库中查找文档。"
]
@@ -804,7 +804,8 @@
"title": "罗塞塔代码",
"intro": [
"通过完成经典的罗塞塔代码库中的这些免费编程任务来提升你的创造性问题解决能力。",
- "这些挑战可能很困难,但是它们会将进一步提升你的算法逻辑。"
+ "这些挑战可能很困难,但是它们会将进一步提升你的算法逻辑。",
+ "属性:Rosetta 代码"
]
},
"project-euler": {
@@ -825,9 +826,9 @@
"collapse": "收起课程",
"legacy-header": "旧版课程",
"legacy-desc": "这些课程不再是认证路径的一部分,但仍可供你进一步学习。",
- "legacy-go-back": "Go to the current version of the curriculum.",
- "new-rwd-desc": "We have updated our Responsive Web Design Curriculum. If you were previously working on the RWD curriculum, your progress is still saved! You can find it under the Legacy Responsive Web Design section.",
- "new-rwd-article": "We encourage you to read about the changes we made and consider exploring the updated curriculum.",
+ "legacy-go-back": "进入当前版本的课程。",
+ "new-rwd-desc": "我们更新了响应式网页设计课程。 如果你之前正在使用该课程,你的进度仍然可以保存!你可以在旧版响应式网页设计课程里找到你的进度。",
+ "new-rwd-article": "我们希望你阅读我们所作的修改,并能考虑探索新课程。",
"viewing-upcoming-change": "你正在查看Beta页面。 ",
"go-back-to-learn": "回到正式版课程",
"read-database-cert-article": "请在继续之前阅读这个论坛帖子。",
diff --git a/client/i18n/locales/chinese/links.json b/client/i18n/locales/chinese/links.json
index c77d3408058552..51bec130ca2156 100644
--- a/client/i18n/locales/chinese/links.json
+++ b/client/i18n/locales/chinese/links.json
@@ -1,5 +1,5 @@
{
- "help-translate-url": "https://contribute.freecodecamp.org/#/i18n/chinese/how-to-translate-files",
+ "help-translate-link-url": "https://contribute.freecodecamp.org/#/i18n/chinese/how-to-translate-files",
"top-contributors": "https://www.freecodecamp.org/news/freecodecamp-top-contributors/",
"footer": {
"about-url": "https://chinese.freecodecamp.org/news/about/",
@@ -13,16 +13,19 @@
"copyright-url": "https://www.freecodecamp.org/news/copyright-policy/"
},
"donate": {
- "other-ways-url": "https://chinese.freecodecamp.org/news/how-to-donate-to-free-code-camp/"
+ "other-ways-url": "https://chinese.freecodecamp.org/news/how-to-donate-to-free-code-camp/",
+ "download-irs-url": "https://s3.amazonaws.com/freecodecamp/Free+Code+Camp+Inc+IRS+Determination+Letter.pdf",
+ "download-990-url": "https://freecodecamp.s3.amazonaws.com/freeCodeCamp+2019+f990.pdf",
+ "one-time-url": "https://paypal.me/freecodecamp"
},
"nav": {
- "forum": "https://chinese.freecodecamp.org/forum/",
+ "forum": "https://forum.freecodecamp.org/c/chinese/533",
"news": "https://chinese.freecodecamp.org/news/"
},
"help": {
- "HTML-CSS": "front-end",
- "JavaScript": "front-end",
- "Python": "curriculum",
- "Relational Databases": "curriculum"
+ "HTML-CSS": "chinese/html-css",
+ "JavaScript": "chinese/javascript",
+ "Python": "chinese/python",
+ "Backend Development": "chinese/programming-help"
}
}
diff --git a/client/i18n/locales/chinese/translations.json b/client/i18n/locales/chinese/translations.json
index c73a719936ed11..ba47cdcbc48775 100644
--- a/client/i18n/locales/chinese/translations.json
+++ b/client/i18n/locales/chinese/translations.json
@@ -50,7 +50,8 @@
"reset-lesson": "重置课程",
"run": "运行",
"run-test": "运行测试(Ctrl + Enter)",
- "check-code": "Check Your Code (Ctrl + Enter)",
+ "check-code": "检查您的代码 (Ctrl + Enter)",
+ "check-code-2": "检查你的代码",
"reset": "重置",
"reset-code": "重置所有代码",
"help": "帮助",
@@ -70,7 +71,11 @@
"start-coding": "开始编码!",
"go-to-settings": "转到设置以申请你的认证",
"click-start-course": "开始课程",
- "click-start-project": "启动项目"
+ "click-start-project": "启动项目",
+ "change-language": "修改语言",
+ "cancel-change": "撤销修改",
+ "resume-project": "继续项目",
+ "start-project": "开始项目"
},
"landing": {
"big-heading-1": "免费学习编程",
@@ -101,7 +106,7 @@
},
"settings": {
"share-projects": "分享你在 freeCodeCamp 之外做的项目,写的文章或者在 GitHub 上被接受的 pull requests。",
- "privacy": "The settings in this section enable you to control what is shown on your freeCodeCamp public portfolio. Press save to save your changes.",
+ "privacy": "你可以在本节的设置中管理哪些内容可以展示在 freeCodeCamp 公开作品集,点击“保存”以存储你的修改。",
"data": "请点击下面的 \"下载你的数据\" 按钮,查看我们在你的账号上保存的数据",
"disabled": "如果设置为仅自己可见,其他人将无法访问你的认证。",
"private-name": "如果你将姓名设置为私密,你的证书上不会显示你的姓名。",
@@ -143,7 +148,8 @@
"my-timeline": "我的时间线",
"my-donations": "我的捐款",
"night-mode": "夜间模式",
- "sound-mode": "篝火模式"
+ "sound-mode": "篝火模式",
+ "keyboard-shortcuts": "启用键盘快捷键"
},
"headings": {
"certs": "认证",
@@ -269,7 +275,7 @@
"solution-link": "解决方案链接",
"github-link": "GitHub 链接",
"submit-and-go": "提交并访问下一个挑战",
- "congradulations": "Congratulations, your code passes. Submit your code to complete this step and move on to the next one.",
+ "congratulations": "恭喜,你的代码已通过。请提交你的代码以继续。",
"i-completed": "我已经完成这个挑战",
"test-output": "你的测试输出将在这里显示",
"running-tests": "// 运行测试",
@@ -280,14 +286,14 @@
"percent-complete": "完成 {{percent}}%",
"tried-rsa": "如果你已经尝试了 <0>Read-Search-Ask(阅读-搜索-提问)0>方法,那么你可以在 freeCodeCamp 论坛请求帮助。",
"rsa": "阅读,搜索,提问",
+ "rsa-forum": "Before making a new post please see if your question has <0>already been answered on the forum0>.",
"reset": "重置这一节课程?",
"reset-warn": "你确定要重置这一节课程吗?编辑器和测试将被重置。",
"reset-warn-2": "这个操作不可撤销",
"scrimba-tip": "注意:如果这个小浏览器窗口覆盖了代码,点击拖动它。同时,你可以随时暂停,在视频中编辑代码。",
"chal-preview": "挑战预览",
"cert-map-estimates": {
- "certs": "{{title}} 认证 (300小时)",
- "coding-prep": "{{title}}(数千小时的挑战)"
+ "certs": "{{title}} 认证"
},
"editor-tabs": {
"info": "信息",
@@ -296,6 +302,7 @@
"restart": "重启",
"restart-step": "重启步骤",
"console": "控制台",
+ "instructions": "说明",
"notes": "注意",
"preview": "预览"
},
@@ -308,15 +315,16 @@
"submit-public-url": "当你完成项目后,将所有所需文件保存到公共仓库并将 URL 填写到下方。",
"complete-both-steps": "完成下面的两个步骤来完成这一挑战。",
"runs-in-vm": "该项目在虚拟机中运行,完成在那里描述的用户故事,获取所有测试并通过它们以完成步骤 1。",
- "completed": "Completed",
- "not-started": "Not started",
- "hint": "Hint",
- "test": "Test",
- "sorry-try-again": "Sorry, your code does not pass. Try again.",
- "sorry-keep-trying": "Sorry, your code does not pass. Keep trying.",
- "sorry-getting-there": "Sorry, your code does not pass. You're getting there.",
- "sorry-hang-in-there": "Sorry, your code does not pass. Hang in there.",
- "sorry-dont-giveup": "Sorry, your code does not pass. Don't give up."
+ "completed": "已完成",
+ "not-started": "未开始",
+ "hint": "提示",
+ "test": "测试",
+ "sorry-try-again": "抱歉,你的代码未通过,再试一次。",
+ "sorry-keep-trying": "抱歉,你的代码未通过,再试试看。",
+ "sorry-getting-there": "抱歉,你的代码未通过,就快要成功了。",
+ "sorry-hang-in-there": "抱歉,你的代码未通过,坚持一下。",
+ "sorry-dont-giveup": "抱歉,你的代码未通过,不要放弃。",
+ "challenges-completed": "已完成 {{completedCount}}/{{totalChallenges}}"
},
"donate": {
"title": "支持我们的非营利组织",
@@ -324,7 +332,6 @@
"redirecting": "重新引导中...",
"thanks": "谢谢捐款",
"thank-you": "谢谢你成为我们的支持者。",
- "thank-you-2": "谢谢你成为 freeCodeCamp 的支持者。现在你已设置定期捐款。",
"additional": "你可以使用这个链接 <0>{{url}}0> 额外进行一次性捐款:",
"help-more": "帮助我们做更多",
"error": "你的捐款处理有点问题。",
@@ -423,7 +430,7 @@
},
"search": {
"label": "搜索",
- "placeholder": "搜索 800+ 篇教程",
+ "placeholder": "搜索 1,000+ 篇教程",
"see-results": "查看 {{searchQuery}} 的所有结果",
"no-tutorials": "未找到教程",
"try": "想要搜索信息?试试使用页面上的搜索框。",
@@ -443,7 +450,9 @@
"and": "和",
"change-theme": "登录以更改主题。",
"translation-pending": "帮我们翻译",
- "certification-project": "认证项目"
+ "certification-project": "认证项目",
+ "iframe-alert": "通常,此链接会将你带到另一个网站!一切正常,这个链接指向:{{externalLink}}。",
+ "document-notfound": "找不到文件"
},
"icons": {
"gold-cup": "金奖杯",
@@ -452,8 +461,10 @@
"donate": "使用 PayPal 捐款",
"fail": "测试失败",
"not-passed": "未通过",
+ "waiting": "等待中",
"passed": "通过",
- "hint": "Hint",
+ "failed": "失败",
+ "hint": "提示",
"heart": "爱心",
"initial": "初始",
"info": "介绍信息",
@@ -474,8 +485,11 @@
"last-page": "访问最后一页",
"primary-nav": "主要的",
"breadcrumb-nav": "面包屑导航",
- "submit": "Use Ctrl + Enter to submit.",
- "running-tests": "Running tests"
+ "submit": "按下 Ctrl + Enter 键提交。",
+ "running-tests": "正在运行测试",
+ "step": "步骤",
+ "steps": "步骤",
+ "steps-for": "{{blockTitle}} 的步骤"
},
"flash": {
"honest-first": "申请认证之前,你必须先接受我们的《学术诚信条例》",
@@ -681,5 +695,16 @@
"delete-p3": "您需要创建一个新的令牌来保存使用虚拟机的课程部分的未来进度。",
"no-thanks": "不,谢谢,我想保留我的令牌",
"yes-please": "是的,我想删除我的令牌"
+ },
+ "shortcuts": {
+ "title": "键盘快捷键",
+ "table-header-action": "行动",
+ "table-header-key": "关键字",
+ "navigation-mode": "导航模式",
+ "execute-challenge": "开始挑战",
+ "focus-editor": "聚焦编辑器",
+ "focus-instructions-panel": "聚焦指示面板",
+ "navigate-previous": "跳转至上一个练习",
+ "navigate-next": "跳转至下一个练习"
}
}
diff --git a/client/i18n/locales/english/intro.json b/client/i18n/locales/english/intro.json
index 54380f2e67dc41..0dbf1faf6a1a0b 100644
--- a/client/i18n/locales/english/intro.json
+++ b/client/i18n/locales/english/intro.json
@@ -70,8 +70,8 @@
"title": "(New) Responsive Web Design",
"intro": [
"In this Responsive Web Design Certification, you'll learn the languages that developers use to build webpages: HTML (Hypertext Markup Language) for content, and CSS (Cascading Style Sheets) for design.",
- "First, you'll build a cat photo app to learn the basics of HTML and CSS. Later, you'll learn modern techniques like CSS variables by building a penguin, and best practices for accessibility by building a web form.",
- "Finally, you'll learn how to make webpages that respond to different screen sizes by building a Twitter card with Flexbox, and a complex blog layout with CSS Grid."
+ "First, you'll build a cat photo app to learn the basics of HTML and CSS. Later, you'll learn modern techniques like CSS variables by building a penguin, and best practices for accessibility by building a quiz site.",
+ "Finally, you'll learn how to make webpages that respond to different screen sizes by building a photo gallery with Flexbox, and a magazine article layout with CSS Grid."
],
"note": "Note: Some browser extensions, such as ad-blockers and dark mode extensions can interfere with the tests. If you face issues, we recommend disabling extensions that modify the content or layout of pages, while taking the course.",
"blocks": {
@@ -340,7 +340,7 @@
"note": "",
"blocks": {
"build-a-caesars-cipher-project": {
- "title": "Build a Casears Cipher Project",
+ "title": "Build a Caesars Cipher Project",
"intro": [
"",
""
@@ -638,8 +638,8 @@
"mongodb-and-mongoose": {
"title": "MongoDB and Mongoose",
"intro": [
- "MongoDB is a database application that stores JSON documents (or records) that you can use in your application. Unlike SQL, another type of database, Mongo is a non-relational or \"NoSQL\" database. This means Mongo stores all associated data within one record, instead of storing it across many preset tables as in a SQL database.",
- "Mongoose is a popular npm package that is often installed alongside Mongo. With Mongoose, you can use plain JavaScript objects instead of JSON, which makes it easier to work with Mongo. Also, it allows you to create blueprints for your documents called schemas, so you don't accidentally save the wrong type of data and cause bugs later.",
+ "MongoDB is a database application that stores JSON documents (or records) that you can use in your application. Unlike SQL, another type of database, MongoDB is a non-relational or \"NoSQL\" database. This means MongoDB stores all associated data within one record, instead of storing it across many preset tables as in a SQL database.",
+ "Mongoose is a popular npm package for interacting with MongoDB. With Mongoose, you can use plain JavaScript objects instead of JSON, which makes it easier to work with MongoDB. Also, it allows you to create blueprints for your documents called schemas, so you don't accidentally save the wrong type of data and cause bugs later.",
"In the MongoDB and Mongoose courses, you'll learn the fundamentals of working with persistent data including how to set up a model, and save, delete, and find documents in the database."
]
},
@@ -836,7 +836,8 @@
"title": "Rosetta Code",
"intro": [
"Level up your creative problem solving skills with these free programming tasks from the classic Rosetta Code library.",
- "These challenges can prove to be difficult, but they will push your algorithm logic to new heights."
+ "These challenges can prove to be difficult, but they will push your algorithm logic to new heights.",
+ "Attribute: Rosetta Code"
]
},
"project-euler": {
diff --git a/client/i18n/locales/english/motivation.json b/client/i18n/locales/english/motivation.json
index 9b14cef6782c48..cf3924f8add8da 100644
--- a/client/i18n/locales/english/motivation.json
+++ b/client/i18n/locales/english/motivation.json
@@ -347,6 +347,10 @@
"quote": "Light tomorrow with today.",
"author": "Elizabeth Barrett Browning"
},
+ {
+ "quote": "If your dreams do not scare you, they are not big enough.",
+ "author": "Ellen Johnson Sirleaf"
+ },
{
"quote": "Forever is composed of nows.",
"author": "Emily Dickinson"
diff --git a/client/i18n/locales/english/translations.json b/client/i18n/locales/english/translations.json
index 0428211787526d..a1f7df3c8c0e8f 100644
--- a/client/i18n/locales/english/translations.json
+++ b/client/i18n/locales/english/translations.json
@@ -51,6 +51,7 @@
"run": "Run",
"run-test": "Run the Tests (Ctrl + Enter)",
"check-code": "Check Your Code (Ctrl + Enter)",
+ "check-code-2": "Check Your Code",
"reset": "Reset",
"reset-code": "Reset Code",
"help": "Help",
@@ -70,7 +71,11 @@
"start-coding": "Start coding!",
"go-to-settings": "Go to settings to claim your certification",
"click-start-course": "Start the course",
- "click-start-project": "Start the project"
+ "click-start-project": "Start the project",
+ "change-language": "Change Language",
+ "cancel-change": "Cancel Change",
+ "resume-project": "Resume project",
+ "start-project": "Start project"
},
"landing": {
"big-heading-1": "Learn to code — for free.",
@@ -143,7 +148,8 @@
"my-timeline": "My timeline",
"my-donations": "My donations",
"night-mode": "Night Mode",
- "sound-mode": "Campfire Mode"
+ "sound-mode": "Campfire Mode",
+ "keyboard-shortcuts": "Enable Keyboard Shortcuts"
},
"headings": {
"certs": "Certifications",
@@ -269,7 +275,7 @@
"solution-link": "Solution Link",
"github-link": "GitHub Link",
"submit-and-go": "Submit & go to next step",
- "congradulations": "Congratulations, your code passes. Submit your code to complete this step and move on to the next one.",
+ "congratulations": "Congratulations, your code passes. Submit your code to complete this step and move on to the next one.",
"i-completed": "I've completed this challenge",
"test-output": "Your test output will go here",
"running-tests": "// running tests",
@@ -280,14 +286,14 @@
"percent-complete": "{{percent}}% complete",
"tried-rsa": "If you've already tried the <0>Read-Search-Ask0> method, then you can ask for help on the freeCodeCamp forum.",
"rsa": "Read, search, ask",
+ "rsa-forum": "Before making a new post please see if your question has <0>already been answered on the forum0>.",
"reset": "Reset this lesson?",
"reset-warn": "Are you sure you wish to reset this lesson? The editors and tests will be reset.",
"reset-warn-2": "This cannot be undone",
"scrimba-tip": "Tip: If the mini-browser is covering the code, click and drag to move it. Also, feel free to stop and edit the code in the video at any time.",
"chal-preview": "Challenge Preview",
"cert-map-estimates": {
- "certs": "{{title}} Certification (300\u00A0hours)",
- "coding-prep": "{{title}} (Thousands of hours of challenges)"
+ "certs": "{{title}} Certification"
},
"editor-tabs": {
"info": "Info",
@@ -296,6 +302,7 @@
"restart": "Restart",
"restart-step": "Restart Step",
"console": "Console",
+ "instructions": "Instructions",
"notes": "Notes",
"preview": "Preview"
},
@@ -316,7 +323,8 @@
"sorry-keep-trying":"Sorry, your code does not pass. Keep trying.",
"sorry-getting-there":"Sorry, your code does not pass. You're getting there.",
"sorry-hang-in-there":"Sorry, your code does not pass. Hang in there.",
- "sorry-dont-giveup":"Sorry, your code does not pass. Don't give up."
+ "sorry-dont-giveup":"Sorry, your code does not pass. Don't give up.",
+ "challenges-completed": "{{completedCount}} of {{totalChallenges}} challenges completed"
},
"donate": {
"title": "Support our nonprofit",
@@ -324,7 +332,6 @@
"redirecting": "Redirecting...",
"thanks": "Thanks for donating",
"thank-you": "Thank you for being a supporter.",
- "thank-you-2": "Thank you for being a supporter of freeCodeCamp. You currently have a recurring donation.",
"additional": "You can make an additional one-time donation of any amount using this link: <0>{{url}}0>",
"help-more": "Help us do more",
"error": "Something went wrong with your donation.",
@@ -443,7 +450,10 @@
"and": "and",
"change-theme": "Sign in to change theme.",
"translation-pending": "Help us translate",
- "certification-project": "Certification Project"
+ "certification-project": "Certification Project",
+ "iframe-preview": "{{title}} preview",
+ "iframe-alert": "Normally this link would bring you to another website! It works. This is a link to: {{externalLink}}",
+ "document-notfound": "document not found"
},
"icons": {
"gold-cup": "Gold Cup",
@@ -452,7 +462,9 @@
"donate": "Donate with PayPal",
"fail": "Test Failed",
"not-passed": "Not Passed",
+ "waiting": "Waiting",
"passed": "Passed",
+ "failed": "Failed",
"hint": "Hint",
"heart": "Heart",
"initial": "Initial",
@@ -475,7 +487,10 @@
"primary-nav": "primary",
"breadcrumb-nav": "breadcrumb",
"submit": "Use Ctrl + Enter to submit.",
- "running-tests": "Running tests"
+ "running-tests": "Running tests",
+ "step": "Step",
+ "steps": "Steps",
+ "steps-for": "Steps for {{blockTitle}}"
},
"flash": {
"honest-first": "To claim a certification, you must first accept our academic honesty policy",
@@ -681,5 +696,16 @@
"delete-p3": "You will need to create a new token to save future progress on the curriculum sections that use a virtual machine.",
"no-thanks": "No thanks, I would like to keep my token",
"yes-please": "Yes please, I would like to delete my token"
+ },
+ "shortcuts": {
+ "title": "Keyboard shortcuts",
+ "table-header-action": "Action",
+ "table-header-key": "Key(s)",
+ "navigation-mode": "Navigation Mode",
+ "execute-challenge": "Execute Challenge",
+ "focus-editor": "Focus Editor",
+ "focus-instructions-panel": "Focus Instructions Panel",
+ "navigate-previous": "Navigate Previous Exercise",
+ "navigate-next": "Navigate Next Exercise"
}
}
diff --git a/client/i18n/locales/english/trending.json b/client/i18n/locales/english/trending.json
index 157f74c103bc8c..424577013755a2 100644
--- a/client/i18n/locales/english/trending.json
+++ b/client/i18n/locales/english/trending.json
@@ -1,62 +1,62 @@
{
- "article0title": "Zoom Screen Sharing",
- "article0link": "https://www.freecodecamp.org/news/zoom-screen-sharing-how-to-share-my-screen-on-zoom-solved/",
- "article1title": "Decimal Place Value",
- "article1link": "https://www.freecodecamp.org/news/decimal-place-value-hundreds-thousandths-and-beyond/",
- "article2title": "How to Get Into BIOS",
- "article2link": "https://www.freecodecamp.org/news/how-to-get-into-bios-in-windows-10-bios-setup-pc-guide/",
- "article3title": "String to Int in C++",
- "article3link": "https://www.freecodecamp.org/news/string-to-int-in-c-how-to-convert-a-string-to-an-integer-example/",
- "article4title": "What is msmpeng.exe",
- "article4link": "https://www.freecodecamp.org/news/what-is-msmpeng-exe-why-is-it-of-high-cpu-disk-usage/",
- "article5title": "Facetime Not Working",
- "article5link": "https://www.freecodecamp.org/news/why-is-my-facetime-not-working/",
- "article6title": "Desktop Icons Missing",
- "article6link": "https://www.freecodecamp.org/news/desktop-icons-missing-how-to-fix-windows-10-pc-icons-that-have-disappeared/",
- "article7title": "How to Copy and Paste",
- "article7link": "https://www.freecodecamp.org/news/how-to-copy-and-paste-on-a-computer-windows-pc-keyboard-shortcut-guide/",
- "article8title": "Delete a Page in Word",
- "article8link": "https://www.freecodecamp.org/news/how-to-delete-a-page-in-word-remove-blank-or-extra-pages/",
- "article9title": "vcruntime140.dll Error",
- "article9link": "https://www.freecodecamp.org/news/vcruntime140-dll-was-not-found-solved-on-windows-10-pc/",
- "article10title": "C++ Vector",
- "article10link": "https://www.freecodecamp.org/news/c-vector-std-pattern-vector-in-cpp-with-example-code/",
- "article11title": "What is CPU",
- "article11link": "https://www.freecodecamp.org/news/what-is-cpu-meaning-definition-and-what-cpu-stands-for/",
- "article12title": "IPV4 vs IPV6 ",
- "article12link": "https://www.freecodecamp.org/news/ipv4-vs-ipv6-what-is-the-difference-between-ip-addressing-schemes/",
- "article13title": "What is IPTV",
- "article13link": "https://www.freecodecamp.org/news/what-is-iptv-ip-tv-service-guide/",
- "article14title": "HTML Font Size",
- "article14link": "https://www.freecodecamp.org/news/html-font-size-how-to-change-text-size-using-inline-css-style/",
- "article15title": "Change Mouse DPI",
- "article15link": "https://www.freecodecamp.org/news/how-to-change-mouse-dpi-settings-in-windows-10/",
- "article16title": "How to Make a GIF",
- "article16link": "https://www.freecodecamp.org/news/how-to-make-a-gif-create-animated-gifs-without-downloading-software/",
- "article17title": "Git Rename Branch",
- "article17link": "https://www.freecodecamp.org/news/git-rename-branch-how-to-change-a-local-branch-name/",
- "article18title": "Make a Video Game",
- "article18link": "https://www.freecodecamp.org/news/how-to-make-a-video-game-create-your-own-game-from-scratch-tutorial/",
- "article19title": "CSS Media Queries",
- "article19link": "https://www.freecodecamp.org/news/media-query-css-example-max-and-min-screen-width-for-mobile-responsive-design/",
- "article20title": "How to Open .dat Files",
- "article20link": "https://www.freecodecamp.org/news/dat-file-how-to-open-the-dat-file-format-extension/",
- "article21title": "Record Calls on iPhone",
- "article21link": "https://www.freecodecamp.org/news/how-to-record-a-phone-call-on-iphone/",
- "article22title": "Ascending vs Descending",
- "article22link": "https://www.freecodecamp.org/news/descending-order-vs-ascending-order-what-does-it-mean/",
- "article23title": "HTML Email Link Tutorial",
- "article23link": "https://www.freecodecamp.org/news/mailto-link-how-to-make-an-html-email-link-example-code/",
- "article24title": "Python List Comprehension",
- "article24link": "https://www.freecodecamp.org/news/list-comprehension-in-python-with-code-examples/",
- "article25title": "Password Protect Zip File",
- "article25link": "https://www.freecodecamp.org/news/password-protect-zip-file-windows10/",
- "article26title": "Restore Deleted Word File",
- "article26link": "https://www.freecodecamp.org/news/how-to-recover-an-unsaved-word-document-restore-a-deleted-word-file/",
- "article27title": "Software Engineering Guide",
- "article27link": "https://www.freecodecamp.org/news/what-is-software-engineering-how-to-become-a-software-engineer/",
- "article28title": "How to Find Your IP Address",
- "article28link": "https://www.freecodecamp.org/news/what-is-my-ip-address-for-my-router-how-to-find-your-wifi-address/",
- "article29title": "How to Find iPhone Download",
- "article29link": "https://www.freecodecamp.org/news/iphone-downloads-folder-where-are-my-downloads-ios-and-ipad/"
-}
\ No newline at end of file
+ "article0title": "Discord Won't Open",
+ "article0link": "https://www.freecodecamp.org/news/discord-wont-open-on-my-pc-solved-in-windows-10/",
+ "article1title": "Learn Java Courses",
+ "article1link": "https://www.freecodecamp.org/news/learn-java-free-java-courses-for-beginners/",
+ "article2title": "SQL Like Statement",
+ "article2link": "https://www.freecodecamp.org/news/sql-like-statement-how-to-query-sql-with-wildcard/",
+ "article3title": "File Explorer Error",
+ "article3link": "https://www.freecodecamp.org/news/file-explorer-not-responding-fixed-on-windows-10-pc/",
+ "article4title": "Python Find in List",
+ "article4link": "https://www.freecodecamp.org/news/python-find-in-list-how-to-find-the-index-of-an-item-or-element-in-a-list/",
+ "article5title": "Functions in Python",
+ "article5link": "https://www.freecodecamp.org/news/python-functions-define-and-call-a-function/",
+ "article6title": "Python Reverse List",
+ "article6link": "https://www.freecodecamp.org/news/python-reverse-list-how-to-reverse-a-range-or-array/",
+ "article7title": "Create a Table in SQL",
+ "article7link": "https://www.freecodecamp.org/news/how-to-create-a-table-in-sql-postgres-and-mysql-example-query/",
+ "article8title": "List Index Out of Range",
+ "article8link": "https://www.freecodecamp.org/news/list-index-out-of-range-python-error-message-solved/",
+ "article9title": "Python String.Replace()",
+ "article9link": "https://www.freecodecamp.org/news/python-string-replace-function-in-python-for-substring-substitution/",
+ "article10title": "C vs C++",
+ "article10link": "https://www.freecodecamp.org/news/c-vs-cpp-whats-the-difference/",
+ "article11title": "Python JSON",
+ "article11link": "https://www.freecodecamp.org/news/python-json-how-to-convert-a-string-to-json/",
+ "article12title": "What is a PC?",
+ "article12link": "https://www.freecodecamp.org/news/what-is-a-pc-computer-definition-and-computer-basics-for-beginners/",
+ "article13title": "What is Coding?",
+ "article13link": "https://www.freecodecamp.org/news/computer-coding-computer-program-definition-and-code-meaning/",
+ "article14title": "Text Box in HTML",
+ "article14link": "https://www.freecodecamp.org/news/text-box-in-html-the-input-field-html-tag/",
+ "article15title": "Meta Tag in HTML",
+ "article15link": "https://www.freecodecamp.org/news/meta-tag-in-html-what-is-metadata-and-meta-description-example/",
+ "article16title": "Append in Python",
+ "article16link": "https://www.freecodecamp.org/news/append-in-python-how-to-append-to-a-list-or-an-array/",
+ "article17title": "Python Not Equal",
+ "article17link": "https://www.freecodecamp.org/news/python-not-equal-how-to-use-the-does-not-equal-operator/",
+ "article18title": "Linux awk Command",
+ "article18link": "https://www.freecodecamp.org/news/the-linux-awk-command-linux-and-unix-usage-syntax-examples/",
+ "article19title": "JS String Contains",
+ "article19link": "https://www.freecodecamp.org/news/javascript-string-contains-how-to-use-js-includes/",
+ "article20title": "How to Open Task Manager",
+ "article20link": "https://www.freecodecamp.org/news/how-to-open-task-manager-in-windows-10/",
+ "article21title": "Design Thinking Explained",
+ "article21link": "https://www.freecodecamp.org/news/the-design-thinking-process-explained/",
+ "article22title": "Learn Programming Courses",
+ "article22link": "https://www.freecodecamp.org/news/learn-programming-free-software-development-courses-for-beginners/",
+ "article23title": "Make a Transparent Taskbar",
+ "article23link": "https://www.freecodecamp.org/news/transparent-taskbar-how-to-make-a-task-bar-transparent-in-windows-10-pc-2/",
+ "article24title": "Install Ethernet Driver PC",
+ "article24link": "https://www.freecodecamp.org/news/windows-10-network-adapter-missing-how-to-install-ethernet-driver-on-pc/",
+ "article25title": "Default Constructor in Java",
+ "article25link": "https://www.freecodecamp.org/news/default-constructor-in-java/",
+ "article26title": "Stuck Win 10 Hard Drive",
+ "article26link": "https://www.freecodecamp.org/news/scanning-and-repairing-drive-how-to-fix-stuck-windows-10-pc-hard-drive/",
+ "article27title": "Color Codes for Grey Palette",
+ "article27link": "https://www.freecodecamp.org/news/color-shades-hex-code-and-rgb-for-gray-color-palette/",
+ "article28title": "Binary Search Tree Traversal",
+ "article28link": "https://www.freecodecamp.org/news/binary-search-tree-traversal-inorder-preorder-post-order-for-bst/",
+ "article29title": "RTC Connecting Discord Fix",
+ "article29link": "https://www.freecodecamp.org/news/rtc-connecting-discord-how-to-fix-the-server-error/"
+ }
\ No newline at end of file
diff --git a/client/i18n/locales/espanol/intro.json b/client/i18n/locales/espanol/intro.json
index 0452da462542fa..6ab339f48ed4d8 100644
--- a/client/i18n/locales/espanol/intro.json
+++ b/client/i18n/locales/espanol/intro.json
@@ -1,6 +1,6 @@
{
"responsive-web-design": {
- "title": "Legacy Responsive Web Design",
+ "title": "Diseño Web Responsivo Legado",
"intro": [
"En esta Certificación de Diseño Web Responsivo, aprenderás los lenguajes que los desarrolladores utilizan para construir páginas web: HTML (lenguaje de marcado de hipertexto) para el contenido, y CSS (Hojas de estilo en cascada) para el diseño.",
"Primero, crearás una aplicación de fotos de gatos para aprender los conceptos básicos de HTML y CSS. Más adelante, aprenderá técnicas modernas como variables CSS mediante la construcción de un pingüino, y las mejores prácticas para la accesibilidad mediante la construcción de un formulario web.",
@@ -67,11 +67,11 @@
}
},
"2022/responsive-web-design": {
- "title": "(New) Responsive Web Design",
+ "title": "(Nuevo) Diseño Web Responsivo",
"intro": [
"En esta certificación de Diseño Web Responsivo, aprenderás los lenguajes que los desarrolladores usan para construir páginas web: HTML (Lenguaje de Marcado de Hipertexto) para el contenido, y CSS (hojas de estilo en cascada) para el diseño.",
- "Primero, crearás una aplicación de fotos de gatos para aprender los conceptos básicos de HTML y CSS. Más adelante, aprenderás técnicas modernas como variables CSS mediante la construcción de un pingüino, y las mejores prácticas para la accesibilidad mediante la construcción de un formulario web.",
- "Finalmente, aprenderás cómo hacer páginas web que respondan a diferentes tamaños de pantalla construyendo una tarjeta de Twitter con Flexbox, y un diseño complejo de blog con CSS Grid."
+ "First, you'll build a cat photo app to learn the basics of HTML and CSS. Later, you'll learn modern techniques like CSS variables by building a penguin, and best practices for accessibility by building a quiz site.",
+ "Finally, you'll learn how to make webpages that respond to different screen sizes by building a photo gallery with Flexbox, and a magazine article layout with CSS Grid."
],
"note": "Nota: Algunas extensiones del navegador, como bloqueadores de anuncios o extensiones de modo oscuro pueden interferir con las pruebas. Si tienes algun problema, te recomendamos deshabilitar las extensiones que modifiquen el contenido de la página, mientras tomas el curso.",
"blocks": {
@@ -300,64 +300,64 @@
}
},
"2022/javascript-algorithms-and-data-structures": {
- "title": "JavaScript Algorithms and Data Structures (Beta)",
+ "title": "Algoritmos de JavaScript y estructuras de datos (beta)",
"intro": [
- "placeholder",
- "placeholder"
+ "marcador de posición",
+ "marcador de posición"
],
"note": "",
"blocks": {
"build-a-caesars-cipher-project": {
- "title": "Build a Casears Cipher Project",
+ "title": "Build a Caesars Cipher Project",
"intro": [
"",
""
]
},
"build-a-cash-register-project": {
- "title": "Build a Cash Register Project",
+ "title": "Construye un proyecto de caja registradora",
"intro": [
"",
""
]
},
"build-a-palindrome-checker-project": {
- "title": "Build a Palindrome Checker Project",
+ "title": "Construye un proyecto de comprobación de palíndromos",
"intro": [
"",
""
]
},
"build-a-roman-numeral-converter-project": {
- "title": "Build a Roman Numeral Converter Project",
+ "title": "Construye un proyecto de conversión de números romanos",
"intro": [
"",
""
]
},
"build-a-telephone-number-validator-project": {
- "title": "Build a Telephone Number Validator Project",
+ "title": "Construye un proyecto validador de números de teléfono",
"intro": [
"",
""
]
},
"learn-basic-javascript-by-building-a-role-playing-game": {
- "title": "Learn Basic JavaScript by Building a Role Playing Game",
+ "title": "Aprende JavaScript básico construyendo un juego de rol",
"intro": [
"",
""
]
},
"learn-form-validation-by-building-a-calorie-counter": {
- "title": "Learn Form Validation by Building a Calorie Counter",
+ "title": "Aprende a validar formularios construyendo un contador de calorías",
"intro": [
"",
""
]
},
"learn-functional-programming-by-building-a-spreadsheet": {
- "title": "Learn Functional Programming by Building a Spreadsheet",
+ "title": "Aprende programación funcional construyendo una hoja de cálculo",
"intro": [
"",
""
@@ -606,8 +606,8 @@
"mongodb-and-mongoose": {
"title": "MongoDB y Mongoose",
"intro": [
- "MongoDB es una aplicación de base de datos que almacena documentos (o registros) JSON que puedes utilizar en tu aplicación. A diferencia de SQL, otro tipo de base de datos, Mongo es una base de datos no relacional o \"NoSQL\". Esto significa que Mongo almacena todos los datos asociados dentro de un registro, en lugar de almacenarlos en varias tablas predefinidas como en una base de datos SQL.",
- "Mongoose es un popular paquete npm que a menudo se instala junto con Mongo. Con Mongoose, puedes utilizar objetos de JavaScript simples en lugar de JSON, lo que hace más fácil trabajar con Mongo. Además, te permite crear plantillas para tus documentos llamados esquemas, para que no guarde accidentalmente el tipo equivocado de datos y cause errores más tarde.",
+ "MongoDB is a database application that stores JSON documents (or records) that you can use in your application. Unlike SQL, another type of database, MongoDB is a non-relational or \"NoSQL\" database. This means MongoDB stores all associated data within one record, instead of storing it across many preset tables as in a SQL database.",
+ "Mongoose is a popular npm package for interacting with MongoDB. With Mongoose, you can use plain JavaScript objects instead of JSON, which makes it easier to work with MongoDB. Also, it allows you to create blueprints for your documents called schemas, so you don't accidentally save the wrong type of data and cause bugs later.",
"En los cursos de MongoDB y Mongoose, aprenderás los fundamentos para trabajar con datos persistentes, incluyendo cómo configurar un modelo, guardar, eliminar y encontrar documentos en la base de datos."
]
},
@@ -804,7 +804,8 @@
"title": "Rosetta Code",
"intro": [
"Sube tu nivel de habilidad de resolución creativa de problemas con estas tareas de programación gratis de la clásica librería de Rosetta Code.",
- "Estos desafíos pueden resultar difíciles, pero empujarán tu lógica de algoritmos a nuevas alturas."
+ "Estos desafíos pueden resultar difíciles, pero empujarán tu lógica de algoritmos a nuevas alturas.",
+ "Attribute: Rosetta Code"
]
},
"project-euler": {
@@ -825,9 +826,9 @@
"collapse": "Contraer curso",
"legacy-header": "Cursos Antiguos",
"legacy-desc": "Estos cursos ya no forman parte de la ruta de certificación, pero todavía están disponibles para tu aprendizaje.",
- "legacy-go-back": "Go to the current version of the curriculum.",
- "new-rwd-desc": "We have updated our Responsive Web Design Curriculum. If you were previously working on the RWD curriculum, your progress is still saved! You can find it under the Legacy Responsive Web Design section.",
- "new-rwd-article": "We encourage you to read about the changes we made and consider exploring the updated curriculum.",
+ "legacy-go-back": "Ve a la versión actual del plan de estudios.",
+ "new-rwd-desc": "Hemos actualizado nuestro plan de estudios de diseño web responsivo. Si anteriormente estabas trabajando en el plan de estudios de diseño web responsivo, ¡tu progreso sigue guardado! Puedes encontrarlo en la sección diseño web responsivo legado.",
+ "new-rwd-article": "Te animamos a leer sobre los cambios que hicimos y considerar explorar el plan de estudios actualizado.",
"viewing-upcoming-change": "Estás viendo una página beta. ",
"go-back-to-learn": "Volver a la versión estable del currículum.",
"read-database-cert-article": "Por favor, lea este post del foro antes de continuar.",
diff --git a/client/i18n/locales/espanol/links.json b/client/i18n/locales/espanol/links.json
index 6d8a5223ba39f9..cb10cc4354667e 100644
--- a/client/i18n/locales/espanol/links.json
+++ b/client/i18n/locales/espanol/links.json
@@ -13,7 +13,10 @@
"copyright-url": "https://www.freecodecamp.org/news/copyright-policy/"
},
"donate": {
- "other-ways-url": "https://www.freecodecamp.org/news/how-to-donate-to-free-code-camp"
+ "other-ways-url": "https://www.freecodecamp.org/news/how-to-donate-to-free-code-camp",
+ "download-irs-url": "https://s3.amazonaws.com/freecodecamp/Free+Code+Camp+Inc+IRS+Determination+Letter.pdf",
+ "download-990-url": "https://freecodecamp.s3.amazonaws.com/freeCodeCamp+2019+f990.pdf",
+ "one-time-url": "https://paypal.me/freecodecamp"
},
"nav": {
"forum": "https://forum.freecodecamp.org/c/espanol/",
@@ -23,6 +26,6 @@
"HTML-CSS": "Espanol/HTML-CSS",
"JavaScript": "Espanol/JavaScript",
"Python": "Espanol/Python",
- "Relational Databases": "Espanol/Relational Databases"
+ "Backend Development": "espanol/ayuda-de-programacion"
}
}
diff --git a/client/i18n/locales/espanol/translations.json b/client/i18n/locales/espanol/translations.json
index 8dc3a37037d484..ce06a9c4ab4ef9 100644
--- a/client/i18n/locales/espanol/translations.json
+++ b/client/i18n/locales/espanol/translations.json
@@ -50,7 +50,8 @@
"reset-lesson": "Restablecer esta lección",
"run": "Ejecutar",
"run-test": "Ejecutar las Pruebas (Ctrl + Entrar)",
- "check-code": "Check Your Code (Ctrl + Enter)",
+ "check-code": "Comprueba tu código (Ctrl + Enter)",
+ "check-code-2": "Check Your Code",
"reset": "Restablecer",
"reset-code": "Restablecer todo el código",
"help": "Ayuda",
@@ -70,7 +71,11 @@
"start-coding": "¡Empieza a programar!",
"go-to-settings": "Ve a la configuración para reclamar tu certificación",
"click-start-course": "Comienza el curso",
- "click-start-project": "Comienza el proyecto"
+ "click-start-project": "Comienza el proyecto",
+ "change-language": "Cambiar Idioma",
+ "cancel-change": "Cancelar Cambio",
+ "resume-project": "Resume project",
+ "start-project": "Start project"
},
"landing": {
"big-heading-1": "Aprende a programar gratis.",
@@ -101,7 +106,7 @@
},
"settings": {
"share-projects": "Comparte tus proyectos, artículos o pull request aceptados que no sean de FreeCodeCamp.",
- "privacy": "The settings in this section enable you to control what is shown on your freeCodeCamp public portfolio. Press save to save your changes.",
+ "privacy": "Los ajustes de esta sección te permiten controlar lo que se muestra en tu cartera pública de freeCodeCamp. Pulsa guardar para guardar tus cambios.",
"data": "Para ver qué datos tenemos en tu cuenta, haz clic en el botón \"Descarga tus datos\" a continuación",
"disabled": "Tus certificaciones se deshabilitarán si se configuran como privadas.",
"private-name": "Tu nombre no aparecerá en tus certificaciones, si está establecido como privado.",
@@ -143,7 +148,8 @@
"my-timeline": "Mi cronología",
"my-donations": "Mis donaciones",
"night-mode": "Modo nocturno",
- "sound-mode": "Modo de fogata"
+ "sound-mode": "Modo de fogata",
+ "keyboard-shortcuts": "Enable Keyboard Shortcuts"
},
"headings": {
"certs": "Certificaciones",
@@ -269,7 +275,7 @@
"solution-link": "Enlace a la solución",
"github-link": "Enlace de GitHub",
"submit-and-go": "Enviar y pasar a mi siguiente desafío",
- "congradulations": "Congratulations, your code passes. Submit your code to complete this step and move on to the next one.",
+ "congratulations": "Congratulations, your code passes. Submit your code to continue.",
"i-completed": "He completado este desafío",
"test-output": "El resultado de tu prueba irá aquí",
"running-tests": "// ejecutando pruebas",
@@ -280,14 +286,14 @@
"percent-complete": "{{percent}}% completo",
"tried-rsa": "Si ya has probado el método <0>Leer-Buscar-Preguntar0>, entonces puedes pedir ayuda en el foro de freeCodeCamp.",
"rsa": "Leer, buscar, preguntar",
+ "rsa-forum": "Before making a new post please see if your question has <0>already been answered on the forum0>.",
"reset": "¿Restablecer esta lección?",
"reset-warn": "¿Estás seguro de que deseas restablecer esta lección? Los editores y las pruebas se restablecerán.",
"reset-warn-2": "Esto no se puede deshacer",
"scrimba-tip": "Sugerencia: Si el mini-navegador cubre el código, haz clic y arrastra para moverlo. Además, siéntete libre de detener y editar el código en el video en cualquier momento.",
"chal-preview": "Vista previa del desafío",
"cert-map-estimates": {
- "certs": "Certificación {{title}} (300 horas)",
- "coding-prep": "{{title}} (Miles de horas de desafíos)"
+ "certs": "{{title}} Certification"
},
"editor-tabs": {
"info": "Info",
@@ -296,6 +302,7 @@
"restart": "Reiniciar",
"restart-step": "Paso de reiniciar",
"console": "Consola",
+ "instructions": "Instrucciones",
"notes": "Notas",
"preview": "Vista"
},
@@ -308,15 +315,16 @@
"submit-public-url": "Cuando haya completado el proyecto, guarde todos los archivos requeridos en un repositorio público y envíe la URL a continuación.",
"complete-both-steps": "Completa los dos pasos a continuación para terminar el desafío.",
"runs-in-vm": "El proyecto se ejecuta en una máquina virtual, completa las historias de usuario descritas en ella y consigue que todas las pruebas pasen hasta el paso 1.",
- "completed": "Completed",
- "not-started": "Not started",
- "hint": "Hint",
- "test": "Test",
- "sorry-try-again": "Sorry, your code does not pass. Try again.",
- "sorry-keep-trying": "Sorry, your code does not pass. Keep trying.",
- "sorry-getting-there": "Sorry, your code does not pass. You're getting there.",
- "sorry-hang-in-there": "Sorry, your code does not pass. Hang in there.",
- "sorry-dont-giveup": "Sorry, your code does not pass. Don't give up."
+ "completed": "Completado",
+ "not-started": "Sin iniciar",
+ "hint": "Sugerencia",
+ "test": "Prueba",
+ "sorry-try-again": "Lo sentimos, tu código no pasa. Inténtalo de nuevo.",
+ "sorry-keep-trying": "Lo sentimos, tu código no pasa. Continúa intentándolo.",
+ "sorry-getting-there": "Lo sentimos, tu código no pasa. Casi lo consigues.",
+ "sorry-hang-in-there": "Lo sentimos, su código no pasa. Aguanta ahí.",
+ "sorry-dont-giveup": "Lo sentimos, su código no pasa. No te rindas.",
+ "challenges-completed": "{{completedCount}} of {{totalChallenges}} challenges completed"
},
"donate": {
"title": "Apoya a nuestra organización sin fines de lucro",
@@ -324,7 +332,6 @@
"redirecting": "Redirigiendo...",
"thanks": "Gracias por donar",
"thank-you": "Gracias por tu apoyo.",
- "thank-you-2": "Gracias por apoyar a freeCodeCamp. Actualmente tienes una donación recurrente.",
"additional": "Puede hacer una donación adicional única de cualquier monto utilizando este enlace: <0>{{url}}0>",
"help-more": "Ayúdanos a hacer más",
"error": "Algo salió mal con tu donación.",
@@ -443,7 +450,9 @@
"and": "y",
"change-theme": "Entra para cambiar el tema.",
"translation-pending": "Ayúdanos a traducir",
- "certification-project": "Proyecto de certificación"
+ "certification-project": "Proyecto de certificación",
+ "iframe-alert": "Normally this link would bring you to another website! It works. This is a link to: {{externalLink}}",
+ "document-notfound": "document not found"
},
"icons": {
"gold-cup": "Copa de Oro",
@@ -452,8 +461,10 @@
"donate": "Dona con PayPal",
"fail": "Prueba fallida",
"not-passed": "Sin aprobar",
+ "waiting": "Waiting",
"passed": "Aprobado",
- "hint": "Hint",
+ "failed": "Failed",
+ "hint": "Sugerencia",
"heart": "Corazón",
"initial": "Inicial",
"info": "Información de introducción",
@@ -474,8 +485,11 @@
"last-page": "Ir a la última página",
"primary-nav": "primario",
"breadcrumb-nav": "migas de pan",
- "submit": "Use Ctrl + Enter to submit.",
- "running-tests": "Running tests"
+ "submit": "Utiliza Ctrl + Enter para enviar.",
+ "running-tests": "Ejecutando pruebas",
+ "step": "Step",
+ "steps": "Steps",
+ "steps-for": "Steps for {{blockTitle}}"
},
"flash": {
"honest-first": "Para reclamar una certificación, primero debes aceptar nuestra política de honestidad académica.",
@@ -681,5 +695,16 @@
"delete-p3": "Necesitará crear un nuevo token para guardar el progreso futuro en las secciones de currículum que utilizan una máquina virtual.",
"no-thanks": "No gracias, me gustaría quedarme con mi token",
"yes-please": "Si por favor, deseo borrar mi token"
+ },
+ "shortcuts": {
+ "title": "Keyboard shortcuts",
+ "table-header-action": "Action",
+ "table-header-key": "Key(s)",
+ "navigation-mode": "Navigation Mode",
+ "execute-challenge": "Execute Challenge",
+ "focus-editor": "Focus Editor",
+ "focus-instructions-panel": "Focus Instructions Panel",
+ "navigate-previous": "Navigate Previous Exercise",
+ "navigate-next": "Navigate Next Exercise"
}
}
diff --git a/client/i18n/locales/german/intro.json b/client/i18n/locales/german/intro.json
new file mode 100644
index 00000000000000..4a0b4b1cd1df76
--- /dev/null
+++ b/client/i18n/locales/german/intro.json
@@ -0,0 +1,838 @@
+{
+ "responsive-web-design": {
+ "title": "Altes Responsives Webdesign",
+ "intro": [
+ "In dieser Zertifizierung für \"Responsives Webdesign\" lernst Du die Sprachen, die Entwickler verwenden, um Webseiten zu erstellen: HTML (Hypertext Markup Language) für Inhalte, und CSS (Cascading Style Sheets) für Design.",
+ "Zuerst erstellst Du eine Katzenfoto-App, um die Grundlagen von HTML und CSS zu erlernen. Später lernst Du moderne Techniken wie CSS-Variablen, indem Du einen Pinguin erstellst und bewährte Abläufe für die Barrierefreiheit beim Erstellen eines Web-Formulars nutzt.",
+ "Schließlich lernst du, wie du Webseiten erstellst, die auf unterschiedliche Bildschirmgrößen reagieren, indem du eine Twitter-Karte mit Flexbox und ein komplexes Blog-Layout mit CSS Grid erstellst."
+ ],
+ "note": "Hinweis: Einige Browser-Erweiterungen, wie z. B. Ad-Blocker und Dark-Mode-Erweiterungen, können die Tests beeinträchtigen. Wenn du Probleme hast, empfehlen wir dir, Erweiterungen, die den Inhalt oder das Layout von Seiten verändern, zu deaktivieren, während du den Kurs machst.",
+ "blocks": {
+ "basic-html-and-html5": {
+ "title": "Grundlegendes HTML und HTML5",
+ "intro": [
+ "HTML ist eine Auszeichnungssprache, die eine spezielle Syntax oder Notation verwendet, um die Struktur einer Webseite für den Browser zu beschreiben. HTML-Elemente haben normalerweise öffnende und schließende Tags, die den Inhalt umgeben und ihm Bedeutung verleihen. Zum Beispiel können verschiedene Elemente Text als Überschrift, Absatz oder Listenelement beschreiben.",
+ "In diesem Kurs wirst du eine Katzenfoto-App erstellen, um einige der häufigsten HTML-Elemente zu erlernen – das sind die Bausteine jeder Webseite."
+ ]
+ },
+ "basic-css": {
+ "title": "Die Grundlagen von CSS",
+ "intro": [
+ "CSS, oder Cascading Style Sheets, teilen dem Browser mit, wie der Text und andere Inhalte, die du in HTML schreibst, dargestellt werden sollen. Mit CSS kannst du die Farbe, die Schriftart, die Größe, die Abstände und viele andere Aspekte von HTML-Elementen steuern.",
+ "Jetzt, wo du die Struktur deiner Katzenfoto-App definiert hast, kannst du ihr mit CSS etwas Stil verleihen."
+ ]
+ },
+ "applied-visual-design": {
+ "title": "Angewandtes visuelles Design",
+ "intro": [
+ "Visuelles Design ist eine Kombination aus Typografie, Farbtheorie, Grafik, Animation, Seitenlayout und mehr, um deine individuelle Botschaft zu vermitteln.",
+ "In diesem Kurs lernst du, wie du diese verschiedenen Elemente des visuellen Designs auf deine Webseiten anwenden kannst."
+ ]
+ },
+ "applied-accessibility": {
+ "title": "Angewandte Barrierefreiheit",
+ "intro": [
+ "In der Webentwicklung bezieht sich Barrierefreiheit auf Webinhalte und eine UI (Benutzeroberfläche), die von einem breiten Publikum verstanden, navigiert und interagiert werden kann. Dies schließt Menschen mit Seh-, Hör-, Mobilitäts- oder kognitiven Behinderungen ein.",
+ "In diesem Kurs lernst du die besten Vorgehensweisen, um Webseiten zu erstellen, die für jeden zugänglich sind."
+ ]
+ },
+ "responsive-web-design-principles": {
+ "title": "Prinzipien des responsiven Webdesigns",
+ "intro": [
+ "Es gibt viele Geräte, die auf das Internet zugreifen können, und sie kommen in allen Formen und Größen vor. Responsives Webdesign ist die Praxis der Gestaltung flexibler Websites, die auf verschiedene Bildschirmgrößen, Ausrichtungen und Auflösungen reagieren können.",
+ "In diesem Kurs lernst du, wie du CSS benutzt, um deine Webseiten gut aussehen zu lassen, egal auf welchem Gerät sie betrachtet werden."
+ ]
+ },
+ "css-flexbox": {
+ "title": "CSS Flexbox",
+ "intro": [
+ "Flexbox ist eine leistungsstarke, gut unterstützte Layout-Methode, die mit der neuesten Version von CSS, CSS3, eingeführt wurde. Mit Flexbox ist es einfach, Elemente auf der Seite zu zentrieren und dynamische Benutzeroberflächen zu erstellen, die sich automatisch verkleinern und vergrößern.",
+ "In diesem Kurs lernst du die Grundlagen von Flexbox und dynamischen Layouts, indem du eine Twitter-Karte erstellst."
+ ]
+ },
+ "css-grid": {
+ "title": "CSS Grid",
+ "intro": [
+ "Das CSS Grid ist ein neuerer Standard, der es einfach macht, komplexe responsive Layouts zu erstellen. Es funktioniert, indem es ein HTML-Element in ein Raster verwandelt und du darin überall Kindelemente platzieren kannst.",
+ "In diesem Kurs lernst du die Grundlagen des CSS Grid, indem du verschiedene komplexe Layouts erstellst, darunter auch einen Blog."
+ ]
+ },
+ "responsive-web-design-projects": {
+ "title": "Responsives Web Design Projekte",
+ "intro": [
+ "Zeit, deine neu erlernten Fähigkeiten in die Tat umzusetzen. Indem du an diesen Projekten arbeitest, bekommst du die Chance, all die Fähigkeiten, Prinzipien und Konzepte anzuwenden, die du bisher gelernt hast: HTML, CSS, Visuelles Design, Barrierefreiheit und mehr.",
+ "Schließe die folgenden fünf Web-Programmierungsprojekte ab, um Deine Responsive Web Design Zertifizierung zu erhalten."
+ ]
+ }
+ }
+ },
+ "2022/responsive-web-design": {
+ "title": "(Neu) Responsives Webdesign",
+ "intro": [
+ "In dieser Zertifizierung für responsives Webdesign lernst du die Sprachen, die Entwickler/innen zum Erstellen von Webseiten verwenden: HTML (Hypertext Markup Language) für den Inhalt und CSS (Cascading Style Sheets) für das Design.",
+ "Zunächst baust du eine Katzenfoto-App, um die Grundlagen von HTML und CSS zu erlernen. Später lernst du moderne Techniken wie CSS-Variablen, indem du einen Pinguin baust, und bewährte Praktiken für Barrierefreiheit, indem du eine Quiz-Site erstellst.",
+ "Schließlich lernst du, wie du Webseiten erstellst, die auf unterschiedliche Bildschirmgrößen reagieren, indem du eine Fotogalerie mit Flexbox und ein Zeitschriftenartikel-Layout mit CSS Grid erstellst."
+ ],
+ "note": "Hinweis: Einige Browser-Erweiterungen, wie z. B. Werbeblocker und Dunkelmodus-Erweiterungen, können die Tests beeinträchtigen. Wenn du Probleme hast, empfehlen wir dir, Erweiterungen, die den Inhalt oder das Layout von Seiten verändern, während der Teilnahme am Kurs zu deaktivieren.",
+ "blocks": {
+ "build-a-tribute-page-project": {
+ "title": "Tribut-Seite",
+ "intro": [
+ "Dies ist eines der Projekte, das du zum Erwerb deines Zertifikats benötigst.",
+ "In diesem Projekt erstellst du eine Tributseite für ein Thema deiner Wahl, egal ob fiktiv oder real."
+ ]
+ },
+ "build-a-personal-portfolio-webpage-project": {
+ "title": "Persönliche Portfolio-Website",
+ "intro": [
+ "Dies ist eines der Projekte, die du für den Erhalt deines Zertifikats benötigst.",
+ "Für dieses Projekt wirst du deine eigene Portfolioseite erstellen."
+ ]
+ },
+ "build-a-product-landing-page-project": {
+ "title": "Produkt Landing Page",
+ "intro": [
+ "Dies ist eines der Projekte, das du zum Erwerb deiner Zertifizierung benötigst.",
+ "In diesem Projekt wirst du eine Webseite erstellen, um ein Produkt deiner Wahl zu vermarkten."
+ ]
+ },
+ "build-a-survey-form-project": {
+ "title": "Umfrageformular",
+ "intro": [
+ "Dies ist eines der Projekte, die du zum Erwerb deines Zertifikats benötigst.",
+ "In diesem Projekt wirst du ein Umfrageformular erstellen, um Daten von deinen Nutzern zu sammeln."
+ ]
+ },
+ "build-a-technical-documentation-page-project": {
+ "title": "Technische Dokumentationsseite",
+ "intro": [
+ "Dies ist eines der Projekte, die du zum Erwerb deines Zertifikats benötigst.",
+ "In diesem Projekt wirst du eine technische Dokumentationsseite erstellen, die als Anleitung oder Referenz für ein Thema dient."
+ ]
+ },
+ "learn-html-by-building-a-cat-photo-app": {
+ "title": "Lerne HTML, indem du eine Katzenfoto-App baust",
+ "intro": [
+ "HTML-Tags geben einer Webseite ihre Struktur. Du kannst HTML-Tags verwenden, um Fotos, Schaltflächen und andere Elemente in deine Webseite einzufügen.",
+ "In diesem Kurs lernst du die gängigsten HTML-Tags kennen, indem du deine eigene Katzenfoto-App erstellst."
+ ]
+ },
+ "learn-basic-css-by-building-a-cafe-menu": {
+ "title": "Lerne CSS-Grundlagen, indem du ein Cafe-Menü erstellst",
+ "intro": [
+ "CSS teilt dem Browser mit, wie deine Webseite angezeigt werden soll. Du kannst mit CSS die Farbe, Schriftart, Größe und andere Aspekte von HTML-Elementen festlegen.",
+ "In diesem Kurs lernst du CSS, indem du eine Menüseite für eine Café-Webseite entwirfst."
+ ]
+ },
+ "learn-the-css-box-model-by-building-a-rothko-painting": {
+ "title": "Lerne das CSS-Box-Modell durch die Erstellung eines Rothko-Gemäldes",
+ "intro": [
+ "Jedes HTML-Element ist eine eigene Box - mit eigenem Abstand und einem Rahmen. Dies wird das Box-Modell genannt.",
+ "In diesem Kurs verwendest du CSS und das Box-Modell, um deine eigenen rechteckigen Kunstwerke im Rothko-Stil zu erstellen."
+ ]
+ },
+ "learn-css-variables-by-building-a-city-skyline": {
+ "title": "Lerne CSS-Variablen, indem du eine Stadtsilhouette baust",
+ "intro": [
+ "CSS-Variablen helfen dir, deine Stile zu organisieren und sie wiederzuverwenden.",
+ "In diesem Kurs wirst du eine Stadtsilhouette erstellen. Du lernst, wie du CSS-Variablen so konfigurierst, dass du sie jederzeit wiederverwenden kannst."
+ ]
+ },
+ "learn-html-forms-by-building-a-registration-form": {
+ "title": "Erlerne HTML-Formulare, indem du ein Registrierungsformular erstellst",
+ "intro": [
+ "Du kannst HTML-Formulare verwenden, um Informationen von Personen zu sammeln, die deine Webseite besuchen.",
+ "In diesem Kurs lernst du HTML-Formulare kennen, indem du eine Anmeldeseite erstellst. Du lernst, wie du steuern kannst, welche Daten in dein Formular eingegeben werden können, und wie du deine Seite mit neuen CSS-Tools gestalten kannst."
+ ]
+ },
+ "learn-accessibility-by-building-a-quiz": {
+ "title": "Erlerne Barrierefreiheit, indem du ein Quiz erstellst",
+ "intro": [
+ "Barrierefreiheit bedeutet, dass deine Webseite für alle Menschen leicht zu bedienen ist - auch für Menschen mit Beeinträchtigungen.",
+ "In diesem Kurs erstellst du eine Quiz-Webseite. Du lernst Hilfsmittel für die Barrierefreiheit wie Tastenkombinationen, ARIA-Attribute und bewährte Praktiken für das Design kennen."
+ ]
+ },
+ "learn-intermediate-css-by-building-a-picasso-painting": {
+ "title": "Erlerne CSS für Fortgeschrittene durch die Erstellung eines Picasso-Gemäldes",
+ "intro": [
+ "In diesem Kurs lernst du einige fortgeschrittene CSS-Techniken kennen, indem du deine eigene Webseite mit Picasso-Gemälden programmierst. Du lernst etwas über SVG-Symbole, CSS-Positionierung und wiederholst andere CSS-Kenntnisse, die du bereits gelernt hast."
+ ]
+ },
+ "learn-responsive-web-design-by-building-a-piano": {
+ "title": "Erlerne responsives Webdesign, indem du ein Klavier erstellst",
+ "intro": [
+ "Responsives Design beschreibt, wie deine Webseite auf unterschiedlich großen Bildschirmen aussehen soll.",
+ "In diesem Kurs wirst du CSS und responsives Design verwenden, um ein Klavier zu programmieren. Außerdem erfährst du mehr über Media-Queries und Pseudoselektoren."
+ ]
+ },
+ "learn-css-flexbox-by-building-a-photo-gallery": {
+ "title": "Erlerne CSS Flexbox durch die Erstellung einer Fotogalerie",
+ "intro": [
+ "Flexbox hilft dir, deine Webseite so zu gestalten, dass sie auf jeder Bildschirmgröße gut aussieht.",
+ "In diesem Kurs verwendest du Flexbox, um eine responsive Fotogalerie-Webseite zu erstellen."
+ ]
+ },
+ "learn-css-grid-by-building-a-magazine": {
+ "title": "Erlerne das CSS-Raster (Grid) durch die Erstellung eines Magazins",
+ "intro": [
+ "Mit dem CSS Raster hast du die Kontrolle über die Zeilen und Spalten deines Webseitendesigns.",
+ "In diesem Kurs wirst du einen Magazinartikel erstellen. Du lernst, wie du CSS Raster verwendest, einschließlich Konzepten wie Rasterzeilen und Rasterspalten."
+ ]
+ },
+ "learn-typography-by-building-a-nutrition-label": {
+ "title": "Erlerne Typografie, indem du ein Ernährungsetikett erstellst",
+ "intro": [
+ "Typografie ist die Kunst, deinen Text so zu gestalten, dass er gut lesbar ist und seinem Zweck gerecht wird.",
+ "In diesem Kurs entwickelst du mithilfe von Typografie eine Webseite mit Nährwertangaben. Du lernst, wie du Text formatieren, die Zeilenhöhe anpassen und deinen Text mit CSS positionieren kannst."
+ ]
+ },
+ "learn-css-transforms-by-building-a-penguin": {
+ "title": "Erlerne CSS-Transformationen durch die Erstellung eines Pinguins",
+ "intro": [
+ "Du kannst HTML-Elemente transformieren, um ansprechende Designs zu erstellen, die das Auge des Lesers anziehen. Mit Transformationen kannst du Elemente drehen, skalieren und vieles mehr.",
+ "In diesem Kurs wirst du einen Pinguin erstellen. Du verwendest CSS-Transformationen, um die Teile deines Pinguins zu positionieren und in der Größe zu verändern, einen Hintergrund zu erstellen und dein Werk zu animieren."
+ ]
+ },
+ "learn-css-animation-by-building-a-ferris-wheel": {
+ "title": "Erlerne CSS-Animationen durch die Erstellung eines Riesenrads",
+ "intro": [
+ "Du kannst CSS-Animationen verwenden, um die Aufmerksamkeit auf bestimmte Abschnitte deiner Webseite zu lenken und sie ansprechender zu gestalten.",
+ "In diesem Kurs wirst du ein Riesenrad erstellen. Du lernst, wie du CSS verwendest, um Elemente zu animieren, sie zu transformieren und ihre Geschwindigkeit anzupassen."
+ ]
+ },
+ "learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet": {
+ "title": "Erfahre mehr über CSS-Pseudoselektoren, indem du eine Bilanz erstellst",
+ "intro": [
+ "Du kannst CSS-Pseudoselektoren verwenden, um bestimmte HTML-Elemente zu ändern.",
+ "In diesem Kurs erstellst du eine Bilanz mit Pseudoselektoren. Du lernst, wie du den Stil eines Elements änderst, wenn du mit der Maus darüber fährst, und wie du andere Ereignisse auf deiner Webseite auslösen kannst."
+ ]
+ },
+ "learn-css-colors-by-building-a-set-of-colored-markers": {
+ "title": "Erlerne CSS-Farben, indem du einen Satz farbiger Marker baust",
+ "intro": [
+ "Die Wahl der richtigen Farben für deine Webseite kann die Ästhetik für deine LeserInnen erheblich verbessern.",
+ "In diesem Kurs erstellst du ein Set aus farbigen Markern. Du lernst verschiedene Möglichkeiten kennen, Farbwerte einzustellen und Farben miteinander zu kombinieren."
+ ]
+ }
+ }
+ },
+ "javascript-algorithms-and-data-structures": {
+ "title": "JavaScript Algorithmen und Datenstrukturen",
+ "intro": [
+ "Während HTML und CSS den Inhalt und das Styling einer Seite festlegen, wird JavaScript verwendet, um sie interaktiv zu gestalten. In der Zertifizierung \"JavaScript Algorithmen und Datenstrukturen\" lernst du die Grundlagen von JavaScript inklusive Variablen, Arrays, Objekten, Schleifen und Funktionen kennen.",
+ "Sobald du die Grundlagen beherrschst, wendest du dieses Wissen an, indem du Algorithmen erstellst, um Strings zu manipulieren, Zahlen zu faktorisieren und sogar die Umlaufbahn der Internationalen Raumstation zu berechnen.",
+ "Auf dem Weg dorthin wirst du auch zwei wichtige Programmierstile oder Paradigmen kennenlernen: Objektorientierte Programmierung (OOP) und funktionale Programmierung (FP)."
+ ],
+ "note": "Hinweis: Einige Browser-Erweiterungen, wie z. B. Ad-Blocker und Script-Blocker, können die Tests beeinträchtigen. Wenn du Probleme hast, empfehlen wir, Erweiterungen zu deaktivieren, die den Inhalt von Seiten verändern oder blockieren, während du den Kurs machst.",
+ "blocks": {
+ "basic-javascript": {
+ "title": "Die Grundlangen von JavaScript",
+ "intro": [
+ "JavaScript ist eine Skriptsprache, mit der du Webseiten interaktiv gestalten kannst. Sie ist eine der Kerntechnologien des Webs, zusammen mit HTML und CSS, und wird von allen modernen Browsern unterstützt.",
+ "In diesem Kurs lernst du fundamentale Programmierkonzepte in JavaScript. Du beginnst mit grundlegenden Datenstrukturen wie Zahlen und Strings. Dann lernst du, mit Arrays, Objekten, Funktionen, Schleifen, if/else-Anweisungen und mehr zu arbeiten."
+ ]
+ },
+ "es6": {
+ "title": "ES6",
+ "intro": [
+ "ECMAScript, oder ES, ist eine standardisierte Version von JavaScript. Weil alle großen Browser-Hersteller dieser Spezifikation folgen, sind die Begriffe ECMAScript und JavaScript austauschbar.",
+ "Das meiste JavaScript, das du bis zu diesem Punkt gelernt hast, war in ES5 (ECMAScript 5), das 2009 fertiggestellt wurde. Du kannst zwar immer noch Programme in ES5 schreiben, aber JavaScript wird ständig weiterentwickelt, und jedes Jahr werden neue Funktionen veröffentlicht.",
+ "ES6, das 2015 veröffentlicht wurde, hat der Sprache viele leistungsstarke neue Funktionen hinzugefügt. In diesem Kurs lernst du diese neuen Funktionen kennen, darunter Pfeilfunktionen, Destrukturierung, Klassen, Promises und Module."
+ ]
+ },
+ "regular-expressions": {
+ "title": "Reguläre Ausdrücke",
+ "intro": [
+ "Reguläre Ausdrücke, oft abgekürzt als \"regex\" oder \"regexp\", sind Pattern (Muster), die Programmierern helfen, Text zu finden, zu suchen und zu ersetzen. Reguläre Ausdrücke sind sehr mächtig, können aber schwer zu lesen sein, weil sie Sonderzeichen verwenden, um komplexere, flexible Übereinstimmungen zu machen.",
+ "In diesem Kurs lernst du, wie du Sonderzeichen, Capture-Gruppen, positive und negative Lookaheads und andere Techniken verwenden kannst, um jeden beliebigen Text zu finden."
+ ]
+ },
+ "debugging": {
+ "title": "Debugging",
+ "intro": [
+ "Debugging ist der Prozess, bei dem du deinen Code durchgehst, Probleme findest und sie behebst.",
+ "Probleme im Code treten im Allgemeinen in drei Formen auf: Syntaxfehler, die verhindern, dass dein Programm läuft, Laufzeitfehler, bei denen dein Code ein unerwartetes Verhalten zeigt, oder logische Fehler, bei denen dein Code nicht das tut, was du beabsichtigt hast.",
+ "In diesem Kurs lernst du, wie du die JavaScript-Konsole nutzen kannst, um Programme zu debuggen und häufige Probleme zu vermeiden, bevor sie auftreten."
+ ]
+ },
+ "basic-data-structures": {
+ "title": "Grundlegende Datenstrukturen",
+ "intro": [
+ "Daten können auf viele Arten gespeichert und abgerufen werden. Du kennst bereits einige gängige JavaScript Datenstrukturen - Arrays und Objekte.",
+ "In diesem Kurs über grundlegende Datenstrukturen erfährst du mehr über die Unterschiede zwischen Arrays und Objekten und welche du in verschiedenen Situationen verwenden kannst. Außerdem lernst du, wie du hilfreiche JS-Methoden wie splice()
und Object.keys()
verwenden kannst, um auf Daten zuzugreifen und sie zu manipulieren."
+ ]
+ },
+ "basic-algorithm-scripting": {
+ "title": "Grundlagen des Algorithmus Scripting",
+ "intro": [
+ "Ein Algorithmus ist eine Reihe von Schritt-für-Schritt-Anweisungen, die beschreiben, wie etwas zu tun ist.",
+ "Um einen effektiven Algorithmus zu schreiben, hilft es, ein Problem in kleinere Teile zu zerlegen und sorgfältig darüber nachzudenken, wie man jeden Teil mit Code löst.",
+ "In diesem Kurs lernst du die Grundlagen des algorithmischen Denkens, indem du Algorithmen schreibst, die alles von der Umwandlung von Temperaturen bis hin zum Umgang mit komplexen 2D-Arrays tun."
+ ]
+ },
+ "object-oriented-programming": {
+ "title": "Objektorientierte Programmierung",
+ "intro": [
+ "OOP, oder objektorientierte Programmierung, ist einer der wichtigsten Ansätze für den Softwareentwicklungsprozess. In OOP organisieren Objekte und Klassen den Code, um Dinge zu beschreiben und was sie tun können.",
+ "In diesem Kurs lernst du die Grundprinzipien der OOP in JavaScript kennen, einschließlich des this
-Schlüsselworts, Prototypenketten, Konstruktoren und Vererbung."
+ ]
+ },
+ "functional-programming": {
+ "title": "Funktionale Programmierung",
+ "intro": [
+ "Funktionale Programmierung ist ein weiterer beliebter Ansatz für die Softwareentwicklung. Bei der funktionalen Programmierung wird der Code in kleinere, grundlegende Funktionen unterteilt, die zum Aufbau komplexer Programme kombiniert werden können.",
+ "In diesem Kurs lernst du die Kernkonzepte der Funktionalen Programmierung, einschließlich reiner Funktionen, wie man Mutationen vermeidet und wie man saubereren Code mit Methoden wie .map()
und .filter()
schreibt."
+ ]
+ },
+ "intermediate-algorithm-scripting": {
+ "title": "Fortgeschrittenes Algorithmus Scripting",
+ "intro": [
+ "Jetzt, wo du die Grundlagen des algorithmischen Denkens, zusammen mit OOP und funktionaler Programmierung kennst, kannst du deine Fähigkeiten mit den fortgeschrittenen Algorithmus-Scripting-Herausforderungen testen."
+ ]
+ },
+ "javascript-algorithms-and-data-structures-projects": {
+ "title": "JavaScript Algorithmen- und Datenstrukturprojekte",
+ "intro": [
+ "Geschafft! Zeit, deine neuen JavaScript-Fähigkeiten zum Einsatz zu bringen. Diese Projekte ähneln den Herausforderungen des Algorithmus-Skriptens, die du zuvor durchgeführt hast – nur viel schwieriger.",
+ "Schließe diese 5 JavaScript Projekte ab, um die JavaScript Algorithmen und Datenstrukturen Zertifizierung zu erhalten."
+ ]
+ }
+ }
+ },
+ "2022/javascript-algorithms-and-data-structures": {
+ "title": "JavaScript-Algorithmen und Datenstrukturen (Beta)",
+ "intro": [
+ "Platzhalter",
+ "Platzhalter"
+ ],
+ "note": "",
+ "blocks": {
+ "build-a-caesars-cipher-project": {
+ "title": "Erstelle ein Caesar-Verschlüsselung Projekt",
+ "intro": [
+ "",
+ ""
+ ]
+ },
+ "build-a-cash-register-project": {
+ "title": "Erstelle ein Registrierkassenprojekt",
+ "intro": [
+ "",
+ ""
+ ]
+ },
+ "build-a-palindrome-checker-project": {
+ "title": "Erstelle ein Palindromprüfer Projekt",
+ "intro": [
+ "",
+ ""
+ ]
+ },
+ "build-a-roman-numeral-converter-project": {
+ "title": "Erstelle ein Projekt zur Umwandlung römischer Ziffern",
+ "intro": [
+ "",
+ ""
+ ]
+ },
+ "build-a-telephone-number-validator-project": {
+ "title": "Erstelle ein Telefonnummernvalidierungsprojekt",
+ "intro": [
+ "",
+ ""
+ ]
+ },
+ "learn-basic-javascript-by-building-a-role-playing-game": {
+ "title": "Lerne die Grundlagen von JavaScript durch die Entwicklung eines Rollenspiels",
+ "intro": [
+ "",
+ ""
+ ]
+ },
+ "learn-form-validation-by-building-a-calorie-counter": {
+ "title": "Lerne die Formularvalidierung anhand eines Kalorienzählers",
+ "intro": [
+ "",
+ ""
+ ]
+ },
+ "learn-functional-programming-by-building-a-spreadsheet": {
+ "title": "Lerne die funktionale Programmierung durch das Erstellen einer Tabellenkalkulation",
+ "intro": [
+ "",
+ ""
+ ]
+ }
+ }
+ },
+ "front-end-development-libraries": {
+ "title": "Front-End-Entwicklungsbibliotheken",
+ "intro": [
+ "Jetzt, wo du mit HTML, CSS und JavaScript vertraut bist, kannst du deine Fähigkeiten verbessern, indem du einige der beliebtesten Front-End-Bibliotheken der Branche lernst.",
+ "In der Zertifizierung für Front-End-Entwicklungsbibliotheken lernst du, wie du deine Seite mit Bootstrap schnell stylen kannst. Du lernst auch, wie du Logik zu deinen CSS-Styles hinzufügst und sie mit Sass erweiterst.",
+ "Später baust du einen Warenkorb und andere Anwendungen, um zu lernen, wie du mit React und Redux leistungsstarke Single Page Applications (SPAs) erstellen kannst."
+ ],
+ "note": "",
+ "blocks": {
+ "bootstrap": {
+ "title": "Bootstrap",
+ "intro": [
+ "Bootstrap ist ein Front-End-Framework, das für das Design von responsiven Webseiten und Anwendungen verwendet wird. Es verfolgt einen Mobile-First-Ansatz für die Webentwicklung und beinhaltet vorgefertigte CSS-Stile und -Klassen sowie einige JavaScript-Funktionen.",
+ "In diesem Kurs lernst du, wie du mit Bootstrap responsive Websites erstellst und die enthaltenen Klassen nutzt, um Buttons, Bilder, Formulare, Navigation und andere gängige Elemente zu gestalten."
+ ]
+ },
+ "jquery": {
+ "title": "jQuery",
+ "intro": [
+ "jQuery ist eine der am meisten genutzten JavaScript-Bibliotheken der Welt.",
+ "Im Jahr 2006, als es veröffentlicht wurde, behandelten alle großen Browser JavaScript etwas anders. jQuery vereinfachte den Prozess des Schreibens von clientseitigem JavaScript und stellte außerdem sicher, dass dein Code in allen Browsern auf die gleiche Weise funktioniert.",
+ "In diesem Kurs lernst du, wie du jQuery verwenden kannst, um verschiedene Elemente auf der Seite auszuwählen, zu entfernen, zu klonen und zu verändern."
+ ]
+ },
+ "sass": {
+ "title": "SASS",
+ "intro": [
+ "Sass, oder \"Syntactically Awesome StyleSheets\", ist eine Spracherweiterung von CSS. Es fügt Funktionen hinzu, die im Basis-CSS nicht verfügbar sind, die es dir erleichtern, die Stylesheets für deine Projekte zu vereinfachen und zu pflegen.",
+ "In diesem Sass Kurs lernst du, wie du Daten in Variablen speicherst, CSS verschachtelst, wiederverwendbare Styles mit Mixins erstellst, Logik und Schleifen zu deinen Styles hinzufügst und vieles mehr."
+ ]
+ },
+ "react": {
+ "title": "React",
+ "intro": [
+ "React ist eine beliebte JavaScript-Bibliothek, um wiederverwendbare, komponentengesteuerte Benutzeroberflächen für Webseiten oder Anwendungen zu erstellen.",
+ "React kombiniert HTML mit JavaScript-Funktionalität in einer eigenen Auszeichnungssprache namens JSX. React macht es auch einfach, den Datenfluss in der gesamten Anwendung zu verwalten.",
+ "In diesem Kurs lernst du, wie du verschiedene React-Komponenten erstellst, Daten in Form von State Props verwaltest, verschiedene Lifecycle-Methoden wie componentDidMount
verwendest und vieles mehr."
+ ]
+ },
+ "redux": {
+ "title": "Redux",
+ "intro": [
+ "Wenn Anwendungen größer und umfangreicher werden, wird die Verwaltung von gemeinsam genutzten Daten viel schwieriger. Redux wird als \" vorhersagbarer Zustandscontainer für JavaScript-Apps\" definiert, der dabei hilft, dass deine Apps vorhersagbar funktionieren und einfacher zu testen sind.",
+ "Obwohl du Redux mit jeder Ansichtsbibliothek verwenden kannst, stellen wir Redux hier vor, bevor wir es in den nächsten Kursen mit React kombinieren.",
+ "In diesem Kurs lernst du die Grundlagen von Redux stores, actions, reducers und middleware, um Daten in deiner Anwendung zu verwalten."
+ ]
+ },
+ "react-and-redux": {
+ "title": "React und Redux",
+ "intro": [
+ "React und Redux werden oft zusammen erwähnt, und das aus gutem Grund. Der Entwickler, der Redux geschaffen hat, war ein React-Entwickler, der es einfacher machen wollte, Daten über verschiedene Komponenten hinweg zu teilen.",
+ "Jetzt, wo du weißt, wie du den Fluss von geteilten Daten mit Redux verwalten kannst, ist es an der Zeit, dieses Wissen mit React zu kombinieren. In den React- und Redux-Kursen baust du eine React-Komponente und lernst, wie du den Zustand lokal auf der Komponentenebene und in der gesamten Anwendung mit Redux verwalten kannst."
+ ]
+ },
+ "front-end-development-libraries-projects": {
+ "title": "Projekte für Front-End-Entwicklung-Bibliotheken",
+ "intro": [
+ "Es ist an der Zeit, deine Fähigkeiten im Bereich der Front-End-Entwicklungs-Bibliotheken auf die Probe zu stellen. Benutze Bootstrap, jQuery, Sass, React und Redux, um 5 Projekte zu bauen, die alles testen, was du bis zu diesem Punkt gelernt hast.",
+ "Schließe alle 5 Projekte ab und du erhältst die Zertifizierung für Front-End-Entwicklungs-Bibliotheken."
+ ]
+ }
+ }
+ },
+ "data-visualization": {
+ "title": "Datenvisualisierung",
+ "intro": [
+ "Daten sind überall um uns herum, aber ohne Form und Kontext bedeuten sie nicht viel.",
+ "In der Datenvisualisierung-Zertifizierung erstellst du Diagramme, Grafiken und Karten, um verschiedene Arten von Daten mit der D3.js Bibliothek zu präsentieren.",
+ "Du lernst auch etwas über JSON (JavaScript Object Notation) und wie man mit Daten online über eine API (Application Programming Interface) arbeitet."
+ ],
+ "note": "",
+ "blocks": {
+ "data-visualization-with-d3": {
+ "title": "Datenvisualisierung mit D3",
+ "intro": [
+ "D3, oder D3.js, steht für Data Driven Documents. Es ist eine JavaScript Bibliothek, um dynamische und interaktive Datenvisualisierungen im Browser zu erstellen.",
+ "D3 ist so aufgebaut, dass es mit gängigen Webstandards arbeitet - nämlich HTML, CSS und Scalable Vector Graphics (SVG).",
+ "D3 unterstützt viele verschiedene Arten von Eingangsdatenformaten. Mit den leistungsstarken eingebauten Methoden kannst du diese Daten dann in verschiedene Diagramme, Graphen und Karten umwandeln.",
+ "In den Kursen zur Datenvisualisierung mit D3 lernst du, wie du mit Daten arbeitest, um verschiedene Diagramme, Graphen, Hover-Elemente und andere Zutaten zu erstellen, um dynamische und attraktive Datenvisualisierungen zu erstellen."
+ ]
+ },
+ "json-apis-and-ajax": {
+ "title": "JSON APIs und AJAX",
+ "intro": [
+ "Ähnlich wie Benutzeroberflächen Menschen bei der Verwendung von Programmen helfen, helfen APIs (Application Programming Interfaces) Programmen bei der Interaktion mit anderen Programmen. APIs sind Werkzeuge, die Computer verwenden, um miteinander zu kommunizieren, unter anderem um Daten zu senden und zu empfangen.",
+ "Programmierer verwenden häufig AJAX (Asynchronous JavaScript and XML), wenn sie mit APIs arbeiten. AJAX bezieht sich auf eine Gruppe von Technologien, die asynchrone Anfragen an einen Server stellen, um Daten zu übertragen, und dann alle zurückgegebenen Daten in die Seite laden. Und die Daten, die zwischen dem Browser und dem Server übertragen werden, liegen oft in einem Format namens JSON (JavaScript Object Notation) vor.",
+ "In diesem Kurs lernst du die Grundlagen über die Arbeit mit APIs und verschiedenen AJAX Technologien im Browser."
+ ]
+ },
+ "data-visualization-projects": {
+ "title": "Datenvisualisierungsprojekte",
+ "intro": [
+ "Jetzt, wo du gelernt hast, wie man mit D3, APIs und AJAX-Technologien arbeitet, kannst du deine Fähigkeiten mit diesen 5 Datenvisualisierungsprojekten auf die Probe stellen.",
+ "In diesen Projekten musst du Daten abrufen und einen Datensatz parsen und dann D3 verwenden, um verschiedene Datenvisualisierungen zu erstellen. Beende sie alle, um deine Datenvisualisierungs-Zertifizierung zu erhalten."
+ ]
+ },
+ "d3-dashboard": {
+ "title": "D3 Dashboard",
+ "intro": [
+ "",
+ ""
+ ]
+ }
+ }
+ },
+ "relational-database": {
+ "title": "Relationale Datenbanken (Beta)",
+ "intro": [
+ "In diesen Kursen verwendest du echte Entwickler-Tools und Software wie VS Code, PostgreSQL und die Linux/Unix-Kommandozeile, um interaktive Tutorials zu absolvieren und Projekte zu erstellen.",
+ "Diese Kurse beginnen mit den grundlegenden Bash-Befehlen. Über das Terminal lernst du alles von der Navigation und dem Umgang mit dem Dateisystem über das Skripting in der Bash bis hin zur fortgeschrittenen Nutzung.",
+ "Als Nächstes lernst du, wie du eine relationale Datenbank mit PostgreSQL, einem Datenbankmanagementsystem, und SQL, der Sprache dieser Datenbanken, erstellst und verwendest.",
+ "Schließlich lernst du Git kennen, das Versionskontrollsystem, ein unverzichtbares Werkzeug für jeden Entwickler."
+ ],
+ "blocks": {
+ "build-a-celestial-bodies-database-project": {
+ "title": "Himmelskörperdatenbank",
+ "intro": [
+ "Dies ist eines der Projekte, das du zum Erwerb deines Zertifikats benötigst.",
+ "In diesem Projekt wirst du eine Datenbank für Himmelskörper mit PostgreSQL erstellen."
+ ]
+ },
+ "build-a-number-guessing-game-project": {
+ "title": "Zahlenratespiel",
+ "intro": [
+ "Dies ist eines der Projekte, das du zum Erwerb deines Zertifikats benötigst.",
+ "In diesem Projekt verwendest du Bash-Skripte, PostgreSQL und Git, um ein Zahlenratespiel zu erstellen, das im Terminal läuft und Benutzerinformationen speichert."
+ ]
+ },
+ "build-a-periodic-table-database-project": {
+ "title": "Periodensystemdatenbank",
+ "intro": [
+ "Dies ist eines der Projekte, das du zum Erwerb deines Zertifikats benötigst.",
+ "In diesem Projekt erstellst du mit Bash ein Skript, das Informationen über chemische Elemente aus einer Datenbank des Periodensystems abruft."
+ ]
+ },
+ "build-a-salon-appointment-scheduler-project": {
+ "title": "Salon-Terminplaner",
+ "intro": [
+ "Dies ist eines der Projekte, das du zum Erwerb deines Zertifikats benötigst.",
+ "In diesem Projekt erstellst du ein interaktives Bash-Programm, das PostgreSQL nutzt, um die Kunden und Termine deines Salons zu verwalten."
+ ]
+ },
+ "build-a-world-cup-database-project": {
+ "title": "WM-Datenbank",
+ "intro": [
+ "Dies ist eines der Projekte, das du zum Erwerb deines Zertifikats benötigst.",
+ "In diesem Projekt erstellst du ein Bash-Skript, das Informationen von WM-Spielen in PostgreSQL übernimmt und dann die Datenbank nach nützlichen Statistiken abfragt."
+ ]
+ },
+ "learn-advanced-bash-by-building-a-kitty-ipsum-translator": {
+ "title": "Lerne Bash für Fortgeschrittene, indem du einen Kitty Ipsum Übersetzer erstellst",
+ "intro": [
+ "Hinter den Bash-Befehlen steckt mehr, als du vielleicht denkst.",
+ "In diesem Kurs mit 140 Lektionen lernst du einige komplexere Befehle und die Details, wie die Befehle funktionieren."
+ ]
+ },
+ "learn-bash-and-sql-by-building-a-bike-rental-shop": {
+ "title": "Lerne Bash und SQL durch den Aufbau eines Fahrradverleihs",
+ "intro": [
+ "In diesem Kurs mit 210 Lektionen erstellst du ein interaktives Bash-Programm, das mit Hilfe von PostgreSQL Mietinformationen für deinen Fahrradverleih speichert."
+ ]
+ },
+ "learn-bash-by-building-a-boilerplate": {
+ "title": "Bash lernen durch das Erstellen eines Textbausteines (Boilerplate)",
+ "intro": [
+ "Mit dem Terminal kannst du Textbefehle an deinen Computer senden, mit denen du das Dateisystem manipulieren, Programme ausführen, Aufgaben automatisieren und vieles mehr kannst.",
+ "In diesem Kurs mit 170 Lektionen lernst du Terminal-Befehle, indem du eine Website-Boilerplate nur über die Kommandozeile erstellst."
+ ]
+ },
+ "learn-bash-scripting-by-building-five-programs": {
+ "title": "Lerne Bash-Scripting, indem du fünf Programme erstellst",
+ "intro": [
+ "Bash-Skripte kombinieren Terminalbefehle und Logik zu Programmen, die Aufgaben ausführen oder automatisieren können, und vieles mehr.",
+ "In diesem Kurs mit 220 Lektionen lernst du weitere Terminalbefehle kennen und wie du sie in Bash-Skripten verwenden kannst, indem du fünf kleine Programme erstellst."
+ ]
+ },
+ "learn-git-by-building-an-sql-reference-object": {
+ "title": "Git lernen durch Erstellen eines SQL-Referenzobjekts",
+ "intro": [
+ "Git ist ein Versionskontrollsystem, das alle Änderungen, die du an deiner Codebasis vornimmst, aufzeichnet.",
+ "In diesem Kurs mit 240 Lektionen lernst du, wie Git den Überblick über deinen Code behält, indem es ein Objekt mit häufig verwendeten SQL-Befehlen erstellt."
+ ]
+ },
+ "learn-nano-by-building-a-castle": {
+ "title": "Nano lernen durch den Bau einer Burg",
+ "intro": [
+ "Nano ist ein Programm, mit dem du Dateien direkt im Terminal bearbeiten kannst.",
+ "In diesem Kurs mit 40 Lektionen lernst du, wie du Dateien im Terminal mit Nano bearbeitest, während du eine Burg baust."
+ ]
+ },
+ "learn-relational-databases-by-building-a-mario-database": {
+ "title": "Relationale Datenbanken lernen, indem du eine Mario-Datenbank erstellst",
+ "intro": [
+ "Eine relationale Datenbank organisiert die Daten in Tabellen, die durch Beziehungen miteinander verbunden sind.",
+ "In diesem Kurs mit 165 Lektionen lernst du die Grundlagen einer relationalen Datenbank kennen, indem du eine PostgreSQL-Datenbank mit Videospielcharakteren erstellst."
+ ]
+ },
+ "learn-sql-by-building-a-student-database-part-1": {
+ "title": "Lerne SQL, indem du eine Schülerdatenbank aufbaust: Teil 1",
+ "intro": [
+ "SQL, oder Structured Query Language, ist die Sprache für die Kommunikation mit einer relationalen Datenbank.",
+ "In diesem Kurs mit 140 Lektionen erstellst du ein Bash-Skript, das SQL verwendet, um Informationen über deine Informatikstudenten in PostgreSQL einzugeben."
+ ]
+ },
+ "learn-sql-by-building-a-student-database-part-2": {
+ "title": "Lerne SQL, indem du eine Schülerdatenbank aufbaust: Teil 2",
+ "intro": [
+ "SQL-Join-Befehle werden verwendet, um Informationen aus mehreren Tabellen in einer relationalen Datenbank zu kombinieren",
+ "In diesem Kurs mit 140 Lektionen wirst du deine Schülerdatenbank vervollständigen und gleichzeitig tiefer in die SQL-Befehle eintauchen."
+ ]
+ }
+ }
+ },
+ "back-end-development-and-apis": {
+ "title": "Back-End Entwicklung und APIs",
+ "intro": [
+ "Bis zu diesem Punkt hast du JavaScript nur im Front-End verwendet, um einer Seite Interaktivität hinzuzufügen, Aufgaben mit Algorithmen zu lösen oder eine SPA zu bauen. Aber JavaScript kann auch im Back-End, also auf dem Server, verwendet werden, um ganze Webanwendungen zu erstellen.",
+ "Heutzutage ist eine der beliebtesten Arten, Anwendungen zu erstellen, Microservices. Das sind kleine, modulare Anwendungen, die zusammenarbeiten und ein größeres Ganzes bilden.",
+ "In der Zertifizierung für Back-End-Entwicklung und APIs lernst du, wie du Back-End-Apps mit Node.js und npm (Node Package Manager) schreibst. Du wirst auch Webanwendungen mit dem Express-Framework erstellen und einen Personensuche-Microservice mit MongoDB und der Mongoose-Bibliothek bauen."
+ ],
+ "note": "",
+ "blocks": {
+ "managing-packages-with-npm": {
+ "title": "Pakete mit NPM verwalten",
+ "intro": [
+ "npm (Node Package Manager) ist ein Kommandozeilen-Tool zum Installieren, Erstellen und Teilen von Paketen mit JavaScript-Code, der für Node.js geschrieben wurde. Es gibt viele Open-Source-Pakete, die auf npm verfügbar sind. Bevor du also ein Projekt beginnst, solltest du dir etwas Zeit nehmen, um dich zu informieren, damit du nicht am Ende das Rad neu erfinden musst, wenn du z.B. mit Daten arbeitest oder Daten von einer API abrufst.",
+ "In diesem Kurs lernst du die Grundlagen der Verwendung von npm. Du erfährst, wie du mit der package.json
arbeitest und wie du deine installierten Abhängigkeiten (Dependencies) verwalten kannst."
+ ]
+ },
+ "basic-node-and-express": {
+ "title": "Basis Node und Express",
+ "intro": [
+ "Node.js ist eine JavaScript-Laufzeitumgebung, die es Entwicklern ermöglicht, Back-End-Programme (serverseitige Programme) in JavaScript zu schreiben. Node.js kommt mit einer Handvoll eingebauter Module - kleine, unabhängige Programme - die dabei helfen. Einige der Kernmodule sind HTTP, das wie ein Server agiert, und Dateisystem, ein Modul zum Lesen und Ändern von Dateien.",
+ "In den letzten Kursen hast du gelernt, Pakete von npm zu installieren und zu verwalten, die Sammlungen von kleineren Modulen sind. Diese Pakete können dir helfen, größere, komplexere Anwendungen zu bauen.",
+ "Express ist ein leichtgewichtiges Framework für Webanwendungen und eines der beliebtesten Pakete auf npm. Mit Express ist es viel einfacher, einen Server zu erstellen und das Routing für deine Anwendung zu verwalten. Damit wird z. B. sichergestellt, dass Besucher auf die richtige Seite geleitet werden, wenn sie einen bestimmten Endpunkt wie
/blogbesuchen.", + "In diesem Kurs lernst du die Grundlagen von Node und Express. Du erfährst, wie du einen Server erstellst, verschiedene Dateien bereitstellst und verschiedene Anfragen des Browsers bearbeitest." + ] + }, + "mongodb-and-mongoose": { + "title": "MongoDB und Mongoose", + "intro": [ + "MongoDB ist eine Datenbankanwendung, die JSON-Dokumente (oder Datensätze) speichert, die du in deiner Anwendung verwenden kannst. Im Gegensatz zu SQL - einer anderen Art von Datenbank - ist MongoDB eine nicht-relationale oder \"NoSQL\"-Datenbank. Das bedeutet, dass MongoDB alle zugehörigen Daten innerhalb eines Datensatzes speichert, anstatt sie über viele voreingestellte Tabellen wie in einer SQL-Datenbank zu speichern.", + "Mongoose ist ein beliebtes npm-Paket für die Interaktion mit MongoDB. Mit Mongoose kannst du einfache JavaScript-Objekte anstelle von JSON verwenden, was die Arbeit mit MongoDB einfacher macht. Außerdem kannst du mit Mongoose Schemas für deine Dokumente erstellen, damit du nicht aus Versehen den falschen Datentyp speicherst und später Fehler verursachst.", + "In den MongoDB- und Mongoose-Kursen lernst du die Grundlagen der Arbeit mit persistenten Daten, einschließlich der Einrichtung eines Modells und dem Speichern, Löschen und Suchen von Dokumenten in der Datenbank." + ] + }, + "back-end-development-and-apis-projects": { + "title": "Projekte für Back-End Entwicklung und APIs", + "intro": [ + "Du hast bereits mit APIs gearbeitet, aber jetzt, wo du npm, Node, Express, MongoDB und Mongoose kennst, ist es an der Zeit, deine eigenen zu bauen. Nutze alles, was du bisher gelernt hast, um 5 verschiedene Microservices zu erstellen, also kleinere Anwendungen, die in ihrem Umfang begrenzt sind.", + "Nachdem du diese erstellt hast, wirst du 5 coole Microservice-APIs haben, mit denen du bei Freunden, Familie und potentiellen Arbeitgebern angeben kannst. Oh, und du wirst auch eine glänzende neue Zertifizierung für Back-End-Entwicklung und APIs haben." + ] + } + } + }, + "quality-assurance": { + "title": "Qualitätssicherung", + "intro": [ + "Wenn deine Programme oder Webanwendungen komplexer werden, solltest du sie testen, um sicherzustellen, dass neue Änderungen nicht die ursprüngliche Funktionalität zerstören.", + "In der Qualitätssicherungs-Zertifizierung lernst du, wie du mit Chai Tests schreibst, um sicherzustellen, dass deine Anwendungen so funktionieren, wie du es von ihnen erwartest.", + "Dann baust du eine Chat-Anwendung, um fortgeschrittene Node- und Express-Konzepte zu lernen. Du wirst auch Pug als Template-Engine, Passport für die Authentifizierung und Socket.io für die Echtzeitkommunikation zwischen dem Server und den verbundenen Clients verwenden." + ], + "note": "", + "blocks": { + "quality-assurance-and-testing-with-chai": { + "title": "Qualitätssicherung und Testen mit Chai", + "intro": [ + "Chai ist eine JavaScript Testbibliothek, die dir hilft zu bestätigen, dass sich dein Programm immer noch so verhält, wie du es erwartest, nachdem du Änderungen an deinem Code vorgenommen hast.", + "Mit Chai kannst du Tests schreiben, die die Anforderungen deines Programms beschreiben und sehen, ob dein Programm sie erfüllt.", + "In diesem Kurs lernst du etwas über Assertions, Deep Equality, Wahrhaftigkeit (\"truthiness\"), das Testen von APIs und andere Grundlagen zum Testen von JavaScript-Anwendungen." + ] + }, + "advanced-node-and-express": { + "title": "Node und Express für Fortgeschrittene", + "intro": [ + "Jetzt ist es an der Zeit, tief in Node.js und Express.js einzutauchen, indem wir eine Chat-Anwendung mit einem Anmeldesystem bauen.", + "Um das Anmeldesystem sicher zu implementieren, musst du etwas über Authentifizierung lernen. Dies ist der Akt der Identitätsprüfung einer Person oder eines Prozesses.", + "In diesem Kurs lernst du, wie du mit Passport die Authentifizierung verwaltest, mit Pug wiederverwendbare Templates für die schnelle Erstellung des Front-Ends erstellst und Websockets für die Echtzeitkommunikation zwischen Clients und Server nutzt." + ] + }, + "quality-assurance-projects": { + "title": "Qualitätssicherungsprojekte", + "intro": [ + "Jetzt, wo du dich sowohl im Front-End als auch im Back-End gut auskennst, ist es an der Zeit, all die Fähigkeiten und Konzepte anzuwenden, die du bis zu diesem Punkt gelernt hast. Du wirst 5 verschiedene Webapplikationen erstellen und für jede einzelne Tests schreiben, um sicherzustellen, dass sie funktionieren und mit verschiedenen Randfällen umgehen können.", + "Nachdem du diese Qualitätssicherungsprojekte abgeschlossen hast, hast du 5 weitere Projekte in der Tasche und eine neue Zertifizierung, die du in deinem Portfolio vorzeigen kannst." + ] + } + } + }, + "scientific-computing-with-python": { + "title": "Wissenschaftliches Rechnen mit Python", + "intro": [ + "Python ist heute eine der beliebtesten und flexibelsten Programmiersprachen. Du kannst sie für alles verwenden, vom einfachen Skripting bis zum maschinellen Lernen.", + "In der Zertifizierung \"Wissenschaftliches Rechnen mit Python\" lernst du die Grundlagen von Python, darunter Variablen, Schleifen, Bedingungen und Funktionen. Dann steigst du schnell zu komplexen Datenstrukturen, Netzwerken, relationalen Datenbanken und Datenvisualisierung auf." + ], + "note": "", + "blocks": { + "python-for-everybody": { + "title": "Python für jedermann", + "intro": [ + "Python für jedermann ist eine kostenlose Videokursreihe, die die Grundlagen der Verwendung von Python 3 vermittelt.", + "Die Kurse wurden von Dr. Charles Severance (auch bekannt als Dr. Chuck) erstellt. Er ist ein klinischer Professor an der University of Michigan School of Information, wo er verschiedene technologieorientierte Kurse unterrichtet, darunter Programmierung, Datenbankdesign und Webentwicklung." + ] + }, + "scientific-computing-with-python-projects": { + "title": "Projekte Wissenschaftliches Rechnen mit Python", + "intro": [ + "Zeit, deine Python-Kenntnisse auf die Probe zu stellen. Indem du diese Projekte abschließt, zeigst du, dass du über gute Grundkenntnisse in Python verfügst und dich für die Zertifizierung \"Wissenschaftliches Rechnen mit Python\" qualifiziert hast." + ] + } + } + }, + "data-analysis-with-python": { + "title": "Datenanalyse mit Python", + "intro": [ + "Datenanalyse gibt es schon seit Langem. Aber bis vor ein paar Jahren haben Entwickler sie mit teuren, proprietären Tools wie Tableau praktiziert. Doch in letzter Zeit haben Python, SQL und andere offene Bibliotheken die Datenanalyse für immer verändert.", + "In der Zertifizierung \"Datenanalyse mit Python\" lernst du die Grundlagen der Datenanalyse mit Python. Am Ende dieser Zertifizierung wirst du wissen, wie man Daten aus Quellen wie CSV und SQL einliest und wie man Bibliotheken wie Numpy, Pandas, Matplotlib und Seaborn verwendet, um Daten zu verarbeiten und zu visualisieren." + ], + "note": "", + "blocks": { + "data-analysis-with-python-course": { + "title": "Datenanalyse mit Python", + "intro": [ + "In diesen umfassenden Videokursen, erstellt von Santiago Basulto, lernst du den gesamten Prozess der Datenanalyse. Du liest Daten aus verschiedenen Quellen (CSV, SQL, Excel), verarbeitest diese Daten mit NumPy und Pandas und visualisierst sie mit Matplotlib und Seaborn,", + "Zusätzlich haben wir einen ausführlichen Jupyter Notebook-Kurs und eine schnelle Python-Referenz zur Auffrischung deiner Programmierkenntnisse integriert." + ] + }, + "numpy": { + "title": "Numpy", + "intro": [ + "Lerne die Grundlagen der NumPy Bibliothek in dem folgenden Videokurs, der von Keith Galli erstellt wurde.", + "In diesem Kurs lernst du, wie NumPy funktioniert und wie es im Vergleich zu Pythons eingebauten Listen funktioniert. Außerdem lernst du, wie man mit NumPy Code schreibt, Indizierung, Reshaping, angewandte Statistik und vieles mehr." + ] + }, + "data-analysis-with-python-projects": { + "title": "Projekte Datenanalyse mit Python", + "intro": [ + "Es gibt viele Möglichkeiten, Daten mit Python zu analysieren. Indem du diese Projekte abschließt, zeigst du, dass du ein gutes Grundwissen über Datenanalyse mit Python hast.", + "Schließe sie alle ab, um deine Zertifizierung \"Datenanalyse mit Python\" zu erhalten." + ] + } + } + }, + "information-security": { + "title": "Informationssicherheit", + "intro": [ + "Bei sämtlichen Online-Aktivitäten ist eine große Menge an sensiblen Daten gefährdet: E-Mail-Adressen, Passwörter, Telefonnummern und vieles mehr.", + "Mit der Zertifizierung für Informationssicherheit baust du eine sichere Web-App mit HelmetJS und lernst die Grundlagen zum Schutz der Daten von Menschen im Internet.", + "Du wirst auch einen TCP-Client und einen Nmap- und Port-Scanner in Python bauen. So lernst du die Grundlagen von Penetrationstests - ein wichtiger Bestandteil guter Informationssicherheit." + ], + "note": "", + "blocks": { + "information-security-with-helmetjs": { + "title": "Informationssicherheit mit HelmetJS", + "intro": [ + "Dieser Programmierkurs konzentriert sich auf HelmetJS, eine Art Middleware für Express-basierte Anwendungen, die automatisch HTTP-Header setzt. Auf diese Weise kann sie verhindern, dass sensible Informationen ungewollt zwischen Server und Client weitergegeben werden.", + "Das Absolvieren der folgenden Kurse wird dir helfen zu verstehen, wie du deine Webseite vor bösartigem Verhalten schützen kannst." + ] + }, + "python-for-penetration-testing": { + "title": "Python für Penetrationstests", + "intro": [ + "Diese Videokurse bringen dir Penetrationstests mit Python bei. Penetrationstests, auch bekannt als Pen-Test, sind simulierte Angriffe auf ein System, um es auf Schwachstellen zu überprüfen.", + "In diesem Kurs lernst du etwas über Sockets, erstellst einen TCP-Server und -Client, baust einen Nmap-Scanner und andere Tools und Techniken, die Pen-Tester täglich verwenden." + ] + }, + "information-security-projects": { + "title": "Projekte Informationssicherheit", + "intro": [ + "Jetzt ist es an der Zeit, deine neuen Fähigkeiten im Bereich der Informationssicherheit in die Tat umzusetzen. Diese Projekte geben dir die Möglichkeit, die erlernten Fähigkeiten, Prinzipien und Konzepte der Informationssicherheit anzuwenden.", + "Wenn du fertig bist, wirst du eine Menge Projekte zur Informationssicherheit in der Tasche haben, zusammen mit einer Zertifizierung, mit der du vor Freunden, Familie und Arbeitgebern angeben kannst." + ] + } + } + }, + "machine-learning-with-python": { + "title": "Maschinelles Lernen mit Python", + "intro": [ + "Maschinelles Lernen hat viele praktische Anwendungen, die du in deinen Projekten oder bei der Arbeit nutzen kannst.", + "In der Zertifizierung \"Maschinelles Lernen mit Python\" verwendest du das TensorFlow-Framework, um verschiedene neuronale Netze zu erstellen und fortgeschrittene Techniken wie natürliche Sprachverarbeitung und Reinforcement Learning (Bestärkendes Lernen) zu erforschen.", + "Du wirst auch in neuronale Netze eintauchen und die Prinzipien hinter der Funktionsweise von tiefen, rekurrenten und konvolutionären neuronalen Netzen lernen." + ], + "note": "", + "blocks": { + "tensorflow": { + "title": "Tensorflow", + "intro": [ + "TensorFlow ist ein Open-Source-Framework, das maschinelles Lernen und neuronale Netzwerke leichter nutzbar macht.", + "Der folgende Videokurs wurde von Tim Ruscica, auch bekannt als \"Tech With Tim\", erstellt. Es wird dir helfen, TensorFlow und einige seiner mächtigen Fähigkeiten zu verstehen." + ] + }, + "how-neural-networks-work": { + "title": "Wie neuronale Netzwerke funktionieren", + "intro": [ + "Neuronale Netzwerke sind der Kern dessen, was wir heute künstliche Intelligenz nennen. Aber in der Vergangenheit waren sie schwer zu verstehen. Vor allem für Anfänger auf dem Gebiet des maschinellen Lernens.", + "Selbst wenn du völlig neu in der Materie der neuronalen Netze bist, werden dich diese Videokurse von Brandon Rohrer mit den Konzepten und der Mathematik dahinter vertraut machen." + ] + }, + "machine-learning-with-python-projects": { + "title": "Projekte Maschinelles Lernen mit Python", + "intro": [ + "Maschinelles Lernen hat viele praktische Anwendungen. Indem du diese kostenlosen und herausfordernden Coding-Projekte absolvierst, zeigst du, dass du ein gutes Grundwissen über maschinelles Lernen hast und qualifizierst dich für deine Zertifizierung \"Machine Learning with Python\"." + ] + } + } + }, + "coding-interview-prep": { + "title": "Vorbereitung auf Bewerbungsgespräche", + "intro": [ + "Wenn du nach kostenlosen Coding-Übungen suchst, um dich auf dein nächstes Vorstellungsgespräch vorzubereiten, haben wir das Richtige für dich.", + "Dieser Bereich enthält hunderte von Coding Challenges, die dein Wissen über Algorithmen, Datenstrukturen und Mathematik testen. Es gibt auch eine Reihe von Projekten, die du mit nach Hause nehmen kannst, um deine Fähigkeiten zu stärken oder dein Portfolio zu erweitern." + ], + "note": "", + "blocks": { + "algorithms": { + "title": "Algorithmen", + "intro": [ + "In diesen kostenlosen Programmierübungen lernst du einige gängige Algorithmen kennen, die dir wahrscheinlich im echten Leben begegnen werden. Sie sind eine großartige Möglichkeit, deine Logik- und Programmierfähigkeiten zu verbessern.", + "Diese Algorithmen werden häufig in Vorstellungsgesprächen verwendet, um die Fähigkeiten eines Bewerbers zu testen. Wir geben dir klare und prägnante Erklärungen, wie diese verschiedenen Algorithmen funktionieren, damit du eine Lösung für jeden einzelnen implementieren kannst." + ] + }, + "data-structures": { + "title": "Datenstrukturen", + "intro": [ + "Diese kostenlosen Programmierkurse sollen dir helfen, mit großen und komplexen Datenstrukturen umzugehen, mit denen du vielleicht noch nicht vertraut bist.", + "In den folgenden Kursen lernst du jede Art von Datenstruktur kennen und implementierst Algorithmen, um dein Verständnis für sie zu vertiefen." + ] + }, + "take-home-projects": { + "title": "Projekte für das Selbststudium", + "intro": [ + "Vorstellungsgespräche waren schon immer stressig. Manchmal wird den Bewerbern ein Projekt mit auf den Weg gegeben, das sie außerhalb des Vorstellungsgesprächs fertigstellen müssen. Diese Art von Vorstellungsgesprächen erfordert in der Regel eine Menge Arbeit, aber sie sind eine großartige Möglichkeit für Arbeitgeber, um zu sehen, wie du dich im Job schlagen könntest.", + "Entwickle die untenstehenden Bonus-Coding-Projekte für zusätzliche Praxis. Nimm dir Zeit, mach sie großartig und füge sie in deinem Lebenslauf oder Portfolio hinzu, um sie potenziellen Arbeitgebern zu zeigen." + ] + }, + "rosetta-code": { + "title": "Rosetta Code", + "intro": [ + "Verbessere deine kreativen Problemlösungsfähigkeiten mit diesen kostenlosen Programmieraufgaben aus der klassischen Rosetta Code Bibliothek.", + "Diese Herausforderungen können sich als schwierig erweisen, aber sie werden deine Algorithmuslogik zu neuen Höhen treiben.", + "Attribut: Rosetta Code" + ] + }, + "project-euler": { + "title": "Projekt Euler", + "intro": [ + "Vervollständige die untenstehenden Programmierherausforderungen aus den umfangreichen Archiven von Projekt Euler. Diese werden dein Algorithmus- und Mathematikwissen festigen.", + "Diese Probleme haben einen unterschiedlichen Schwierigkeitsgrad und für viele ist die Erfahrung ein induktives Kettenlernen. Das bedeutet, dass du durch das Lösen eines Problems ein neues Konzept kennenlernst, das es dir ermöglicht, ein zuvor unzugängliches Problem in Angriff zu nehmen. Kannst du sie alle lösen?" + ] + } + } + }, + "misc-text": { + "certification": "{{cert}} Zertifikat", + "browse-other": "Stöbere in unseren anderen kostenlosen Zertifizierungen\n(Wir empfehlen, diese der Reihe nach zu erledigen)", + "courses": "Kurse", + "steps": "Schritte", + "expand": "Kurs erweitern", + "collapse": "Kurs einklappen", + "legacy-header": "Alte Kurse", + "legacy-desc": "Diese Kurse sind nicht mehr Teil des Zertifizierungsprogramms, stehen dir aber weiterhin zur Verfügung, um dich weiterzubilden.", + "legacy-go-back": "Rufe die aktuelle Version des Lehrplans auf.", + "new-rwd-desc": "Wir haben unseren Responsives Webdesign Studienplan aktualisiert. Wenn du bereits mit dem RWD-Studienplan gearbeitet hast, ist dein Fortschritt noch gespeichert! Du findest ihn unter dem Abschnitt Altes Responsives Webdesign.", + "new-rwd-article": "Wir möchten dich dazu ermutigen, dich über die vorgenommenen Änderungen zu informieren und dich mit dem aktualisierten Studienplan auseinanderzusetzen.", + "viewing-upcoming-change": "Du siehst eine Beta-Seite. ", + "go-back-to-learn": "Gehe zurück zur stabilen Version des Lehrplans.", + "read-database-cert-article": "Bitte lies diesen Forenbeitrag, bevor du fortfährst.", + "enable-cookies": "Bevor du startest, muss du die Cookies von Drittanbietern aktivieren.", + "english-only": "Die Kurse in diesem Bereich sind nur auf Englisch verfügbar. Im Moment können wir nur die Titel und Einführungen übersetzen, nicht aber die Lektionen selbst." + } +} diff --git a/client/i18n/locales/german/links.json b/client/i18n/locales/german/links.json new file mode 100644 index 00000000000000..4ee8c7c50eb704 --- /dev/null +++ b/client/i18n/locales/german/links.json @@ -0,0 +1,31 @@ +{ + "help-translate-link-url": "https://contribute.freecodecamp.org/#/i18n/german/how-to-translate-files", + "top-contributors": "https://www.freecodecamp.org/news/freecodecamp-top-contributors/", + "footer": { + "about-url": "https://www.freecodecamp.org/news/about/", + "shop-url": "https://www.freecodecamp.org/shop/", + "support-url": "https://www.freecodecamp.org/news/support/", + "sponsors-url": "https://www.freecodecamp.org/news/sponsors/", + "honesty-url": "https://www.freecodecamp.org/news/academic-honesty-policy/", + "coc-url": "https://www.freecodecamp.org/news/code-of-conduct/", + "privacy-url": "https://www.freecodecamp.org/news/privacy-policy/", + "tos-url": "https://www.freecodecamp.org/news/terms-of-service/", + "copyright-url": "https://www.freecodecamp.org/news/copyright-policy/" + }, + "donate": { + "other-ways-url": "https://www.freecodecamp.org/news/how-to-donate-to-free-code-camp", + "download-irs-url": "https://s3.amazonaws.com/freecodecamp/Free+Code+Camp+Inc+IRS+Determination+Letter.pdf", + "download-990-url": "https://freecodecamp.s3.amazonaws.com/freeCodeCamp+2019+f990.pdf", + "one-time-url": "https://paypal.me/freecodecamp" + }, + "nav": { + "forum": "https://forum.freecodecamp.org/", + "news": "https://freecodecamp.org/news/" + }, + "help": { + "HTML-CSS": "HTML-CSS", + "JavaScript": "JavaScript", + "Python": "Python", + "Backend Development": "Backend Development" + } +} diff --git a/client/i18n/locales/german/meta-tags.json b/client/i18n/locales/german/meta-tags.json new file mode 100644 index 00000000000000..1e27c4e817a876 --- /dev/null +++ b/client/i18n/locales/german/meta-tags.json @@ -0,0 +1,32 @@ +{ + "title": "Lerne Programmieren - kostenlos - Programmierkurse für vielbeschäftigte Menschen", + "description": "Lerne Programmieren - kostenlos", + "social-description": "Lerne Programmieren - kostenlos", + "keywords": [ + "python", + "javascript", + "js", + "git", + "github", + "website", + "web", + "entwicklung", + "free", + "code", + "camp", + "kurs", + "kurse", + "html", + "css", + "react", + "redux", + "api", + "front", + "back", + "end", + "lernen", + "tutorial", + "programmierung" + ], + "youre-unsubscribed": "Du wurdest abgemeldet" +} diff --git a/client/i18n/locales/german/motivation.json b/client/i18n/locales/german/motivation.json new file mode 100644 index 00000000000000..a95175b2ddbe54 --- /dev/null +++ b/client/i18n/locales/german/motivation.json @@ -0,0 +1,203 @@ +{ + "compliments": [ + "Ziel erreicht!", + "Du hast Mumm!", + "Bis in die Unendlichkeit und noch weiter!", + "Zugabe!", + "Vorwärts!", + "Es geht ab wie bei Donkey Kong!", + "Code lang und in Frieden.", + "Die Menge tobt!", + "Das ist etwas für das Guinness-Buch!", + "Makelloser Sieg!", + "Sehr effizient!", + "Du hast das richtige Händchen dafür!", + "Zum Batmobil!", + "Zieh alle Register!", + "Du bist ein Zauberer, Harry!", + "Gut gemacht!", + "Du bist der Hammer!", + "Was ist das für eine Zauberei?", + "So wird's gemacht!", + "Du rockst!", + "Woo-hoo!", + "Wir wussten, dass du es schaffst!", + "Boom-shakalaka!", + "Du bist unbesiegbar!", + "Escape velocity reached!", + "Bei dir sieht das ganz einfach aus!", + "Mit Bravour bestanden!", + "Du hast es drauf!", + "Morgen, die ganze Welt!", + "Es lebt. Es lebt!", + "Ich schaue dir in die Augen, Code!", + "Ein Schleife, um sie alle zu knechten!", + "Stürmt die Burg!", + "Gesichtsschmelzendes Gitarrensolo!", + "Bleib ruhig und programmiere weiter!", + "Bullseye!", + "Hasta la vista, Herausforderung!", + "Bingo!", + "Steuermann, Warp Neun. Aktivieren!", + "Pikachu wählt dich!", + + ], + "motivationalQuotes": [ + { + "quote": "Was auch immer du bist, sei ein guter Mensch.", + "author": "Abraham Lincoln" + }, + { + "quote": "Der beste Weg, die Zukunft vorherzusagen, ist, sie zu erfinden.", + "author": "Alan Kay" + }, + { + "quote": "Ein Mensch, der nie einen Fehler gemacht hat, hat nie etwas Neues ausprobiert.", + "author": "Albert Einstein" + }, + { + "quote": "Kreativität ist Intelligenz, die Spaß macht.", + "author": "Albert Einstein" + }, + { + "quote": "Ich habe keine besonderen Talente. Ich bin nur leidenschaftlich neugierig.", + "author": "Albert Einstein" + }, + { + "quote": "Das Leben ist wie Fahrradfahren. Um dein Gleichgewicht zu halten, musst du in Bewegung bleiben.", + "author": "Albert Einstein" + }, + { + "quote": "Mache alles so einfach wie möglich, aber nicht noch einfacher.", + "author": "Albert Einstein" + }, + { + "quote": "Lerne nie etwas auswendig, das du nachschlagen kannst.", + "author": "Albert Einstein" + }, + { + "quote": "Sobald wir unsere Grenzen akzeptieren, gehen wir über sie hinaus.", + "author": "Albert Einstein" + }, + { + "quote": "Spielen ist die höchste Form der Forschung.", + "author": "Albert Einstein" + }, + { + "quote": "Wir können unsere Probleme nicht mit derselben Denkweise lösen, mit der wir sie geschaffen haben.", + "author": "Albert Einstein" + }, + { + "quote": "Weisheit ist kein Produkt der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.", + "author": "Albert Einstein" + }, + { + "quote": "Das Schwierigste ist die Entscheidung zu handeln. Der Rest ist reine Beharrlichkeit.", + "author": "Amelia Earhart" + }, + { + "quote": "Wochenlange Programmierung kann dir Stunden der Planung ersparen.", + "author": "Unbekannt" + }, + { + "quote": "Qualität ist kein Akt, sie ist eine Gewohnheit.", + "author": "Aristoteles" + }, + { + "quote": "Sag es mir und ich vergesse es. Unterrichte mich und ich erinnere mich. Beteilige mich und ich lerne.", + "author": "Benjamin Franklin" + }, + { + "quote": "Gut gemacht ist besser als gut gesagt.", + "author": "Benjamin Franklin" + }, + { + "quote": "Ich fürchte nicht den Mann, der einmal 10.000 Tritte geübt hat, aber ich fürchte den Mann, der einen Tritt 10.000 Mal geübt hat.", + "author": "Bruce Lee" + }, + { + "quote": "Wenn du keine Fehler machst, triffst du auch keine Entscheidungen.", + "author": "Catherine Cook" + }, + { + "quote": "Es ist nicht die stärkste Art, die überlebt, auch nicht die intelligenteste, sondern diejenige, die am schnellsten auf Veränderungen reagiert.", + "author": "Charles Darwin" + }, + { + "quote": "Das Leben besteht zu 10 % aus dem, was dir passiert, und zu 90 % daraus, wie du darauf reagierst.", + "author": "Charles R. Swindoll" + }, + { + "quote": "Es ist egal, wie langsam du gehst, solange du nicht anhältst.", + "author": "Konfuzius" + }, + { + "quote": "Wahres Wissen bedeutet, das Ausmaß der eigenen Unwissenheit zu kennen.", + "author": "Konfuzius" + }, + { + "quote": "Die Vergangenheit kann nicht geändert werden. Die Zukunft liegt noch in deiner Macht.", + "author": "Konfuzius" + }, + { + "quote": "Wir sehen nur, was wir wissen.", + "author": "Johann Wolfgang von Goethe" + }, + { + "quote": "Es ist nicht genug zu wissen; wir müssen es anwenden. Wünschen ist nicht genug; wir müssen tun.", + "author": "Johann Wolfgang von Goethe" + }, + { + "quote": "Tu die schwierigen Dinge, solange sie leicht sind, und tu die großen Dinge, solange sie klein sind. Eine Reise von tausend Meilen muss mit einem einzigen Schritt beginnen.", + "author": "Lao Tzu" + }, + { + "quote": "Mir war schon lange aufgefallen, dass erfolgreiche Menschen sich selten zurücklehnen und die Dinge auf sich zukommen lassen. Sie gingen hinaus und taten etwas.", + "author": "Leonardo da Vinci" + }, + { + "quote": "Lebe so, als würdest du morgen sterben. Lerne, als ob du ewig leben würdest.", + "author": "Mahatma Gandhi" + }, + { + "quote": "Stärke kommt nicht von körperlichen Fähigkeiten. Sie kommt von einem unbezwingbaren Willen.", + "author": "Mahatma Gandhi" + }, + { + "quote": "Nichts im Leben muss man fürchten, man muss es nur verstehen. Jetzt ist es an der Zeit, mehr zu verstehen, damit wir uns weniger fürchten müssen.", + "author": "Marie Curie" + }, + { + "quote": "Das Geheimnis des Weiterkommens liegt darin, anzufangen.", + "author": "Mark Twain" + }, + { + "quote": "Ein Gewinner ist ein Träumer, der niemals aufgibt.", + "author": "Nelson Mandela" + }, + { + "quote": "Es scheint immer unmöglich, bis es geschafft ist.", + "author": "Nelson Mandela" + }, + { + "quote": "Je mehr du weißt, desto mehr erkennst du, dass du nichts weißt.", + "author": "Sokrates" + }, + { + "quote": "Der größte Feind des Wissens ist nicht die Unwissenheit, sondern die Illusion des Wissens.", + "author": "Stephen Hawking" + }, + { + "quote": "Das Universum erlaubt keine Perfektion.", + "author": "Stephen Hawking" + }, + { + "quote": "Egal, ob du die Geheimnisse des Universums lüften willst oder eine Karriere im 21. Jahrhundert anstrebst, grundlegende Computerprogrammierung ist eine wichtige Fähigkeit, die du lernen solltest.", + "author": "Stephen Hawking" + }, + { + "quote": "Ich habe nicht versagt. Ich habe nur 10.000 Wege gefunden, die nicht funktionierten.", + "author": "Thomas A. Edison" + }, + ] +} diff --git a/client/i18n/locales/german/translations.json b/client/i18n/locales/german/translations.json new file mode 100644 index 00000000000000..86efd66099519f --- /dev/null +++ b/client/i18n/locales/german/translations.json @@ -0,0 +1,710 @@ +{ + "buttons": { + "logged-in-cta-btn": "Los geht's! (Es ist 100% kostenlos.)", + "logged-out-cta-btn": "Melde dich an, um deinen Fortschritt zu speichern. (Es ist kostenlos.)", + "view-curriculum": "Curriculum anzeigen", + "first-lesson": "Gehe zur ersten Lektion", + "close": "Schließen", + "edit": "Bearbeiten", + "show-code": "Code anzeigen", + "show-solution": "Lösung anzeigen", + "show-project": "Projekt zeigen", + "frontend": "Front-End", + "backend": "Back-End", + "view": "Anzeigen", + "show-cert": "Zertifikat anzeigen", + "claim-cert": "Zertifizierung anfordern", + "save-progress": "Fortschritt speichern", + "accepted-honesty": "Du hast unsere Akademische Ehrlichkeitsrichtlinie akzeptiert.", + "agree": "Zustimmen", + "save-portfolio": "Dieses Portfolioelement speichern", + "remove-portfolio": "Dieses Portfolioelement entfernen", + "add-portfolio": "Neues Portfolioelement hinzufügen", + "download-data": "Deine Daten herunterladen", + "public": "Öffentlich", + "private": "Privat", + "off": "Aus", + "on": "An", + "sign-in": "Anmeldung", + "sign-up-email-list": "Melde dich für Quincys wöchentliche E-Mails an", + "sign-out": "Abmelden", + "curriculum": "Curriculum", + "forum": "Forum", + "radio": "Radio", + "profile": "Profil", + "news": "News", + "donate": "Spenden", + "update-settings": "Meine Kontoeinstellungen ändern", + "sign-me-out": "Von freeCodeCamp abmelden", + "flag-user": "Dieses Benutzerkonto wegen Missbrauch melden", + "current-challenge": "Zur aktuellen Herausforderung wechseln", + "try-again": "Nochmal versuchen", + "menu": "Menü", + "settings": "Einstellungen", + "take-me": "Bring mich zu den Herausforderungen", + "check-answer": "Überprüfe deine Antwort", + "get-hint": "Erhalte einen Tipp", + "ask-for-help": "Bitte um Hilfe", + "create-post": "Einen Hilfebeitrag im Forum erstellen", + "cancel": "Abbrechen", + "reset-lesson": "Diese Lektion zurücksetzen", + "run": "Ausführen", + "run-test": "Führe die Tests aus (Strg + Enter)", + "check-code": "Überprüfe deinen Code (Strg + Enter)", + "check-code-2": "Prüfe deinen Code", + "reset": "Zurücksetzen", + "reset-code": "Den Quellcode zurücksetzen", + "help": "Hilfe", + "get-help": "Hilfe bekommen", + "watch-video": "Ein Video ansehen", + "resubscribe": "Du kannst hier klicken, um erneut zu abonnieren", + "click-here": "Klicke hier, um dich anzumelden", + "save": "Speichern", + "save-code": "Speichere deinen Code", + "no-thanks": "Nein, danke", + "yes-please": "Ja, bitte", + "update-email": "Meine E-Mail-Adresse aktualisieren", + "verify-email": "E-Mail-Adresse bestätigen", + "submit-and-go": "Absenden und zur nächsten Herausforderung gehen", + "go-to-next": "Gehe zur nächsten Herausforderung", + "ask-later": "Frag später", + "start-coding": "Beginne zu programmieren!", + "go-to-settings": "Gehe zu den Einstellungen, um dein Zertifikat zu beantragen", + "click-start-course": "Start den Kurs", + "click-start-project": "Starte das Projekt", + "change-language": "Sprache wechseln", + "cancel-change": "Änderung abbrechen", + "resume-project": "Projekt fortsetzen", + "start-project": "Projekt starten" + }, + "landing": { + "big-heading-1": "Lerne zu programmieren — kostenlos.", + "big-heading-2": "Projekte entwickeln.", + "big-heading-3": "Zertifizierungen erwerben.", + "h2-heading": "Seit 2014 haben mehr als 40.000 Absolventen von FreeCodeCamp.org Jobs bei Tech-Unternehmen erhalten, unter anderem:", + "hero-img-description": "freeCodeCamp Studenten einer lokalen Lerngruppe in Südkorea.", + "as-seen-in": "Wie gesehen in:", + "testimonials": { + "heading": "Das sagen unsere Absolventen zu freeCodeCamp:", + "shawn": { + "location": "Shawn Wang in Singapur", + "occupation": "Softwareentwickler bei Amazon", + "testimony": "\"Es ist beängstigend, den Beruf zu wechseln. Ich habe erst durch die hunderte Stunden an kostenlosen Lektionen auf freeCodeCamp das Vertrauen gewonnen, dass ich coden kann. Innerhalb eines Jahres hatte ich einen Job mit sechsstelligen Gehalt als Software Entwickler. freeCodeCamp hat mein Leben verändert.\"" + }, + "sarah": { + "location": "Sarah Chima in Nigeria", + "occupation": "Softwareentwicklerin bei ChatDesk", + "testimony": "\"freeCodeCamp war das Tor zu meiner Karriere als Softwareentwickler. Der gut strukturierte Lehrplan brachte meine Programmierkenntnisse von einem totalen Anfängerlevel auf ein sehr sicheres Niveau. Es war alles, was ich brauchte, um meinen ersten Entwicklerjob bei einer großartigen Firma zu bekommen.\"" + }, + "emma": { + "location": "Emma Bostian in Schweden", + "occupation": "Softwareentwicklerin bei Spotify", + "testimony": "\"Ich habe immer damit gekämpft, JavaScript zu lernen. Ich habe viele Kurse belegt, aber der Kurs von freeCodeCamp war derjenige, der am meisten hängen blieb. Das Lernen von JavaScript sowie Datenstrukturen und Algorithmen auf freeCodeCamp gab mir die Fähigkeiten und das Selbstvertrauen, das ich brauchte, um meinen Traumjob als Softwareentwicklerin bei Spotify zu bekommen.\"" + } + }, + "certification-heading": "Erlange kostenlos verifizierte Zertifizierungen in:" + }, + "settings": { + "share-projects": "Teile deine nicht-freeCodeCamp-Projekte, Artikel oder akzeptierte Pull-Requests.", + "privacy": "Die Einstellungen in diesem Abschnitt ermöglichen es dir, zu kontrollieren, was in deinem öffentlichen freeCodeCamp-Portfolio angezeigt wird. Drücke auf Speichern, um deine Änderungen zu speichern.", + "data": "Um zu sehen, welche Daten wir in deinem Konto vorhalten, klicke auf den \"Deine Daten herunterladen\" Button unten", + "disabled": "Deine Zertifizierungen werden deaktiviert, wenn sie auf privat gesetzt sind.", + "private-name": "Dein Name erscheint nicht auf Deinen Zertifizierungen, wenn dieser auf privat eingestellt ist.", + "claim-legacy": "Sobald du die folgenden freeCodeCamp Zertifizierungen erworben hast, kannst du das {{cert}} beanspruchen:", + "for": "Kontoeinstellungen für {{username}}", + "sound-mode": "Das sorgt für den angenehmen Klang der Akustikgitarre auf der gesamten Website. Du bekommst musikalisches Feedback, wenn du im Editor tippst, Aufgaben löst, Zertifizierungen beantragst und vieles mehr.", + "username": { + "contains invalid characters": "Der Benutzername \"{{username}}\" enthält ungültige Zeichen", + "is too short": "Der Benutzername \"{{username}}\" ist zu kurz", + "is a reserved error code": "Der Benutzername \"{{username}}\" ist ein reservierter Fehlercode", + "must be lowercase": "Benutzername \"{{username}}\" muss in Kleinbuchstaben geschrieben sein", + "unavailable": "Benutzername ist nicht verfügbar", + "validating": "Benutzername wird überprüft...", + "available": "Benutzername ist verfügbar", + "change": "Bitte beachte, dass die Änderung deines Benutzernamens auch die URL deines Profils und deiner Zertifikate ändern wird." + }, + "labels": { + "username": "Benutzername", + "name": "Name", + "location": "Standort", + "picture": "Bild", + "about": "Über", + "personal": "Persönliche Website", + "title": "Titel", + "url": "URL", + "image": "Bild", + "description": "Beschreibung", + "project-name": "Name des Projekts", + "solution": "Lösung", + "solution-for": "Lösung für {{projectTitle}}", + "my-profile": "Mein Profil", + "my-name": "Mein Name", + "my-location": "Mein Standort", + "my-about": "Mein \"Über mich\"-Bereich", + "my-points": "Meine Punkte", + "my-heatmap": "Meine Heatmap (Punkte-Historie)", + "my-certs": "Meine Zertifikate", + "my-portfolio": "Mein Portfolio", + "my-timeline": "Meine Zeitleiste", + "my-donations": "Meine Spenden", + "night-mode": "Nacht-Modus", + "sound-mode": "Lagerfeuer-Modus", + "keyboard-shortcuts": "Tastaturkurzbefehle aktivieren" + }, + "headings": { + "certs": "Zertifikate", + "legacy-certs": "Alte Zertifikate", + "honesty": "Akademischer Ehrlichkeitskodex", + "internet": "Dein Internetauftritt", + "portfolio": "Portfolio-Einstellungen", + "privacy": "Privatsphäre-Einstellungen" + }, + "danger": { + "heading": "Gefahrenzone", + "be-careful": "Bitte sei vorsichtig. Änderungen in diesem Bereich sind dauerhaft.", + "reset": "Den ganzen Fortschritt zurücksetzen", + "delete": "Mein Konto löschen", + "delete-title": "Mein Konto löschen", + "delete-p1": "Dadurch werden wirklich alle deine Daten gelöscht, einschließlich aller deiner Fortschritte und Kontoinformationen.", + "delete-p2": "Wir werden später keine dieser Daten für dich wiederherstellen können. Auch dann nicht, wenn du deine Meinung änderst.", + "delete-p3": "Wenn es etwas gibt, was wir besser machen könnten, schick uns stattdessen eine E-Mail und wir werden unser Bestes tun: <0>{{email}}0>", + "nevermind": "Ich habe es mir anders überlegt und will mein Konto nicht löschen", + "certain": "Ich bin 100%ig sicher. Lösche alles, was mit diesem Konto verbunden ist", + "reset-heading": "Meinen Fortschritt zurücksetzen", + "reset-p1": "Dies wird wirklich alle deine Fortschritte, Punkte, abgeschlossenen Herausforderungen, unsere Aufzeichnungen über deine Projekte, alle Zertifizierungen, die du hast, einfach alles löschen.", + "reset-p2": "Wir werden später keine dieser Daten für dich wiederherstellen können. Auch dann nicht, wenn du deine Meinung änderst.", + "nevermind-2": "Ich habe es mir anders überlegt und will meinen Fortschritt nicht löschen", + "reset-confirm": "Alles zurücksetzen. Ich möchte von Anfang an beginnen" + }, + "email": { + "missing": "Du hast keine E-Mail mit diesem Konto verbunden.", + "heading": "E-Mail-Einstellungen", + "not-verified": "Deine E-Mail wurde noch nicht verifiziert.", + "check": "Bitte überprüfe deine E-Mail, oder <0>fordere eine neue Bestätigungs-E-Mail an0>.", + "current": "Aktuelle E-Mail", + "new": "Neue E-Mail", + "confirm": "Neue E-Mail bestätigen", + "weekly": "Sende mir die wöchentliche E-Mail von Quincy (Gründer)" + }, + "honesty": { + "p1": "Bevor du ein bestätigtes Zertifikat beanspruchen kannst, musst du unsere akademische Ehrlichkeitserklärung akzeptieren. Sie lautet:", + "p2": "\"Ich verstehe, dass Plagiarismus bedeutet, das Werk eines anderen zu kopieren und das Werk so zu präsentieren, als wäre es mein eigenes, ohne den Originalautor eindeutig anzugeben.\"", + "p3": "\"Ich verstehe, dass Plagiarismus ein Akt der intellektuellen Unehrlichkeit ist und dass Leute normalerweise von der Universität ausgeschlossen oder aus ihrem Job entlassen werden, wenn sie beim Plagiieren erwischt werden.\"", + "p4": "\"Abgesehen von der Verwendung von Open-Source-Bibliotheken wie jQuery und Bootstrap und kurzen Codeschnipseln, die eindeutig ihrem ursprünglichen Autor zugeschrieben werden, wurde 100% des Codes in meinen Projekten von mir oder zusammen mit einer anderen Person geschrieben, die den freeCodeCamp-Lehrplan durchlief und mit der ich in Echtzeit Pair Programming betrieb.\"", + "p5": "\"Ich versichere, dass ich keine meiner Arbeiten auf freeCodeCamp.org plagiiert habe. Ich verstehe, dass das Team von freeCodeCamp.org meine Projekte prüfen wird, um dies zu bestätigen.\"", + "p6": "In den Fällen, in denen wir eindeutige Plagiate entdecken, ersetzen wir die Bescheinigung der betreffenden Person mit der Meldung \"Nach Überprüfung wurde dieses Konto wegen akademischer Unehrlichkeit markiert.\"", + "p7": "Als akademische Institution, die leistungsbasierte Zertifizierungen vergibt, nehmen wir akademische Ehrlichkeit sehr ernst. Wenn du Fragen zu dieser Richtlinie hast oder vermutest, dass jemand dagegen verstoßen hat, kannst du eine E-Mail an <0>{{email}}0> schicken und wir werden das untersuchen." + } + }, + "profile": { + "you-not-public": "Du hast dein Portfolio nicht öffentlich zugänglich gemacht.", + "username-not-public": "{{username}} hat sein Portfolio nicht öffentlich zugänglich gemacht.", + "you-change-privacy": "Du musst deine Privatsphäre-Einstellung ändern, damit dein Portfolio von anderen gesehen wird. Dies ist eine Vorschau wie dein Portfolio aussehen wird, wenn es veröffentlicht wird.", + "username-change-privacy": "{{username}} muss seine Privatsphäre-Einstellung ändern, damit du sein Portfolio ansehen kannst.", + "supporter": "Unterstützer", + "contributor": "Top Mitwirkender", + "no-certs": "Es wurden keine Zertifizierungen nach dem aktuellen Lehrplan erworben", + "fcc-certs": "freeCodeCamp Zertifikate", + "longest-streak": "Längste Serie:", + "current-streak": "Aktuelle Serie:", + "portfolio": "Portfolio", + "timeline": "Zeitleiste", + "none-completed": "Es wurden noch keine Herausforderungen abgeschlossen.", + "get-started": "Hier geht es los.", + "challenge": "Herausforderung", + "completed": "Abgeschlossen", + "add-linkedin": "Dieses Zertifikat meinem LinkedIn-Profil hinzufügen", + "add-twitter": "Zertifikat auf Twitter teilen", + "tweet": "Ich habe mir gerade die {{certTitle}} -Zertifizierung @freeCodeCamp verdient! Hier kannst du es anschauen: {{certURL}}", + "avatar": "Avatar von {{username}}", + "joined": "{{date}} beigetreten", + "total-points": "{{count}} Gesamtpunkt", + "total-points_plural": "{{count}} Gesamtpunkte", + "points": "{{count}} Punkt am {{date}}", + "points_plural": "{{count}} Punkte am {{date}}", + "screen-shot": "Eine Bildschirmaufnahme von {{title}}", + "page-number": "{{pageNumber}} von {{totalPages}}" + }, + "footer": { + "tax-exempt-status": "freeCodeCamp ist eine von Spendern unterstützte steuerbefreite gemeinnützige Organisation gemäß 501(c)(3) (US-Steueridentifikationsnummer: 82-0779546)", + "mission-statement": "Unsere Mission: Menschen dabei zu helfen, kostenlos zu programmieren. Dies erreichen wir, indem wir Tausende von Videos, Artikeln und interaktiven Programmierstunden erstellen, die der Öffentlichkeit frei zugänglich sind. Wir haben auch Tausende von freeCodeCamp-Lerngruppen auf der ganzen Welt.", + "donation-initiatives": "Spenden an das freeCodeCamp fließen in unsere Bildungsinitiativen und helfen, Server, Dienstleistungen und Mitarbeiter zu bezahlen.", + "donate-text": "Du kannst <1>hier eine steuerlich absetzbare Spende tätigen1>.", + "trending-guides": "Beliebte Guides", + "our-nonprofit": "Unser Non-Profit", + "links": { + "about": "Über", + "alumni": "Alumni-Netzwerk", + "open-source": "Open Source", + "shop": "Shop", + "support": "Support", + "sponsors": "Sponsoren", + "honesty": "Akademische Ehrlichkeit", + "coc": "Verhaltenskodex", + "privacy": "Datenschutzerklärung", + "tos": "Nutzungsbedingungen", + "copyright": "Urheberrechtsrichtlinie" + }, + "language": "Sprache:" + }, + "learn": { + "heading": "Willkommen zum Studienplan von freeCodeCamp.", + "welcome-1": "Willkommen zurück, {{name}}.", + "welcome-2": "Willkommen auf freeCodeCamp.org", + "start-at-beginning": "Wenn Programmieren ganz neu für dich ist, schlagen wir vor, <0>am Anfang zu beginnen0>.", + "read-this": { + "heading": "Bitte lies dies sorgfältig durch.", + "p1": "freeCodeCamp ist ein bewährter Weg zu deinem ersten Softwareentwickler-Job.", + "p2": "Mehr als 40.000 Menschen erhielten nach Absolvierung unserer Lehrangebote Arbeit als Entwickler – auch bei großen Unternehmen wie Google und Microsoft.", + "p3": "Wenn du neu in der Programmierung bist, empfehlen wir dir, am Anfang zu beginnen und diese Zertifizierungen der Reihe nach zu erwerben.", + "p4": "Für jede Zertifizierung sind je 5 Projekte zu erstellen, die eine Reihe automatisierter Tests bestehen müssen.", + "p5": "Du kannst diese Zertifizierungen zu deinem Lebenslauf oder LinkedIn hinzufügen. Aber noch wichtiger als die Zertifizierungen ist die Praxis, die du auf deinem Weg bekommst.", + "p6": "Es ist normal, sich zwischendurch überwältigt zu fühlen. Programmieren ist schwierig.", + "p7": "Übung ist der Schlüssel. Üben, üben, üben.", + "p8": "Und dieser Lehrplan wird dir tausende von Stunden praktischer Programmierpraxis geben.", + "p9": "Und wenn du mehr Mathematik und Informatik-Theorie lernen möchtest, haben wir auch Tausende von Stunden an Videokursen auf <0>freeCodeCamps YouTube-Kanal0>.", + "p10": "Wenn du einen Entwicklerjob oder Freelance-Kunden bekommen möchtest, werden Programmierkenntnisse nur Teil des Puzzles sein. Du musst auch dein persönliches Netzwerk und deinen Ruf als Entwickler aufbauen.", + "p11": "Du kannst dies auf Twitter und GitHub tun, sowie im <0>freeCodeCamp-Forum0>.", + "p12": "Viel Spaß beim Programmieren!" + }, + "upcoming-lessons": "Bevorstehende Lektionen", + "learn": "Lernen", + "add-subtitles": "Hilf mit Untertitel hinzuzufügen oder zu verbessern", + "wrong-answer": "Sorry, das ist nicht die richtige Antwort. Möchtest du noch einen Anlauf wagen?", + "check-answer": "Klick unten auf den Button, um deine Antwort zu überprüfen.", + "solution-link": "Lösungs-Link", + "github-link": "GitHub Link", + "submit-and-go": "Absenden und zur nächsten Herausforderung gehen", + "congratulations": "Glückwunsch, dein Code hat bestanden. Sende deinen Code ein, um fortzufahren.", + "i-completed": "Ich habe diese Herausforderung abgeschlossen", + "test-output": "Deine Testergebnisse werden hier erscheinen", + "running-tests": "// Tests werden durchgeführt", + "tests-completed": "// Tests abgeschlossen", + "console-output": "// Konsolen-Ausgabe", + "sign-in-save": "Melde dich an, um deinen Fortschritt zu speichern", + "download-solution": "Meine Lösung herunterladen", + "percent-complete": "{{percent}}% abgeschlossen", + "tried-rsa": "Wenn du die <0>Lesen-Suchen-Fragen0> Methode bereits ausprobiert hast, kannst du im freeCodeCamp-Forum um Hilfe bitten.", + "rsa": "Lesen, suchen, fragen", + "rsa-forum": "Before making a new post please see if your question has <0>already been answered on the forum0>.", + "reset": "Diese Lektion zurücksetzen?", + "reset-warn": "Bist du dir sicher, dass du diese Lektion zurücksetzen möchtest? Die Editoren und Tests werden zurückgesetzt.", + "reset-warn-2": "Dies kann nicht rückgängig gemacht werden", + "scrimba-tip": "Tipp: Wenn der Mini-Browser den Code verdeckt, kann man ihn mittels Drag-and-drop bewegen. Du kannst jederzeit stoppen und den Code im Video bearbeiten.", + "chal-preview": "Herausforderungs-Vorschau", + "cert-map-estimates": { + "certs": "{{title}} Zertifizierung" + }, + "editor-tabs": { + "info": "Informationen", + "code": "Code", + "tests": "Tests", + "restart": "Neustart", + "restart-step": "Schritt zurücksetzen", + "console": "Konsole", + "instructions": "Anweisungen", + "notes": "Hinweise", + "preview": "Vorschau" + }, + "help-translate": "Wir übersetzen noch die folgenden Zertifikate.", + "help-translate-link": "Hilf uns, zu übersetzen.", + "project-preview-title": "Hier ist eine Vorschau auf das, was du erstellen wirst", + "github-required": "<0>Erstelle ein GitHub0>-Konto, wenn du noch keines hast. Du benötigst es, wenn du die virtuelle Linux-Server-Maschine erstellst. Dieser Vorgang kann ein paar Minuten dauern.", + "step-1": "Schritt 1: Das Projekt abschließen", + "step-2": "Schritt 2: Übermittle deinen Code", + "submit-public-url": "Wenn du das Projekt fertiggestellt hast, speichere alle benötigten Dateien in einem öffentlichen Repository und gib die URL dazu unten an.", + "complete-both-steps": "Schließe beide Schritte unten ab, um die Aufgabe zu beenden.", + "runs-in-vm": "Das Projekt läuft in einer virtuellen Maschine. Vervollständige die dort beschriebenen User Stories und bestehe alle Tests, um Schritt 1 abzuschließen.", + "completed": "Abgeschlossen", + "not-started": "Nicht gestartet", + "hint": "Hinweis", + "test": "Test", + "sorry-try-again": "Tut mir leid, dein Code funktioniert nicht. Versuche es noch einmal.", + "sorry-keep-trying": "Tut mir leid, dein Code funktioniert nicht. Versuche es weiter.", + "sorry-getting-there": "Tut mir leid, dein Code funktioniert nicht. Du bist auf dem Weg dorthin.", + "sorry-hang-in-there": "Tut mir leid, dein Code funktioniert nicht. Halte durch.", + "sorry-dont-giveup": "Tut mir leid, dein Code funktioniert nicht. Gib nicht auf.", + "challenges-completed": "{{completedCount}} von {{totalChallenges}} Herausforderungen erfüllt" + }, + "donate": { + "title": "Unterstütze unsere Non-Profit-Organisation", + "processing": "Wir bearbeiten deine Spende.", + "redirecting": "Weiterleiten...", + "thanks": "Vielen Dank für die Spende", + "thank-you": "Vielen Dank für deine Unterstützung.", + "additional": "Du kannst eine zusätzliche einmalige Spende in beliebiger Höhe über diesen Link tätigen: <0>{{url}}0>", + "help-more": "Hilf uns, mehr zu tun", + "error": "Etwas ist mit deiner Spende schiefgelaufen.", + "error-2": "Irgendetwas ist nicht in Ordnung. Bitte kontaktiere donors@freecodecamp.org", + "free-tech": "Deine Spenden unterstützen die kostenlose Technologieausbildung für Menschen auf der ganzen Welt.", + "no-halo": "Wenn dein Profilbild nicht golden scheint, kontaktiere donors@freecodecamp.org.", + "gift-frequency": "Wähle die Schenkungsfrequenz:", + "gift-amount": "Schenkungsbetrag auswählen:", + "confirm": "Bestätige deine Spende", + "confirm-2": "Bestätige deine einmalige Spende von ${{usd}}", + "confirm-3": "Bestätige deine Spende von ${{usd}} / Monat", + "confirm-4": "Bestätige deine Spende von ${{usd}} / Jahr", + "wallet-label": "${{usd}} Spende an freeCodeCamp", + "wallet-label-1": "${{usd}} / monatliche Spende an freeCodeCamp", + "your-donation": "Deine ${{usd}} Spende ermöglicht {{hours}} Stunden des Lernens für Menschen auf der ganzen Welt.", + "your-donation-2": "Deine ${{usd}} Spende wird jeden Monat {{hours}} Stunden des Lernens für Menschen auf der ganzen Welt ermöglichen.", + "your-donation-3": "Deine ${{usd}} Spende wird jedes Jahr {{hours}} Stunden des Lernens für Menschen auf der ganzen Welt ermöglichen.", + "duration": "Werde ein einmaliger Unterstützer für unsere gemeinnützigen Organisation.", + "duration-2": "Werde ein monatlicher Unterstützer für unsere gemeinnützigen Organisation.", + "duration-3": "Werde ein jährlicher Unterstützer für unsere gemeinnützigen Organisation", + "duration-4": "Werde ein Unterstützer für unsere gemeinnützigen Organisation", + "nicely-done": "Großartig. Du hast soeben {{block}} abgeschlossen.", + "credit-card": "Kreditkarte", + "credit-card-2": "Oder spende mit einer Kreditkarte:", + "or-card": "Oder spende mit Karte", + "paypal": "mit PayPal:", + "need-email": "Wir benötigen eine gültige E-Mail-Adresse, an die wir deine Spendenbescheinigung senden können.", + "went-wrong": "Bei der Verarbeitung deiner Spende ist etwas schiefgelaufen. Deine Karte wurde nicht belastet.", + "valid-info": "Bitte gib eine gültige E-Mail-Adresse, Kreditkartennummer und Ablaufdatum ein.", + "valid-email": "Bitte gib eine gültige E-Mail-Adresse ein.", + "valid-card": "Bitte gib eine gültige Kreditkartennummer und das Ablaufdatum ein.", + "email-receipt": "E-Mail (wir schicken dir eine steuerlich absetzbare Spendenquittung):", + "need-help": "Brauchst du Hilfe bei deinen aktuellen oder vergangenen Spenden?", + "forward-receipt": "Sende uns eine Kopie deiner Spendenbescheinigung an donors@freecodecamp.org und lass uns wissen, wie wir dir helfen können.", + "efficiency": "freeCodeCamp ist eine hocheffiziente, gemeinnützige Bildungsorganisation.", + "why-donate-1": "Wenn du für freeCodeCamp spendest, hilfst du Menschen, neue Fähigkeiten zu erlernen und ihre Familien zu versorgen.", + "why-donate-2": "Du hilfst uns auch neue Angebote zu schaffen, die du selbst nutzen kannst, um deine technischen Fähigkeiten zu erweitern.", + "bigger-donation": "Möchtest du eine größere einmalige Spende tätigen, uns einen Scheck schicken oder auf andere Weise spenden?", + "other-ways": "Hier sind viele <0>andere Möglichkeiten, wie du die Mission unserer gemeinnützigen Organisation unterstützen kannst0>.", + "failed-pay": "Oh - oh. Es sieht so aus, als ob deine Transaktion nicht durchgeführt werden konnte. Kannst du es bitte noch einmal versuchen?", + "try-again": "Bitte versuche es erneut.", + "card-number": "Deine Kartennummer:", + "expiration": "Ablaufdatum:", + "secure-donation": "Sichere Spende", + "faq": "Häufig gestellte Fragen", + "only-you": "Nur du kannst diese Nachricht sehen. Herzlichen Glückwunsch zum Erhalt dieses Zertifikats. Es ist keine leichte Aufgabe. Das freeCodeCamp zu leiten, ist auch nicht einfach. Und billig ist es auch nicht. Hilf uns, dir und vielen anderen Menschen auf der ganzen Welt zu helfen. Sende noch heute eine steuerlich absetzbare Spende an unsere gemeinnützige Organisation.", + "get-help": "Wie kann ich Hilfe für meine Spenden bekommen?", + "how-transparent": "Wie transparent ist freeCodeCamp.org?", + "very-transparent": "Sehr. Wir haben eine Platin-Transparenzbewertung von GuideStar.org.", + "download-irs": "Du kannst <0>unseren Feststellungsbescheid der IRS hier herunterladen0>.", + "download-990": "Du kannst <0>hier unseren letzten 990 (Jahressteuerbericht) herunterladen0>.", + "how-efficient": "Wie effizient ist das freeCodeCamp?", + "fcc-budget": "Das Budget von freeCodeCamp ist viel kleiner als das der meisten vergleichbaren gemeinnützigen Organisationen. Wir haben keine professionellen Geldbeschaffer eingestellt. Stattdessen macht Quincy alles selbst.", + "help-millions": "Doch mit einem Budget von nur ein paar hunderttausend Dollar pro Jahr konnten wir Millionen von Menschen helfen.", + "how-one-time": "Wie kann ich eine einmalige Spende leisten?", + "one-time": "Wenn du lieber einmalig spenden möchtest, kannst du die Mission von freeCodeCamp unterstützen, wann immer du Geld übrig hast. Du kannst <0>diesen Link benutzen, um einen beliebigen Betrag über PayPal0> zu spenden.", + "wire-transfer": "Du kannst auch direkt Geld an das freeCodeCamp überweisen. Wenn du unsere Überweisungsdaten benötigst, schreibe Quincy eine E-Mail an quincy@freecodecamp.org", + "does-crypto": "Akzeptiert das freeCodeCamp Spenden in Bitcoin oder anderen Kryptowährungen?", + "yes-cryptocurrency": "Ja. Bitte sende eine E-Mail an Quincy unter quincy@freecodecamp.org und er kann dir die Informationen zur Wallet von freeCodeCamp schicken. Er kann dir auch eine Spendenbescheinigung ausstellen, falls du eine für deine Steuerklärung benötigst.", + "can-check": "Kann ich einen Scheck per Post schicken?", + "yes-check": "Ja, wir würden uns über einen Scheck freuen. Du kannst ihn per Post an uns schicken:", + "how-matching-gift": "Wie kann ich die gleiche Spende von meinem Arbeitgeber erhalten oder von der Gehaltsabrechnung abziehen lassen?", + "employers-vary": "Das ist von Arbeitgeber zu Arbeitgeber unterschiedlich, und unsere gemeinnützige Organisation ist bereits in vielen der großen Spenden-Datenbanken gelistet.", + "some-volunteer": "Manche Menschen können sich bei freeCodeCamp freiwillig engagieren und ihr Arbeitgeber spendet einen festen Betrag pro Stunde, in der sie sich freiwillig engagieren. Andere Arbeitgeber verdoppeln die Spenden der Spender bis zu einem bestimmten Betrag", + "help-matching-gift": "Wenn du dabei Hilfe brauchst, schreibe Quincy bitte direkt eine E-Mail: quincy@freecodecamp.org", + "how-endowment": "Wie kann ich freeCodeCamp.org eine Spende zukommen lassen?", + "endowment": "Das wäre eine große Hilfe. Da es sich um einen manuellen Prozess handelt, kann Quincy dich persönlich durch den Prozess führen. Bitte schreibe ihm direkt eine E-Mail an quincy@freecodecamp.org.", + "how-legacy": "Wie kann ich ein Vermächtnis für freeCodeCamp.org errichten?", + "we-honored": "Wir würden uns geehrt fühlen, wenn wir mit einer solchen Spende Menschen auf der ganzen Welt helfen könnten, das Programmieren zu lernen. Je nachdem, wo du wohnst, kann dies auch steuerfrei sein.", + "legacy-gift-message": "Ich schenke, vermache und vererbe [den Betrag von _____ USD (oder eine andere Währung) ODER _____ Prozent des Restes und des Nachlasses] an freeCodeCamp.org (Free Code Camp, Inc. Steueridentifikationsnummer 82-0779546), eine gemeinnützige Gesellschaft, die nach den Gesetzen des Staates Delaware, Vereinigte Staaten, gegründet wurde und derzeit ihren Sitz in 3905 Hedgcoxe Rd, PO Box 250352, Plano, Texas, 75025 Vereinigte Staaten, hat, um sie nach eigenem Ermessen für ihre allgemeinen gemeinnützigen Zwecke zu verwenden.", + "thank-wikimedia": "Wir möchten uns bei der Wikimedia Foundation dafür bedanken, dass sie uns diese formelle Formulierung zur Verfügung gestellt hat.", + "legacy-gift-questions": "Wenn du Fragen zu diesem Verfahren hast, schreibe bitte eine E-Mail an Quincy unter quincy@freecodecamp.org.", + "how-stock": "Wie kann ich Aktien für freeCodeCamp.org spenden?", + "welcome-stock": "Wir nehmen deine Aktienspenden gerne entgegen. Schreib Quincy direkt eine E-Mail und er kann dir dabei helfen und dir die Details unseres gemeinnützigen Maklerkontos mitteilen: quincy@freecodecamp.org.", + "how-receipt": "Kann ich eine Spendenbescheinigung bekommen, damit ich meine Spende von der Steuer absetzen kann?", + "just-forward": "Ja, natürlich. Schicke einfach die Quittung deiner Transaktion an donors@freecodecamp.org, sag uns, dass du eine Quittung möchtest und welche besonderen Anweisungen du hast, und wir schicken dir eine Quittung zu.", + "how-update": "Ich habe eine monatliche Spende eingerichtet, aber ich muss die monatliche Zahlung aktualisieren oder aussetzen. Wie kann ich das tun?", + "take-care-of-this": "Schicke einfach eine deiner monatlichen Spendenquittungen an donors@freecodecamp.org und sag uns, was wir für dich tun sollen. Wir erledigen das für dich und schicken dir eine Bestätigung.", + "anything-else": "Gibt es noch etwas, was ich über das Spenden an freeCodeCamp.org erfahren kann?", + "other-support": "Wenn es eine andere Möglichkeit gibt, unsere gemeinnützige Organisation zu unterstützen, die hier nicht aufgeführt ist, oder wenn du Fragen hast, schreibe bitte eine E-Mail an Quincy unter quincy@freecodecamp.org." + }, + "report": { + "sign-in": "Du musst angemeldet sein, um einen Benutzer zu melden", + "details": "Bitte gib so viele Details wie möglich über das Konto oder Verhalten an, das du meldest.", + "portfolio": "Ein Benutzerportfolio melden", + "portfolio-2": "Möchtest du {{username}}'s Portfolio wegen Missbrauch melden?", + "notify-1": "Wir werden das Team der Community-Moderatoren benachrichtigen und eine Kopie dieses Berichts an deine E-Mail senden: {{email}}", + "notify-2": "Wir werden uns bei Bedarf mit dir in Verbindung setzen, um weitere Informationen zu erhalten.", + "what": "Was möchtest du berichten?", + "submit": "Bericht absenden" + }, + "404": { + "page-not-found": "Seite nicht gefunden", + "not-found": "404 nicht gefunden:", + "heres-a-quote": "Wir konnten nicht finden, was du gesucht hast, aber hier ist ein Zitat:" + }, + "search": { + "label": "Suchen", + "placeholder": "Suche in 8.000+ Tutorials", + "see-results": "Alle Ergebnisse für {{searchQuery}} ansehen", + "no-tutorials": "Keine Tutorials gefunden", + "try": "Suchst du nach etwas? Versuche es mit der Suchleiste auf dieser Seite.", + "no-results": "Wir konnten nichts in Verbindung mit <0>{{query}}0> finden" + }, + "misc": { + "offline": "Du scheinst offline zu sein, dein Fortschritt wird möglicherweise nicht gespeichert", + "server-offline": "Der Server konnte nicht erreicht werden und dein Fortschritt wird möglicherweise nicht gespeichert. Bitte wende dich an den <0>Support0>, wenn diese Meldung weiterhin erscheint", + "unsubscribed": "Du wurdest erfolgreich abgemeldet", + "keep-coding": "Wie auch immer du weitermachst, programmiere weiter!", + "email-signup": "E-Mail-Registrierung", + "quincy": "- Quincy Larson, der Lehrer, der freeCodeCamp.org gegründet hat", + "email-blast": "Übrigens, jeden Freitag verschicke ich eine E-Mail mit 5 Links über Programmierung und Informatik. Diese schicke ich an etwa 4 Millionen Menschen. Möchtest du, dass ich diese auch an dich sende?", + "update-email-1": "Aktualisiere deine E-Mail-Adresse", + "update-email-2": "Aktualisiere deine E-Mail-Adresse hier:", + "email": "E-Mail", + "and": "und", + "change-theme": "Anmelden, um das Theme zu ändern.", + "translation-pending": "Hilf uns, zu übersetzen", + "certification-project": "Zertifizierungsprojekt", + "iframe-alert": "Normalerweise würde dieser Link dich auf eine andere Website führen! Er funktioniert. Dies ist ein Link zu: {{externalLink}}", + "document-notfound": "Dokument wurde nicht gefunden" + }, + "icons": { + "gold-cup": "Goldpokal", + "avatar": "Standard-Avatar", + "avatar-2": "Ein Avatar, der mit einem Laptop programmiert", + "donate": "Über PayPal spenden", + "fail": "Test fehlgeschlagen", + "not-passed": "Nicht bestanden", + "waiting": "Warten", + "passed": "Bestanden", + "failed": "Fehlgeschlagen", + "hint": "Hinweis", + "heart": "Herz", + "initial": "Initial", + "info": "Einführungsinformationen", + "spacer": "Abstandhalter", + "toggle": "Häkchen umschalten", + "magnifier": "Lupe" + }, + "aria": { + "fcc-curriculum": "freeCodeCamp Studienplan", + "answer": "Antwort", + "linkedin": "Link zu {{username}}'s LinkedIn-Account", + "github": "Link zu {{username}}'s GitHub-Account", + "website": "Link zu {{username}}'s Website", + "twitter": "Link zu {{username}}'s Twitter-Account", + "first-page": "Zur ersten Seite gehen", + "previous-page": "Zur vorherigen Seite gehen", + "next-page": "Zur nächsten Seite gehen", + "last-page": "Zur letzten Seite gehen", + "primary-nav": "primär", + "breadcrumb-nav": "Breadcrumb", + "submit": "Verwende Strg + Enter zum Absenden.", + "running-tests": "Tests werden durchgeführt", + "step": "Schritt", + "steps": "Schritte", + "steps-for": "Schritte für {{blockTitle}}" + }, + "flash": { + "honest-first": "Um eine Zertifizierung zu erlangen, musst du zunächst unsere Richtlinie zur akademischen Ehrlichkeit akzeptieren", + "really-weird": "Etwas wirklich Seltsames ist passiert. Wenn es wieder passiert, erwäge bitte, einen Fehler auf https://github.com/freeCodeCamp/freeCodeCamp/issues/new zu melden.", + "not-right": "Irgendetwas ist nicht in Ordnung. Es wurde ein Bericht erstellt und das freeCodeCamp.org Team wurde benachrichtigt", + "went-wrong": "Etwas ist schief gelaufen, bitte überprüfe und versuche es erneut", + "account-deleted": "Dein Konto wurde erfolgreich gelöscht", + "progress-reset": "Dein Fortschritt wurde zurückgesetzt", + "not-authorized": "Du bist nicht berechtigt, diese Route weiter zu befahren", + "could-not-find": "Wir konnten nicht finden, was du gesucht hast. Bitte überprüfe und versuche es erneut", + "wrong-updating": "Beim Aktualisieren deines Kontos ist etwas schief gelaufen. Bitte überprüfe und versuche es erneut", + "updated-preferences": "Wir haben deine Einstellungen aktualisiert", + "email-invalid": "E-Mail-Format ist ungültig", + "email-valid": "Deine E-Mail wurde erfolgreich geändert. Viel Spaß beim Coding!", + "bad-challengeId": "currentChallengeId ist keine gültige Challenge-ID", + "theme-invalid": "Das Theme ist ungültig", + "theme-set": "Theme bereits festgelegt", + "theme-updated": "Dein Theme wurde aktualisiert!", + "username-used": "Benutzername ist bereits mit diesem Konto verknüpft", + "username-taken": "Benutzername ist bereits mit einem anderen Konto verknüpft", + "username-updated": "Wir haben deinen Benutzernamen auf {{username}} aktualisiert", + "could-not-logout": "Wir konnten dich nicht abmelden, bitte versuche es in einem Moment noch einmal", + "email-encoded-wrong": "Die im Link kodierte E-Mail ist falsch formatiert", + "oops-not-right": "Ups, da stimmt etwas nicht, bitte fordere einen neuen Link zum Anmelden / Registrieren an", + "expired-link": "Es sieht so aus, als ob der Link, den du geklickt hast, abgelaufen wäre. Bitte fordere einen neuen Link an, um dich anzumelden.", + "signin-success": "Geschafft! Du hast dich in deinem Konto angemeldet. Viel Spaß beim Programmieren!", + "social-auth-gone": "Aus Gründen des Datenschutzes verabschieden wir uns von der sozialen Authentifizierung. Beim nächsten Mal empfehlen wir, deine E-Mail-Adresse zu verwenden: {{email}}, um sich stattdessen anzumelden.", + "name-needed": "Wir benötigen deinen Namen, damit wir ihn auf deinem Zertifikat eintragen können. Füge deinen Namen zu deinen Kontoeinstellungen hinzu und klicke auf den Speichern-Button. Dann können wir dein Zertifikat ausstellen.", + "incomplete-steps": "Es sieht so aus, als hättest du die notwendigen Schritte nicht abgeschlossen. Bitte vervollständige die erforderlichen Projekte, um die {{name}} Zertifizierung zu erhalten.", + "already-claimed": "Es sieht so aus, als hättest du bereits die {{name}} Zertifizierung erhalten", + "cert-claim-success": "@{{username}}, du hast erfolgreich die {{name}} Zertifizierung bestanden! Herzlichen Glückwunsch im Namen des freeCodeCamp.org Teams!", + "wrong-name": "Bei der Überprüfung von {{name}} ist etwas schief gelaufen, bitte versuche es erneut. Wenn du weiterhin diesen Fehler erhältst, kannst du eine Nachricht an support@freeCodeCamp.org senden, um Hilfe zu erhalten.", + "error-claiming": "Fehler beim Anfordern von {{certName}}", + "refresh-needed": "Du kannst den Button Zahlungsanforderung nur einmal verwenden. Aktualisiere die Seite, um neu zu beginnen.", + "username-not-found": "Wir konnten keinen Benutzer mit dem Benutzernamen \"{{username}}\" finden", + "add-name": "Dieser Nutzer muss seinen Namen zu seinem Konto hinzufügen, damit andere seine Zertifizierungen sehen können.", + "not-eligible": "Dieser Benutzer ist zu diesem Zeitpunkt nicht für freeCodeCamp.org-Zertifizierungen berechtigt.", + "profile-private": "{{username}} hat sich entschieden, sein Profil privat zu halten. Du musst dein Profil öffentlich machen, damit andere deine Zertifikate sehen können.", + "certs-private": "{{username}} hat sich entschieden, seine Zertifizierungen privat zu lassen. Sie müssen ihre Zertifizierungen öffentlich machen, damit andere sie sehen können.", + "not-honest": "{{username}} hat unserem akademischen Ehrlichkeitsversprechen noch nicht zugestimmt.", + "user-not-certified": "Es sieht so aus, als ob Benutzer {{username}} nicht {{cert}} zertifiziert ist", + "invalid-challenge": "Das scheint keine gültige Einreichung zu sein", + "no-links-provided": "Du hast die gültigen Links nicht angegeben, damit wir deine Arbeit überprüfen können.", + "no-social": "Kein sozialer Account gefunden", + "invalid-social": "Ungültiger sozialer Account", + "no-account": "Kein {{website}}-Account verbunden", + "unlink-success": "Du hast deine {{website}} erfolgreich entfernt", + "provide-username": "Prüfe, ob du einen Benutzernamen und einen Bericht angegeben hast", + "report-sent": "Ein Bericht wurde an das Team mit {{email}} in Kopie gesendet", + "certificate-missing": "Die Zertifizierung, die du einsehen wolltest, existiert nicht", + "create-token-err": "Beim Erstellen deines Benutzer-Tokens ist ein Fehler aufgetreten", + "delete-token-err": "Beim Löschen deines Benutzer-Tokens ist ein Fehler aufgetreten", + "token-created": "Du hast erfolgreich einen neuen Benutzer-Token erstellt.", + "token-deleted": "Dein Benutzer-Token wurde gelöscht.", + "start-project-err": "Beim Versuch, das Projekt zu starten, ist etwas schief gelaufen. Bitte versuche es noch einmal.", + "complete-project-first": "Du musst das Projekt zuerst abschließen.", + "local-code-save-error": "Ups, dein Code wurde nicht gespeichert, der lokale Speicher deines Browsers ist möglicherweise voll.", + "local-code-saved": "Gespeichert! Dein Code wurde im lokalen Speicher deines Browsers gespeichert.", + "code-saved": "Dein Code wurde in der Datenbank gespeichert. Er wird hier sein, wenn du zurückkommst.", + "code-save-error": "Beim Versuch, deinen Code zu speichern, ist ein Fehler aufgetreten.", + "code-save-less": "Mach langsam! Dein Code wurde nicht gespeichert. Versuche es in ein paar Sekunden noch einmal.", + "challenge-save-too-big": "Du kannst deinen Code leider nicht speichern. Dein Code ist {{user-size}} Bytes groß. Wir erlauben ein Maximum von {{max-size}} Bytes. Bitte verkleinere deinen Code und versuche es noch einmal oder bitte um Hilfe auf https://forum.freecodecamp.org", + "challenge-submit-too-big": "Du kannst deinen Code leider nicht einreichen. Dein Code ist {{user-size}} Bytes groß. Wir erlauben ein Maximum von {{max-size}} Bytes. Bitte verkleinere deinen Code und versuche es noch einmal oder bitte um Hilfe auf https://forum.freecodecamp.org", + "invalid-update-flag": "Du versuchst, auf verbotene Ressourcen zuzugreifen. Bitte fordere unter https://forum.freecodecamp.org Unterstützung an, wenn dies eine gültige Anfrage ist." + }, + "validation": { + "max-characters": "Es gibt eine maximale Grenze von 288 Zeichen, du hast noch {{charsLeft}} übrig", + "same-email": "Diese E-Mail ist die gleiche wie deine aktuelle E-Mail", + "invalid-email": "Wir konnten deine E-Mail nicht ordnungsgemäß überprüfen, bitte stelle sicher, dass sie korrekt ist", + "email-mismatch": "Beide neuen E-Mail-Adressen müssen identisch sein", + "title-required": "Ein Titel ist erforderlich", + "title-short": "Titel ist zu kurz", + "title-long": "Titel ist zu lang", + "invalid-url": "Wir konnten deine URL nicht ordnungsgemäß überprüfen, bitte stelle sicher, dass sie korrekt ist", + "invalid-protocol": "URL muss mit http oder https beginnen", + "url-not-image": "URL muss direkt mit einer Bilddatei verknüpft sein", + "use-valid-url": "Bitte verwende eine gültige URL", + "editor-url": "Denke daran, die Live App URL einzureichen.", + "http-url": "Eine unsichere (http) URL kann nicht verwendet werden.", + "own-work-url": "Denke daran, deine eigene Arbeit einzureichen.", + "publicly-visible-url": "Denke daran, eine öffentlich sichtbare App-URL einzureichen." + }, + "certification": { + "executive": "Geschäftsführender Direktor, freeCodeCamp.org", + "verify": "Diese Zertifizierung kann unter {{certURL}} überprüft werden", + "issued": "Ausgestellt", + "fulltext": "<0> Hiermit wird bescheinigt, dass0> <1>{{user}}1> <2>die freeCodeCamp.org2> <3>{{title}}3> <4>Entwickler-Zertifizierung erfolgreich abgeschlossen hat, was ungefähr {{time}} Stunden an Kursarbeit entspricht.4>", + "project": { + "heading-legacy-full-stack": "Im Rahmen dieser Legacy-Full-Stack-Zertifizierung hat {{user}} folgende Zertifikate abgeschlossen:", + "heading": "Im Rahmen dieser Zertifizierung hat {{user}} folgende Projekte erstellt und alle automatisierten Testsuiten bestanden:", + "solution": "Lösung", + "no-solution": "Fehler bei der Anzeige der Lösung, schreibe eine E-Mail an support@freeCodeCamp.org, um Hilfe zu erhalten.", + "source": "Quelle", + "footnote": "Wenn du den Verdacht hast, dass eines dieser Projekte gegen die <2>Richtlinie zur akademischen Ehrlichkeit2> verstößt, <5>melde dies bitte unserem Team5>.", + "title": { + "Build a Personal Portfolio Webpage": "Erstelle eine persönliche Portfolio-Webseite", + "Build a Random Quote Machine": "Erstelle eine Zufalls-Zitat-Maschine", + "Build a 25 + 5 Clock": "Erstelle eine 25 + 5 Uhr", + "Build a JavaScript Calculator": "Erstelle einen JavaScript-Rechner", + "Show the Local Weather": "Lokales Wetter anzeigen", + "Use the TwitchTV JSON API": "Verwende die TwitchTV JSON API", + "Stylize Stories on Camper News": "Geschichten auf Camper News stilisieren", + "Build a Wikipedia Viewer": "Erstelle einen Wikipedia-Viewer", + "Build a Tic Tac Toe Game": "Erstelle ein Tic Tac Toe Spiel", + "Build a Simon Game": "Erstelle ein Simon-Spiel", + "Timestamp Microservice": "Zeitstempel Microservice", + "Request Header Parser Microservice": "Request-Header-Parser-Mikroservice", + "URL Shortener Microservice": "URL Shortener Microservice", + "Image Search Abstraction Layer": "Bildsuchabstraktionsebene", + "File Metadata Microservice": "Datei-Metadaten-Mikroservice", + "Build a Voting App": "Erstelle eine Abstimmungsapp", + "Build a Nightlife Coordination App": "Erstelle eine App zur Nachtleben-Koordination", + "Chart the Stock Market": "Zeichne den Aktienmarkt auf", + "Manage a Book Trading Club": "Verwalte einen Buchhandelsclub", + "Build a Pinterest Clone": "Erstelle einen Pinterest Klon", + "Build a Markdown Previewer": "Erstelle einen Markdown Vorschau-Viewer", + "Build a Camper Leaderboard": "Erstelle eine Camper-Rangliste", + "Build a Recipe Box": "Erstelle eine Rezeptbox", + "Build the Game of Life": "Erstelle das Spiel des Lebens", + "Build a Roguelike Dungeon Crawler Game": "Erstelle ein schurkenartiges Dungeon Crawler Spiel", + "Visualize Data with a Bar Chart": "Visualisiere Daten mit einem Balkendiagramm", + "Visualize Data with a Scatterplot Graph": "Visualisiere Daten mit einem Scatterplot-Diagramm (Streudiagramm)", + "Visualize Data with a Heat Map": "Visualisiere Daten mit einer Heatmap", + "Show National Contiguity with a Force Directed Graph": "Zeige nationale Kontiguität mit einem kraftgerichteten Graphen", + "Map Data Across the Globe": "Kartendaten rund um den Globus", + "Metric-Imperial Converter": "Metrisch-Imperialer Konverter", + "Issue Tracker": "Issue-Tracker", + "Personal Library": "Persönliche Bibliothek", + "Stock Price Checker": "Aktienpreisprüfer", + "Anonymous Message Board": "Anonymes Nachrichtenbrett", + "Build a Tribute Page": "Erstelle eine Tributeseite", + "Build a Survey Form": "Erstelle ein Umfrageformular", + "Build a Product Landing Page": "Erstelle eine Landing Page für ein Produkt", + "Build a Technical Documentation Page": "Erstelle eine Seite für technische Dokumentation", + "Palindrome Checker": "Palindrom-Checker", + "Roman Numeral Converter": "Konverter für römische Ziffern", + "Caesars Cipher": "Cäsar-Chiffre", + "Telephone Number Validator": "Telefonnummerprüfer", + "Cash Register": "Registrierkasse", + "Build a Drum Machine": "Erstelle eine Schlagzeug-Maschine", + "Visualize Data with a Choropleth Map": "Visualisiere Daten mit einer Choroplethenkarte (Flächenkartogramm)", + "Visualize Data with a Treemap Diagram": "Visualisiere Daten mit einem Treemap-Diagramm", + "Exercise Tracker": "Übungs-Tracker", + "Sudoku Solver": "Sudoku-Löser", + "American British Translator": "Amerikanischer Britischer Übersetzer", + "Arithmetic Formatter": "Arithmetischer Formatierer", + "Time Calculator": "Zeitrechner", + "Budget App": "Budget-App", + "Polygon Area Calculator": "Polygon-Flächenrechner", + "Probability Calculator": "Wahrscheinlichkeitsrechner", + "Mean-Variance-Standard Deviation Calculator": "Berechnungsprogramm für Mittelwert, Varianz, und Standardabweichung", + "Demographic Data Analyzer": "Demografischer Datenanalysator", + "Medical Data Visualizer": "Medizinischer Datenvisualisierer", + "Page View Time Series Visualizer": "Seitenansicht Zeitreihen-Visualisierer", + "Sea Level Predictor": "Meeresspiegelvorhersage", + "Port Scanner": "Port-Scanner", + "SHA-1 Password Cracker": "SHA-1 Passwort-Cracker", + "Secure Real Time Multiplayer Game": "Sicheres Echtzeit-Multiplayer-Spiel", + "Rock Paper Scissors": "Schere Stein Papier", + "Cat and Dog Image Classifier": "Katzen- und Hundebildklassifizierer", + "Book Recommendation Engine using KNN": "Buchempfehlungsmaschine mithilfe von KNN", + "Linear Regression Health Costs Calculator": "Gesundheitskostenrechner mit einer linearen Regression", + "Neural Network SMS Text Classifier": "SMS-Textklassifizierung mittels neuronalem Netzwerk" + } + } + }, + "certification-card": { + "title": "Beantrage dein Zertifikat", + "intro": "Erledige die folgenden Schritte, um deine {{i18nCertText}} zu beanspruchen und anzusehen", + "complete-project": "Schließe {{i18nCertText}} Projekte ab", + "accept-honesty": "Akzeptiere unsere Richtlinie zur akademischen Ehrlichkeit", + "set-name": "Lege deinen Namen fest und mache ihn öffentlich", + "set-certs-public": "Setze deine Zertifizierungseinstellungen auf öffentlich", + "set-profile-public": "Profileinstellungen auf öffentlich setzen", + "set-claim": "Zertifizierung beantragen und anzeigen" + }, + "forum-help": { + "browser-info": "**Deine Browser-Informationen:**", + "user-agent": "User Agent ist:
{{userAgent}}
",
+ "challenge": "**Herausforderung:** {{challengeTitle}}",
+ "challenge-link": "**Link zur Herausforderung: **",
+ "whats-happening": "**Sag uns, was vor sich geht:**",
+ "describe": "Beschreibe hier dein Problem im Detail.",
+ "camper-project": "**Deine Projekt-Link(s)**",
+ "camper-code": "**Dein Code bisher**",
+ "warning": "WARNUNG",
+ "too-long-one": "Der Startcode der Herausforderung und/oder deine Lösung hat die maximale Länge überschritten, die wir von der Herausforderung übernehmen können.",
+ "too-long-two": "Du musst hier einen zusätzlichen Schritt machen, damit der von dir geschriebene Code in einem einfach zu lesenden Format dargestellt wird.",
+ "too-long-three": "Bitte kopiere/und füge den gesamten Editor-Code ein, der in der Herausforderung angezeigt wird, von wo aus du gerade verlinkt hast.",
+ "add-code-one": "Ersetze diese beiden Sätze durch deinen kopierten Code.",
+ "add-code-two": "Bitte lass die ``` Zeile oben und die ``` Zeile unten stehen,",
+ "add-code-three": "weil sie die korrekte Formatierung deines Codes im Beitrag ermöglichen."
+ },
+ "user-token": {
+ "title": "Benutzer-Token",
+ "create": "Ein neuen Token erstellen",
+ "create-p1": "Es sieht so aus, als hättest du keinen Benutzer-Token. Erstelle einen, um deinen Fortschritt in diesem Abschnitt zu speichern",
+ "create-p2": "Erstelle ein Benutzer-Token, um deinen Fortschritt bei den Studienabschnitten zu speichern, die eine virtuelle Maschine verwenden.",
+ "delete": "Meinen Benutzer-Token löschen",
+ "delete-title": "Meinen Benutzer-Token löschen",
+ "delete-p1": "Dein Benutzer-Token wird verwendet, um deinen Fortschritt in den Studienabschnitten zu speichern, die eine virtuelle Maschine verwenden. Wenn du den Verdacht hast, dass er kompromittiert wurde, kannst du ihn löschen, ohne dass der Fortschritt verloren geht. Ein neuer Token wird automatisch erstellt, wenn du das nächste Mal ein Projekt öffnest.",
+ "delete-p2": "Wenn du vermutest, dass dein Token kompromittiert wurde, kannst du ihn löschen, um ihn unbrauchbar zu machen. Der Fortschritt bei bereits eingereichten Lektionen geht nicht verloren.",
+ "delete-p3": "Du musst einen neuen Token erstellen, um zukünftige Fortschritte in den Studienplanabschnitten zu speichern, die eine virtuelle Maschine verwenden.",
+ "no-thanks": "Nein danke, ich möchte meinen Token behalten",
+ "yes-please": "Ja, ich möchte mein Token löschen"
+ },
+ "shortcuts": {
+ "title": "Tastaturkurzbefehle",
+ "table-header-action": "Aktion",
+ "table-header-key": "Taste(n)",
+ "navigation-mode": "Navigations-Modus",
+ "execute-challenge": "Aufgabe ausführen",
+ "focus-editor": "Fokus Editor",
+ "focus-instructions-panel": "Fokus-Bedienfeld",
+ "navigate-previous": "Zur vorherigen Übung navigieren",
+ "navigate-next": "Zur nächsten Übung navigieren"
+ }
+}
diff --git a/client/i18n/locales/german/trending.json b/client/i18n/locales/german/trending.json
new file mode 100644
index 00000000000000..424577013755a2
--- /dev/null
+++ b/client/i18n/locales/german/trending.json
@@ -0,0 +1,62 @@
+{
+ "article0title": "Discord Won't Open",
+ "article0link": "https://www.freecodecamp.org/news/discord-wont-open-on-my-pc-solved-in-windows-10/",
+ "article1title": "Learn Java Courses",
+ "article1link": "https://www.freecodecamp.org/news/learn-java-free-java-courses-for-beginners/",
+ "article2title": "SQL Like Statement",
+ "article2link": "https://www.freecodecamp.org/news/sql-like-statement-how-to-query-sql-with-wildcard/",
+ "article3title": "File Explorer Error",
+ "article3link": "https://www.freecodecamp.org/news/file-explorer-not-responding-fixed-on-windows-10-pc/",
+ "article4title": "Python Find in List",
+ "article4link": "https://www.freecodecamp.org/news/python-find-in-list-how-to-find-the-index-of-an-item-or-element-in-a-list/",
+ "article5title": "Functions in Python",
+ "article5link": "https://www.freecodecamp.org/news/python-functions-define-and-call-a-function/",
+ "article6title": "Python Reverse List",
+ "article6link": "https://www.freecodecamp.org/news/python-reverse-list-how-to-reverse-a-range-or-array/",
+ "article7title": "Create a Table in SQL",
+ "article7link": "https://www.freecodecamp.org/news/how-to-create-a-table-in-sql-postgres-and-mysql-example-query/",
+ "article8title": "List Index Out of Range",
+ "article8link": "https://www.freecodecamp.org/news/list-index-out-of-range-python-error-message-solved/",
+ "article9title": "Python String.Replace()",
+ "article9link": "https://www.freecodecamp.org/news/python-string-replace-function-in-python-for-substring-substitution/",
+ "article10title": "C vs C++",
+ "article10link": "https://www.freecodecamp.org/news/c-vs-cpp-whats-the-difference/",
+ "article11title": "Python JSON",
+ "article11link": "https://www.freecodecamp.org/news/python-json-how-to-convert-a-string-to-json/",
+ "article12title": "What is a PC?",
+ "article12link": "https://www.freecodecamp.org/news/what-is-a-pc-computer-definition-and-computer-basics-for-beginners/",
+ "article13title": "What is Coding?",
+ "article13link": "https://www.freecodecamp.org/news/computer-coding-computer-program-definition-and-code-meaning/",
+ "article14title": "Text Box in HTML",
+ "article14link": "https://www.freecodecamp.org/news/text-box-in-html-the-input-field-html-tag/",
+ "article15title": "Meta Tag in HTML",
+ "article15link": "https://www.freecodecamp.org/news/meta-tag-in-html-what-is-metadata-and-meta-description-example/",
+ "article16title": "Append in Python",
+ "article16link": "https://www.freecodecamp.org/news/append-in-python-how-to-append-to-a-list-or-an-array/",
+ "article17title": "Python Not Equal",
+ "article17link": "https://www.freecodecamp.org/news/python-not-equal-how-to-use-the-does-not-equal-operator/",
+ "article18title": "Linux awk Command",
+ "article18link": "https://www.freecodecamp.org/news/the-linux-awk-command-linux-and-unix-usage-syntax-examples/",
+ "article19title": "JS String Contains",
+ "article19link": "https://www.freecodecamp.org/news/javascript-string-contains-how-to-use-js-includes/",
+ "article20title": "How to Open Task Manager",
+ "article20link": "https://www.freecodecamp.org/news/how-to-open-task-manager-in-windows-10/",
+ "article21title": "Design Thinking Explained",
+ "article21link": "https://www.freecodecamp.org/news/the-design-thinking-process-explained/",
+ "article22title": "Learn Programming Courses",
+ "article22link": "https://www.freecodecamp.org/news/learn-programming-free-software-development-courses-for-beginners/",
+ "article23title": "Make a Transparent Taskbar",
+ "article23link": "https://www.freecodecamp.org/news/transparent-taskbar-how-to-make-a-task-bar-transparent-in-windows-10-pc-2/",
+ "article24title": "Install Ethernet Driver PC",
+ "article24link": "https://www.freecodecamp.org/news/windows-10-network-adapter-missing-how-to-install-ethernet-driver-on-pc/",
+ "article25title": "Default Constructor in Java",
+ "article25link": "https://www.freecodecamp.org/news/default-constructor-in-java/",
+ "article26title": "Stuck Win 10 Hard Drive",
+ "article26link": "https://www.freecodecamp.org/news/scanning-and-repairing-drive-how-to-fix-stuck-windows-10-pc-hard-drive/",
+ "article27title": "Color Codes for Grey Palette",
+ "article27link": "https://www.freecodecamp.org/news/color-shades-hex-code-and-rgb-for-gray-color-palette/",
+ "article28title": "Binary Search Tree Traversal",
+ "article28link": "https://www.freecodecamp.org/news/binary-search-tree-traversal-inorder-preorder-post-order-for-bst/",
+ "article29title": "RTC Connecting Discord Fix",
+ "article29link": "https://www.freecodecamp.org/news/rtc-connecting-discord-how-to-fix-the-server-error/"
+ }
\ No newline at end of file
diff --git a/client/i18n/locales/italian/intro.json b/client/i18n/locales/italian/intro.json
index 6828908cfd2a38..fead2731369f51 100644
--- a/client/i18n/locales/italian/intro.json
+++ b/client/i18n/locales/italian/intro.json
@@ -67,11 +67,11 @@
}
},
"2022/responsive-web-design": {
- "title": "(New) Responsive Web Design",
+ "title": "(Nuovo) Web Design Responsivo",
"intro": [
"In questo corso certificato di Web Design Responsivo imparerai i linguaggi che gli sviluppatori utilizzano per creare le pagine web. HTML (Hypertext Markup Language) per i contenuti e CSS (Cascading Style Sheets) per il design.",
- "Innanzitutto, creerai un'app di foto per gatti per imparare le basi dell'HTML e dei CSS. Più avanti, imparerai le moderne tecniche come le variabili CSS disegnando un pinguino, e le migliori pratiche di accessibilità creando un form web.",
- "Infine imparerai a fare pagine web adattabili a diverse misure di schermo creando una Twitter Card con Flexbox, e un complesso layout per un blog con una griglia CSS."
+ "Per prima cosa, costruirai un'app con foto di gatti per imparare le basi di HTML e CSS. Poi apprenderai tecniche più moderne come le variabili in CSS costruendo un pinguino, e le migliori pratiche per l'accessibilità costruendo un quiz.",
+ "Infine, imparerai come fare pagine web che rispondono a diverse dimensioni dello schermo costruendo una galleria di foto con Flexbox e il layout di un articolo di rivista con CSS Grid."
],
"note": "Nota: Alcune estensioni del browser, come ad esempio gli ad-blocker e le estensioni per la modalità scura, possono interferire con i test. In caso di problemi, ti consigliamo di disabilitare le estensioni che modificano il contenuto o il layout delle pagine durante il corso.",
"blocks": {
@@ -300,64 +300,64 @@
}
},
"2022/javascript-algorithms-and-data-structures": {
- "title": "JavaScript Algorithms and Data Structures (Beta)",
+ "title": "Algoritmi e Strutture Dati JavaScript (Beta)",
"intro": [
- "placeholder",
- "placeholder"
+ "segnaposto",
+ "segnaposto"
],
"note": "",
"blocks": {
"build-a-caesars-cipher-project": {
- "title": "Build a Casears Cipher Project",
+ "title": "Crea un cifrario di Cesare",
"intro": [
"",
""
]
},
"build-a-cash-register-project": {
- "title": "Build a Cash Register Project",
+ "title": "Crea un registro di cassa",
"intro": [
"",
""
]
},
"build-a-palindrome-checker-project": {
- "title": "Build a Palindrome Checker Project",
+ "title": "Crea un verificatore di palindromi",
"intro": [
"",
""
]
},
"build-a-roman-numeral-converter-project": {
- "title": "Build a Roman Numeral Converter Project",
+ "title": "Crea un convertitore di numeri romani",
"intro": [
"",
""
]
},
"build-a-telephone-number-validator-project": {
- "title": "Build a Telephone Number Validator Project",
+ "title": "Crea un validatore di numeri telefonici",
"intro": [
"",
""
]
},
"learn-basic-javascript-by-building-a-role-playing-game": {
- "title": "Learn Basic JavaScript by Building a Role Playing Game",
+ "title": "Impara JavaScript Base creando un gioco di ruolo",
"intro": [
"",
""
]
},
"learn-form-validation-by-building-a-calorie-counter": {
- "title": "Learn Form Validation by Building a Calorie Counter",
+ "title": "Impara la validazione dei moduli creando un contatore di calorie",
"intro": [
"",
""
]
},
"learn-functional-programming-by-building-a-spreadsheet": {
- "title": "Learn Functional Programming by Building a Spreadsheet",
+ "title": "Impara programmazione funzionale creando un foglio di calcolo",
"intro": [
"",
""
@@ -606,8 +606,8 @@
"mongodb-and-mongoose": {
"title": "MongoDB e Mongoose",
"intro": [
- "MongoDB è un'applicazione di database che memorizza documenti JSON (o record) che è possibile utilizzare nella propria applicazione. A differenza di SQL, un altro tipo di database, Mongo è un database non relazionale o \"NoSQL\". Questo significa che Mongo memorizza tutti i dati associati in un record, invece di memorizzarli in molte tabelle preimpostate come in un database SQL.",
- "Mongoose è un popolare pacchetto npm che è spesso installato insieme a Mongo. Con Mongoose, è possibile utilizzare semplici oggetti JavaScript invece di JSON, il che rende più facile lavorare con Mongo. Inoltre, ti permette di creare progetti per i tuoi documenti chiamati schemas, in modo da non salvare accidentalmente il tipo sbagliato di dati e causare bug in seguito.",
+ "MongoDB è un'applicazione di databse che memorizza documenti JSON (o record) che puoi usare nella tua applicazione. A differenza di SQL, un altro tipo di database, MongoDB è un database non relazionale o un database \"NoSQL\". Questo significa che MongoDB memorizza tutti i dati associati in un record al posto di memorizzarli in varie tabelle preimpostate come in un database SQL.",
+ "Mongoose è un popolare pacchetto npm che interagisce con MongoDB. Con Mongoose puoi utilizzare dei semplici oggetti JavaScript al posto di JSON, ciò rende più facile lavorare con MongoDB. Inoltre, ti permette di creare schemi per i tuoi documenti chiamati schemas, così da non salvare il tipo di dato sbagliato e causare bug in seguito.",
"Nei corsi di MongoDB e Mongoose, imparerai i fondamenti di come si lavora con dati persistenti, incluso come impostare un modello, e salvare, cancellare e trovare documenti nel database."
]
},
@@ -804,7 +804,8 @@
"title": "Codice Rosetta",
"intro": [
"Fai salire di livello le tue capacità creative di problem solving con queste attività di programmazione gratuite dalla libreria classica Rosetta Code.",
- "Queste sfide possono rivelarsi difficili, ma spingeranno la tua logica algoritmica a nuove vette."
+ "Queste sfide possono rivelarsi difficili, ma spingeranno la tua logica algoritmica a nuove vette.",
+ "Fonte: Codice Rosetta"
]
},
"project-euler": {
diff --git a/client/i18n/locales/italian/links.json b/client/i18n/locales/italian/links.json
index 171469390073b7..eb29b9968e040c 100644
--- a/client/i18n/locales/italian/links.json
+++ b/client/i18n/locales/italian/links.json
@@ -13,7 +13,10 @@
"copyright-url": "https://www.freecodecamp.org/news/copyright-policy/"
},
"donate": {
- "other-ways-url": "https://www.freecodecamp.org/news/how-to-donate-to-free-code-camp"
+ "other-ways-url": "https://www.freecodecamp.org/news/how-to-donate-to-free-code-camp",
+ "download-irs-url": "https://s3.amazonaws.com/freecodecamp/Free+Code+Camp+Inc+IRS+Determination+Letter.pdf",
+ "download-990-url": "https://freecodecamp.s3.amazonaws.com/freeCodeCamp+2019+f990.pdf",
+ "one-time-url": "https://paypal.me/freecodecamp"
},
"nav": {
"forum": "https://forum.freecodecamp.org/c/italiano/",
@@ -23,6 +26,6 @@
"HTML-CSS": "Italiano/HTML-CSS",
"JavaScript": "Italiano/JavaScript",
"Python": "Italiano/Python",
- "Relational Databases": "Italiano/Relational Databases"
+ "Backend Development": "italiano/aiuto-programmazione"
}
}
diff --git a/client/i18n/locales/italian/meta-tags.json b/client/i18n/locales/italian/meta-tags.json
index cf2020dbfb80e6..558473305e141c 100644
--- a/client/i18n/locales/italian/meta-tags.json
+++ b/client/i18n/locales/italian/meta-tags.json
@@ -1,21 +1,21 @@
{
- "title": "Learn to Code — For Free — Coding Courses for Busy People",
- "description": "Learn to Code — For Free",
- "social-description": "Learn to Code — For Free",
+ "title": "Impara a programmare — Gratis — Corsi di programmazione per persone impegnate",
+ "description": "Impara a programmare — Gratis",
+ "social-description": "Impara a programmare — Gratis",
"keywords": [
"python",
"javascript",
"js",
"git",
"github",
- "website",
+ "sito web",
"web",
- "development",
+ "sviluppo",
"free",
"code",
"camp",
- "course",
- "courses",
+ "corso",
+ "corsi",
"html",
"css",
"react",
@@ -24,9 +24,12 @@
"front",
"back",
"end",
- "learn",
+ "imparare",
"tutorial",
- "programming"
+ "programmazione",
+ "gratis",
+ "gratuitamente",
+ "programmare"
],
- "youre-unsubscribed": "You have been unsubscribed"
+ "youre-unsubscribed": "La tua iscrizione è stata cancellata"
}
diff --git a/client/i18n/locales/italian/translations.json b/client/i18n/locales/italian/translations.json
index 5a629f4f1f9bc7..4d237c3605a86c 100644
--- a/client/i18n/locales/italian/translations.json
+++ b/client/i18n/locales/italian/translations.json
@@ -50,7 +50,8 @@
"reset-lesson": "Resetta questa lezione",
"run": "Avvia",
"run-test": "Esegui i test (Ctrl + Invio)",
- "check-code": "Check Your Code (Ctrl + Enter)",
+ "check-code": "Verifica il tuo codice (Ctrl + Invio)",
+ "check-code-2": "Verifica il tuo codice",
"reset": "Resetta",
"reset-code": "Resetta tutto il codice",
"help": "Guida",
@@ -70,7 +71,11 @@
"start-coding": "Inizia a programmare!",
"go-to-settings": "Vai alle impostazioni per richiedere la tua certificazione",
"click-start-course": "Inizia il corso",
- "click-start-project": "Inizia il progetto"
+ "click-start-project": "Inizia il progetto",
+ "change-language": "Cambia lingua",
+ "cancel-change": "Annulla modifica",
+ "resume-project": "Riprendi progetto",
+ "start-project": "Avvia il progetto"
},
"landing": {
"big-heading-1": "Impara a programmare — gratis.",
@@ -101,7 +106,7 @@
},
"settings": {
"share-projects": "Condividi i tuoi progetti non-freeCodeCamp, articoli o pull request accettate.",
- "privacy": "The settings in this section enable you to control what is shown on your freeCodeCamp public portfolio. Press save to save your changes.",
+ "privacy": "Le impostazioni di questa sezione ti permettono di controllare quello che viene mostrato sul tuo portfolio pubblico di freeCodeCamp. Premi salva per salvare le tue modifiche.",
"data": "Per vedere quali dati teniamo nel tuo account, clicca sul pulsante \"Scarica i tuoi dati\" qui sotto",
"disabled": "Le tue certificazioni saranno disabilitate, se impostato su privato.",
"private-name": "Il tuo nome non apparirà sulle certificazioni, se impostato su privato.",
@@ -143,7 +148,8 @@
"my-timeline": "La mia cronologia",
"my-donations": "Le mie donazioni",
"night-mode": "Modalità Notturna",
- "sound-mode": "Modalità Campfire"
+ "sound-mode": "Modalità Campfire",
+ "keyboard-shortcuts": "Abilita le scorciatoie da tastiera"
},
"headings": {
"certs": "Certificazioni",
@@ -269,7 +275,7 @@
"solution-link": "Link alla soluzione",
"github-link": "Link GitHub",
"submit-and-go": "Invia e vai alla prossima sfida",
- "congradulations": "Congratulations, your code passes. Submit your code to complete this step and move on to the next one.",
+ "congratulations": "Congratulazioni, hai superato i test. Invia in tuo codice per continuare.",
"i-completed": "Ho completato questa sfida",
"test-output": "Il risultato del tuo test andrà qui",
"running-tests": "// test in corso",
@@ -280,14 +286,14 @@
"percent-complete": "{{percent}}% completato",
"tried-rsa": "Se hai già provato il metodo <0>Leggi-Cerca-Chiedi0>, allora puoi chiedere aiuto sul forum freeCodeCamp.",
"rsa": "Leggi, cerca, chiedi",
+ "rsa-forum": "Before making a new post please see if your question has <0>already been answered on the forum0>.",
"reset": "Vuoi resettare questa lezione?",
"reset-warn": "Sei sicuro di voler resettare questa lezione? Gli editor e i test saranno resettati.",
"reset-warn-2": "Questa operazione non potrà essere annullata",
"scrimba-tip": "Suggerimento: Se il mini-browser copre il codice, fare clic e trascinalo per spostarlo. Inoltre, sentiti libero di fermare e modificare il codice nel video in qualsiasi momento.",
"chal-preview": "Anteprima della sfida",
"cert-map-estimates": {
- "certs": "Certificazione {{title}} (300 ore)",
- "coding-prep": "{{title}} (migliaia di ore di sfide)"
+ "certs": "Certificazione {{title}}"
},
"editor-tabs": {
"info": "Informazioni",
@@ -296,6 +302,7 @@
"restart": "Inizia da capo",
"restart-step": "Ricomincia step",
"console": "Console",
+ "instructions": "Istruzioni",
"notes": "Note",
"preview": "Anteprima"
},
@@ -310,13 +317,14 @@
"runs-in-vm": "Il progetto esegue in una macchina virtuale, completa le user story descritte lì dentro e fai passare tutti i test per finire lo step 1.",
"completed": "Completato",
"not-started": "Non iniziato",
- "hint": "Hint",
+ "hint": "Suggerimento",
"test": "Test",
- "sorry-try-again": "Sorry, your code does not pass. Try again.",
- "sorry-keep-trying": "Sorry, your code does not pass. Keep trying.",
- "sorry-getting-there": "Sorry, your code does not pass. You're getting there.",
- "sorry-hang-in-there": "Sorry, your code does not pass. Hang in there.",
- "sorry-dont-giveup": "Sorry, your code does not pass. Don't give up."
+ "sorry-try-again": "Il tuo codice non è corretto. Riprova.",
+ "sorry-keep-trying": "Il tuo codice non è corretto. Continua a provare.",
+ "sorry-getting-there": "Il tuo codice non è corretto. Ci sei quasi.",
+ "sorry-hang-in-there": "Il tuo codice non è corretto. Tieni duro.",
+ "sorry-dont-giveup": "Il tuo codice non è corretto. Non arrenderti.",
+ "challenges-completed": "{{completedCount}} di {{totalChallenges}} sfide completate"
},
"donate": {
"title": "Supporta il nostro no profit",
@@ -324,7 +332,6 @@
"redirecting": "Reindirizzamento...",
"thanks": "Grazie per la donazione",
"thank-you": "Grazie per essere un sostenitore.",
- "thank-you-2": "Grazie per essere un sostenitore di freeCodeCamp. Al momento hai una donazione ricorrente.",
"additional": "Puoi effettuare una donazione una tantum aggiuntiva di qualsiasi importo utilizzando questo link: <0>{{url}}0>",
"help-more": "Aiutaci a fare di più",
"error": "Qualcosa è andato storto con la tua donazione.",
@@ -443,7 +450,9 @@
"and": "e",
"change-theme": "Accedi per modificare il tema.",
"translation-pending": "Aiutaci a tradurlo",
- "certification-project": "Progetto della certificazione"
+ "certification-project": "Progetto della certificazione",
+ "iframe-alert": "Solitamente questo link ti porterebbe su un altro sito web! Funziona. Questo è un link per {{externalLink}}",
+ "document-notfound": "documento non trovato"
},
"icons": {
"gold-cup": "Coppa d'Oro",
@@ -452,8 +461,10 @@
"donate": "Dona con PayPal",
"fail": "Test Fallito",
"not-passed": "Non Superato",
+ "waiting": "Attendi",
"passed": "Superato",
- "hint": "Hint",
+ "failed": "Non corretto",
+ "hint": "Suggerimento",
"heart": "Cuore",
"initial": "Iniziale",
"info": "Informazioni introduttive",
@@ -474,8 +485,11 @@
"last-page": "Va all'ultima pagina",
"primary-nav": "primario",
"breadcrumb-nav": "percorso",
- "submit": "Use Ctrl + Enter to submit.",
- "running-tests": "Running tests"
+ "submit": "Usa Ctrl + Invio per inviare.",
+ "running-tests": "Test in corso",
+ "step": "Step",
+ "steps": "Step",
+ "steps-for": "Step per {{blockTitle}}"
},
"flash": {
"honest-first": "Per richiedere una certificazione, è necessario prima accettare la nostra politica di onestà accademica",
@@ -681,5 +695,16 @@
"delete-p3": "Avrai bisogno di creare un nuovo token per salvare progressi futuri nelle sezioni del curriculum che usano una macchina virtuale.",
"no-thanks": "No grazie, vorrei tenere il mio token",
"yes-please": "Sì per favore, vorrei eliminare il mio token"
+ },
+ "shortcuts": {
+ "title": "Scorciatoie da tastiera",
+ "table-header-action": "Azione",
+ "table-header-key": "Tasti",
+ "navigation-mode": "Modalità Di Navigazione",
+ "execute-challenge": "Esegui Sfida",
+ "focus-editor": "Focus Editor",
+ "focus-instructions-panel": "Focus sul pannello delle istruzioni",
+ "navigate-previous": "Passa all'esercizio precedente",
+ "navigate-next": "Passa all'esercizio successivo"
}
}
diff --git a/client/i18n/locales/italian/trending.json b/client/i18n/locales/italian/trending.json
index a74ab81bcdeb6a..68cf97c66c734d 100644
--- a/client/i18n/locales/italian/trending.json
+++ b/client/i18n/locales/italian/trending.json
@@ -1,62 +1,62 @@
{
- "article0title": "Array di oggetti JS",
- "article0link": "https://www.freecodecamp.org/italian/news/tutorial-sugli-array-di-oggetti-in-javascript/",
- "article1title": "Operatore ? in JS",
- "article1link": "https://www.freecodecamp.org/italian/news/operatore-punto-interrogativo-in-javascript/",
- "article2title": "z-index non funziona CSS",
- "article2link": "https://www.freecodecamp.org/italian/news/4-ragioni-z-index/",
- "article3title": "Calcolatrice in JS",
- "article3link": "https://www.freecodecamp.org/italian/news/creare-calcolatrice-con-js/",
- "article4title": "Comandi SQL base",
- "article4link": "https://www.freecodecamp.org/italian/news/comandi-sql-di-base-la-lista-di-query-e-istruzioni-per-database-che-dovresti-conoscere/",
- "article5title": "Comandi Git base",
- "article5link": "https://www.freecodecamp.org/italian/news/ecco-tutti-i-comandi-di-git-che-ho-usato-nellultima-settimana-e-cosa-fanno/",
- "article6title": "Modulo % in Python",
- "article6link": "https://www.freecodecamp.org/italian/news/loperatore-modulo-in-python-cosa-significa-il-simbolo/",
- "article7title": "Un milione di dollari a FCC",
- "article7link": "https://www.freecodecamp.org/italian/news/ffreecodecamp-ha-appena-ricevuto-una-donazione-da-un-milione-di-dollari-da-un-allunno-per-costruire-un-curriculum-web3-a-emissioni-zero/",
- "article8title": "Clonare array in JS",
- "article8link": "https://www.freecodecamp.org/italian/news/come-clonare-un-array-in-javascript/",
- "article9title": "Sottostringhe in Python",
- "article9link": "https://www.freecodecamp.org/italian/news/sottostringhe-in-python/",
- "article10title": "for loop in Python",
- "article10link": "https://www.freecodecamp.org/italian/news/loop-for-in-python-esempi-con-for-i-in-range/",
- "article11title": "Append in Python",
- "article11link": "https://www.freecodecamp.org/italian/news/append-in-python-aggiungere-elemento-a-lista/",
- "article12title": "forEach in JavaScript",
- "article12link": "https://www.freecodecamp.org/italian/news/foreach-in-javascript-come-iterare-su-un-array-in-js/",
- "article13title": "Replace con Regex JS",
- "article13link": "https://www.freecodecamp.org/italian/news/javascript-string-replace-esempio-con-regex/",
- "article14title": "Esempi console.log JS",
- "article14link": "https://www.freecodecamp.org/italian/news/esempio-javascript-console-log-come-stampare-sulla-console-in-js-3/",
- "article15title": "Tipi di dati in statistica",
- "article15link": "https://www.freecodecamp.org/italian/news/tipi-di-dati-in-statistica-dati-nominali-ordinali-di-intervallo-di-rapporto-spiegati-con-esempi/",
- "article16title": "Metodo reduce JS",
- "article16link": "https://www.freecodecamp.org/italian/news/una-guida-al-metodo-reduce-in-javascript//",
- "article17title": "Hash Table in JS",
- "article17link": "https://www.freecodecamp.org/italian/news/tabella-hash-di-javascript-hashing-di-array-associativo-in-js/",
- "article18title": "map vs forEach in JS",
- "article18link": "https://www.freecodecamp.org/italian/news/le-differenze-tra-map-e-foreach-che-ogni-sviluppatore-dovrebbe-conoscere/",
- "article19title": "Sottostringa in Python",
- "article19link": "https://www.freecodecamp.org/italian/news/come-ottenere-una-sottostringa-in-python/",
- "article20title": "Conversione da 12 a 24h",
- "article20link": "https://www.freecodecamp.org/italian/news/convertire-le-ore-am-pm-al-formato-24-ore/",
- "article21title": "Usare API con Fetch in JS",
- "article21link": "https://www.freecodecamp.org/italian/news/fetch-api-come-effettuare-una-richiesta-get-e-una-richiesta-post-in-javascript/",
- "article22title": "Git Checkout branch remoto",
- "article22link": "https://www.freecodecamp.org/italian/news/tutorial-su-git-checkout-di-un-branch-remoto/",
- "article23title": "Guida con esempi in Python",
- "article23link": "https://www.freecodecamp.org/italian/news/guida-al-codice-python-tutorial-per-principianti-con-esempi/",
- "article24title": "Invertire un numero con JS",
- "article24link": "https://www.freecodecamp.org/italian/news/come-invertire-un-numero-in-javascript/",
- "article25title": "Crea lista vuota in Python",
- "article25link": "https://www.freecodecamp.org/italian/news/tutorial-liste-vuote-in-python/",
- "article26title": "Dinosauro di Google Chrome",
- "article26link": "https://www.freecodecamp.org/italian/news/come-giocare-a-dinosaur-game/",
- "article27title": "\"Hello, World!\" in Python",
- "article27link": "https://www.freecodecamp.org/italian/news/tutorial-programma-hello-world-per-python/",
- "article28title": "Andare a capo Python",
- "article28link": "https://www.freecodecamp.org/italian/news/andare-a-capo-con-python/",
- "article29title": "Invertire una stringa JS",
- "article29link": "https://www.freecodecamp.org/italian/news/tre-modi-per-invertire-una-stringa-in-javascript/"
+ "article0title": "Unire CSV con Python",
+ "article0link": "https://www.freecodecamp.org/italian/news/come-combinare-file-multipli-in-formato-csv-con-8-righe-di-codice/",
+ "article1title": "Il comando Git push",
+ "article1link": "https://www.freecodecamp.org/italian/news/il-comando-git-push-spiegato/",
+ "article2title": "Centrare immagini in CSS",
+ "article2link": "https://www.freecodecamp.org/italian/news/come-centrare-un-immagine-usando/",
+ "article3title": "I codici Alt",
+ "article3link": "https://www.freecodecamp.org/italian/news/codici-alt/",
+ "article4title": "Tenere a bada il footer",
+ "article4link": "https://www.freecodecamp.org/italian/news/come-mantenere-il-footer-al-suo-posto/",
+ "article5title": "Cosa è un'API?",
+ "article5link": "https://www.freecodecamp.org/italian/news/cose-un-api-in-italiano-per-favore/",
+ "article6title": "Chiave licenza Windows10",
+ "article6link": "https://www.freecodecamp.org/italian/news/come-trovare-la-tua-chiave-di-licenza-di-windows-10/",
+ "article7title": "Live Server non funziona",
+ "article7link": "https://www.freecodecamp.org/italian/news/live-server-di-visual-studio-code-non-funzionante-2/",
+ "article8title": "Formattare in Markdown",
+ "article8link": "https://www.freecodecamp.org/italian/news/come-formattare-il-codice-in-markdown/",
+ "article9title": "Guida allo stile di fCC",
+ "article9link": "https://www.freecodecamp.org/italian/news/la-guida-allo-stile-di-pubblicazione-di-freecodecamp/",
+ "article10title": "Valori unici Python",
+ "article10link": "https://www.freecodecamp.org/italian/news/lista-con-valori-unici-come-ottenere-una-lista-di-valori-unici-in-python/",
+ "article11title": "Array.find() in JS",
+ "article11link": "https://www.freecodecamp.org/italian/news/tutorial-array-find-in-javascript/",
+ "article12title": "position in CSS",
+ "article12link": "https://www.freecodecamp.org/italian/news/come-usare-la-proprieta-position-in-css-per-allineare-elementi/",
+ "article13title": "Destrutturazione in JS",
+ "article13link": "https://www.freecodecamp.org/italian/news/destrutturazione-in-javascript-come-destrutturare-array-e-oggetti/",
+ "article14title": ".length in JS",
+ "article14link": "https://www.freecodecamp.org/italian/news/verificare-se-un-array-javascrit-e-vuoto/",
+ "article15title": "Boilerplate HTML5",
+ "article15link": "https://www.freecodecamp.org/italian/news/template-base-html5/",
+ "article16title": "Manuale JS",
+ "article16link": "https://www.freecodecamp.org/italian/news/manuale-javascript-per-principianti-edizione-2020/",
+ "article17title": "Git e GitHub",
+ "article17link": "https://www.freecodecamp.org/italian/news/come-usare-git-e-github-in-un-team-come-un-professionista-con-la-partecipazione-di-harry-e-hermione/",
+ "article18title": "Cos'è about:blank",
+ "article18link": "https://www.freecodecamp.org/italian/news/cosa-e-about-blank-e-come-liberartene/",
+ "article19title": "LS in Linux",
+ "article19link": "https://www.freecodecamp.org/italian/news/il-comando-ls-in-linux-come-elencare-file-e-cartelle-le-flag-di-opzione/",
+ "article20title": "Immagine di sfondo REACT",
+ "article20link": "https://www.freecodecamp.org/italian/news/come-impostare-una-immagine-di-background-in-react-usando-il-css-in-linea/",
+ "article21title": "Vim su Windows in PowerShell",
+ "article21link": "https://www.freecodecamp.org/italian/news/vim-guida-di-installazione-su-windows-come-eseguire-leditor-di-testo-vim-in-powershell-sul-tuo-pc/",
+ "article22title": "Processi Child di Node.js",
+ "article22link": "https://www.freecodecamp.org/italian/news/processi-child-di-node-js-tutto-cio-che-devi-sapere/",
+ "article23title": "Algoritmi di forza bruta",
+ "article23link": "https://www.freecodecamp.org/italian/news/algoritmi-di-forza-bruta/",
+ "article24title": "@property in Python",
+ "article24link": "https://www.freecodecamp.org/italian/news/il-decoratore-property-in-python-utilizzo-vantaggi-e-sintassi/",
+ "article25title": "L'algoritmo di Dijkstra",
+ "article25link": "https://www.freecodecamp.org/italian/news/lalgoritmo-dei-cammini-minimi-di-dijkstra-una-dettagliata-introduzione-grafica/",
+ "article26title": "Come annullare un Git Add",
+ "article26link": "https://www.freecodecamp.org/italian/news/come-annullare-un-git-add/",
+ "article27title": "Ripristinare schede su Chrome",
+ "article27link": "https://www.freecodecamp.org/italian/news/come-ripristinare-schede-su-chrome/",
+ "article28title": "Link nuova scheda in HTML",
+ "article28link": "https://www.freecodecamp.org/italian/news/html-per-aprire-un-link-in-una-nuova-scheda/",
+ "article29title": "Eliminare un branch di Git",
+ "article29link": "https://www.freecodecamp.org/italian/news/eliminare-branch-git-locale-e-remoto/"
}
diff --git a/client/i18n/locales/japanese/intro.json b/client/i18n/locales/japanese/intro.json
index 2a93080edb3694..208bbab8acd585 100644
--- a/client/i18n/locales/japanese/intro.json
+++ b/client/i18n/locales/japanese/intro.json
@@ -1,6 +1,6 @@
{
"responsive-web-design": {
- "title": "レスポンシブウェブデザイン (レガシー)",
+ "title": "(レガシー) レスポンシブウェブデザイン",
"intro": [
"このレスポンシブウェブデザイン認定講座では、開発者がウェブページを構築するために使用する言語について学びます。コンテンツには HTML (Hypertext Markup Language)、デザインには CSS (Cascading Style Sheets) を使用します。",
"初めに、HTML と CSS の基礎を学ぶために、猫の写真アプリを作ります。その後、ペンギンの絵を作りながら CSS 変数等のモダンなテクニックを学びます。そしてウェブフォームを作りながらアクセシビリティのベストプラクティスを学びます。",
@@ -32,7 +32,7 @@
"applied-accessibility": {
"title": "応用アクセシビリティ",
"intro": [
- "ウェブ開発におけるアクセシビリティとは、幅広いユーザーが理解し、移動し、対話できるコンテンツやUI (ユーザーインターフェース) のことを指します。これには視覚、聴覚、運動、認知に障害がある人も含みます。",
+ "ウェブ開発におけるアクセシビリティとは、幅広いユーザーが理解し、移動し、対話できるコンテンツや UI (ユーザーインターフェース) のことを指します。これには視覚、聴覚、運動、認知に障害がある人も含みます。",
"このコースでは、誰もがアクセス可能な Web ページを構築するためのベストプラクティスを学びます。"
]
},
@@ -67,11 +67,11 @@
}
},
"2022/responsive-web-design": {
- "title": "(New) Responsive Web Design",
+ "title": "(新) レスポンシブウェブデザイン",
"intro": [
"このレスポンシブウェブデザイン認定講座では、開発者がウェブページを構築するために使用する言語について学びます。コンテンツには HTML (Hypertext Markup Language)、デザインには CSS (Cascading Style Sheets) を使用します。",
- "初めに、HTML と CSS の基礎を学ぶために、猫の写真アプリを作ります。その後、ペンギンの絵を作りながら CSS 変数等のモダンなテクニックを学びます。そしてウェブフォームを作りながらアクセシビリティのベストプラクティスを学びます。",
- "最後に、Flexbox を使った Twitter カードや CSS グリッドを使った複雑なブログレイアウトの作成を通じて、さまざまな画面サイズに応答するウェブページを作成する方法を学びます。"
+ "初めに、HTML と CSS の基礎を学ぶために、猫の写真アプリを作ります。その後、ペンギンの絵を作りながら CSS 変数等のモダンなテクニックを学びます。そしてクイズサイトを作りながらアクセシビリティのベストプラクティスを学びます。",
+ "最後に、フレックスボックスを使ったフォトギャラリーや、CSS グリッドを使った雑誌記事のレイアウトの作成を通じて、さまざまな画面サイズに応じて表示されるウェブページの作成方法を学びます。"
],
"note": "注意: 広告ブロッカーやダークモード拡張などの、一部のブラウザ拡張機能がテストに干渉する可能性があります。問題が発生した場合、コース受講中はページのコンテンツやレイアウトを変更する拡張機能を無効にすることをお勧めします。",
"blocks": {
@@ -128,14 +128,14 @@
"title": "CSS ボックスモデルの学習: ロスコの絵画を作成する",
"intro": [
"すべての HTML 要素は間隔と境界を伴ったボックスそのものです。これはボックスモデルと呼ばれています。",
- "このコースでは、CSS とボックスモデルを使ってロスコ風の長方形アート作品を作成します。"
+ "このコースでは、CSS とボックスモデルを使ってマーク・ロスコ風の長方形アート作品を作成します。"
]
},
"learn-css-variables-by-building-a-city-skyline": {
"title": "CSS 変数の学習: 都市のスカイラインを作成する",
"intro": [
- "CSS の変数はスタイルを体系づけたり、それらを再利用するのに役立ちます。",
- "このコースでは、都市のスカイラインを作成します。CSS の変数の設定方法を学習して、使いたい時にいつでもそれらを再利用できるようにします。"
+ "CSS の変数はスタイルを体系づけたり、再利用するのに役立ちます。",
+ "このコースでは、都市のスカイラインの風景を作成します。CSS 変数の設定方法を学習して、必要に応じて再利用できるようにします。"
]
},
"learn-html-forms-by-building-a-registration-form": {
@@ -149,7 +149,7 @@
"title": "アクセシビリティの学習: クイズを作成する",
"intro": [
"アクセシビリティとは、障害のある人を含むすべての人々にとって、ウェブページを利用しやすくすることです。",
- "このコースでは、クイズのウェブページを作成します。キーボードショートカット、ARIA 属性、デザインのベストプラクティスなど、アクセシビリティのツールについて学習します。"
+ "このコースでは、クイズ (小テスト) のウェブページを作成します。キーボードショートカット、ARIA 属性、デザインのベストプラクティスなど、アクセシビリティのツールについて学習します。"
]
},
"learn-intermediate-css-by-building-a-picasso-painting": {
@@ -180,10 +180,10 @@
]
},
"learn-typography-by-building-a-nutrition-label": {
- "title": "タイポグラフィの学習: 栄養ラベルを作成する",
+ "title": "タイポグラフィの学習: 栄養成分表示ラベルを作成する",
"intro": [
- "タイポグラフィはテキストを読み易く、また目的に合うようにスタイリングする技術です。",
- "このコースでは、タイポグラフィを用いて栄養ラベルのウェブページを作成します。CSS を用いてテキストを整え、行の高さを調節し、テキストを配置することを学習します。"
+ "タイポグラフィとは、テキストを読み易く、また目的に合うようにスタイリングする技術です。",
+ "このコースでは、タイポグラフィを用いて栄養成分表示ラベルのウェブページを作成します。CSS を用いてテキストを整え、行の高さを調節し、テキストを配置することを学習します。"
]
},
"learn-css-transforms-by-building-a-penguin": {
@@ -201,10 +201,10 @@
]
},
"learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet": {
- "title": "CSS 疑似セレクターの学習: 貸借対照表を作成する",
+ "title": "CSS 疑似セレクターの学習: バランスシートを作成する",
"intro": [
"CSS の疑似セレクターを用いて、特定の HTML 要素を変化させることができます。",
- "このコースでは、疑似セレクターを用いて貸借対照表を作成します。ウェブページ上でマウスポインタを要素の上に合わせた時に要素のスタイルを変更する方法や、他のイベントを起こす方法を学習します。"
+ "このコースでは、疑似セレクターを用いてバランスシート (貸借対照表) を作成します。ウェブページ上でマウスポインタを要素の上に合わせた時に要素のスタイルを変更する方法や、他のイベントを起こす方法を学習します。"
]
},
"learn-css-colors-by-building-a-set-of-colored-markers": {
@@ -300,64 +300,64 @@
}
},
"2022/javascript-algorithms-and-data-structures": {
- "title": "JavaScript Algorithms and Data Structures (Beta)",
+ "title": "JavaScript アルゴリズムとデータ構造 (ベータ版)",
"intro": [
- "placeholder",
- "placeholder"
+ "プレイスホルダー",
+ "プレイスホルダー"
],
"note": "",
"blocks": {
"build-a-caesars-cipher-project": {
- "title": "Build a Casears Cipher Project",
+ "title": "シーザー暗号解析器作成プロジェクト",
"intro": [
"",
""
]
},
"build-a-cash-register-project": {
- "title": "Build a Cash Register Project",
+ "title": "キャッシュレジスター作成プロジェクト",
"intro": [
"",
""
]
},
"build-a-palindrome-checker-project": {
- "title": "Build a Palindrome Checker Project",
+ "title": "回文チェッカー作成プロジェクト",
"intro": [
"",
""
]
},
"build-a-roman-numeral-converter-project": {
- "title": "Build a Roman Numeral Converter Project",
+ "title": "ローマ数字コンバーター作成プロジェクト",
"intro": [
"",
""
]
},
"build-a-telephone-number-validator-project": {
- "title": "Build a Telephone Number Validator Project",
+ "title": "電話番号バリデーター作成プロジェクト",
"intro": [
"",
""
]
},
"learn-basic-javascript-by-building-a-role-playing-game": {
- "title": "Learn Basic JavaScript by Building a Role Playing Game",
+ "title": "JavaScript の基礎の学習: ロールプレイングゲームを作る",
"intro": [
"",
""
]
},
"learn-form-validation-by-building-a-calorie-counter": {
- "title": "Learn Form Validation by Building a Calorie Counter",
+ "title": "フォームの検証の学習: カロリー計算機を作る",
"intro": [
"",
""
]
},
"learn-functional-programming-by-building-a-spreadsheet": {
- "title": "Learn Functional Programming by Building a Spreadsheet",
+ "title": "関数型プログラミングの学習: スプレッドシートを作る",
"intro": [
"",
""
@@ -606,8 +606,8 @@
"mongodb-and-mongoose": {
"title": "MongoDB と Mongoose",
"intro": [
- "MongoDB はアプリケーションで使用できる JSON ドキュメント (またはレコード) を保管するデータベースアプリケーションです。別の種類のデータベースである SQL とは異なり、Mongo は非リレーショナル、または \"NoSQL\" データベースです。これは、SQL データベースがあらかじめ定義した多くのテーブルにデータを保管するのと異なり、Mongo はすべての関連データを一つのレコードの中に保管することを意味します。",
- "Mongoose は、よく Mongo と一緒にインストールされる一般的な npm パッケージです。Mongoose を使用することで、JSON ではなく素の JavaScript オブジェクトを使用することができるようになり、Mongo が使いやすくなります。また、スキーマと呼ばれるドキュメントの設計図を作成することを可能にし、間違った型のデータを保存してしまい後にバグを発生させることを防ぎます。",
+ "MongoDB はアプリケーションで使用できる JSON ドキュメント (またはレコード) を保管するデータベースアプリケーションです。別の種類のデータベースである SQL とは異なり、MongoDB は非リレーショナル、または \"NoSQL\" データベースです。これは、SQL データベースがあらかじめ定義した多くのテーブルにデータを保管するのと異なり、MongoDB はすべての関連データを一つのレコードの中に保管することを意味します。",
+ "Mongoose は MongoDB とやり取りするためによく使われる npm パッケージです。Mongoose を利用することで、JSON ではなく素の JavaScript オブジェクトを使用できるようになり、MongoDB が使いやすくなります。また、スキーマと呼ばれるドキュメントの設計図を作成することを可能にし、間違った型のデータを保存してしまい後にバグを発生させることを防ぎます。",
"MongoDB と Mongoose コースでは、モデルを設定する方法や、データベース内のドキュメントを保存、削除、検索する方法など、永続的なデータを扱うことの基本を学習します。"
]
},
@@ -804,7 +804,8 @@
"title": "ロゼッタコード",
"intro": [
"由緒あるロゼッタコードライブラリから取られた以下の無料のプログラミングタスクで、クリエイティブな課題解決技能を向上させましょう。",
- "これらの課題は困難かもしれませんが、あなたのアルゴリズムのロジックを新たな高みに押し上げます。"
+ "これらの課題は困難かもしれませんが、あなたのアルゴリズムのロジックを新たな高みに押し上げます。",
+ "作: Rosetta Code"
]
},
"project-euler": {
diff --git a/client/i18n/locales/japanese/links.json b/client/i18n/locales/japanese/links.json
index b48130a30582a9..653e921affb71f 100644
--- a/client/i18n/locales/japanese/links.json
+++ b/client/i18n/locales/japanese/links.json
@@ -26,6 +26,6 @@
"HTML-CSS": "Japanese/HTML-CSS",
"JavaScript": "Japanese/JavaScript",
"Python": "Japanese/Python",
- "Relational Databases": "Japanese/Relational Databases"
+ "Backend Development": "Japanese/programming-help"
}
}
diff --git a/client/i18n/locales/japanese/meta-tags.json b/client/i18n/locales/japanese/meta-tags.json
index 281848e60e959c..b96a2590d23234 100644
--- a/client/i18n/locales/japanese/meta-tags.json
+++ b/client/i18n/locales/japanese/meta-tags.json
@@ -1,5 +1,5 @@
{
- "title": "プログラミングを無料で学ぶ: 多忙な人々のためのプログラミング講座",
+ "title": "プログラミングを無料で学ぶ: 働きながら学べるプログラミング講座",
"description": "プログラミングを無料で学ぶ",
"social-description": "プログラミングを無料で学ぶ",
"keywords": [
@@ -37,5 +37,5 @@
"プログラミング",
"学習"
],
- "youre-unsubscribed": "You have been unsubscribed"
+ "youre-unsubscribed": "購読を解除しました"
}
diff --git a/client/i18n/locales/japanese/translations.json b/client/i18n/locales/japanese/translations.json
index aeb6e96c3bd39b..e881cc4814090c 100644
--- a/client/i18n/locales/japanese/translations.json
+++ b/client/i18n/locales/japanese/translations.json
@@ -50,7 +50,8 @@
"reset-lesson": "レッスンをリセット",
"run": "実行",
"run-test": "テスト実行 (Ctrl + Enter)",
- "check-code": "Check Your Code (Ctrl + Enter)",
+ "check-code": "コードをチェック (Ctrl + Enter)",
+ "check-code-2": "コードをチェック",
"reset": "リセット",
"reset-code": "全てのコードをリセット",
"help": "ヘルプ",
@@ -70,7 +71,11 @@
"start-coding": "コーディングを始めましょう!",
"go-to-settings": "設定へ移動して認定証を取得",
"click-start-course": "コースを開始",
- "click-start-project": "プロジェクトを開始"
+ "click-start-project": "プロジェクトを開始",
+ "change-language": "言語変更",
+ "cancel-change": "変更キャンセル",
+ "resume-project": "プロジェクト再開",
+ "start-project": "プロジェクト開始"
},
"landing": {
"big-heading-1": "プログラミングを無料で学ぶ。",
@@ -101,9 +106,9 @@
},
"settings": {
"share-projects": "あなたの freeCodeCamp 以外のプロジェクトや記事、承認されたプルリクエストをシェアしましょう。",
- "privacy": "The settings in this section enable you to control what is shown on your freeCodeCamp public portfolio. Press save to save your changes.",
+ "privacy": "この設定セクションでは、あなたの freeCodeCamp 公開ポートフォリオに表示する項目を制御できます。変更を保存するには「保存」をクリックしてください。",
"data": "アカウントに保存されているデータを確認するには、下の「データをダウンロード」ボタンをクリックしてください",
- "disabled": "プライベートに設定されている場合、認定証は無効化されます。",
+ "disabled": "非公開に設定されている場合、認定証は無効化されます。",
"private-name": "非公開に設定されている場合、あなたの名前は認定証に表示されません。",
"claim-legacy": "以下の freeCodeCamp 認定証を取得すると、 {{cert}} を受け取ることができます。",
"for": "{{username}} さんのアカウント設定",
@@ -143,7 +148,8 @@
"my-timeline": "自分のタイムライン",
"my-donations": "自分の寄付",
"night-mode": "ナイトモード",
- "sound-mode": "キャンプファイアモード"
+ "sound-mode": "キャンプファイアモード",
+ "keyboard-shortcuts": "キーボードショートカットを有効にする"
},
"headings": {
"certs": "認定証",
@@ -269,7 +275,7 @@
"solution-link": "回答のリンク",
"github-link": "GitHub のリンク",
"submit-and-go": "提出して次のチャレンジに進む",
- "congradulations": "Congratulations, your code passes. Submit your code to complete this step and move on to the next one.",
+ "congratulations": "おめでとうございます、合格です。次に進むにはコードを提出してください。",
"i-completed": "このチャレンジを完了しました",
"test-output": "テストの結果はこちらに表示されます",
"running-tests": "// テストを実行中です",
@@ -280,14 +286,14 @@
"percent-complete": "{{percent}}% 完了",
"tried-rsa": "すでに <0>Read-Search-Ask (読む - 検索する - 質問する)0> メソッドを試したなら、freeCodeCamp フォーラムで助けを求めることができます。",
"rsa": "読む (Read)、検索する (Search)、質問する (Ask)",
+ "rsa-forum": "Before making a new post please see if your question has <0>already been answered on the forum0>.",
"reset": "このレッスンをリセットしますか?",
"reset-warn": "本当にこのレッスンをリセットしてもよろしいですか?エディターとテストがリセットされます。",
"reset-warn-2": "この操作は取り消すことが出来ません",
"scrimba-tip": "ヒント: ミニブラウザがコードを覆ってしまう場合は、クリックとドラッグで移動させてください。また、いつでも遠慮なくビデオを停止させてコードを編集してください。",
"chal-preview": "チャレンジのプレビュー",
"cert-map-estimates": {
- "certs": "{{title}} 認定講座 (300 時間)",
- "coding-prep": "{{title}} (数千時間のチャレンジ)"
+ "certs": "{{title}} 認定講座"
},
"editor-tabs": {
"info": "詳細",
@@ -296,49 +302,50 @@
"restart": "リスタート",
"restart-step": "ステップをリスタート",
"console": "コンソール",
+ "instructions": "手順書",
"notes": "ノート",
"preview": "プレビュー"
},
"help-translate": "以下の認定講座は現在翻訳中です。",
"help-translate-link": "翻訳にご協力ください。",
- "project-preview-title": "これがあなたが作成するもののプレビューです。",
+ "project-preview-title": "これが今から作る物のプレビューです。",
"github-required": "<0>GitHub0> アカウントをお持ちでない場合は作成してください。 仮想 Linux サーバーマシンを作成する際に必要です。この処理には数分かかることがあります。",
"step-1": "ステップ 1: プロジェクトを完成させる",
"step-2": "ステップ 2: コードを提出する",
"submit-public-url": "プロジェクトが完成したら、必須のファイルをすべてパブリックリポジトリに保存し、リポジトリの URL を以下に提出してください。",
"complete-both-steps": "チャレンジを終えるには、以下 2 つのステップを完了させてください。",
"runs-in-vm": "このプロジェクトは仮想マシン内で動作します。ステップ 1 を完了するには、そこで述べられたユーザーストーリーを実装し、すべてのテストに合格してください。",
- "completed": "Completed",
+ "completed": "完了",
"not-started": "未着手",
- "hint": "Hint",
- "test": "Test",
- "sorry-try-again": "Sorry, your code does not pass. Try again.",
- "sorry-keep-trying": "Sorry, your code does not pass. Keep trying.",
- "sorry-getting-there": "Sorry, your code does not pass. You're getting there.",
- "sorry-hang-in-there": "Sorry, your code does not pass. Hang in there.",
- "sorry-dont-giveup": "Sorry, your code does not pass. Don't give up."
+ "hint": "ヒント",
+ "test": "テスト",
+ "sorry-try-again": "残念ながら、テストが通りませんでした。もう一度挑戦しましょう。",
+ "sorry-keep-trying": "残念ながら、テストが通りませんでした。続けて挑戦しましょう。",
+ "sorry-getting-there": "残念ながら、テストが通りませんでした。もう一息です。",
+ "sorry-hang-in-there": "残念ながら、テストが通りませんでした。がんばりましょう。",
+ "sorry-dont-giveup": "残念ながら、テストが通りませんでした。諦めないでください。",
+ "challenges-completed": "{{totalChallenges}} 件中 {{completedCount}} 件完了"
},
"donate": {
"title": "非営利団体を支援する",
- "processing": "いただいたご寄付を処理中です。",
+ "processing": "いただいた寄付を処理中です。",
"redirecting": "リダイレクト中...",
- "thanks": "ご寄付ありがとうございます",
+ "thanks": "寄付ありがとうございます",
"thank-you": "サポーターとなっていただき、ありがとうございます。",
- "thank-you-2": "freeCodeCamp のサポーターとなっていただき、ありがとうございます。現在定期的なご寄付をいただいております。",
"additional": "任意の金額を、追加で 1 回ずつご寄付いただけるリンクはこちら: <0>{{url}}0>",
"help-more": "私たちのさらなる活動をご支援ください",
- "error": "ご寄付の処理に問題が発生しました。",
+ "error": "寄付の処理に問題が発生しました。",
"error-2": "問題が発生しました。donors@freecodecamp.org までお問い合わせください。",
"free-tech": "いただいたご寄付は世界中の人々への無料の技術教育を支援します。",
"no-halo": "プロフィール画像の周りに金色の枠が表示されない場合は、donors@freecodecamp.org までご連絡ください。",
"gift-frequency": "ギフトの頻度を選択する:",
"gift-amount": "ギフトの金額を選択する:",
- "confirm": "ご寄付の確認",
- "confirm-2": "${{usd}} の一回のご寄付を確認する",
- "confirm-3": "毎月${{usd}} のご寄付を確認する",
- "confirm-4": "毎年${{usd}} のご寄付を確認する",
- "wallet-label": "freeCodeCamp へ${{usd}} を寄付する",
- "wallet-label-1": "freeCodeCamp へ毎月${{usd}} を寄付する",
+ "confirm": "寄付の申込み",
+ "confirm-2": "{{usd}} ドルの一回の寄付の申込み",
+ "confirm-3": "毎月 {{usd}} ドルの寄付の申込み",
+ "confirm-4": "毎年 {{usd}} ドルの寄付の申込み",
+ "wallet-label": "freeCodeCamp への ${{usd}} の寄付",
+ "wallet-label-1": "freeCodeCamp への ${{usd}} / 月の寄付",
"your-donation": "あなたの {{usd}} ドルのご寄付が、世界中の人々に {{hours}} 時間の学びを提供します。",
"your-donation-2": "あなたの {{usd}} ドルのご寄付が、世界中の人々に {{hours}} 時間の学びを毎月提供します。",
"your-donation-3": "あなたの {{usd}} ドルのご寄付が、世界中の人々に {{hours}} 時間の学びを毎年提供します。",
@@ -352,17 +359,17 @@
"or-card": "またはカードで寄付する",
"paypal": "PayPalで寄付する:",
"need-email": "贈与税の領収書をお送りできる有効なメールアドレスが必要です。",
- "went-wrong": "ご寄付の処理中に問題が発生しました。カードへの請求は行われておりません。",
+ "went-wrong": "寄付の処理中に問題が発生しました。カードへの請求は行われておりません。",
"valid-info": "有効なメールアドレス、クレジットカード番号、有効期限を入力してください。",
"valid-email": "有効なメールアドレスを入力してください。",
"valid-card": "有効なクレジットカード番号、有効期限を入力してください。",
- "email-receipt": "Eメール (税控除可能な場合があるご寄付の領収書をお送りいたします):",
- "need-help": "現在または過去のご寄付についてお困りでしょうか?",
- "forward-receipt": "ご寄付の領収書のコピーを添えて、お問い合わせ内容を donors@freecodecamp.org までお送りください。",
+ "email-receipt": "Eメール (寄付の領収書をお送りいたします。税控除可能な場合がございます。):",
+ "need-help": "現在または過去の寄付についてお困りでしょうか?",
+ "forward-receipt": "寄付の領収書のコピーを添えて、お問い合わせ内容を donors@freecodecamp.org までお送りください。",
"efficiency": "freeCodeCamp は非常に効率的な、教育分野の非営利団体です。",
"why-donate-1": "freeCodeCamp にご寄付いただくことにより、新しい技能を学習して家族を支えようとしている人々を助けることに繋がります。",
"why-donate-2": "また、あなた自身の技術スキルを高めるための、学習リソースの作成を支援することにもなります。",
- "bigger-donation": "より多くの金額による一回のご寄付や、小切手の送付、または他の方法をお考えでしょうか?",
+ "bigger-donation": "より多くの金額による一回の寄付や、小切手の送付、または他の方法をお考えでしょうか?",
"other-ways": "<0>当非営利団体の使命をご支援いただける方法0> は他にも多数ございます。",
"failed-pay": "処理が完了しませんでした。再度お試しください。",
"try-again": "再試行してください。",
@@ -370,7 +377,7 @@
"expiration": "有効期限:",
"secure-donation": "セキュアな寄付",
"faq": "よくある質問",
- "only-you": "このメッセージはあなただけに表示されています。認定証の獲得おめでとうございます。簡単な課題ではなかったことと思います。freeCodeCamp を運営することもまた、簡単ではありません。費用のかからないことでもありません。ぜひ、私たちがあなたを含む世界中の人々のお役に立てるようご支援ください。当非営利団体へのご寄付をお願い申し上げます。(ご寄付は税控除可能な場合がございます。)",
+ "only-you": "このメッセージはあなただけに表示されています。認定証の獲得おめでとうございます。簡単な課題ではなかったことと思います。freeCodeCamp を運営することもまた、簡単ではありません。費用のかからないことでもありません。ぜひ、私たちがあなたを含む世界中の人々のお役に立てるようご支援ください。当非営利団体へのご寄付をお願い申し上げます。(場合により税控除可能)",
"get-help": "寄付に関してサポートが必要な場合はどうしたらいいですか?",
"how-transparent": "freeCodeCamp.org の透明性はどのような状態ですか?",
"very-transparent": "極めて高いと評価されています。私たちは GuideStar.org より、プラチナグレードの透明性評価を受けています。",
@@ -380,7 +387,7 @@
"fcc-budget": "freeCodeCamp の予算は、ほとんどの同規模の非営利団体と比べ非常に少ないです。私たちはプロの資金調達者に参加を依頼していません。代わりに、Quincy が自分自身ですべてを行っています。",
"help-millions": "しかしながら、私たちは年間わずか数十万ドルの予算で、数百万の人々を支援することができています。",
"how-one-time": "一回ごとの寄付を行うにはどうしたらいいですか?",
- "one-time": "一回ごとのご寄付をご希望の場合、いつでも経済的なゆとりがある時に、freeCodeCamp のミッションをご支援いただくことができます。<0>こちらのリンクから、PayPal を通して任意の金額を寄付することができます。0>",
+ "one-time": "一回ごとの寄付をご希望の場合、いつでも経済的なゆとりがある時に、freeCodeCamp のミッションをご支援いただくことができます。<0>こちらのリンクから、PayPal を通して任意の金額を寄付することができます。0>",
"wire-transfer": "電信送金で直接 freeCodeCamp へ送金することも可能です。電信送金の詳細が必要な場合、Quincy (quincy@freecodecamp.org) までメールにてご連絡ください。",
"does-crypto": "freeCodeCamp では Bitcoin などの暗号通貨での寄付を受け付けていますか?",
"yes-cryptocurrency": "はい。Quincy 宛てに quincy@freecodecamp.org までメールでお問い合わせいただければ、freeCodeCamp のウォレット情報をお知らせいたします。税金の手続きのため寄付金の領収書をご希望の場合も、Quincy にて対応いたします。",
@@ -393,12 +400,12 @@
"how-endowment": "freeCodeCamp.org のために基金を設立するにはどうしたらいいですか?",
"endowment": "これは大変心強い支援となります。多くの手作業による処理が必要になりますので、Quincy から個人的にご説明いたします。quincy@freecodecamp.org まで直接メールにてご連絡ください。",
"how-legacy": "freeCodeCamp.org へ遺贈寄付するにはどうしたらいいですか?",
- "we-honored": "世界中の人々のコード学習支援のために、そのようなご寄付を活用させていただけることを光栄に思います。 また、お住まいの場所によっては非課税となる場合もございます。",
+ "we-honored": "世界中の人々のコード学習支援のために、そのような寄付を活用させていただけることを光栄に思います。また、お住まいの場所によっては非課税となる場合もございます。",
"legacy-gift-message": "私は [合計 _____ USD (または他の通貨) または私の残余財産の _____ パーセント] を、現所在地が 3905 Hedgcoxe Rd, PO Box 250352, Plano, Texas, 75025 United States である、アメリカ合衆国デラウェア州の法律に基づき組織された公益法人 freeCodeCamp.org (Free Code Camp, Inc. 納税者番号 82-0779546) へ、法人自身の裁量による一般的な慈善目的の使用の為に、寄付、遺贈します。",
"thank-wikimedia": "この正式な文面を私たちに提供して下さったウィキメディア財団に感謝申し上げます。",
"legacy-gift-questions": "この手順に関するお問い合わせにつきましては、Quincy 宛てに quincy@freecodecamp.org までメールにてご連絡ください。",
"how-stock": "株式を freeCodeCamp.org に寄付するにはどうしたらいいですか?",
- "welcome-stock": "株式による寄付も歓迎しております。Quincy 宛てに quincy@freecodecamp.org まで直接メールにてご連絡いただければ、当非営利団体の証券口座の詳細も含めご説明させていただきます。",
+ "welcome-stock": "株式による寄付も歓迎しております。Quincy 宛てに quincy@freecodecamp.org まで直接メールにてご連絡いただければ、当非営利団体の証券口座の詳細も含めご説明いたします。",
"how-receipt": "税金から寄付金を控除するために、寄付金の領収書を受け取ることはできますか?",
"just-forward": "もちろんです。取引時の領収書を donors@freecodecamp.org まで転送し、領収書を必要とされている旨と、その他特別なご指示がございましたらその点も併せてご連絡ください。領収書を添えて返信いたします。",
"how-update": "毎月の寄付を設定しましたが、月次の処理を変更または停止したいです。どうしたらいいですか?",
@@ -423,7 +430,7 @@
},
"search": {
"label": "検索",
- "placeholder": "8,000 以上のチュートリアルを検索",
+ "placeholder": "チュートリアルを検索",
"see-results": "{{searchQuery}} のすべての結果を見る",
"no-tutorials": "チュートリアルは見つかりませんでした",
"try": "何かお探しですか?このページの検索バーを試してみてください。",
@@ -443,7 +450,9 @@
"and": "および",
"change-theme": "テーマを変更するにはサインインしてください。",
"translation-pending": "翻訳にご協力ください。",
- "certification-project": "認定プロジェクト"
+ "certification-project": "認定プロジェクト",
+ "iframe-alert": "このリンクは通常の環境では他のウェブサイトを開きます。正しく動作しています。これは {{externalLink}} へのリンクです。",
+ "document-notfound": "ドキュメントが見つかりませんでした"
},
"icons": {
"gold-cup": "ゴールドカップ",
@@ -452,8 +461,10 @@
"donate": "PayPal で寄付する",
"fail": "テスト失敗",
"not-passed": "未完了",
- "passed": "合格済み",
- "hint": "Hint",
+ "waiting": "待機中",
+ "passed": "完了",
+ "failed": "失敗",
+ "hint": "ヒント",
"heart": "ハート",
"initial": "初期状態",
"info": "導入情報",
@@ -474,8 +485,11 @@
"last-page": "最後のページへ移動",
"primary-nav": "プライマリー",
"breadcrumb-nav": "パンくずリスト",
- "submit": "Use Ctrl + Enter to submit.",
- "running-tests": "Running tests"
+ "submit": "提出するには Ctrl + Enter を押してください。",
+ "running-tests": "テスト実行中",
+ "step": "ステップ",
+ "steps": "ステップ一覧",
+ "steps-for": "「{{blockTitle}}」のステップ一覧"
},
"flash": {
"honest-first": "認定証を請求するには、まず学問的誠実性ポリシーに同意する必要があります。",
@@ -681,5 +695,16 @@
"delete-p3": "仮想マシンを使用するカリキュラムセクションでこの先の進行状況を保存するには、新しいトークンを作成する必要があります。",
"no-thanks": "いいえ、トークンを維持したいです",
"yes-please": "はい、トークンを削除します"
+ },
+ "shortcuts": {
+ "title": "キーボードショートカット",
+ "table-header-action": "操作",
+ "table-header-key": "キー",
+ "navigation-mode": "ナビゲーションモード",
+ "execute-challenge": "チャレンジを実行",
+ "focus-editor": "エディターにフォーカス",
+ "focus-instructions-panel": "手順書パネルにフォーカス",
+ "navigate-previous": "前の課題へ移動",
+ "navigate-next": "次の課題へ移動"
}
}
diff --git a/client/i18n/locales/portuguese/intro.json b/client/i18n/locales/portuguese/intro.json
index 5a945f67162273..f1e1d78f8f7666 100644
--- a/client/i18n/locales/portuguese/intro.json
+++ b/client/i18n/locales/portuguese/intro.json
@@ -70,8 +70,8 @@
"title": "Design responsivo para a web (novo)",
"intro": [
"Nessa certificação de Design responsivo para a web, você aprenderá as linguagens que os desenvolvedores usam para construir sites: HTML (Linguagem de Marcação de Hipertexto) para o conteúdo e CSS (Folha de Estilo em Cascata) para o design.",
- "Primeiro, você vai construir um aplicativo de fotos de gato para aprender o básico de HTML e CSS. Mais tarde, você aprenderá técnicas modernas como variáveis CSS construindo um pinguim, e melhores práticas de acessibilidade criando um formulário web.",
- "Finalmente, você vai aprender a fazer páginas web que respondem a diferentes tamanhos de telas construindo um card do Twitter com Flexbox, e um layout complexo de blog com o CSS Grid."
+ "Primeiro, você vai construir um aplicativo de fotos de gato para aprender o básico de HTML e CSS. Mais tarde, você aprenderá técnicas modernas como variáveis CSS construindo um pinguim, e melhores práticas de acessibilidade criando um site de questionário.",
+ "Finalmente, você vai aprender a fazer páginas web que respondem a diferentes tamanhos de telas construindo uma galeria de fotos com o Flexbox, e um layout de artigo de revista com o CSS Grid."
],
"note": "Observação: algumas extensões de navegador, como bloqueadores de anúncios e extensões de modo escuro podem interferir nos testes. Se você tiver problemas, recomendamos desabilitar extensões que modifiquem o conteúdo ou o layout das páginas durante o curso.",
"blocks": {
@@ -606,8 +606,8 @@
"mongodb-and-mongoose": {
"title": "MongoDB e Mongoose",
"intro": [
- "O MongoDB é uma aplicação de banco de dados que armazena documentos JSON (ou registros) que podem ser usados em sua aplicação. Ao contrário do SQL, outro tipo de banco de dados, o Mongo é um banco de dados não relacional ou \"NoSQL\". Isto significa que o Mongo armazena todos os dados associados dentro de um registro, em vez de armazená-los em muitas tabelas predefinidas, como em um banco de dados SQL.",
- "O Mongoose é um pacote popular do npm que é frequentemente instalado junto com MongoDB. Com o Mongoose, você pode usar objetos JavaScript simples em vez de JSON, o que torna mais fácil trabalhar com o Mongo. Além disso, ele permite que você crie projetos para seus documentos, chamados schemas, para que você não salve acidentalmente o tipo errado de dados e cause bugs mais tarde.",
+ "O MongoDB é uma aplicação de banco de dados que armazena documentos JSON (ou registros) que podem ser usados em sua aplicação. Ao contrário do SQL, outro tipo de banco de dados, o MongoDB é um banco de dados não relacional ou \"NoSQL\". Isto significa que o MongoDB armazena todos os dados associados dentro de um registro, em vez de armazená-los em muitas tabelas predefinidas, como em um banco de dados SQL.",
+ "O Mongoose é um pacote popular do npm para a interação com o MongoDB. Com o Mongoose, você pode usar objetos JavaScript simples em vez de JSON, o que torna mais fácil trabalhar com o MongoDB. Além disso, ele permite que você crie projetos para seus documentos, chamados schemas, para que você não salve acidentalmente o tipo errado de dados e cause bugs mais tarde.",
"Nos cursos de MongoDB e Mongoose, você aprenderá os fundamentos de trabalhar com dados persistentes, incluindo como configurar um modelo, salvar, excluir e buscar documentos no banco de dados."
]
},
@@ -804,7 +804,8 @@
"title": "Rosetta Code",
"intro": [
"Aumente o nível de suas habilidades criativas de resolução de problemas com essas tarefas de programação gratuitas da biblioteca clássica do Rosetta Code.",
- "Esses desafios podem ser difíceis, mas levarão sua lógica de algoritmos a novos patamares."
+ "Esses desafios podem ser difíceis, mas levarão sua lógica de algoritmos a novos patamares.",
+ "Attribute: Rosetta Code"
]
},
"project-euler": {
diff --git a/client/i18n/locales/portuguese/links.json b/client/i18n/locales/portuguese/links.json
index 8672bd3bca512c..4fe3a2f5b325cc 100644
--- a/client/i18n/locales/portuguese/links.json
+++ b/client/i18n/locales/portuguese/links.json
@@ -13,7 +13,10 @@
"copyright-url": "https://www.freecodecamp.org/news/copyright-policy/"
},
"donate": {
- "other-ways-url": "https://www.freecodecamp.org/news/how-to-donate-to-free-code-camp"
+ "other-ways-url": "https://www.freecodecamp.org/news/how-to-donate-to-free-code-camp",
+ "download-irs-url": "https://s3.amazonaws.com/freecodecamp/Free+Code+Camp+Inc+IRS+Determination+Letter.pdf",
+ "download-990-url": "https://freecodecamp.s3.amazonaws.com/freeCodeCamp+2019+f990.pdf",
+ "one-time-url": "https://paypal.me/freecodecamp"
},
"nav": {
"forum": "https://forum.freecodecamp.org/c/portugues/",
@@ -23,6 +26,6 @@
"HTML-CSS": "Portugues/HTML-CSS",
"JavaScript": "Portugues/JavaScript",
"Python": "Portugues/Python",
- "Relational Databases": "Portugues/Relational Databases"
+ "Backend Development": "Portugues/ajuda-em-programacao"
}
}
diff --git a/client/i18n/locales/portuguese/meta-tags.json b/client/i18n/locales/portuguese/meta-tags.json
index cf2020dbfb80e6..667f8c71f84da9 100644
--- a/client/i18n/locales/portuguese/meta-tags.json
+++ b/client/i18n/locales/portuguese/meta-tags.json
@@ -1,21 +1,21 @@
{
- "title": "Learn to Code — For Free — Coding Courses for Busy People",
- "description": "Learn to Code — For Free",
- "social-description": "Learn to Code — For Free",
+ "title": "Aprenda a programar — de graça — Cursos de programação para pessoas ocupadas",
+ "description": "Aprenda a programar — de graça",
+ "social-description": "Aprenda a programar — de graça",
"keywords": [
"python",
"javascript",
"js",
"git",
"github",
- "website",
+ "site",
"web",
- "development",
- "free",
- "code",
- "camp",
- "course",
- "courses",
+ "desenvolvimento",
+ "gratuito",
+ "programar",
+ "freecodecamp",
+ "curso",
+ "cursos",
"html",
"css",
"react",
@@ -24,9 +24,9 @@
"front",
"back",
"end",
- "learn",
+ "aprender",
"tutorial",
- "programming"
+ "programação"
],
- "youre-unsubscribed": "You have been unsubscribed"
+ "youre-unsubscribed": "Você não está mais inscrito"
}
diff --git a/client/i18n/locales/portuguese/translations.json b/client/i18n/locales/portuguese/translations.json
index af8eb9f4be2bfb..70a6c82803eebd 100644
--- a/client/i18n/locales/portuguese/translations.json
+++ b/client/i18n/locales/portuguese/translations.json
@@ -50,7 +50,8 @@
"reset-lesson": "Reiniciar esta aula",
"run": "Executar",
"run-test": "Execute os testes (Ctrl + Enter)",
- "check-code": "Check Your Code (Ctrl + Enter)",
+ "check-code": "Verifique seu código (Ctrl + Enter)",
+ "check-code-2": "Verifique seu código",
"reset": "Redefinir",
"reset-code": "Redefinir todo o código",
"help": "Ajuda",
@@ -70,7 +71,11 @@
"start-coding": "Comece a programar!",
"go-to-settings": "Vá para as configurações para solicitar sua certificação",
"click-start-course": "Iniciar o curso",
- "click-start-project": "Iniciar o projeto"
+ "click-start-project": "Iniciar o projeto",
+ "change-language": "Alterar idioma",
+ "cancel-change": "Cancelar alteração",
+ "resume-project": "Retomar projeto",
+ "start-project": "Iniciar o projeto"
},
"landing": {
"big-heading-1": "Aprenda a programar — de graça.",
@@ -101,7 +106,7 @@
},
"settings": {
"share-projects": "Compartilhe seus projetos que não sejam do freeCodeCamp, artigos ou pull requests aceitas.",
- "privacy": "The settings in this section enable you to control what is shown on your freeCodeCamp public portfolio. Press save to save your changes.",
+ "privacy": "As configurações nesta seção permitem que você controle o que é mostrado no seu portfólio público do freeCodeCamp. Pressione Save para salvar suas alterações.",
"data": "Para ver quais dados mantemos sobre sua conta, clique no botão \"Baixar seus dados\" abaixo",
"disabled": "Suas certificações serão desabilitadas ao configurar como privado.",
"private-name": "Seu nome não aparecerá nas certificações, se isto estiver definido como privado.",
@@ -143,7 +148,8 @@
"my-timeline": "Minha linha do tempo",
"my-donations": "Minhas doações",
"night-mode": "Modo noturno",
- "sound-mode": "Modo fogueira"
+ "sound-mode": "Modo fogueira",
+ "keyboard-shortcuts": "Habilitar teclas de atalho"
},
"headings": {
"certs": "Certificações",
@@ -269,7 +275,7 @@
"solution-link": "Link da solução",
"github-link": "Link do GitHub",
"submit-and-go": "Enviar e ir para o meu próximo desafio",
- "congradulations": "Congratulations, your code passes. Submit your code to complete this step and move on to the next one.",
+ "congratulations": "Parabéns, o código passou. Envie o código para continuar.",
"i-completed": "Já completei este desafio",
"test-output": "O resultado do seu código vai aparecer aqui",
"running-tests": "// executando testes",
@@ -280,14 +286,14 @@
"percent-complete": "{{percent}}% completo",
"tried-rsa": "Se você já tentou usar o método de <0>ler, pesquisar e perguntar0>, então pode pedir ajuda no fórum freeCodeCamp.",
"rsa": "Leia, pesquise, pergunte",
+ "rsa-forum": "Before making a new post please see if your question has <0>already been answered on the forum0>.",
"reset": "Reiniciar esta aula?",
"reset-warn": "Tem certeza de que deseja reiniciar esta lição? Os editores e testes serão reiniciados.",
"reset-warn-2": "Isto não pode ser desfeito",
"scrimba-tip": "Dica: se o minibrowser estiver cobrindo o código, clique e arraste para movê-lo. Além disso, sinta-se à vontade para parar e editar o código no vídeo a qualquer momento.",
"chal-preview": "Pré-visualização do desafio",
"cert-map-estimates": {
- "certs": "Certificação {{title}} (300 horas)",
- "coding-prep": "{{title}} (milhares de horas de desafios)"
+ "certs": "Certificação {{title}}"
},
"editor-tabs": {
"info": "Informações",
@@ -296,6 +302,7 @@
"restart": "Reiniciar",
"restart-step": "Reiniciar etapa",
"console": "Console",
+ "instructions": "Instruções",
"notes": "Observações",
"preview": "Pré-visualizar"
},
@@ -310,13 +317,14 @@
"runs-in-vm": "O projeto é executado em uma máquina virtual. Complete as histórias de usuários descritas lá e passe em todos os testes para concluir a etapa 1.",
"completed": "Concluído",
"not-started": "Não iniciado",
- "hint": "Hint",
- "test": "Test",
- "sorry-try-again": "Sorry, your code does not pass. Try again.",
- "sorry-keep-trying": "Sorry, your code does not pass. Keep trying.",
- "sorry-getting-there": "Sorry, your code does not pass. You're getting there.",
- "sorry-hang-in-there": "Sorry, your code does not pass. Hang in there.",
- "sorry-dont-giveup": "Sorry, your code does not pass. Don't give up."
+ "hint": "Dica",
+ "test": "Teste",
+ "sorry-try-again": "Desculpe, seu código não passou nos testes. Tente novamente.",
+ "sorry-keep-trying": "Desculpe, seu código não passou nos testes. Continue tentando.",
+ "sorry-getting-there": "Desculpe, seu código não passou nos testes. Você está chegando lá.",
+ "sorry-hang-in-there": "Desculpe, seu código não passou nos testes. Você está chegando lá.",
+ "sorry-dont-giveup": "Desculpe, seu código não passou nos testes. Não desista.",
+ "challenges-completed": "{{completedCount}} de {{totalChallenges}} desafios concluídos"
},
"donate": {
"title": "Dê seu apoio à nossa organização sem fins lucrativos",
@@ -324,7 +332,6 @@
"redirecting": "Redirecionando...",
"thanks": "Agradecemos por sua doação",
"thank-you": "Obrigado pelo seu apoio.",
- "thank-you-2": "Obrigado por apoiar o freeCodeCamp. Você tem uma doação recorrente registrada.",
"additional": "Você pode fazer uma doação adicional de qualquer valor usando este link: <0>{{url}}0>",
"help-more": "Ajude-nos a fazer mais",
"error": "Algo deu errado com a sua doação.",
@@ -443,7 +450,9 @@
"and": "e",
"change-theme": "Faça login para mudar o tema.",
"translation-pending": "Ajude-nos a traduzir",
- "certification-project": "Projeto de certificação"
+ "certification-project": "Projeto de certificação",
+ "iframe-alert": "Normalmente, este link levaria você para outro site da web! Funciona. Esse é um link para: {{externalLink}}",
+ "document-notfound": "documento não encontrado"
},
"icons": {
"gold-cup": "Taça de ouro",
@@ -452,8 +461,10 @@
"donate": "Doar com PayPal",
"fail": "Exame não concluído com sucesso",
"not-passed": "Não aprovado",
+ "waiting": "Aguardando",
"passed": "Aprovado",
- "hint": "Hint",
+ "failed": "Falhou",
+ "hint": "Dica",
"heart": "Coração",
"initial": "Inicial",
"info": "Informações introdutórias",
@@ -474,8 +485,11 @@
"last-page": "Ir para a última página",
"primary-nav": "primário",
"breadcrumb-nav": "breadcrumb",
- "submit": "Use Ctrl + Enter to submit.",
- "running-tests": "Running tests"
+ "submit": "Use Ctrl + Enter para enviar.",
+ "running-tests": "Executando testes",
+ "step": "Passo",
+ "steps": "Passos",
+ "steps-for": "Passos para {{blockTitle}}"
},
"flash": {
"honest-first": "Para solicitar uma certificação, você precisa primeiro aceitar nossa política de honestidade acadêmica",
@@ -681,5 +695,16 @@
"delete-p3": "Você precisa criar um novo token para salvar seu progresso futuro nas seções de currículo que usam uma máquina virtual.",
"no-thanks": "Não, obrigado. Eu gostaria de manter meu token",
"yes-please": "Sim, eu gostaria de excluir meu token"
+ },
+ "shortcuts": {
+ "title": "Atalhos do teclado",
+ "table-header-action": "Ação",
+ "table-header-key": "Tecla(s)",
+ "navigation-mode": "Modo de navegação",
+ "execute-challenge": "Executar desafio",
+ "focus-editor": "Foco no editor",
+ "focus-instructions-panel": "Foco no painel de instruções",
+ "navigate-previous": "Navegar para o exercício anterior",
+ "navigate-next": "Navegar para o próximo exercício"
}
}
diff --git a/client/i18n/locales/ukrainian/intro.json b/client/i18n/locales/ukrainian/intro.json
index d27266803f4724..dd0838e270186f 100644
--- a/client/i18n/locales/ukrainian/intro.json
+++ b/client/i18n/locales/ukrainian/intro.json
@@ -1,256 +1,256 @@
{
"responsive-web-design": {
- "title": "Legacy Responsive Web Design",
+ "title": "Застарілий адаптивний вебдизайн",
"intro": [
- "У цьому сертифікаті \"Адаптивний вебдизайн\" ви вивчите мови, які розробники використовують для створення вебсторінок: HTML (мова розмітки гіпертексту) для змісту, і CSS (Каскадні таблиці стилів) для дизайну.",
+ "В сертифікації «Адаптивний вебдизайн» ви вивчите мови, які розробники використовують для створення вебсторінок: HTML (мова розмітки гіпертексту) для вмісту та CSS (каскадні таблиці стилів) для дизайну.",
"Спочатку ви створите застосунок із фотографіями котів, аби вивчити основи HTML та CSS. Пізніше ви опануєте сучасні методи, такі як змінні CSS, завдяки створенню пінгвіна, а також створите вебформу, щоб опанувати практики покращення доступності.",
- "Ви також дізнаєтеся, як конструювати вебсайти, які відповідають різним розмірам екранів створивши Twitter Card за допомогою Flexbox, а ще складний макет блогу з CSS Grid."
+ "Ви також дізнаєтеся, як конструювати вебсайти, які відповідають різним розмірам екранів, створивши Twitter Card за допомогою Flexbox, а ще складний макет блогу з CSS Grid."
],
"note": "Примітка: деякі розширення браузера (як блокувальники реклами та темні режими) можуть втручатися в тести. Якщо ви зіткнулися з подібними проблемами, ми рекомендуємо вимкнути розширення, які змінюють вміст або макет сторінок під час виконання курсу.",
"blocks": {
"basic-html-and-html5": {
"title": "Основи HTML та HTML5",
"intro": [
- "HTML — це мова розмітки, яка використовує спеціальний синтаксис або примітки, для опису структури вебсторінки чи браузера. Елементи HTML зазвичай відкривають та закривають теги, що охоплюють вміст та надають йому значення. Наприклад, різні елементи можуть описати текст як заголовок, абзац або елемент списку.",
+ "HTML – це мова розмітки, яка використовує спеціальний синтаксис або примітки для опису структури вебсторінки чи браузера. Елементи HTML зазвичай мають початковий та кінцевий теґи, які оточують вміст та надають йому значення. Наприклад, різні елементи можуть описати текст як заголовок, абзац або елемент списку.",
"У цьому курсі ви створите застосунок із фотографіями котів, щоб опанувати застосування деяких з найпоширеніших елементів HTML (головних блоків будь-якої вебсторінки)."
]
},
"basic-css": {
"title": "Основи CSS",
"intro": [
- "CSS, або Каскадні таблиці стилів, повідомляють браузеру як показати текст та інший вміст, який ви написали в HTML. За допомогою CSS ви можете регулювати колір, шрифт, розмір, відстань і багато інших аспектів елементів HTML.",
- "І зараз, коли ви описали структуру вашого фото-додатка, стилізуйте його за допомогою CSS."
+ "CSS, або каскадні таблиці стилів, повідомляють браузеру як показати текст та інший вміст, який ви написали в HTML. За допомогою CSS ви можете регулювати колір, шрифт, розмір, відстань і багато інших аспектів елементів HTML.",
+ "І зараз, коли ви описали структуру свого застосунку, стилізуйте його за допомогою CSS."
]
},
"applied-visual-design": {
"title": "Прикладний візуальний дизайн",
"intro": [
- "Візуальний дизайн - це поєднання типографії, кольорознавства, графіки, анімації, макетів сторінок і багато чого іншого, аби допомогти вам передати ваше унікальне повідомлення.",
+ "Візуальний дизайн – це поєднання типографії, кольорознавства, графіки, анімації, макетів сторінок і багато чого іншого, аби допомогти вам передати своє унікальне повідомлення.",
"У цьому курсі ви навчитеся застосовувати усі ці елементи візуального дизайну для своїх вебсайтів."
]
},
"applied-accessibility": {
- "title": "Доступність для людей з обмеженими можливостями",
+ "title": "Прикладна доступність",
"intro": [
- "У процесі розробки вебсайтів, спеціальні можливості посилаються на вміст сайту та ІК (інтерфейс користувача), який широка аудиторія зможе розпізнати, з яким зможе взаємодіяти та за допомогою якого зможе зорієнтуватися на сайті. У цю аудиторія також входять люди із зоровими, слуховими, руховими та когнітивними розладами.",
+ "У процесі веброзробки спеціальні можливості посилаються на вміст сайту та інтерфейс користувача, який широка аудиторія зможе розпізнати, з яким зможе взаємодіяти та за допомогою якого зможе зорієнтуватися на сайті. У цю аудиторію також входять люди із зоровими, слуховими, руховими та когнітивними розладами.",
"У цьому курсі ви дізнаєтеся найкращі практики для створення вебсайтів, які доступні кожному."
]
},
"responsive-web-design-principles": {
- "title": "Принципи Адаптивного вебдизайну",
+ "title": "Принципи адаптивного вебдизайну",
"intro": [
- "Підключитися до мережі можна з багатьох пристроїв усіх форм і розмірів. Адаптивний вебдизайн - це проєктування гнучких вебсайтів, які пристосовуються до різних розмірів, орієнтацій та розширення екранів.",
+ "Підключитися до мережі можна з багатьох пристроїв різних форм і розмірів. Адаптивний вебдизайн – це проєктування гнучких вебсайтів, які пристосовуються до різних розмірів, орієнтацій та розширення екранів.",
"У цьому курсі ви дізнаєтеся як використовувати CSS, аби ваші вебсайти мали гарний вигляд, незалежно від того, на якому пристрої вони відтворені."
]
},
"css-flexbox": {
"title": "CSS Flexbox",
"intro": [
- "Flexbox - це потужний режим розмітки, який підтримується практично на всіх пристроях і який було введено з останньою версією CSS, CSS3. За допомогою flexbox набагато легше відцентровувати елементи сторінки та створювати функціональні інтерфейси користувачів, які автоматично зменшуються та розширяються.",
+ "Flexbox – це потужний режим розмітки, який підтримується практично на всіх пристроях і який було введено з останньою версією CSS, CSS3. За допомогою flexbox набагато легше відцентровувати елементи сторінки та створювати функціональні інтерфейси користувачів, які автоматично зменшуються та розширяються.",
"У цьому курсі ви дізнаєтеся про складові flexbox та функціональної розмітки, коли створюватимете Twitter card."
]
},
"css-grid": {
"title": "CSS Grid",
"intro": [
- "CSS grid - це новіший режим розмітки, за допомогою якого можна легко створювати складну адаптивну композицію. Він перетворює елемент HTML у сітку і допомагає розмістити дочірні елементи будь-де на екрані.",
+ "CSS grid – це новіший режим розмітки, за допомогою якого можна легко створювати складну адаптивну композицію. Він перетворює елемент HTML у сітку і допомагає розмістити дочірні елементи будь-де на екрані.",
"У цьому курсі ви вивчите основи CSS Grid, створюючи різні складні композиції, в тому числі макет блогу."
]
},
"responsive-web-design-projects": {
- "title": "Проєкти Адаптивного вебдизайну",
+ "title": "Проєкти «Адаптивний вебдизайн»",
"intro": [
- "Настав час скористатися отриманими навичками на практиці. Під час роботи над проєктами, ви зможете застосувати всі навички, правила і поняття, які ви нещодавно вивчили, такі як: HTML, CSS, Візуальний дизайн, Застосування для людей з обеженими можливостями та інше.",
- "Завершіть 5 проєктів з вебпрограмування, що розташовані нижче, аби отримати свій сертифікат з адаптивного вебдизайну."
+ "Настав час скористатися отриманими навичками на практиці. Під час роботи над проєктами ви зможете застосувати всі навички, правила і поняття, які ви нещодавно вивчили, такі як: HTML, CSS, візуальний дизайн, доступність та інше.",
+ "Завершіть п'ять проєктів з вебпрограмування, що розташовані нижче, аби отримати сертифікацію «Адаптивний вебдизайн»."
]
}
}
},
"2022/responsive-web-design": {
- "title": "(New) Responsive Web Design",
+ "title": "(Новий) адаптивний вебдизайн",
"intro": [
- "In this Responsive Web Design Certification, you'll learn the languages that developers use to build webpages: HTML (Hypertext Markup Language) for content, and CSS (Cascading Style Sheets) for design.",
- "First, you'll build a cat photo app to learn the basics of HTML and CSS. Later, you'll learn modern techniques like CSS variables by building a penguin, and best practices for accessibility by building a web form.",
- "Finally, you'll learn how to make webpages that respond to different screen sizes by building a Twitter card with Flexbox, and a complex blog layout with CSS Grid."
+ "В сертифікації «Адаптивний вебдизайн» ви вивчите мови, які розробники використовують для створення вебсторінок: HTML (мова розмітки гіпертексту) для вмісту та CSS (каскадні таблиці стилів) для дизайну.",
+ "Спочатку ви створите застосунок із фотографіями котів, аби вивчити основи HTML та CSS. Пізніше ви опануєте сучасні методи, такі як змінні CSS, завдяки створенню пінгвіна, а також створите вікторину, щоб опанувати доступність.",
+ "Наостанок ви дізнаєтеся, як створити вебсторінки, які реагують на зміну розміру екрану, створивши фотогалерею за допомогою Flexbox і макет журналу з CSS Grid."
],
- "note": "Note: Some browser extensions, such as ad-blockers and dark mode extensions can interfere with the tests. If you face issues, we recommend disabling extensions that modify the content or layout of pages, while taking the course.",
+ "note": "Примітка: деякі розширення браузера (як блокувальники реклами та темні режими) можуть втручатися в тести. Якщо ви зіткнулися з подібними проблемами, ми рекомендуємо вимкнути розширення, які змінюють вміст або макет сторінок під час виконання курсу.",
"blocks": {
"build-a-tribute-page-project": {
- "title": "Tribute Page",
+ "title": "Пам'ятна сторінка",
"intro": [
- "This is one of the required projects to earn your certification.",
- "For this project, you will build a tribute page for a subject of your choosing, fictional or real."
+ "Це один з обов'язкових до виконання проєктів для отримання сертифікації.",
+ "В цьому проєкті ви створите пам'ятку сторінку на тему за власним вибором."
]
},
"build-a-personal-portfolio-webpage-project": {
- "title": "Personal Portfolio Webpage",
+ "title": "Вебсторінка персонального портфоліо",
"intro": [
- "This is one of the required projects to earn your certification.",
- "For this project, you will build your own personal portfolio page."
+ "Це один з обов'язкових до виконання проєктів для отримання сертифікації.",
+ "В цьому проєкті ви створите вебсторінку персонального портфоліо."
]
},
"build-a-product-landing-page-project": {
- "title": "Product Landing Page",
+ "title": "Посадкова сторінка продукту",
"intro": [
- "This is one of the required projects to earn your certification.",
- "For this project, you will build a product landing page to market a product of your choice."
+ "Це один з обов'язкових до виконання проєктів для отримання сертифікації.",
+ "В цьому проєкті ви створите посадкову сторінку продукту, щоб збути продукт за власним вибором."
]
},
"build-a-survey-form-project": {
- "title": "Survey Form",
+ "title": "Форма для опитування",
"intro": [
- "This is one of the required projects to earn your certification.",
- "For this project, you will build a survey form to collect data from your users."
+ "Це один з обов'язкових до виконання проєктів для отримання сертифікації.",
+ "В цьому проєкті ви створите форму для опитування, щоб зібрати дані своїх користувачів."
]
},
"build-a-technical-documentation-page-project": {
- "title": "Technical Documentation Page",
+ "title": "Сторінка технічної документації",
"intro": [
- "This is one of the required projects to earn your certification.",
- "For this project, you will build a technical documentation page to serve as instruction or reference for a topic."
+ "Це один з обов'язкових до виконання проєктів для отримання сертифікації.",
+ "В цьому проєкті ви створите сторінку технічної документації, яка служитиме інструкцією або довідником."
]
},
"learn-html-by-building-a-cat-photo-app": {
- "title": "Learn HTML by Building a Cat Photo App",
+ "title": "Вивчіть HTML, створивши застосунок з котами",
"intro": [
- "HTML tags give a webpage its structure. You can use HTML tags to add photos, buttons, and other elements to your webpage.",
- "In this course, you'll learn the most common HTML tags by building your own cat photo app."
+ "Теґи HTML надають вебсторінці структуру. Ви можете використовувати теґи HTML, щоб додати фотографії, кнопки та інші елементи до своєї вебсторінки.",
+ "У цьому курсі ви вивчите найпоширеніші теґи HTML, створивши власний застосунок з фотографіями котів."
]
},
"learn-basic-css-by-building-a-cafe-menu": {
- "title": "Learn Basic CSS by Building a Cafe Menu",
+ "title": "Вивчіть основи CSS, створивши меню для кафе",
"intro": [
- "CSS tells the browser how to display your webpage. You can use CSS to set the color, font, size, and other aspects of HTML elements.",
- "In this course, you'll learn CSS by designing a menu page for a cafe webpage."
+ "CSS повідомляє браузеру, як зображати вашу вебсторінку. Ви можете використовувати CSS, щоб встановити колір, шрифт, розмір та інші властивості елементів HTML.",
+ "У цьому курсі ви вивчите CSS, розробивши дизайн меню для веб-сторінки кафе."
]
},
"learn-the-css-box-model-by-building-a-rothko-painting": {
- "title": "Learn the CSS Box Model by Building a Rothko Painting",
+ "title": "Вивчіть блокову модель CSS, створивши картину Ротко",
"intro": [
- "Every HTML element is its own box – with its own spacing and a border. This is called the Box Model.",
- "In this course, you'll use CSS and the Box Model to create your own Rothko-style rectangular art pieces."
+ "Кожен елемент HTML є своїм власним блоком із власним простором та краєм. Це називається блоковою моделлю.",
+ "У цьому курсі ви використовуватимете CSS та блокову модель, щоб створити власну картину в стилі Ротко."
]
},
"learn-css-variables-by-building-a-city-skyline": {
- "title": "Learn CSS Variables by Building a City Skyline",
+ "title": "Вивчіть змінні CSS, створивши панораму міста",
"intro": [
- "CSS variables help you organize your styles and reuse them.",
- "In this course, you'll build a city skyline. You'll learn how to configure CSS variables so you can reuse them whenever you want."
+ "Змінні CSS допомагають організувати стилі та повторно використовувати їх.",
+ "У цьому курсі ви побудуєте панораму міста. Ви дізнаєтеся, як налаштувати змінні CSS для того, щоб повторно використовувати їх, коли забажаєте."
]
},
"learn-html-forms-by-building-a-registration-form": {
- "title": "Learn HTML Forms by Building a Registration Form",
+ "title": "Вивчіть форми HTML, створивши реєстраційну форму",
"intro": [
- "You can use HTML forms to collect information from people who visit your webpage.",
- "In this course, you'll learn HTML forms by building a signup page. You'll learn how to control what types of data people can type into your form, and some new CSS tools for styling your page."
+ "Ви можете використовувати форми HTML для збору інформації від людей, які відвідують вашу вебсторінку.",
+ "У цьому курсі ви вивчите форми HTML, створивши реєстраційну форму. Ви дізнаєтеся, як керувати типами даних, які люди можуть вводити у вашу форму, і деякі нові інструменти CSS для стилізації своєї сторінки."
]
},
"learn-accessibility-by-building-a-quiz": {
- "title": "Learn Accessibility by Building a Quiz",
+ "title": "Вивчіть доступність, створивши вікторину",
"intro": [
- "Accessibility is making your webpage easy for all people to use – even people with disabilities.",
- "In this course, you'll build a quiz webpage. You'll learn accessibility tools such as keyboard shortcuts, ARIA attributes, and design best practices."
+ "Доступність полегшує користування вашою вебсторінкою для всіх людей, навіть для людей з порушеннями.",
+ "У цьому курсі ви створите вебсторінку вікторини. Ви дізнаєтеся про інструменти доступності, такі як комбінації клавіш, атрибути ARIA та найкращі поради щодо дизайну."
]
},
"learn-intermediate-css-by-building-a-picasso-painting": {
- "title": "Learn Intermediate CSS by Building a Picasso Painting",
+ "title": "Вивчіть перехідний CSS, створивши картину Пікассо",
"intro": [
- "In this course, you'll learn how to use some intermediate CSS techniques by coding your own Picasso painting webpage. You'll learn about SVG icons, CSS positioning, and review other CSS skills you've learned."
+ "У цьому курсі ви дізнаєтеся, як використовувати деякі техніки перехідного CSS, кодуючи власну вебсторінку з картиною Пікассо. Ви дізнаєтеся про іконки SVG, позиціювання CSS та пригадаєте інші навички CSS, яких ви навчилися."
]
},
"learn-responsive-web-design-by-building-a-piano": {
- "title": "Learn Responsive Web Design by Building a Piano",
+ "title": "Вивчіть адаптивний вебдизайн, створивши піаніно",
"intro": [
- "Responsive Design tells your webpage how it should look on different-sized screens.",
- "In this course, you'll use CSS and Responsive Design to code a piano. You'll also learn more about media queries and pseudo selectors."
+ "Адаптивний дизайн каже вашій вебсторінці, як вона має виглядати на екранах різного розміру.",
+ "У цьому курсі ви використовуватимете CSS та адаптивний дизайн для кодування піаніно. До того ж, ви більше дізнаєтесь про медіазапити та псевдоселектори."
]
},
"learn-css-flexbox-by-building-a-photo-gallery": {
- "title": "Learn CSS Flexbox by Building a Photo Gallery",
+ "title": "Вивчіть CSS Flexbox, створивши фотогалерею",
"intro": [
- "Flexbox helps you design your webpage so that it looks good on any screen size.",
- "In this course, you'll use Flexbox to build a responsive photo gallery webpage."
+ "Flexbox допомагає створити вебсторінку, яка матиме хороший вигляд на екрані будь-якого розміру.",
+ "У цьому курсі ви використовуватимете Flexbox для створення адаптивної вебсторінки фотогалереї."
]
},
"learn-css-grid-by-building-a-magazine": {
- "title": "Learn CSS Grid by Building a Magazine",
+ "title": "Вивчіть CSS Grid, створивши журнал",
"intro": [
- "CSS Grid gives you control over the rows and columns of your webpage design.",
- "In this course, you'll build a magazine article. You'll learn how to use CSS Grid, including concepts like grid rows and grid columns."
+ "CSS Grid дає вам можливість керувати рядками та стовпчиками своєї вебсторінки.",
+ "У цьому курсі ви створите журнальну статтю. Ви дізнаєтеся, як використовувати CSS Grid, включно з рядками та стовпчиками сітки."
]
},
"learn-typography-by-building-a-nutrition-label": {
- "title": "Learn Typography by Building a Nutrition Label",
+ "title": "Вивчіть типографію, створивши етикетку",
"intro": [
- "Typography is the art of styling your text to be easily readable and suit its purpose.",
- "In this course, you'll use typography to build a nutrition label webpage. You'll learn how to style text, adjust line height, and position your text using CSS."
+ "Типографія – це мистецтво стилізації тексту, щоб його було легко читати та він відповідав своєму призначенню.",
+ "У цьому курсі ви використовуватимете типографію, щоб створити вебсторінку з харчовою етикеткою. Ви дізнаєтеся, як стилізувати текст, регулювати висоту рядка та позиціювати текст за допомогою CSS."
]
},
"learn-css-transforms-by-building-a-penguin": {
- "title": "Learn CSS Transforms by Building a Penguin",
+ "title": "Вивчіть трансформації CSS, створивши пінгвіна",
"intro": [
- "You can transform HTML elements to create appealing designs that draw your reader's eye. You can use transforms to rotate elements, scale them, and more.",
- "In this course, you'll build a penguin. You'll use CSS transforms to position and resize the parts of your penguin, create a background, and animate your work."
+ "Ви можете трансформувати елементи HTML, щоб створити привабливий дизайн, який привертає увагу читача. Ви можете використовувати трансформації, щоб обертати елементи, масштабувати їх тощо.",
+ "У цьому курсі ви побудуєте пінгвіна. Ви будете використовувати трансформації CSS, щоб позиціювати та змінювати розмір частин свого пінгвіна, створювати фон та анімувати роботу."
]
},
"learn-css-animation-by-building-a-ferris-wheel": {
- "title": "Learn CSS Animation by Building a Ferris Wheel",
+ "title": "Вивчіть анімацію CSS, створивши оглядове колесо",
"intro": [
- "You can use CSS animation to draw attention to specific sections of your webpage and make it more engaging.",
- "In this course, you'll build a Ferris wheel. You'll learn how to use CSS to animate elements, transform them, and adjust their speed."
+ "Ви можете використовувати анімацію CSS, щоб привернути увагу до певних розділів вебсторінки та зробити її більш привабливою.",
+ "У цьому курсі ви побудуєте оглядове колесо. Ви дізнаєтеся, як використовувати CSS для анімації елементів, трансформації та регулювання швидкості."
]
},
"learn-more-about-css-pseudo-selectors-by-building-a-balance-sheet": {
- "title": "Learn More About CSS Pseudo Selectors By Building A Balance Sheet",
+ "title": "Вивчіть більше про псевдоселектори CSS, створивши бухгалтерський баланс",
"intro": [
- "You can use CSS pseudo selectors to change specific HTML elements.",
- "In this course, you'll build a balance sheet using pseudo selectors. You'll learn how to change the style of an element when you hover over it with your mouse, and trigger other events on your webpage."
+ "Ви можете використовувати псевдоселектори CSS, щоб змінити певні елементи HTML.",
+ "У цьому курсі ви побудуєте бухгалтерський баланс за допомогою псевдоселекторів. Ви дізнаєтеся як змінити стиль елемента, коли ви наводите на нього курсор, та запускати інші події на своїй вебсторінці."
]
},
"learn-css-colors-by-building-a-set-of-colored-markers": {
- "title": "Learn CSS Colors by Building a Set of Colored Markers",
+ "title": "Вивчіть кольори CSS, створивши набір кольорових маркерів",
"intro": [
- "Selecting the correct colors for your webpage can greatly improve the aesthetic appeal to your readers.",
- "In this course, you'll build a set of colored markers. You'll learn different ways to set color values and how to pair colors with each other."
+ "Вибір правильних кольорів для вебсторінки може значно покращити естетичне вподобання читачів.",
+ "У цьому курсі ви створите набір кольорових маркерів. Ви дізнаєтесь про різні способи встановлення значень кольорів та як поєднувати кольори між собою."
]
}
}
},
"javascript-algorithms-and-data-structures": {
- "title": "Алгоритми JavaScript та Структури даних",
+ "title": "Алгоритми JavaScript та структури даних",
"intro": [
- "Якщо HTML і CSS відповідають за вміст і стилізацію сторінки, то JavaScript робить її інтерактивно. У довідці \"Алгоритм JavaScript та Структури Даних\" ви вивчите основи JavaScript, включно зі змінними, масивами, об'єктами, циклами та функціями.",
- "Як тільки ви вивчите основи, ви почнете застосовувати ці знання, створюючи алгоритми, щоб уміло маніпулювати рядками, факторизувати числа, і навіть зможете обчислити орбіту Міжнародної Космічної Станції.",
- "Крім того, ви також вивчите два важливих стилі або парадигми в програмуванні: Об'єктозорієнтоване програмування (ООП) і Функційне програмування (ФП)."
+ "Якщо HTML та CSS відповідають за вміст і стилізацію сторінки, то JavaScript робить її інтерактивною. У сертифікації «Алгоритми JavaScript та структури даних» ви вивчите основи JavaScript, включно зі змінними, масивами, об'єктами, циклами та функціями.",
+ "Як тільки ви вивчите основи, ви почнете застосовувати ці знання, створюючи алгоритми, щоб уміло маніпулювати рядками, факторизувати числа, і навіть зможете обчислити орбіту міжнародної космічної станції.",
+ "Крім того, ви також вивчите два важливих стилі або парадигми в програмуванні: об'єктноорієнтоване програмування (ООП) та функційне програмування (ФП)."
],
- "note": "Примітка: Деякі розширення браузера, такі як блокувальники реклами та скриптів можуть заважати тестам. Якщо ж ви зіштовхнулися з проблемами, ми рекомендуємо вимкнути розширення, які змінюють або блокують вміст сторінок під час проходження курсу.",
+ "note": "Примітка: деякі розширення браузера (як блокувальники реклами та скриптів) можуть втручатися в тести. Якщо ви зіткнулися з подібними проблемами, ми рекомендуємо вимкнути розширення, які змінюють або блокують вміст сторінок під час виконання курсу.",
"blocks": {
"basic-javascript": {
"title": "Основи JavaScript",
"intro": [
"JavaScript — це скриптова мова, яка використовується для того, аби зробити вебсайти інтерактивними. Це одна з основних технологій в мережі (разом з HTML та CSS), яка підтримується всіма сучасними браузерами.",
- "У цьому курсі ви вивчите головні поняття програмування в JavaScript. Ви почнете з простих структур даних, таких як числа та рядки. Далі ви почнете роботу з масивами, об'єктами, функціями, циклами, умовними конструкціями (if/else) тощо."
+ "У цьому курсі ви вивчите головні поняття програмування в JavaScript. Ви почнете з простих структур даних, таких як числа та рядки. Далі ви почнете роботу з масивами, об'єктами, функціями, циклами, умовними конструкціями тощо."
]
},
"es6": {
"title": "ES6",
"intro": [
- "ECMAScript, або ES — це стандартизована версія JavaScript. Оскільки більшість браузерів дотримуються цих стандартів, умови ECMAScript і JavaScript є взаємозамінними.",
+ "ECMAScript, або ES – це стандартизована версія JavaScript. Оскільки більшість браузерів дотримуються цих стандартів, ECMAScript та JavaScript є взаємозамінними.",
"Більша частина JavaScript (про яку ви вже дізналися) була в ES5 (ECMAScript 5), який утвердили у 2009 році. Поки ви все ще маєте можливість писати програми в ES5, JavaScript постійно розвивається і там щорічно вводяться нові функції.",
- "У ES6, який випустили у 2015 році, додали багато нових потужних функцій до цієї мови. У курсі ви вивчите ці нові особливості, такі як функції arrow (стрілки), деструкція, класи, проміси та модулі."
+ "ES6, який випустили у 2015 році, додав багато нових потужних функцій до цієї мови. У курсі ви вивчите нові особливості, такі як стрілочні функції, деструкція, класи, проміси та модулі."
]
},
"regular-expressions": {
"title": "Регулярні вирази",
"intro": [
- "Регулярні вирази (відомі як \"regex\" або \"regexp\") — шаблони, які допомагають програмістам поєднувати, шукати та замінювати текст. Регулярні вирази дуже важливі, але їх важко читати, оскільки у них використовуються спеціальні символи для створення складніших, гнучкіших поєднань.",
+ "Регулярні вирази (відомі як «regex» або «regexp») – шаблони, які допомагають програмістам поєднувати, шукати та замінювати текст. Регулярні вирази дуже важливі, але їх важко читати, оскільки у них використовуються спеціальні символи для створення складніших, гнучкіших поєднань.",
"У цьому курсі ви дізнаєтеся як використовувати спеціальні символи, групи захоплення, позитивний та негативний огляди та інші техніки, аби текст відповідав бажаному."
]
},
"debugging": {
"title": "Налагодження програм",
"intro": [
- "Налагодження програм — це процес перевірки коду на наявність помилок та їх виправлення.",
+ "Налагодження програм – це процес перевірки коду на наявність помилок та їх виправлення.",
"Помилки в коді, як правило, розподіляють на три категорії: синтаксичні, які заважають вашій програмі працювати; помилки середовища виконання, коли ваш код поводиться непередбачувано; або логічні, коли ваш код не виконує свою функцію.",
"У цьому курсі ви дізнаєтеся як використовувати консоль JavaScript, аби налагодити програми та уникнути розповсюджених помилок."
]
@@ -258,30 +258,30 @@
"basic-data-structures": {
"title": "Основи структур даних",
"intro": [
- "Багатьома способами можна зберегти дані та отримати до них доступ. Ви вже знаєте деякі загальні структури даних JavaScript - масиви та об'єкти.",
- "У цьому курсі Основ структур даних ви дізнаєтеся більше про різницю між масивами та об'єктами, та в яких ситуаціях вони використовуються. Ви також дізнаєтеся як використовувати корисні JS методи, такі як splice()
і Object.keys()
аби отримати доступ до даних та маніпулювати ними."
+ "Багатьома способами можна зберегти дані та отримати до них доступ. Ви вже знаєте деякі загальні структури даних JavaScript – масиви та об'єкти.",
+ "У курсі «Основи структур даних» ви дізнаєтеся більше про різницю між масивами та об'єктами, та в яких ситуаціях вони використовуються. Ви також дізнаєтеся як використовувати корисні методи JS, такі як splice()
та Object.keys()
, аби отримати доступ до даних та маніпулювати ними."
]
},
"basic-algorithm-scripting": {
"title": "Основи написання алгоритмів",
"intro": [
- "Алгоритм — це ряд покрокових інструкцій, які описують як щось робити.",
+ "Алгоритм – це ряд покрокових інструкцій, які описують як щось робити.",
"Написання успішного алгоритму допомагає розбити задачу на менші частини та гарно подумати над тим, як вирішити кожну частину за допомогою коду.",
- "У цьому курсі ви вивчите основи алгоритмічного мислення, пишучи алгоритми, які роблять усе - від перетворення температур до користування складними 2D масивами."
+ "У цьому курсі ви вивчите основи алгоритмічного мислення, пишучи алгоритми, які роблять усе: від перетворення температур до користування складними 2D масивами."
]
},
"object-oriented-programming": {
- "title": "Об'єктозорієнтоване програмування",
+ "title": "Об'єктноорієнтоване програмування",
"intro": [
- "ООП, або Об'єктозорієнтоване програмування - це один з основних підходів до процесу розробки програмного забезпечення. В ООП об'єкти й класи впорядковують код для опису речей і того, що вони роблять.",
- "У цьому курсі ви вивчите основні принципи ООП в JavaScript, включаючи this
ключове слово, прототипи ланцюгів, конструктори та наслідування."
+ "ООП, або об'єктноорієнтоване програмування – це один з основних підходів до процесу розробки програмного забезпечення. В ООП об'єкти та класи впорядковують код для опису речей і того, що вони роблять.",
+ "У цьому курсі ви вивчите основні принципи ООП в JavaScript, включно з ключовим словом this
, прототипи ланцюгів, конструктори та наслідування."
]
},
"functional-programming": {
"title": "Функційне програмування",
"intro": [
- "Функційне програмування це ще один популярний підхід до розробки програмного забезпечення. У функційному програмуванні код впорядкований у менші, прості функції, які можна об'єднувати для створення складних програм.",
- "У цьому курсі ви вивчите основні поняття функційного програмування, включаючи чисті функції, як уникнути мутацій і як писати чистіший код за допомогою методів, таких як .map()
і .filter()
."
+ "Функційне програмування – це ще один популярний підхід до розробки програмного забезпечення. У функційному програмуванні код впорядкований у менші, прості функції, які можна об'єднувати для створення складних програм.",
+ "У цьому курсі ви вивчите основні поняття функційного програмування, включно з чистими функціями, як уникнути мутацій і як писати чистіший код за допомогою методів, таких як .map()
і .filter()
."
]
},
"intermediate-algorithm-scripting": {
@@ -291,73 +291,73 @@
]
},
"javascript-algorithms-and-data-structures-projects": {
- "title": "Проєкти з Алгоритмами JavaScript та Структурами даних",
+ "title": "Проєкти «Алгоритми JavaScript та структури даних»",
"intro": [
"Тепер настав час випробувати свої навички роботи з JavaScript на практиці. Ці проєкти подібні до тестів з написання алгоритмів, які ви вже робили, але складніші.",
- "Виконайте ці 5 проєктів JavaScript, аби отримати сертифікат \"Алгоритми JavaScript та Структури даних\"."
+ "Виконайте п'ять проєктів JavaScript, аби отримати сертифікацію «Алгоритми JavaScript та структури даних»."
]
}
}
},
"2022/javascript-algorithms-and-data-structures": {
- "title": "JavaScript Algorithms and Data Structures (Beta)",
+ "title": "Алгоритми JavaScript та структури даних (бета-версія)",
"intro": [
- "placeholder",
- "placeholder"
+ "заповнювач",
+ "заповнювач"
],
"note": "",
"blocks": {
"build-a-caesars-cipher-project": {
- "title": "Build a Casears Cipher Project",
+ "title": "Проєкт «Створіть шифр Цезаря»",
"intro": [
"",
""
]
},
"build-a-cash-register-project": {
- "title": "Build a Cash Register Project",
+ "title": "Проєкт «Створіть касовий апарат»",
"intro": [
"",
""
]
},
"build-a-palindrome-checker-project": {
- "title": "Build a Palindrome Checker Project",
+ "title": "Проєкт «Створіть перевірку паліндрома»",
"intro": [
"",
""
]
},
"build-a-roman-numeral-converter-project": {
- "title": "Build a Roman Numeral Converter Project",
+ "title": "Проєкт «Створіть конвертер римських чисел»",
"intro": [
"",
""
]
},
"build-a-telephone-number-validator-project": {
- "title": "Build a Telephone Number Validator Project",
+ "title": "Проєкт «Створіть валідатор мобільного номера»",
"intro": [
"",
""
]
},
"learn-basic-javascript-by-building-a-role-playing-game": {
- "title": "Learn Basic JavaScript by Building a Role Playing Game",
+ "title": "Вивчіть основи JavaScript, створивши рольову гру",
"intro": [
"",
""
]
},
"learn-form-validation-by-building-a-calorie-counter": {
- "title": "Learn Form Validation by Building a Calorie Counter",
+ "title": "Вивчіть валідацію форм, створивши лічильник калорій",
"intro": [
"",
""
]
},
"learn-functional-programming-by-building-a-spreadsheet": {
- "title": "Learn Functional Programming by Building a Spreadsheet",
+ "title": "Вивчіть функційне програмування, створивши електронну таблицю",
"intro": [
"",
""
@@ -366,10 +366,10 @@
}
},
"front-end-development-libraries": {
- "title": "Бібліотеки фронтенд (Front End)",
+ "title": "Бібліотеки Front End",
"intro": [
"Тепер, коли ви вже знайомі з HTML, CSS та JavaScript, піднімімо ваш рівень навичок, вивчаючи декілька найбільш популярних бібліотек верстки в галузі.",
- "У курсі \"Бібліотеки фронтенд\" ви навчитеся швидко стилізувати ваш сайт за допомогою Bootstrap. Також ви навчитеся покращувати ваші CSS стилі та розширювати їх за допомогою Sass.",
+ "У курсі «Бібліотеки Front End» ви навчитеся швидко стилізувати свій сайт за допомогою Bootstrap. Також ви навчитеся покращувати свої стилі CSS та розширювати їх за допомогою Sass.",
"Згодом ви розробите кошик для покупок та інші застосунки, щоб навчитися створювати потужні односторінкові застосунки (SPAs) з React та Redux."
],
"note": "",
@@ -377,53 +377,53 @@
"bootstrap": {
"title": "Bootstrap",
"intro": [
- "Bootstrap — це фронтенд каркас створений для проєктування адаптивних вебсторінок та застосунків. Для веброзробки цей фреймворк використовує принцип Mobile First, включає попередньо інтегровані стилі та класи CSS і деякі розширення JavaScript.",
+ "Bootstrap – це фронтенд каркас, створений для проєктування адаптивних вебсторінок та застосунків. Для веброзробки цей фреймворк використовує принцип Mobile First, включає попередньо інтегровані стилі та класи CSS і деякі розширення JavaScript.",
"Під час цього курсу ви навчитеся створювати адаптивні вебсайти за допомогою Bootstrap та використовувати готові шаблони для стилізації кнопок, зображень, форм, навігації та інших поширених елементів."
]
},
"jquery": {
"title": "jQuery",
"intro": [
- "jQuery — одна з найпопулярніших у світі бібліотек JavaScript.",
- "До її запуску у 2006 році, кожний браузер використовував JavaScript по своєму. jQuery спростила роботу з JavaScript для користувачів, а також забезпечила кросбраузерність створених кодів.",
+ "jQuery – одна з найпопулярніших у світі бібліотек JavaScript.",
+ "До її запуску у 2006 році, кожний браузер використовував JavaScript по-своєму. jQuery спростила роботу з JavaScript для користувачів, а також забезпечила кросбраузерність створених кодів.",
"Під час цього курсу ви навчитеся використовувати jQuery для виділення, вилучення, копіювання та редагування різних елементів на сторінці."
]
},
"sass": {
"title": "SASS",
"intro": [
- "Sass, або \"Syntactically Awesome StyleSheets\" — це мовне розширення CSS, що містить функції, яких немає у базовому CSS, і тим самим допомагає спростити створення таблиць стилів для ваших проєктів.",
- "У цьому курсі ви навчитеся зберігати дані у змінних, вкладати CSS, створювати багаторазові стилі за допомогою міксин (Mixins), додавати умовні конструкції та цикли до ваших стилів тощо."
+ "Sass, або «Syntactically Awesome StyleSheets» – це мовне розширення CSS, що містить функції, яких немає у базовому CSS, і тим самим допомагає спростити створення таблиць стилів для ваших проєктів.",
+ "У цьому курсі ви навчитеся зберігати дані у змінних, вкладати CSS, створювати багаторазові стилі за допомогою міксин, додавати умовні конструкції та цикли до своїх стилів тощо."
]
},
"react": {
"title": "React",
"intro": [
- "React — це популярна бібліотека JavaScript для створення багаторазових компонентних користувацьких інтерфейсів для вебсторінок або додатків.",
+ "React – це популярна бібліотека JavaScript для створення багаторазових компонентних користувацьких інтерфейсів для вебсторінок або додатків.",
"React поєднує HTML з функціями JavaScript, формуючи власну мову розмітки під назвою JSX. React також дозволяє легко керувати потоком даних у всьому додатку.",
- "Під час цього курсу ви навчитеся створювати різні компоненти React, керувати даними за допомогою пропсів (props), а також застосовувати різні методи життєвого циклу, такі як componentDidMount
тощо."
+ "У цьому курсі ви навчитеся створювати різні компоненти React, керувати даними за допомогою пропсів, а також застосовувати різні методи життєвого циклу, такі як componentDidMount
тощо."
]
},
"redux": {
"title": "Redux",
"intro": [
- "Зі збільшенням розмірів та кількості додатків, керувати спільними даними стає все складніше. Redux називають \"відкритою JS бібліотекою призначеною для управління станом програм JavaScript\", яка забезпечує належну роботу ваших програм і спрощує їхнє тестування.",
+ "Зі збільшенням розмірів та кількості додатків, керувати спільними даними стає все складніше. Redux називають «відкритою JS бібліотекою призначеною для управління станом програм JavaScript», яка забезпечує належну роботу ваших програм і спрощує тестування.",
"Хоча ви можете використовувати його з будь-якою іншою бібліотекою, ми лише коротко розповімо про Redux, а тоді об'єднаємо його з React у наступному наборі курсів.",
- "Під час цього курсу ви вивчите базову інформацію про сховища, дії, редуктори та проміжне програмне забезпечення Redux для керування даними у вашому додатку."
+ "Під час цього курсу ви вивчите базову інформацію про сховища, дії, редуктори та проміжне програмне забезпечення Redux для керування даними у своєму додатку."
]
},
"react-and-redux": {
- "title": "React і Redux",
+ "title": "React та Redux",
"intro": [
"React часто використовують разом із Redux, і не дарма. Redux і React створив один програміст, який хотів зробити процес передачі даних між компонентами простішим.",
- "Тепер коли ви вже навчились керувати загальними даними за допомогою Redux, ви можете виконувати дії й в React. На курсах React і Redux, ви навчитесь будувати компонент React і дізнаєтесь, як локально керувати станом на рівні компонента та й у цілому додатку за допомогою Redux."
+ "Тепер коли ви вже навчились керувати загальними даними за допомогою Redux, ви можете виконувати дії в React. На курсах React і Redux, ви навчитесь будувати компонент React і дізнаєтесь, як локально керувати станом на рівні компонента, та й у цілому додатку, за допомогою Redux."
]
},
"front-end-development-libraries-projects": {
- "title": "Проєкти по бібліотеках фронтенд розробки",
+ "title": "Проєкти «Бібліотеки Front End»",
"intro": [
- "Прийшов час протестувати ваші навички роботи з бібліотеками фронтенд розробки. Використовуйте Bootstrap, jQuery, Sass, React та Redux, аби створити 5 проєктів, що перевірять ваші знання з усього, що ви вивчили дотепер.",
- "Завершіть всі 5 проєктів і отримайте сертифікат по бібліотеках фронтенд розробки."
+ "Прийшов час протестувати ваші навички роботи з бібліотеками фронтенд розробки. Використайте Bootstrap, jQuery, Sass, React та Redux, аби створити 5 проєктів, що перевірять ваші знання з усього, що ви вивчили дотепер.",
+ "Виконайте п'ять проєктів та отримайте сертифікацію «Бібліотеки Front End»."
]
}
}
@@ -432,33 +432,33 @@
"title": "Візуалізація даних",
"intro": [
"Дані повсюди, але це не означає, що більшість з них без форми чи контексту.",
- "У сертифікаті \"Візуалізація даних\" ви створите діаграми, графіки та карти, що показують різні типи даних, за допомогою бібліотеки D3.js.",
- "Ви також дізнаєтесь про JSON (JavaScript Object Notation), і як працювати з даними онлайн користуючись API (Application Programing Interface)."
+ "У сертифікації «Візуалізація даних» ви створите діаграми, графіки та карти, що показують різні типи даних, за допомогою бібліотеки D3.js.",
+ "Ви також дізнаєтесь про JSON (JavaScript Object Notation) та як працювати з даними онлайн, користуючись API (Application Programing Interface)."
],
"note": "",
"blocks": {
"data-visualization-with-d3": {
- "title": "Візуалізація даних за допомогою D3",
+ "title": "Візуалізація даних з D3",
"intro": [
- "D3, або D3.js — розшифровується як \"Data Driven Documents\", а українською — \"Документи, керовані даними\". Це бібліотека JavaScript для створення функціональної та інтерактивної візуалізації даних у браузері.",
+ "D3, або D3.js, розшифровується як «Data Driven Documents». Це бібліотека JavaScript для створення функціональної та інтерактивної візуалізації даних у браузері.",
"D3 створено для роботи з поширеними вебстандартами, а саме: HTML, CSS і SVG (масштабована векторна графіка).",
"D3 підтримує багато різних форматів даних. Тому, використовуючи її потужні вбудовані методи, ви можете перетворити ці дані у різні діаграми, графіки та карти.",
- "У курсі \"Візуалізація даних за допомогою D3\" ви навчитеся працювати з даними, аби створювати різні діаграми, графіки, hover елементи, та інші складові частини, аби створити динамічну та принадну візуалізацію даних."
+ "У курсі «Візуалізація даних з D3» ви навчитеся працювати з даними, аби створювати різні діаграми, графіки, елементи наведення та інші складові частини, аби створити динамічну та принадну візуалізацію даних."
]
},
"json-apis-and-ajax": {
"title": "JSON API та AJAX",
"intro": [
- "Так само як інтерфейс користувача (UIs) допомагає людям користуватися програмами, так само й APIs (Application Programming Interfaces) допомагає програмам взаємодіяти між собою. APIs — це інструменти, які використовуються комп'ютерами для комунікування один з одним, і, частково, для надсилання та отримання даних.",
+ "Так само як інтерфейс користувача (UIs) допомагає людям користуватися програмами, так само й APIs (Application Programming Interfaces) допомагає програмам взаємодіяти між собою. APIs – це інструменти, які використовуються комп'ютерами для комунікування один з одним, і, частково, для надсилання та отримання даних.",
"Програмісти часто використовують AJAX (Asynchronous JavaScript and XML) при роботі з APIs. AJAX належить до групи технологій, які роблять асинхронні запити до сервера для передачі даних, а потім завантажують будь-які отримані дані до сторінки. І дані, що були передані між браузером і сервером, часто мають формат JSON (JavaScript Object Notation).",
- "Цей курс навчить вас основ роботи з APIs та різними AJAX технологіями в браузері."
+ "Цей курс навчить вас основ роботи з APIs та різними технологіями AJAX в браузері."
]
},
"data-visualization-projects": {
- "title": "Проєкти візуалізації даних",
+ "title": "Проєкти «Візуалізація даних»",
"intro": [
"Тепер, коли ви дізналися як працювати з D3, APIs та AJAX технологіями, перевірте свої навички за допомогою цього тесту з 5-ма проєктами візуалізації даних.",
- "У цих проєктах вам потрібно буде отримати й проаналізувати набір даних, тоді використати D3 для створення різної візуалізації даних. Завершіть усі проєкти, аби отримати сертифікат з візуалізації даних."
+ "У цих проєктах вам потрібно буде отримати й проаналізувати набір даних, тоді використати D3 для створення різної візуалізації даних. Завершіть усі проєкти, аби отримати сертифікацію «Візуалізація даних»."
]
},
"d3-dashboard": {
@@ -471,151 +471,151 @@
}
},
"relational-database": {
- "title": "Relational Database (Beta)",
+ "title": "Реляційна база даних (бета-версія)",
"intro": [
- "For these courses, you will use real developer tools and software including VS Code, PostgreSQL, and the Linux / Unix command line to complete interactive tutorials and build projects.",
- "These courses start off with basic Bash commands. Using the terminal, you will learn everything from navigating and manipulating a file system, scripting in Bash, all the way to advanced usage.",
- "Next, you will learn how to create and use a relational database with PostgreSQL, a database management system, and SQL, the language of these databases.",
- "Finally, you will learn Git, the version control system, an essential tool of every developer."
+ "У цих курсах ви використовуватимете реальні інструменти розробника та програмне забезпечення, включно з VS Code, PostgreSQL та командним рядком Linux / Unix для завершення інтерактивних уроків і створення проєктів.",
+ "Ці курси починаються з основних команд Bash. За допомогою терміналу ви навчитеся усього необхідного (від навігації та маніпуляції файловою системою, написання скрипту в Bash до просунутого використання).",
+ "Далі ви навчитеся створювати та використовувати реляційну базу даних з PostgreSQL (система керування базами даних) та SQL (мова баз даних).",
+ "Зрештою, ви дізнаєтеся про Git, систему контролю версій, важливий інструмент кожного розробника."
],
"blocks": {
"build-a-celestial-bodies-database-project": {
- "title": "Celestial Bodies Database",
+ "title": "База даних «Небесні тіла»",
"intro": [
- "This is one of the required projects to earn your certification.",
- "For this project, you will build a database of celestial bodies using PostgreSQL."
+ "Це один з обов'язкових до виконання проєктів для отримання сертифікації.",
+ "У цьому проєкті ви побудуєте базу даних небесних тіл, використовуючи PostgreSQL."
]
},
"build-a-number-guessing-game-project": {
- "title": "Number Guessing Game",
+ "title": "Гра «Вгадай число»",
"intro": [
- "This is one of the required projects to earn your certification.",
- "For this project, you will use Bash scripting, PostgreSQL, and Git to create a number guessing game that runs in the terminal and saves user information."
+ "Це один з обов'язкових до виконання проєктів для отримання сертифікації.",
+ "У цьому проєкті ви використовуватимете сценарії Bash, PostgreSQL та Git, щоб створити гру з вгадуванням чисел, яка запускається в терміналі та зберігає інформацію користувача."
]
},
"build-a-periodic-table-database-project": {
- "title": "Periodic Table Database",
+ "title": "База даних «Періодична таблиця»",
"intro": [
- "This is one of the required projects to earn your certification.",
- "For this project, you will create Bash a script to get information about chemical elements from a periodic table database."
+ "Це один з обов'язкових до виконання проєктів для отримання сертифікації.",
+ "У цьому проєкті ви створите скрипт Bash для отримання інформації про хімічні елементи з бази даних періодичної таблиці."
]
},
"build-a-salon-appointment-scheduler-project": {
- "title": "Salon Appointment Scheduler",
+ "title": "Планувальник «Записи в салоні»",
"intro": [
- "This is one of the required projects to earn your certification.",
- "For this project, you will create an interactive Bash program that uses PostgreSQL to track the customers and appointments for your salon."
+ "Це один з обов'язкових до виконання проєктів для отримання сертифікації.",
+ "У цьому проєкті ви створите інтерактивну програму Bash, яка використовує PostgreSQL для відстеження клієнтів і зустрічей у вашому салоні."
]
},
"build-a-world-cup-database-project": {
- "title": "World Cup Database",
+ "title": "База даних «Чемпіонат світу»",
"intro": [
- "This is one of the required projects to earn your certification.",
- "For this project, you will create a Bash script that enters information from World Cup games into PostgreSQL, then query the database for useful statistics."
+ "Це один з обов'язкових до виконання проєктів для отримання сертифікації.",
+ "У цьому проєкті ви створите скрипт Bash, який вводить інформацію з ігор чемпіонату світу в PostgreSQL, а потім запитує базу даних для отримання статистики."
]
},
"learn-advanced-bash-by-building-a-kitty-ipsum-translator": {
- "title": "Learn Advanced Bash by Building a Kitty Ipsum Translator",
+ "title": "Вивчіть прогресивний Bash, створивши перекладач Kitty Ipsum",
"intro": [
- "There's more to Bash commands than you might think.",
- "In this 140-lesson course, you will learn some more complex commands, and the details of how commands work."
+ "У командах Bash більше, ніж ви могли собі уявити.",
+ "У цьому курсі з 140 уроків ви дізнаєтеся про деякі складніші команди, а також детально дізнаєтеся як вони працюють."
]
},
"learn-bash-and-sql-by-building-a-bike-rental-shop": {
- "title": "Learn Bash and SQL by Building a Bike Rental Shop",
+ "title": "Вивчіть Bash та SQL, створивши магазин прокату велосипедів",
"intro": [
- "In this 210-lesson course, you will build an interactive Bash program that stores rental information for your bike rental shop using PostgreSQL."
+ "У цьому курсі з 210 уроків ви створите інтерактивну програму Bash, яка зберігатиме інформацію про оренду для вашого магазину прокату велосипедів, використовуючи PostgreSQL."
]
},
"learn-bash-by-building-a-boilerplate": {
- "title": "Learn Bash by Building a Boilerplate",
+ "title": "Вивчіть Bash, створивши шаблонний код",
"intro": [
- "The terminal allows you to send text commands to your computer that can manipulate the file system, run programs, automate tasks, and much more.",
- "In this 170-lesson course, you will learn terminal commands by creating a website boilerplate using only the command line."
+ "Термінал дозволяє відправляти текстові команди на ваш комп’ютер, які можуть маніпулювати файловою системою, запускати програми, автоматизувати завдання та багато іншого.",
+ "У цьому курсі з 170 уроків ви вивчите команди терміналу, створивши шаблонний код вебсайту, використовуючи лише командний рядок."
]
},
"learn-bash-scripting-by-building-five-programs": {
- "title": "Learn Bash Scripting by Building Five Programs",
+ "title": "Вивчіть скрипт Bash, створивши п’ять програм",
"intro": [
- "Bash scripts combine terminal commands and logic into programs that can execute or automate tasks, and much more.",
- "In this 220-lesson course, you will learn more terminal commands and how to use them within Bash scripts by creating five small programs."
+ "Скрипти Bash поєднують команди терміналу та логіку в програми, які можуть виконувати або автоматизувати завдання та багато іншого.",
+ "У цьому курсі з 220 уроків ви вивчите більше про команди терміналу та як їх використовувати в скриптах Bash, створивши п’ять невеликих програм."
]
},
"learn-git-by-building-an-sql-reference-object": {
- "title": "Learn Git by Building an SQL Reference Object",
+ "title": "Вивчіть Git, створивши об'єкт SQL",
"intro": [
- "Git is a version control system that keeps track of all the changes you make to your codebase.",
- "In this 240-lesson course, you will learn how Git keeps track of your code by creating an object containing commonly used SQL commands."
+ "Git – це система контролю версій, яка відстежує усі зміни, внесені вами до свого коду.",
+ "У цьому курсі з 240 уроків ви вивчите як Git відстежує ваш код, створюючи об’єкт, що містить часто використовувані команди SQL."
]
},
"learn-nano-by-building-a-castle": {
- "title": "Learn Nano by Building a Castle",
+ "title": "Вивчіть Nano, створивши замок",
"intro": [
- "Nano is a program that allows you to edit files right in the terminal.",
- "In this 40-lesson course, you will learn how to edit files in the terminal with Nano while building a castle."
+ "Nano – це програма, яка дозволяє редагувати файли прямо в терміналі.",
+ "У цьому курсі з 40 уроків ви вивчите як редагувати файли в терміналі за допомогою Nano під час будівництва замку."
]
},
"learn-relational-databases-by-building-a-mario-database": {
- "title": "Learn Relational Databases by Building a Mario Database",
+ "title": "Вивчіть реляційні бази даних, створивши базу даних «Mario»",
"intro": [
- "A relational database organizes data into tables that are linked together through relationships.",
- "In this 165-lesson course, you will learn the basics of a relational database by creating a PostgreSQL database filled with video game characters."
+ "Реляційна база даних організовує дані в таблиці, які пов’язані між собою через спорідненість.",
+ "В цьому курсі з 165 уроків ви вивчите основи реляційної бази даних, створивши базу даних PostgreSQL, наповнену персонажами з відеоігор."
]
},
"learn-sql-by-building-a-student-database-part-1": {
- "title": "Learn SQL by Building a Student Database: Part 1",
+ "title": "Вивчіть SQL, створивши студентську базу даних (частина 1)",
"intro": [
- "SQL, or Structured Query Language, is the language for communicating with a relational database.",
- "In this 140-lesson course, you will create a Bash script that uses SQL to enter information about your computer science students into PostgreSQL."
+ "SQL, або Structured Query Language (мова структурованих запитів) – це мова для спілкування з реляційною базою даних.",
+ "В цьому курсі з 140 уроків ви створите скрипт Bash, який використовує SQL для введення інформації про ваших студентів з інформатики в PostgreSQL."
]
},
"learn-sql-by-building-a-student-database-part-2": {
- "title": "Learn SQL by Building a Student Database: Part 2",
+ "title": "Вивчіть SQL, створивши студентську базу даних (частина 2)",
"intro": [
- "SQL join commands are used to combine information from multiple tables in a relational database",
- "In this 140-lesson course, you will complete your student database while diving deeper into SQL commands."
+ "Команди об’єднання SQL використовуються, щоб поєднати інформацію з кількох таблиць у реляційній базі даних",
+ "У цьому курсі з 140 уроків ви завершите свою базу даних студентів, глибше занурившись в команди SQL."
]
}
}
},
"back-end-development-and-apis": {
- "title": "Бекенд розробка та API",
+ "title": "Розробка Back End та API",
"intro": [
- "До цього моменту ви використовували JavaScript тільки для фронтенду, аби зробити вебсторінку інтерактивнішою, чи розв'язати завдання з алгоритмами, або створити односторінкові застосунки (SPA). Але JavaScript можна використовувати й в бекенд, або на сервері, для створення цілих вебзастосунків.",
- "Сьогодні один із найпопулярніших способів створення застосунків — це за допомогою мікросервісів, маленьких модульних застосунків, які разом формують єдине ціле.",
- "У курсі \"Бекенд розробка та API\" ви навчитеся писати бекенд програми за допомогою Node.js і npm (Node Package Manager). Також, ви створите вебзастосунок за допомогою фреймворку Express та мікросервіс для пошуку людей (People Finder) за допомогою MongoDB і Mongoose library."
+ "До цього моменту ви використовували JavaScript тільки для фронтенду, аби зробити вебсторінку інтерактивнішою, розв'язати завдання з алгоритмами, або створити SPA. Але JavaScript можна використовувати й в бекенд, або на сервері, для створення цілих вебзастосунків.",
+ "Сьогодні один із найпопулярніших способів створення застосунків – за допомогою мікросервісів, маленьких модульних застосунків, які разом формують єдине ціле.",
+ "У сертифікації «Розробка Back End та API» ви навчитеся писати бекенд програми за допомогою Node.js та npm (Node Package Manager). Також, ви створите вебзастосунок за допомогою фреймворку Express та мікросервіс для пошуку людей за допомогою MongoDB і Mongoose library."
],
"note": "",
"blocks": {
"managing-packages-with-npm": {
- "title": "Керування пакетами NPM",
+ "title": "Керування пакетами з NPM",
"intro": [
- "npm (Node Package Manager) — це інструмент командного рядка для встановлення, створення та поширення пакетів JavaScript-коду написаного для Node.js. На npm знаходяться багато пакетів з відкритим вихідним кодом, тому спершу ретельно їх вивчіть, щоб вам не довелося виправляти помилки під час роботи з даними чи отримання даних з API.",
- "У цьому курсі ви вивчите основи використання npm, включаючи роботу із package.json
та керування вашими встановленими залежностями."
+ "npm (Node Package Manager) – це інструмент командного рядка для встановлення, створення та поширення пакетів коду JavaScript, написаного для Node.js. На npm знаходиться багато пакетів з відкритим вихідним кодом, тому спершу ретельно їх вивчіть, щоб вам не довелося виправляти помилки під час роботи з даними чи отримання даних з API.",
+ "У цьому курсі ви вивчите основи використання npm, включно з тим як працювати із package.json
та як керувати встановленими залежностями."
]
},
"basic-node-and-express": {
"title": "Основи Node та Express",
"intro": [
- "Node.js — це середовище виконання JavaScript, що дозволяє розробникам писати бекенд (серверні) програми в JavaScript. Node.js має кілька вбудованих модулів, — маленьких, незалежних програм — які допомагають з цим. Деякі з основних модулів містять HTTP, який працює на зразок сервера, і файлову систему — модуль для читання і редагування файлів.",
+ "Node.js – це середовище виконання JavaScript, що дозволяє розробникам писати бекенд (серверні) програми в JavaScript. Node.js має кілька вбудованих модулів, – маленьких, незалежних програм – які допомагають з цим. Деякі з основних модулів містять HTTP, який працює на зразок сервера, і файлову систему – модуль для читання і редагування файлів.",
"В останній групі курсів ви навчилися встановлювати та керувати пакетами npm, які є скупченнями менших модулів. Ці пакети можуть допомогти вам створити більші, складніші застосунки.",
- "Express is a lightweight web application framework, and is one of the most popular packages on npm. Express makes it much easier to create a server and handle routing for your application, which handles things like directing people to the correct page when they visit a certain endpoint like /blog.", - "У цьому курсі ви дізнаєтесь основи Node та Express, включаючи те, як створювати сервер, обслуговувати різні файли та обробляти різні запити з браузера." + "Express – це спрощений фреймворк вебзастосунків та один з найбільш популярних пакетів на npm. Express значно полегшує створення сервера та керування маршрутизацією вашого застосунку, що відповідає за такі речі як перенаправлення людей до потрібної сторінки, коли вони відвідують певну кінцеву точку, наприклад
/blog.", + "У цьому курсі ви дізнаєтесь основи Node та Express, включно з тим, як створювати сервер, обслуговувати різні файли та обробляти різні запити з браузера." ] }, "mongodb-and-mongoose": { - "title": "MongoDB і Mongoose", + "title": "MongoDB та Mongoose", "intro": [ - "MongoDB це програма бази даних, яка зберігає JSON документи(чи записи), які ви можете використати у своєму застосунку. На відміну від SQL, іншого типу бази даних, Mongo це нереляційна, або \"NoSQL\" база даних. Це означає, що Mongo зберігає усі збірні дані в межах одного запису, замість того, щоб тримати їх у багатьох попередньо налаштованих таблицях, як у базі даних SQL.", - "Moongoose це популярний пакет npm, який часто встановлюють разом із Mongo. З Moongoose ви можете використовувати прості об'єкти JavaScript замість JSON, що полегшує роботу із Mongo. Він також дозволяє створити нарис документів під назвою \"схеми\", щоб ви ненароком не зберегли хибний тип даних та потім не спричинили помилок.", - "На курсах MongoDB та Mongoose, ви вивчите основи роботи із постійними даними, враховуючи налаштування моделі, збереження, видалення та пошук документів у базі даних." + "MongoDB – це програма бази даних, яка зберігає JSON документи (чи записи), які ви можете використати у своєму застосунку. На відміну від SQL, іншого типу бази даних, MongoDB – це нереляційна, або «NoSQL» база даних. Це означає, що MongoDB зберігає усі збірні дані в межах одного запису, замість того, щоб тримати їх у багатьох попередньо налаштованих таблицях, як у базі даних SQL.", + "Moongoose – це популярний пакет npm для взаємодії з MongoDB. З Moongoose ви можете використовувати прості об'єкти JavaScript замість JSON, що полегшує роботу із MongoDB. Він також дозволяє створити нарис документів під назвою «схеми», щоб ви ненароком не зберегли хибний тип даних та не спричинили помилок.", + "На курсах MongoDB та Mongoose ви вивчите основи роботи із постійними даними, враховуючи налаштування моделі, збереження, видалення та пошук документів у базі даних." ] }, "back-end-development-and-apis-projects": { - "title": "Бекенд розробка та проєкти API", + "title": "Проєкти «Розробка Back End та API»", "intro": [ "Раніше ви уже мали справу з API, але тепер, коли ви знайомі із nmp, Node, Express, Mongo DB та Mongoose, прийшов час створити щось власне. Застосуйте усі отримані знання, щоб створити 5 окремих мікросерверів, які є меншими застосунками з обмеженими можливостями.", - "Створивши їх, ви матимете 5 крутих API мікросерверів, якими можна похвалитися перед друзями, рідними чи потенційними роботодавцями. О, а ще новенька бекенд розробка та сертифікати API." + "Створивши їх, ви матимете 5 крутих API мікросерверів, якими можна похвалитися перед друзями, рідними чи потенційними роботодавцями. О, а ще новеньку сертифікацію «Розробка Back End та APIs»." ] } } @@ -623,8 +623,8 @@ "quality-assurance": { "title": "Забезпечення якості", "intro": [ - "Оскільки ваші програми чи вебзастосунки стають складнішими, ви захочете протестувати їх, щоб переконатися, що нові зміни не порушують їх початкових функцій.", - "У межах сертифікації \"Забезпечення якості\" ви дізнаєтесь, як писати тести з Chai, щоб переконатись, що ваші застосунки працюють так, як ви очікуєте.", + "Оскільки ваші програми чи вебзастосунки стають складнішими, ви захочете протестувати їх, щоб переконатися, що нові зміни не порушують початкові функції.", + "У сертифікації «Забезпечення якості» ви дізнаєтесь як писати тести з Chai, щоб переконатись, що ваші застосунки працюють так, як ви очікуєте.", "Потім ви створите застосунок чату, щоб вивчити розширені концепції Node та Express. Ви також будете використовувати Pug як шаблонізатор, Passport для автентифікації та Socket.io для комунікування в режимі реального часу між сервером та підключеними клієнтами." ], "note": "", @@ -632,7 +632,7 @@ "quality-assurance-and-testing-with-chai": { "title": "Забезпечення якості та тестування з Chai", "intro": [ - "Chai - це бібліотека тестування JavaScript, яка допомагає вам переконатись, що ваша програма все ще поводиться так, як ви очікуєте, після внесення змін до коду.", + "Chai – це бібліотека тестування JavaScript, яка допомагає вам переконатись, що ваша програма все ще поводиться так, як ви очікуєте, після внесення змін до коду.", "Використовуючи Chai, ви зможете писати тести, які описують ваші програмні вимоги, та бачити чи ваш застосунок відповідає їм.", "У цьому курсі ви дізнаєтесь про припущення, глибоку рівність, правдивість, тестування API та інші основи тестування програм JavaScript." ] @@ -642,51 +642,51 @@ "intro": [ "Настав час глибоко зануритися у Node.js та Express.js, створивши застосунок чату із системою входу.", "Щоб безпечно впровадити систему входу, вам потрібно буде дізнатися про автентифікацію. Це акт перевірки особи або процесу.", - "У цьому курсі ви дізнаєтесь, як використовувати Passport для управління автентифікацією, Pug для створення шаблонів багаторазового використання для швидкого створення інтерфейсу та веб-сокети для комунікування в реальному часі між клієнтами та сервером." + "У цьому курсі ви дізнаєтесь, як використовувати Passport для управління автентифікацією, Pug для створення шаблонів багаторазового використання для швидкого створення інтерфейсу та вебсокети для комунікування в реальному часі між клієнтами та сервером." ] }, "quality-assurance-projects": { - "title": "Проєкти забезпечення якості", + "title": "Проєкти «Забезпечення якості»", "intro": [ - "Тепер, коли ви добре розбираєтесь у фронт енд та бек енд, настав час застосувати всі навички та концепції, які ви вивчили до цього моменту. Ви створите 5 різних веб-застосунків і напишете тести для кожного, щоб переконатися чи вони працюють і обробляють всі можливі сценарії (edge cases).", + "Тепер, коли ви добре розбираєтесь у фронт енд та бек енд, настав час застосувати всі навички та концепції, які ви вивчили до цього моменту. Ви створите 5 різних вебзастосунків і напишете тести для кожного, щоб переконатися чи вони працюють і обробляють всі можливі сценарії.", "Після завершення цих проєктів із забезпечення якості у вас буде ще 5 проєктів, а також нова сертифікація, якою можна похвалитись у портфоліо." ] } } }, "scientific-computing-with-python": { - "title": "Наукові обчислення за допомогою Python", + "title": "Наукові обчислення з Python", "intro": [ - "Python - одна з найпопулярніших, гнучких мов програмування на сьогодні. Ви можете використовувати її для всього - від базових скриптів до машинного навчання.", - "У сертифікації про наукові обчислення з Python ви дізнаєтесь основи Python, такі як змінні, цикли, умовні переходи та функції. Тоді ви швидко перейдете до складних структур даних, роботи з мережами, реляційних баз даних та візуалізації даних." + "Python – одна з найпопулярніших, гнучких мов програмування на сьогодні. Ви можете використовувати її для всього: від базових скриптів до машинного навчання.", + "У сертифікації «Наукові обчислення з Python» ви дізнаєтесь основи Python, такі як змінні, цикли, умовні переходи та функції. Тоді ви швидко перейдете до складних структур даних, роботи з мережами, реляційних баз даних та візуалізації даних." ], "note": "", "blocks": { "python-for-everybody": { "title": "Python для всіх", "intro": [ - "Python для всіх - це безкоштовна серія відеокурсів, яка вчить основам використання Python 3.", - "Курси були створені доктором Чарльзом Северансом (також відомим як Dr. Chuck). Він є професором школи інформації університету Мічигану, де викладає різні технологічні курси, включаючи програмування, дизайн баз даних та веброзробку." + "Python для всіх – це безоплатна серія відеокурсів, яка вчить основам використання Python 3.", + "Курси були створені Чарльзом Северансом (також відомим як Dr. Chuck). Він є професором школи інформації університету Мічигану, де викладає різні технологічні курси, включно з програмуванням, дизайном баз даних та веброзробкою." ] }, "scientific-computing-with-python-projects": { - "title": "Наукові обчислення за допомогою Python проєктів", + "title": "Проєкти «Наукові обчислення з Python»", "intro": [ - "Час перевірити свої навички роботи з Python. Завершивши ці проєкти, ви продемонструєте, що володієте хорошими фундаментальними знаннями Python і маєте право на сертифікацію з наукових обчислень з Python." + "Час перевірити свої навички роботи з Python. Завершивши ці проєкти, ви продемонструєте, що володієте хорошими фундаментальними знаннями Python і маєте право на сертифікацію «Наукові обчислення з Python»." ] } } }, "data-analysis-with-python": { - "title": "Аналіз даних за допомогою Python", + "title": "Аналіз даних з Python", "intro": [ "Аналіз даних існує вже давно. Але ще кілька років тому розробники практикували його за допомогою дорогих інструментів із закритим кодом, таких як Tableau. Але нещодавно Python, SQL та інші відкриті бібліотеки назавжди змінили аналіз даних.", - "У сертифікації \"Аналіз даних за допомогою Python\" ви дізнаєтесь про основи аналізу даних за допомогою Python. Наприкінці цієї сертифікації ви будете знати, як читати дані з таких джерел, як CSV та SQL, і як використовувати бібліотеки, такі як Numpy, Pandas, Matplotlib та Seaborn для обробки та візуалізації даних." + "У сертифікації «Аналіз даних з Python» ви дізнаєтесь про основи аналізу даних за допомогою Python. Наприкінці цієї сертифікації ви будете знати, як читати дані з таких джерел, як CSV та SQL, і як використовувати бібліотеки, такі як Numpy, Pandas, Matplotlib та Seaborn для обробки та візуалізації даних." ], "note": "", "blocks": { "data-analysis-with-python-course": { - "title": "Аналіз даних за допомогою Python", + "title": "Аналіз даних з Python", "intro": [ "У цих комплексних відеокурсах, створених Сантьяго Басульто, ви дізнаєтесь про весь процес аналізу даних. Ви будете зчитувати дані з різних джерел (CSV, SQL, Excel), обробляти ці дані за допомогою NumPy та Pandas і візуалізувати їх за допомогою Matplotlib та Seaborn,", "Крім того, ми включили детальний курс по Jupyter Notebook та короткий довідник з Python, щоб оновити ваші навички програмування." @@ -700,10 +700,10 @@ ] }, "data-analysis-with-python-projects": { - "title": "Проєкт Аналіз даних за допомогою Python", + "title": "Проєкти «Аналіз даних з Python»", "intro": [ "Існує багато способів аналізу даних за допомогою Python. Завершивши ці проєкти, ви продемонструєте, що володієте хорошими фундаментальними знаннями аналізу даних, використовуючи Python.", - "Завершіть всі проєкти, щоб отримати сертифікат з аналізу даних, використовуючи Python." + "Завершіть всі проєкти, щоб отримати сертифікацію «Аналіз даних з Python»." ] } } @@ -712,30 +712,30 @@ "title": "Інформаційна безпека", "intro": [ "Завдяки всьому, що ми робимо в Інтернеті, величезна кількість конфіденційної інформації знаходиться в зоні ризику: електронні адреси, паролі, номери телефонів тощо.", - "Завдяки сертифікації із інформаційної безпеки ви створите безпечний веб-застосунок за допомогою HelmetJS, щоб вивчити основи захисту інформації людей в Інтернеті.", - "Ви також створите TCP-клієнт, а також Nmap і сканер портів у Python. Це допоможе вам вивчити основи тесту на проникнення — важливого компоненту надійної інформаційної безпеки." + "Завдяки сертифікації «Інформаційна безпека» ви створите безпечний вебзастосунок за допомогою HelmetJS, щоб вивчити основи захисту інформації людей в Інтернеті.", + "Ви також створите TCP client, а ще Nmap і сканер портів у Python. Це допоможе вам вивчити основи тесту на проникнення – важливого компоненту надійної інформаційної безпеки." ], "note": "", "blocks": { "information-security-with-helmetjs": { - "title": "Інформаційна безпека за допомогою HelmetJS", + "title": "Інформаційна безпека з HelmetJS", "intro": [ "Цей курс програмування зосереджений на HelmetJS, типі проміжного програмного забезпечення для застосунків на основі Express, яке автоматично встановлює заголовки HTTP. Таким чином, він може запобігти випадковому передаванню конфіденційної інформації між сервером та клієнтом.", - "Завершення цих курсів допоможе вам зрозуміти, як захистити свій сайт від зловмисної поведінки." + "Завершення курсів допоможе вам зрозуміти, як захистити свій сайт від зловмисної поведінки." ] }, "python-for-penetration-testing": { - "title": "Python для тесту на проникнення (penetration testing)", + "title": "Python для тесту на проникнення", "intro": [ - "Ці відеокурси навчать вас тесту на проникнення за допомогою Python. Також відомий як пен тест (pen test), тест на проникнення — це змодельована атака на систему, задля перевірки її на вразливі місця.", + "Ці відеокурси навчать вас тесту на проникнення за допомогою Python. Також відомий як пен тест (pen test), тест на проникнення – це змодельована атака на систему задля перевірки на вразливі місця.", "У цьому курсі ви дізнаєтеся про сокети, створите TCP сервер та клієнт, створите Nmap сканер і інші інструменти та техніки, які пен тестувальники використовують щоденно." ] }, "information-security-projects": { - "title": "Проєкти інформаційної безпеки", + "title": "Проєкти «Інформаційна безпека»", "intro": [ "Настав час перевірити ваші навички з інформаційної безпеки на практиці. Ці проєкти дадуть вам шанс застосувати всі набуті вміння, вивчені правила та поняття з інформаційної безпеки.", - "Коли ви закінчите, у вас буде достатньо проєктів з інформаційної безпеки за плечима, разом з сертифікатом, який ви зможете показати вашим друзям, сім'ї та роботодавцям." + "Коли ви закінчите, у вас буде достатньо проєктів з інформаційної безпеки за плечима, разом з сертифікацією, якою ви можете похизуватись перед друзям, сім'єю та роботодавцями." ] } } @@ -744,7 +744,7 @@ "title": "Машинне навчання з Python", "intro": [ "Машинне навчання має багато практичних застосунків, які ви можете використовувати у своїх проєктах чи роботі.", - "У сертифікаті \"Машинне навчання з Python\" ви використовуватимете фреймворк TensorFlow, аби створити декілька нейронних мереж і вивчити складніші техніки, такі як обробка природної мови й навчання з підкріпленням.", + "У сертифікації «Машинне навчання з Python» ви використовуватимете фреймворк TensorFlow, аби створити декілька нейронних мереж і вивчити складніші техніки, такі як обробка природної мови й навчання з підкріпленням.", "Також ви зануритеся у нейронні мережі та вивчите правила, за якими працюють глибокі, рекурентні та згорткові нейронні мережі." ], "note": "", @@ -752,8 +752,8 @@ "tensorflow": { "title": "Tensorflow", "intro": [ - "Tensorflow — це фреймворк з відкритим вихідним кодом, що полегшує використання машинного навчання та нейронних мереж.", - "Наступний відеокурс був створений Тімом Рущіцею, який має сайт \"Tech With Tim\". Він допоможе вам зрозуміти TensorFlow і деякі з його потужних можливостей." + "Tensorflow – це фреймворк з відкритим вихідним кодом, що полегшує використання машинного навчання та нейронних мереж.", + "Наступний відеокурс був створений Тімом Рущіцею, також відомим як «Tech With Tim». Він допоможе зрозуміти TensorFlow і деякі з його потужних можливостей." ] }, "how-neural-networks-work": { @@ -764,9 +764,9 @@ ] }, "machine-learning-with-python-projects": { - "title": "Проєкти машинного навчання з Python", + "title": "Проєкти «Машинне навчання з Python»", "intro": [ - "Машинне навчання може бути дуже корисним. Завершивши ці безплатні складні проєкти з програмування, ви покажете, що маєте базові знання з машинного навчання й отримаєте сертифікат \"Машинне навчання з Python\"." + "Машинне навчання може бути дуже корисним. Завершивши ці безоплатні складні проєкти з програмування, ви покажете, що маєте базові знання з машинного навчання й отримаєте сертифікацію «Машинне навчання з Python»." ] } } @@ -774,7 +774,7 @@ "coding-interview-prep": { "title": "Підготовка до співбесіди по кодуванню", "intro": [ - "Шукаєте безплатні вправи з кодування, щоб підготуватися до наступної співбесіди? Ми уже про це подбали.", + "Шукаєте безоплатні вправи з кодування, щоб підготуватися до наступної співбесіди? Ми уже про це подбали.", "Цей розділ містить сотні завдань з програмування, які перевіряють ваші знання алгоритмів, структур даних і математики. Тут також є декілька проєктів, які ви можете використати для зміцнення своїх навичок або просто додати до свого портфоліо." ], "note": "", @@ -782,7 +782,7 @@ "algorithms": { "title": "Алгоритми", "intro": [ - "Ці вправи з безоплатного програмування навчать вас загальних алгоритмів, з якими ви скоріш за все зіткнетеся в житті. Це чудова можливість вдосконалити як логіку, так і програмувальні навички.", + "Ці безоплатні вправи з програмування навчать вас загальних алгоритмів, з якими ви скоріш за все зіткнетеся в житті. Це чудова можливість вдосконалити як логіку, так і програмувальні навички.", "Подібні алгоритми часто використовують на співбесідах, щоб перевірити навички кандидатів. Ми чітко пояснимо, як саме функціонують різноманітні алгоритми, щоб ви могли підібрати рішення до кожного." ] }, @@ -804,34 +804,35 @@ "title": "Rosetta Code", "intro": [ "Розвиньте свої навички творчого підходу до розв'язання проблем за допомогою завдань з базової бібліотеки Rosetta Code.", - "Ці завдання можуть виявитися важкими, але вони підштовхнуть ваше логічне мислення до нових висот." + "Ці завдання можуть виявитися важкими, але вони підштовхнуть ваше логічне мислення до нових висот.", + "Атрибут: Rosetta Code" ] }, "project-euler": { - "title": "Проєкт Ейлер", + "title": "Проєкт «Ейлер»", "intro": [ - "Зробіть ці завдання з програмування з архівів проєкту Ейлер. Вони удосконалять ваші алгоритмічні та математичні знання.", + "Виконайте завдання з програмування з архівів проєкту «Ейлер». Вони удосконалять ваші алгоритмічні та математичні знання.", "Тут є завдання різної складності, а для багатьох здобуття досвіду полягає в індуктивному методі навчання. Тобто, вирішення одного завдання прояснить нову концепцію та дозволить вирішити раніше незрозумілу задачу. Чи під силу вам вирішити кожну?" ] } } }, "misc-text": { - "certification": "{{cert}} сертифікат", - "browse-other": "Перегляньте інші безплатні сертифікати\n(ми рекомендуємо робити це послідовно)", + "certification": "Сертифікація {{cert}}", + "browse-other": "Перегляньте інші безоплатні сертифікації\n(ми рекомендуємо робити це послідовно)", "courses": "Курси", "steps": "Кроки", - "expand": "Expand course", - "collapse": "Collapse course", - "legacy-header": "Legacy Courses", - "legacy-desc": "These courses are no longer part of the certification path, but are still available for you to further your learning.", - "legacy-go-back": "Go to the current version of the curriculum.", - "new-rwd-desc": "We have updated our Responsive Web Design Curriculum. If you were previously working on the RWD curriculum, your progress is still saved! You can find it under the Legacy Responsive Web Design section.", - "new-rwd-article": "We encourage you to read about the changes we made and consider exploring the updated curriculum.", - "viewing-upcoming-change": "You are looking at a beta page. ", - "go-back-to-learn": "Go back to the stable version of the curriculum.", - "read-database-cert-article": "Please read this forum post before proceeding.", - "enable-cookies": "You must enable third-party cookies before starting.", - "english-only": "The courses in this section are only available in English. We are only able to translate the titles and introductions at the moment, not the lessons themselves." + "expand": "Розгорнути курс", + "collapse": "Згорнути курс", + "legacy-header": "Застарілі курси", + "legacy-desc": "Ці курси більше не входять до сертифікацій, але вони все ще доступні для навчання.", + "legacy-go-back": "Перейти до поточної версії навчальної програми.", + "new-rwd-desc": "Ми оновили нашу навчальну програму «Адаптивний вебдизайн». Якщо ви раніше працювали з навчальною програмою, ваш прогрес досі збережено! Ви можете знайти його в секції «Застарілий адаптивний вебдизайн».", + "new-rwd-article": "Ми радимо прочитати про внесені зміни та розглянути можливість вивчення оновленої навчальної програми.", + "viewing-upcoming-change": "Ви дивитесь на бета-версію сторінки. ", + "go-back-to-learn": "Поверніться до стабільної версії навчальної програми.", + "read-database-cert-article": "Будь ласка, прочитайте повідомлення на форумі, перш ніж продовжити.", + "enable-cookies": "Ви повинні ввімкнути сторонні файли cookie перед початком роботи.", + "english-only": "Курси в цьому розділі доступні лише англійською мовою. Наразі ми можемо перекладати лише заголовки й вступи, а не самі уроки." } } diff --git a/client/i18n/locales/ukrainian/links.json b/client/i18n/locales/ukrainian/links.json index 65f62b29c19ce1..d94c781872c64a 100644 --- a/client/i18n/locales/ukrainian/links.json +++ b/client/i18n/locales/ukrainian/links.json @@ -13,7 +13,10 @@ "copyright-url": "https://www.freecodecamp.org/news/copyright-policy/" }, "donate": { - "other-ways-url": "https://www.freecodecamp.org/news/how-to-donate-to-free-code-camp" + "other-ways-url": "https://www.freecodecamp.org/news/how-to-donate-to-free-code-camp", + "download-irs-url": "https://s3.amazonaws.com/freecodecamp/Free+Code+Camp+Inc+IRS+Determination+Letter.pdf", + "download-990-url": "https://freecodecamp.s3.amazonaws.com/freeCodeCamp+2019+f990.pdf", + "one-time-url": "https://paypal.me/freecodecamp" }, "nav": { "forum": "https://forum.freecodecamp.org/", @@ -23,6 +26,6 @@ "HTML-CSS": "HTML-CSS", "JavaScript": "JavaScript", "Python": "Python", - "Relational Databases": "Relational Databases" + "Backend Development": "Backend Development" } } diff --git a/client/i18n/locales/ukrainian/meta-tags.json b/client/i18n/locales/ukrainian/meta-tags.json index cf2020dbfb80e6..f3280cca892f9c 100644 --- a/client/i18n/locales/ukrainian/meta-tags.json +++ b/client/i18n/locales/ukrainian/meta-tags.json @@ -1,21 +1,21 @@ { - "title": "Learn to Code — For Free — Coding Courses for Busy People", - "description": "Learn to Code — For Free", - "social-description": "Learn to Code — For Free", + "title": "Навчіться кодувати безкоштовно: курси кодування для зайнятих людей", + "description": "Навчіться кодувати безкоштовно. Створюйте проєкти. Отримуйте сертифікати. З 2014 року, понад 40 000 випускників freeCodeCamp.org отримали роботу в найбільших технологічних компаніях, як-от Apple, Google та Amazon.", + "social-description": "Навчіться кодувати БЕЗКОШТОВНО", "keywords": [ "python", "javascript", "js", "git", "github", - "website", - "web", - "development", + "вебсайт", + "веб", + "розробка", "free", "code", "camp", - "course", - "courses", + "курс", + "курси", "html", "css", "react", @@ -24,9 +24,10 @@ "front", "back", "end", - "learn", - "tutorial", - "programming" + "навчитись", + "вивчити", + "туторіал", + "програмування" ], - "youre-unsubscribed": "You have been unsubscribed" + "youre-unsubscribed": "Вашу підписку скасовано" } diff --git a/client/i18n/locales/ukrainian/translations.json b/client/i18n/locales/ukrainian/translations.json index d494917a2b5d34..a17a6ff8bc40ce 100644 --- a/client/i18n/locales/ukrainian/translations.json +++ b/client/i18n/locales/ukrainian/translations.json @@ -1,19 +1,19 @@ { "buttons": { - "logged-in-cta-btn": "Почніть (це безкоштовно)", - "logged-out-cta-btn": "Увійдіть, щоб зберегти ваш прогрес (це безкоштовно)", + "logged-in-cta-btn": "Розпочати (безоплатно)", + "logged-out-cta-btn": "Увійдіть, щоб зберегти прогрес (безоплатно)", "view-curriculum": "Переглянути навчальну програму", "first-lesson": "Перейти до першого уроку", "close": "Закрити", "edit": "Редагувати", "show-code": "Показати код", "show-solution": "Показати рішення", - "show-project": "Show Project", - "frontend": "Фронтенд (Front End)", - "backend": "Бекенд (Back End)", + "show-project": "Показати проєкт", + "frontend": "Front End", + "backend": "Back End", "view": "Перегляд", - "show-cert": "Показати сертифікат", - "claim-cert": "Отримати сертифікат", + "show-cert": "Показати сертифікацію", + "claim-cert": "Отримати сертифікацію", "save-progress": "Зберегти прогрес", "accepted-honesty": "Ви прийняли нашу Політику академічної доброчесності.", "agree": "Прийняти", @@ -26,7 +26,7 @@ "off": "Вимкнути", "on": "Увімкнути", "sign-in": "Увійти", - "sign-up-email-list": "Sign up for Quincy's weekly emails", + "sign-up-email-list": "Підписатись на щотижневу розсилку від Квінсі", "sign-out": "Вийти", "curriculum": "Навчальна програма", "forum": "Форум", @@ -49,8 +49,9 @@ "cancel": "Скасувати", "reset-lesson": "Скинути цей урок", "run": "Запустити", - "run-test": "Run the Tests (Ctrl + Enter)", - "check-code": "Check Your Code (Ctrl + Enter)", + "run-test": "Протестувати (Ctrl + Enter)", + "check-code": "Перевірити код (Ctrl + Enter)", + "check-code-2": "Перевірити код", "reset": "Скинути", "reset-code": "Скинути весь код", "help": "Допомога", @@ -59,7 +60,7 @@ "resubscribe": "Натисніть тут для повторної підписки", "click-here": "Натисніть тут, щоб увійти", "save": "Зберегти", - "save-code": "Save your Code", + "save-code": "Збережіть свій код", "no-thanks": "Ні, дякую", "yes-please": "Так, будь ласка", "update-email": "Оновити мою адресу електронної пошти", @@ -67,56 +68,60 @@ "submit-and-go": "Відправити та перейти до наступного завдання", "go-to-next": "Перейти до наступного завдання", "ask-later": "Запитати пізніше", - "start-coding": "Start coding!", - "go-to-settings": "Go to settings to claim your certification", - "click-start-course": "Start the course", - "click-start-project": "Start the project" + "start-coding": "Почніть кодувати!", + "go-to-settings": "Перейдіть до налаштувань, щоб отримати сертифікацію", + "click-start-course": "Розпочати курс", + "click-start-project": "Розпочати проєкт", + "change-language": "Змінити мову", + "cancel-change": "Скасувати зміни", + "resume-project": "Відновити проєкт", + "start-project": "Розпочати проєкт" }, "landing": { - "big-heading-1": "Вчіться програмувати — це безкоштовно.", - "big-heading-2": "Створюйте проекти.", - "big-heading-3": "Отримуйте сертифікати.", + "big-heading-1": "Вчіться програмувати безоплатно.", + "big-heading-2": "Створюйте проєкти.", + "big-heading-3": "Отримуйте сертифікації.", "h2-heading": "З 2014 року, понад 40 000 випускників freeCodeCamp.org отримали роботу в технологічних компаніях, таких як:", "hero-img-description": "Cтуденти місцевої навчальної групи freeCodeCamp в Південній Кореї.", "as-seen-in": "Про нас пишуть:", "testimonials": { "heading": "Ось що наші випускники говорять про freeCodeCamp:", "shawn": { - "location": "Шон Ванг з Сінгапуру", + "location": "Шон Вонг з Сінгапуру", "occupation": "Інженер програмного забезпечення в Amazon", - "testimony": "\"Змінювати професію — страшно. Я набув впевненості в програмуванні лише після того, як пройшов сотні годин безкоштовних занять на freeCodeCamp. І вже за рік я отримав роботу інженера програмного забезпечення з шестизначною заплатою. freeCodeCamp змінив моє життя.\"" + "testimony": "«Змінювати професію – страшно. Я набув впевненості в програмуванні лише після того, як пройшов сотні годин безоплатних занять на freeCodeCamp. І вже за рік я отримав роботу інженера програмного забезпечення з шестизначною заплатою. freeCodeCamp змінив моє життя.»" }, "sarah": { "location": "Сара Чіма з Нігерії", "occupation": "Інженерка програмного забезпечення в ChatDesk", - "testimony": "\"freeCodeCamp став для мене пропуском у професію інженерки програмного забезпечення. Гарно структурована навчальна програма дозволила покращити свої знання з програмування з початкового рівня до дуже впевненого. Це все що було потрібно, щоб знайти свою першу роботу розробниці програмного забезпечення у чудовій компанії.\"" + "testimony": "«freeCodeCamp став для мене пропуском у професію інженерки програмного забезпечення. Гарно структурована навчальна програма дозволила покращити мої знання з програмування з початкового рівня до дуже впевненого. Це все що було потрібно, щоб знайти свою першу роботу розробниці програмного забезпечення у чудовій компанії.»" }, "emma": { "location": "Емма Бостіан зі Швеції", "occupation": "Інженерка програмного забезпечення в Spotify", - "testimony": "\"У мене завжди виникали труднощі при вивченні JavaScript. Я проходила багато курсів, але з курсом freeCodeCamp я залишилася надовго. Вивчення JavaScript, а також структур даних та алгоритмів у freeCodeCamp дало мені необхідні навички та впевненість, щоб знайти роботу моєї мрії — інженерка програмного забезпечення у Spotify.\"" + "testimony": "«У мене завжди виникали труднощі при вивченні JavaScript. Я проходила багато курсів, але з курсом freeCodeCamp я залишилася надовго. Вивчення JavaScript, а також структур даних та алгоритмів у freeCodeCamp дало мені необхідні навички та впевненість, щоб знайти роботу моєї мрії: інженерка програмного забезпечення у Spotify.»" } }, - "certification-heading": "Отримайте безкоштовні підтверджені сертифікати в таких сферах:" + "certification-heading": "Отримайте безоплатні підтверджені сертифікації в:" }, "settings": { "share-projects": "Діліться своїми проєктами, статтями або прийнятими пул реквестами, які не відносяться до freeCodeCamp.", - "privacy": "The settings in this section enable you to control what is shown on your freeCodeCamp public portfolio. Press save to save your changes.", - "data": "Щоб побачити, які дані ми зберігаємо на вашому обліковому записі, натисніть кнопку \"Завантажити дані\" нижче", - "disabled": "Ваші сертифікати будуть відключені, коли ввімкнено режим приватного перегляду.", - "private-name": "Ваше ім'я не буде показуватися на ваших сертифікатах, коли ввімкнено режим приватного перегляду.", - "claim-legacy": "Як тільки ви виконаєте завдання таких сертифікатів freeCodeCamp, ви зможете отримати {{cert}}:", + "privacy": "Налаштування в цьому розділі дозволяють керувати тим, що зображається на публічному портфоліо freeCodeCamp. Натисніть «Зберегти», щоб зберегти свої зміни.", + "data": "Щоб побачити, які дані ми зберігаємо на вашому обліковому записі, натисніть кнопку «Завантажити свої дані» нижче", + "disabled": "Ваші сертифікації будуть відключені, коли ввімкнено режим приватного перегляду.", + "private-name": "Ваше ім'я не буде показуватися на ваших сертифікаціях, коли ввімкнено режим приватного перегляду.", + "claim-legacy": "Як тільки ви виконаєте завдання наступних сертифікацій freeCodeCamp, ви зможете отримати {{cert}}:", "for": "Налаштування облікового запису для {{username}}", - "sound-mode": "This adds the pleasant sound of acoustic guitar throughout the website. You'll get musical feedback as you type in the editor, complete challenges, claim certifications, and more.", + "sound-mode": "Це додає приємне звучання акустичної гітари на всьому вебсайті. Ви почуєте музичний супровід, коли будете писати у редакторі, при завершенні випробувань, при затвердженні сертифікацій та інше.", "username": { - "contains invalid characters": "Ім'я користувача \"{{username}}\" містить неприпустимі символи", - "is too short": "Ім'я користувача \"{{username}}\" занадто коротке", - "is a reserved error code": "Ім'я користувача \"{{username}}\" є зарезервованим кодом помилки", - "must be lowercase": "Ім'я користувача \"{{username}}\" має бути написано в нижньому регістрі", + "contains invalid characters": "Ім'я користувача «{{username}}» містить неприпустимі символи", + "is too short": "Ім'я користувача «{{username}}» занадто коротке", + "is a reserved error code": "Ім'я користувача «{{username}}» є зарезервованим кодом помилки", + "must be lowercase": "Ім'я користувача «{{username}}» має бути маленькими буквами", "unavailable": "Ім'я користувача недоступне", "validating": "Перевірка імені користувача...", "available": "Ім'я користувача доступне", - "change": "Будь ласка, зверніть увагу, що зміна імені користувача також змінить URL-адресу вашого профілю та ваших сертифікатів." + "change": "Будь ласка, зверніть увагу, що зміна імені користувача також змінить URL-адресу вашого профілю та сертифікацій." }, "labels": { "username": "Ім'я користувача", @@ -124,7 +129,7 @@ "location": "Місцеперебування", "picture": "Фото", "about": "Про", - "personal": "Особиста веб-сторінка", + "personal": "Особиста вебсторінка", "title": "Заголовок", "url": "URL-адреса", "image": "Зображення", @@ -138,16 +143,17 @@ "my-about": "Про мене", "my-points": "Мої бали", "my-heatmap": "Моя теплокарта", - "my-certs": "Мої сертифікати", + "my-certs": "Мої сертифікації", "my-portfolio": "Моє портфоліо", "my-timeline": "Моя хронологія", "my-donations": "Мої внески", "night-mode": "Нічний режим", - "sound-mode": "Режим багаття" + "sound-mode": "Режим багаття", + "keyboard-shortcuts": "Увімкнути клавіатурні скорочення" }, "headings": { - "certs": "Сертифікати", - "legacy-certs": "Застарілі сертифікати", + "certs": "Сертифікації", + "legacy-certs": "Застарілі сертифікації", "honesty": "Політика академічної доброчесності", "internet": "Ваша присутність в інтернеті", "portfolio": "Налаштування портфоліо", @@ -161,11 +167,11 @@ "delete-title": "Видалити мій обліковий запис", "delete-p1": "Це дійсно видалить усі ваші дані (весь ваш прогрес та дані облікового запису також).", "delete-p2": "Ми не зможемо відновити ці дані для вас пізніше, навіть якщо ви передумаєте.", - "delete-p3": "Якщо у вас є пропозиція щодо покращення проекту, надішліть нам електронний лист, і ми зробимо все можливе: <0>{{email}}0>", + "delete-p3": "Якщо у вас є пропозиція щодо покращення проєкту, надішліть нам електронний лист, і ми зробимо все можливе: <0>{{email}}0>", "nevermind": "Я не хочу видаляти свій обліковий запис.", - "certain": "Я впевнений на 100%. Видаліть все, що пов'язане з цим обліковим записом.", + "certain": "Я впевнений(-а) на 100%. Видаліть все, що пов'язане з цим обліковим записом.", "reset-heading": "Скинути мій прогрес", - "reset-p1": "Це дійсно видалить весь ваш прогрес (бали, завершені завдання, наші записи ваших проєктів, будь-які отримані сертифікати) та всі дані.", + "reset-p1": "Це дійсно видалить весь ваш прогрес (бали, завершені завдання, наші записи ваших проєктів, будь-які отримані сертифікації) та всі дані.", "reset-p2": "Ми не зможемо відновити ці дані для вас пізніше, навіть якщо ви передумаєте.", "nevermind-2": "Я не хочу видаляти весь мій прогрес.", "reset-confirm": "Скинути все. Я хочу почати з початку." @@ -174,31 +180,31 @@ "missing": "У вас немає електронної пошти, пов'язаної з цим обліковим записом.", "heading": "Налаштування електронної пошти", "not-verified": "Вашу електронну пошту не підтверджено.", - "check": "Будь ласка, перевірте вашу електронну пошту, або <0>надішліть запит на новий лист для підтвердження0>.", + "check": "Будь ласка, перевірте свою електронну пошту, або <0>надішліть запит на новий лист для підтвердження0>.", "current": "Поточна адреса електронної пошти", "new": "Нова адреса електронної пошти", "confirm": "Підтвердити нову адресу електронної пошти", "weekly": "Надсилати мені щотижневу розсилку від Квінсі" }, "honesty": { - "p1": "Перш ніж ви зможете претендувати на підтверджений сертифікат, ви повинні прийняти Обітницю академічної доброчесності, яка свідчить про те, що:", - "p2": "\"Я розумію, що плагіат означає копіювання чужої роботи та оприлюднення її під своїм іменем без належного посилання на оригінального автора.\"", - "p3": "\"Я розумію, що плагіат є актом інтелектуальної нечесності, і те, що людей зазвичай виганяють з університету чи звільняють з роботи, якщо їх спіймають на плагіаті.\"", - "p4": "\"Окрім використання бібліотек з відкритим вихідним кодом, таких як jQuery і Bootstrap, а також коротких фрагментів коду, де є посилання на оригінального автора, 100% коду в моїх проектах написано мною, або разом з іншим студентом, який проходив навчальну програму freeCodeCamp, з яким я займався парним програмуванням в режимі реального часу.\"", - "p5": "\"Я зобов'язуюсь, що жоден з моїх проєктів freeCodeCamp.org не буде плагіатом. Я розумію, що команда freeCodeCamp.org буде перевіряти мої проєкти, щоб підтвердити це.\"", - "p6": "У ситуаціях, коли ми виявляємо випадки однозначного плагіату, ми замінюємо сертифікат цієї людини повідомленням про те, що \"Після перевірки, цей обліковий запис був позначено як той, що порушує академічну доброчесність.\"", - "p7": "Як академічна установа, яка надає сертифікати на основі досягнень, ми дуже серйозно ставимося до академічної доброчесності. Якщо у вас є будь-які запитання щодо цієї політики, або ви підозрюєте, що хтось порушив її, можете написати нам <0>{{email}}0> і ми розглянемо це питання." + "p1": "Перш ніж ви зможете претендувати на підтверджену сертифікацію, ви повинні прийняти Обітницю академічної доброчесності, яка свідчить про те, що:", + "p2": "«Я розумію, що плагіат означає копіювання чужої роботи та оприлюднення її під своїм іменем без належного посилання на оригінального автора.»", + "p3": "«Я розумію, що плагіат є актом інтелектуальної нечесності, і те, що людей зазвичай виганяють з університету чи звільняють з роботи, якщо їх спіймають на плагіаті.»", + "p4": "«Окрім використання бібліотек з відкритим вихідним кодом, таких як jQuery і Bootstrap, а також коротких фрагментів коду, де є посилання на оригінального автора, 100% коду в моїх проєктах написано мною, або разом з іншим студентом, який проходив навчальну програму freeCodeCamp, з яким я займався(-лась) парним програмуванням в режимі реального часу.»", + "p5": "«Я зобов'язуюсь, що жоден з моїх проєктів freeCodeCamp.org не буде плагіатом. Я розумію, що команда freeCodeCamp.org буде перевіряти мої проєкти, щоб підтвердити це.»", + "p6": "У ситуаціях, коли ми виявляємо випадки однозначного плагіату, ми замінюємо сертифікацію цієї людини повідомленням про те, що «Після перевірки, цей обліковий запис був позначено як той, що порушує академічну доброчесність.»", + "p7": "Як академічна установа, яка надає сертифікації на основі досягнень, ми дуже серйозно ставимося до академічної доброчесності. Якщо у вас є будь-які запитання щодо цієї політики, або ви підозрюєте, що хтось порушив її, можете написати нам <0>{{email}}0> і ми розглянемо це питання." } }, "profile": { "you-not-public": "Ви не зробили портфоліо загальнодоступним.", - "username-not-public": "{{username}} не зробив своє портфоліо загальнодоступним.", + "username-not-public": "{{username}} не зробив(-ла) своє портфоліо загальнодоступним.", "you-change-privacy": "Вам потрібно змінити налаштування конфіденційності для того, щоб інші могли побачити ваше портфоліо. Це попередній перегляд того, як ваше портфоліо буде виглядати при відкритому доступі.", "username-change-privacy": "{{username}} має змінити налаштування конфіденційності для того, щоб ви могли переглянути портфоліо.", "supporter": "Прихильник", "contributor": "Найактивніший користувач", - "no-certs": "Не було отримано сертифікатів у цій навчальній програмі", - "fcc-certs": "freeCodeCamp сертифікати", + "no-certs": "Не було отримано сертифікацій у цій навчальній програмі", + "fcc-certs": "Сертифікації freeCodeCamp", "longest-streak": "Найбільша кількість днів без перерви:", "current-streak": "Поточна кількість днів без перерви:", "portfolio": "Портфоліо", @@ -207,11 +213,11 @@ "get-started": "Почніть тут.", "challenge": "Завдання", "completed": "Виконано", - "add-linkedin": "Додати цей сертифікат до мого профілю LinkedIn", - "add-twitter": "Поділитися цим сертифікатом у Twitter", - "tweet": "Я щойно отримав {{certTitle}} сертифікат @freeCodeCamp! Перегляньте його тут: {{certURL}}", + "add-linkedin": "Додати цю сертифікацію до мого профілю LinkedIn", + "add-twitter": "Поділитися цією сертифікацією у Twitter", + "tweet": "Я щойно отримав(-ла) сертифікацію {{certTitle}} від @freeCodeCamp! Перегляньте її тут: {{certURL}}", "avatar": "Аватар {{username}}", - "joined": "Приєднався {{date}}", + "joined": "Приєднався(-лась) {{date}}", "total-points": "{{count}} загальний бал", "total-points_plural": "{{count}} всього балів", "points": "{{count}} бал станом на {{date}}", @@ -220,12 +226,12 @@ "page-number": "{{pageNumber}} з {{totalPages}}" }, "footer": { - "tax-exempt-status": "freeCodeCamp — це некомерційна організація, яка підтримується спонсорськими внесками та звільнена від сплати податків 501(c)(3) (Федеральний ідентифікаційний номер платника податків США: 82-0779546)", - "mission-statement": "Ми хочемо допомогти людям безкоштовно навчитися програмувати. Ми досягаємо цього, створюючи тисячі відео, статей та інтерактивних уроків з програмування — вони усі доступні для широкого загалу. Також ми маємо тисячі безплатний навчальних груп freeCodeCamp у всьому світі.", + "tax-exempt-status": "freeCodeCamp – це некомерційна організація, яка підтримується спонсорськими внесками та звільнена від сплати податків 501(c)(3) (Федеральний ідентифікаційний номер платника податків США: 82-0779546)", + "mission-statement": "Ми хочемо допомогти людям безкоштовно навчитися програмувати. Ми досягаємо цього, створюючи тисячі відео, статей та інтерактивних уроків з програмування – вони усі доступні для широкого загалу. Також ми маємо тисячі безоплатних навчальних груп freeCodeCamp у всьому світі.", "donation-initiatives": "Внески до freeCodeCamp йдуть на наші освітні програми та допомагають оплачувати сервери, послуги та персонал.", - "donate-text": "You can <1>make a tax-deductible donation here1>.", + "donate-text": "Ви можете <1>зробити неоподаткований внесок тут1>.", "trending-guides": "Популярні статті", - "our-nonprofit": "Наша неприбуткова організація", + "our-nonprofit": "Наша некомерційна організація", "links": { "about": "Про нас", "alumni": "Спільнота випускників", @@ -247,21 +253,21 @@ "welcome-2": "Ласкаво просимо до freeCodeCamp.org", "start-at-beginning": "Якщо ви новачок у програмуванні, ми рекомендуємо <0>почати з самого початку0>.", "read-this": { - "heading": "Будь ласка, зупиніться і прочитайте це.", - "p1": "freeCodeCamp - це перевірений шлях до вашої першої роботи розробника програмного забезпечення.", + "heading": "Будь ласка, прочитайте це.", + "p1": "freeCodeCamp – це перевірений шлях до вашої першої роботи розробника програмного забезпечення.", "p2": "Після завершення курсу понад 40 000 людей отримали роботу у сфері розробки програмного забезпечення (в тому числі у великих компаніях, таких як Google і Microsoft).", - "p3": "Якщо ви новачок в програмуванні, ми радимо вам розпочати з самого початку та отримувати ці сертифікати послідовно.", - "p4": "Щоб отримати кожен сертифікат, створіть 5 необхідних проєктів і успішно пройдіть усі тести.", - "p5": "Ви можете додати ці сертифікати до свого резюме або LinkedIn. Але важливішим за сертифікати є практика, яку ви отримаєте під час навчання.", - "p6": "Якщо ви почуваєтесь перевантаженим, це нормально. Програмувати — важко.", - "p7": "Практика — це найголовніше. Практика, практика, практика.", + "p3": "Якщо ви новачок в програмуванні, ми радимо вам розпочати з самого початку та отримувати сертифікації послідовно.", + "p4": "Щоб отримати кожну сертифікацію, створіть 5 необхідних проєктів і успішно пройдіть усі тести.", + "p5": "Ви можете додати сертифікації до свого резюме або LinkedIn. Але важливішою за сертифікацію є практика, яку ви отримаєте під час навчання.", + "p6": "Якщо ви відчуваєте перевантаження, це нормально. Програмувати – важко.", + "p7": "Практика – це найголовніше. Практика, практика, практика.", "p8": "Ця навчальна програма дасть вам тисячі годин практики в програмуванні.", "p9": "А якщо ви бажаєте дізнатися більше про математику та теорію комп'ютерних наук, то у нас також є тисячі годин відеокурсів на <0>YouTube-каналі freeCodeCamp0>.", "p10": "Якщо ви хочете отримати роботу розробника або знайти клієнтів онлайн, навички програмування будуть лише частиною завдання. Вам також потрібно створити свою мережу контактів і сформувати репутацію розробника.", "p11": "Ви можете зробити це в Twitter і GitHub, а також на <0>форумі freeCodeCamp0>.", - "p12": "Вдалого програмування!" + "p12": "Щасливого кодування!" }, - "upcoming-lessons": "Наступні уроки", + "upcoming-lessons": "Майбутні уроки", "learn": "Навчання", "add-subtitles": "Допомогти покращити або додати субтитри", "wrong-answer": "Вибачте, але це неправильна відповідь. Спробуєте ще раз?", @@ -269,54 +275,56 @@ "solution-link": "Посилання на рішення", "github-link": "Посилання на GitHub", "submit-and-go": "Відправити та перейти до мого наступного завдання", - "congradulations": "Congratulations, your code passes. Submit your code to complete this step and move on to the next one.", - "i-completed": "Я виконав це завдання", + "congratulations": "Вітаємо, ваш код проходить. Відправте свій код, щоб продовжити.", + "i-completed": "Я виконав(-ла) це завдання", "test-output": "Результат вашого тесту буде доступний тут", - "running-tests": "// запуск тестів", - "tests-completed": "// тести виконано", + "running-tests": "// запущені тести", + "tests-completed": "// виконані тести", "console-output": "// вивід консолі", - "sign-in-save": "Увійдіть, щоб зберегти ваш прогрес", + "sign-in-save": "Увійдіть, щоб зберегти свій прогрес", "download-solution": "Завантажити моє рішення", "percent-complete": "{{percent}}% виконано", - "tried-rsa": "Якщо ви вже спробували метод <0>Читати-Шукати-Питати0>, то ви можете звернутися за допомогою на форумі freeCodeCamp.", - "rsa": "Читати, шукати, запитувати", + "tried-rsa": "Якщо ви вже спробували метод <0>читати-шукати-питати0>, то ви можете звернутися за допомогою на форум freeCodeCamp.", + "rsa": "Читати, шукати, питати", + "rsa-forum": "Before making a new post please see if your question has <0>already been answered on the forum0>.", "reset": "Скинути цей урок?", "reset-warn": "Ви впевнені, що хочете скинути цей урок? Редактори та тести будуть скинуті.", "reset-warn-2": "Цю дію неможливо відмінити", "scrimba-tip": "Порада: якщо мінібраузер закриває код, то натисніть та перетягніть його у сторону. Також не соромтеся зупинятися та редагувати код у відео у будь-який час.", "chal-preview": "Попередній перегляд завдання", "cert-map-estimates": { - "certs": "{{title}} Сертифікат (300 годин)", - "coding-prep": "{{title}} (Тисячі годин практики)" + "certs": "Сертифікація {{title}}" }, "editor-tabs": { "info": "Інформація", "code": "Код", "tests": "Тести", - "restart": "Restart", - "restart-step": "Restart Step", - "console": "Console", - "notes": "Notes", + "restart": "Перезапустити", + "restart-step": "Перезапустити крок", + "console": "Консоль", + "instructions": "Інструкції", + "notes": "Примітки", "preview": "Попередній перегляд" }, - "help-translate": "Ми все ще перекладаємо такі сертифікати.", + "help-translate": "Ми досі перекладаємо наступні сертифікації.", "help-translate-link": "Допоможіть нам з перекладом.", - "project-preview-title": "Here's a preview of what you will build", - "github-required": "<0>Create a GitHub0> account if you don't have one. You'll need it when you create the virtual Linux server machine. This process may take a few minutes.", - "step-1": "Step 1: Complete the project", - "step-2": "Step 2: Submit your code", - "submit-public-url": "When you have completed the project, save all the required files into a public repository and submit the URL to it below.", - "complete-both-steps": "Complete both steps below to finish the challenge.", - "runs-in-vm": "The project runs in a virtual machine, complete the user stories described in there and get all the tests to pass to finish step 1.", - "completed": "Completed", - "not-started": "Not started", - "hint": "Hint", - "test": "Test", - "sorry-try-again": "Sorry, your code does not pass. Try again.", - "sorry-keep-trying": "Sorry, your code does not pass. Keep trying.", - "sorry-getting-there": "Sorry, your code does not pass. You're getting there.", - "sorry-hang-in-there": "Sorry, your code does not pass. Hang in there.", - "sorry-dont-giveup": "Sorry, your code does not pass. Don't give up." + "project-preview-title": "Попередній перегляд того, що ви будете створювати", + "github-required": "<0>Створіть обліковий запис GitHub0>, якщо у вас його немає. Він вам знадобиться під час створення віртуальної серверної машини Linux. Цей процес може зайняти кілька хвилин.", + "step-1": "Крок 1: Завершіть проєкт", + "step-2": "Крок 2: Відправте код", + "submit-public-url": "Коли ви завершите проєкт, збережіть усі необхідні файли в загальнодоступному репозиторію та вкажіть URL-адресу на нього нижче.", + "complete-both-steps": "Виконайте обидва кроки, щоб закінчити завдання.", + "runs-in-vm": "Проєкт виконується в віртуальній машині; виконайте описані там історії користувачів та пройдіть всі тести, щоб завершити крок 1.", + "completed": "Виконано", + "not-started": "Не розпочато", + "hint": "Підказка", + "test": "Тест", + "sorry-try-again": "На жаль, ваш код не пройшов. Спробуйте ще раз.", + "sorry-keep-trying": "На жаль, ваш код не пройшов. Продовжуйте спроби.", + "sorry-getting-there": "На жаль, ваш код не пройшов. Ви йдете у правильному напрямку.", + "sorry-hang-in-there": "На жаль, ваш код не пройшов. Тримайтеся.", + "sorry-dont-giveup": "На жаль, ваш код не пройшов. Не здавайтеся.", + "challenges-completed": "{{completedCount}} з {{totalChallenges}} завдань виконано" }, "donate": { "title": "Підтримати нашу некомерційну організацію", @@ -324,22 +332,21 @@ "redirecting": "Переадресація...", "thanks": "Дякуємо за внесок", "thank-you": "Дякуємо за вашу підтримку.", - "thank-you-2": "Дякуємо вам за підтримку freeCodeCamp. У вас є регулярні внески.", "additional": "Ви можете зробити додатковий одноразовий внесок на будь-яку суму за цим посиланням: <0>{{url}}0>", "help-more": "Допоможіть нам розвиватися", "error": "Щось не так з вашим внеском.", - "error-2": "Something is not right. Please contact donors@freecodecamp.org", + "error-2": "Щось пішло не так. Будь ласка, зв'яжіться з donors@freecodecamp.org", "free-tech": "Ваші внески підтримуватимуть безкоштовну технологічну освіту для людей у всьому світі.", - "no-halo": "Якщо ви не бачите золотий ореол навколо фотографії вашого профілю, повідомте в donors@freecodecamp.org.", - "gift-frequency": "Оберіть частоту сплачення внесків:", + "no-halo": "Якщо ви не бачите золотий ореол навколо фотографії свого профілю, повідомте в donors@freecodecamp.org.", + "gift-frequency": "Оберіть частоту сплати внесків:", "gift-amount": "Оберіть розмір внеску:", - "confirm": "Підтвердьте ваш внесок", - "confirm-2": "Підтвердьте ваш одноразовий внесок у розмірі ${{usd}}", - "confirm-3": "Підтвердьте ваш внесок у розмірі ${{usd}} / на місяць", - "confirm-4": "Підтвердьте ваш внесок у розмірі ${{usd}} / на рік", - "wallet-label": "${{usd}} пожертвування для FreeCodeCamp", - "wallet-label-1": "${{usd}} / місячне пожертвування для FreeCodeCamp", - "your-donation": "Ваш внесок у розмірі ${{usd}} надасть {{hours}} годин навчання людям у всьому світі.", + "confirm": "Підтвердьте свій внесок", + "confirm-2": "Підтвердьте свій одноразовий внесок у розмірі ${{usd}}", + "confirm-3": "Підтвердьте свій внесок у розмірі ${{usd}} на місяць", + "confirm-4": "Підтвердьте свій внесок у розмірі ${{usd}} на рік", + "wallet-label": "Внесок ${{usd}} для FreeCodeCamp", + "wallet-label-1": "Внесок ${{usd}} на місяць для FreeCodeCamp", + "your-donation": "Ваш внесок у розмірі ${{usd}} надаватиме {{hours}} годин навчання людям у всьому світі.", "your-donation-2": "Ваш внесок у розмірі ${{usd}} щомісяця надаватиме {{hours}} годин навчання людям у всьому світі.", "your-donation-3": "Ваш внесок у розмірі ${{usd}} щороку надаватиме {{hours}} годин навчання людям у всьому світі.", "duration": "Станьте одноразовим спонсором нашої некомерційної організації.", @@ -359,8 +366,8 @@ "email-receipt": "Електронна пошта (ми надішлемо вам квитанцію про оплату внеску, що не підлягає оподаткуванню):", "need-help": "Потрібна допомога з поточними або попередніми внесками?", "forward-receipt": "Надішліть копію квитанції про оплату внеску на donors@freecodecamp.org і напишіть, як ми можемо вам допомогти.", - "efficiency": "freeCodeCamp — це високоефективна некомерційна освітня організація.", - "why-donate-1": "Коли ви робите внесок на freeCodeCamp, ви допомагаєте людям опанувати нові навички та забезпечувати їхні сім'ї.", + "efficiency": "freeCodeCamp – це високоефективна некомерційна освітня організація.", + "why-donate-1": "Коли ви робите внесок для freeCodeCamp, ви допомагаєте людям опанувати нові навички та забезпечувати їхні сім'ї.", "why-donate-2": "Ви також допомагаєте нам створювати нові ресурси для вас, щоб ви використовували їх для розширення власних технологічних навичок.", "bigger-donation": "Бажаєте зробити більший одноразовий внесок, відправити нам чек на електронну пошту або в інший спосіб?", "other-ways": "Існує багато <0>інших способів підтримати місію нашої некомерційної організації0>.", @@ -368,43 +375,43 @@ "try-again": "Будь ласка, повторіть спробу.", "card-number": "Номер вашої картки:", "expiration": "Дата закінчення терміну дії:", - "secure-donation": "Secure donation", - "faq": "Frequently asked questions", - "only-you": "Only you can see this message. Congratulations on earning this certification. It's no easy task. Running freeCodeCamp isn't easy either. Nor is it cheap. Help us help you and many other people around the world. Make a tax-deductible supporting donation to our nonprofit today.", - "get-help": "How can I get help with my donations?", - "how-transparent": "How transparent is freeCodeCamp.org?", - "very-transparent": "Very. We have a Platinum transparency rating from GuideStar.org.", - "download-irs": "You can <0>download our IRS Determination Letter here0>.", - "download-990": "You can <0>download our most recent 990 (annual tax report) here0>.", - "how-efficient": "How efficient is freeCodeCamp?", - "fcc-budget": "freeCodeCamp's budget is much smaller than most comparable nonprofits. We haven't brought in professional fundraisers. Instead, Quincy does everything himself.", - "help-millions": "However, on a budget of only a few hundred thousand dollars per year, we have been able to help millions of people.", - "how-one-time": "How can I make a one-time donation?", - "one-time": "If you'd prefer to make one-time donations, you can support freeCodeCamp's mission whenever you have cash to spare. You can use <0>this link to donate whatever amount feels right through PayPal0>.", - "wire-transfer": "You can also send money to freeCodeCamp directly through a wire transfer. If you need our wire details, email Quincy at quincy@freecodecamp.org", - "does-crypto": "Does freeCodeCamp accept donations in Bitcoin or other cryptocurrencies?", - "yes-cryptocurrency": "Yes. Please email Quincy at quincy@freecodecamp.org and he can send you freeCodeCamp's wallet information. He can also provide you with a donation receipt if you need one for your taxes.", - "can-check": "Can I mail a physical check?", - "yes-check": "Yes, we would welcome a check. You can mail it to us at:", - "how-matching-gift": "How can I set up matching gifts from my employer, or payroll deductions?", - "employers-vary": "This varies from employer to employer, and our nonprofit is already listed in many of the big donation-matching databases.", - "some-volunteer": "Some people are able to volunteer for freeCodeCamp and their employer matches by donating a fixed amount per hour they volunteer. Other employers will match any donations the donors make up to a certain amount", - "help-matching-gift": "If you need help with this, please email Quincy directly: quincy@freecodecamp.org", - "how-endowment": "How can I set up an Endowment Gift to freeCodeCamp.org?", - "endowment": "This would be a huge help. Since this is a more manual process, Quincy can help walk you through it personally. Please email him directly at quincy@freecodecamp.org.", - "how-legacy": "How can I set up a Legacy gift to freeCodeCamp.org?", - "we-honored": "We would be honored to put such a gift to good use helping people around the world learn to code. Depending on where you live, this may also be tax exempt.", - "legacy-gift-message": "I give, devise, and bequeath [the sum of _____ USD (or other currency) OR _____ percent of the rest and residue of my estate] to freeCodeCamp.org (Free Code Camp, Inc. tax identification number 82-0779546), a charitable corporation organized under the laws of the State of Delaware, United States, currently located at 3905 Hedgcoxe Rd, PO Box 250352, Plano, Texas, 75025 United States, to be used for its general charitable purposes at its discretion.", - "thank-wikimedia": "We would like to thank the Wikimedia Foundation for providing this formal language for us to use.", - "legacy-gift-questions": "If you have any questions about this process, please email Quincy at quincy@freecodecamp.org.", - "how-stock": "How can I donate stock to freeCodeCamp.org?", - "welcome-stock": "We would welcome your stock donations. Please email Quincy directly and he can help you with this, and share our nonprofit's brokerage account details: quincy@freecodecamp.org.", - "how-receipt": "Can I get a donation receipt so that I can deduct my donation from my taxes?", - "just-forward": "Absolutely. Just forward the receipt from your transaction to donors@freecodecamp.org, tell us you'd like a receipt and any special instructions you may have, and we'll reply with a receipt for you.", - "how-update": "I set up a monthly donation, but I need to update or pause the monthly recurrence. How can I do this?", - "take-care-of-this": "Just forward one of your monthly donation receipts to donors@freecodecamp.org and tell us what you'd like us to do. We'll take care of this for you and send you confirmation.", - "anything-else": "Is there anything else I can learn about donating to freeCodeCamp.org?", - "other-support": "If there is some other way you'd like to support our nonprofit and its mission that isn't listed here, or if you have any questions at all, please email Quincy at quincy@freecodecamp.org." + "secure-donation": "Безпечний внесок", + "faq": "Поширені питання", + "only-you": "Лише ви можете бачити це повідомлення. Вітаємо з отриманням сертифікації. Це було нелегко. Піклуватись про freeCodeCamp також нелегко. І недешево. Допоможіть нам допомогти вам та іншим людям з усього світу. Зробіть внесок, що не підлягає оподаткуванню, для нашої некомерційної організації сьогодні.", + "get-help": "Як отримати допомогу з внесками?", + "how-transparent": "Наскільки прозорий freeCodeCamp.org?", + "very-transparent": "Дуже прозорий. Ми отримали платиновий рейтинг від GuideStar.org.", + "download-irs": "Ви можете <0>завантажити наш детермінаційний лист, виданий Службою внутрішніх доходів (IRS), тут0>.", + "download-990": "Ви можете <0>завантажити наш останній 990 (річний податковий звіт) тут0>.", + "how-efficient": "Наскільки ефективний freeCodeCamp?", + "fcc-budget": "Бюджет freeCodeCamp набагато менший за більшість некомерційних організацій. Ми не залучали професійний збір коштів. Натомість Квінсі робить все сам.", + "help-millions": "Однак з бюджетом лише на кілька сотень тисяч доларів на рік, ми змогли допомогти мільйонам людей.", + "how-one-time": "Як зробити одноразовий внесок?", + "one-time": "Якщо ви хочете робити одноразові внески, то можете підтримати місію freeCodeCamp кожен раз, коли маєте лишні гроші. Можете використати <0>це посилання, щоб зробити внесок будь-якої суми через PayPal0>.", + "wire-transfer": "Ви також можете надіслати кошти напряму до freeCodeCamp через грошовий переказ. Якщо вам потрібно більше деталей про це, напишіть Квінсі на quincy@freecodecamp.org", + "does-crypto": "Чи приймає freeCodeCamp внески в біткоїнах чи інших криптовалютах?", + "yes-cryptocurrency": "Так. Будь ласка, напишіть Квінсі на quincy@freecodecamp.org і він зможе надіслати вам інформацію про гаманець freeCodeCamp. Він також може надати квитанцію про внесок, якщо вам потрібно.", + "can-check": "Чи можу я відправити фіскальний чек?", + "yes-check": "Так, ми б були раді. Ви можете відправити його сюди:", + "how-matching-gift": "Як налаштувати подарунки від мого роботодавця, або нарахування на заробітну плату?", + "employers-vary": "Це залежить від роботодавця, і наша некомерційна організація вже зазначена у багатьох великих базах.", + "some-volunteer": "Деякі люди можуть волонтерити для freeCodeCamp і їхні роботодавці дарують фіксовану суму за кожну годину волонтерства. Інші роботодавці дарують будь-який внесок, який компенсують дарувальники на певну суму", + "help-matching-gift": "Якщо вам потрібна допомога – напишіть напряму до Квінсі: quincy@freecodecamp.org", + "how-endowment": "Як оформити постійне дарування для freeCodeCamp.org?", + "endowment": "Це була б величезна допомога. Оскільки це більш ручний процес, Квінсі особисто може допомогти вам. Будь ласка, напишіть йому на quincy@freecodecamp.org.", + "how-legacy": "Як оформити дарування для freeCodeCamp.org?", + "we-honored": "Для нас велика честь використати такий дарунок з користю, щоб допомогти людям у всьому світі навчитися кодувати. Залежно від того, де ви проживаєте, це також може бути податковою пільгою.", + "legacy-gift-message": "Я передаю, відписую та заповідаю [суму _____ доларів США (або іншої валюти) АБО _____ відсотків від залишку свого майна] freeCodeCamp.org (Free Code Camp, Inc. ідентифікаційний податковий номер 82-0779546), благодійній корпорації, організованій відповідно до законів штату Делавер, Сполучені Штати, наразі розташованій за адресою 3905 Hedgcoxe Rd, PO Box 250352, Plano, Texas, 75025 United States, для використання в загальних благодійних цілях на власний розсуд.", + "thank-wikimedia": "Ми б хотіли подякувати фонду «Вікімедіа» за надання офіційного стилю.", + "legacy-gift-questions": "Якщо у вас виникли будь-які питання щодо цього процесу, будь ласка, напишіть Квінсі на quincy@freecodecamp.org.", + "how-stock": "Як пожертвувати акції для freeCodeCamp.org?", + "welcome-stock": "Ми будемо раді вашим акціям. Будь ласка, напишіть Квінсі та він допоможе вам з цим, зокрема поділиться деталями нашого брокерського рахунку: quincy@freecodecamp.org.", + "how-receipt": "Чи можу я отримати квитанцію про внесок, щоб відраховувати його від податків?", + "just-forward": "Абсолютно. Просто надішліть квитанцію своєї транзакції на адресу donors@freecodecamp.сом, скажіть нам, що ви хотіли б отримати квитанцію, та зазначте, якщо у вас є особисті побажання, і ми відповімо вам з квитанцією.", + "how-update": "Я налаштував(-ла) щомісячний внесок, але мені потрібно оновити або призупинити повторюваність. Як це зробити?", + "take-care-of-this": "Просто перешліть одну із щомісячних квитанцій на donors@freecodecamp.org та повідомте, чим ми можемо допомогти. Ми подбаємо про це та надішлемо вам підтвердження.", + "anything-else": "Чи можу я дізнатись ще щось про внески до freeCodeCamp.org?", + "other-support": "Якщо ви хочете підтримати нашу некомерційну організацію іншим шляхом, або ж маєте будь-які інші питання – напишіть Квінсі на quincy@freecodecamp.org." }, "report": { "sign-in": "Щоб повідомити про порушення користувача, ви повинні ввійти в систему", @@ -423,19 +430,19 @@ }, "search": { "label": "Пошук", - "placeholder": "Search 8,000+ tutorials", + "placeholder": "Шукати серед 8000+ уроків", "see-results": "Переглянути всі результати для {{searchQuery}}", "no-tutorials": "Не знайдено жодного уроку", "try": "Шукаєте щось? Спробуйте пошуковий рядок на цій сторінці.", "no-results": "Ми не змогли знайти нічого, що стосується <0>{{query}}0>" }, "misc": { - "offline": "Схоже, що ви не підключені до мережі, тому не зможете зберегти ваш прогрес.", - "server-offline": "Сервер не відповідає, ваш прогрес не збережеться. Будь ласка, зв'яжіться з <0>підтримкою0>, якщо це помилка не зникне.", + "offline": "Схоже, що ви не підключені до мережі, тому не зможете зберегти свій прогрес", + "server-offline": "Сервер не відповідає, ваш прогрес може не зберегтись. Будь ласка, зв'яжіться з <0>підтримкою0>, якщо ця помилка не зникне", "unsubscribed": "Підписку успішно скасовано", "keep-coding": "Що б не сталося, продовжуйте програмувати!", "email-signup": "Реєстрація через електронну пошту", - "quincy": "- Квінсі Ларсон, вчитель, який заснував freeCodeCamp.org", + "quincy": "– Квінсі Ларсон, вчитель, який заснував freeCodeCamp.org", "email-blast": "До речі, щоп'ятниці я надсилаю електронний лист із 5 посиланнями про програмування та інформатику. Я відправляю їх приблизно 4 мільйонам людей. Чи хотіли б ви, щоб я відправляв ці листи ще й вам?", "update-email-1": "Оновити свою адресу електронної пошти", "update-email-2": "Оновіть свою адресу електронної пошти тут:", @@ -443,7 +450,9 @@ "and": "і", "change-theme": "Увійдіть, щоб змінити тему.", "translation-pending": "Допоможіть нам з перекладом", - "certification-project": "Certification Project" + "certification-project": "Сертифікаційний проєкт", + "iframe-alert": "Зазвичай це посилання перенесло б вас на інший вебсайт! Воно працює. Це посилання на: {{externalLink}}", + "document-notfound": "документ не знайдено" }, "icons": { "gold-cup": "Золотий кубок", @@ -452,8 +461,10 @@ "donate": "Зробити внесок через PayPal", "fail": "Тест не пройдений", "not-passed": "Не пройдено", + "waiting": "В очікуванні", "passed": "Пройдено", - "hint": "Hint", + "failed": "Не вдалося", + "hint": "Підказка", "heart": "Серце", "initial": "Початковий", "info": "Інформація", @@ -462,7 +473,7 @@ "magnifier": "лупа" }, "aria": { - "fcc-curriculum": "freeCodeCamp Curriculum", + "fcc-curriculum": "Навчальний план freeCodeCamp", "answer": "Відповідь", "linkedin": "Посилання на сторінку LinkedIn {{username}}", "github": "Посилання на сторінку GitHub {{username}}", @@ -472,13 +483,16 @@ "previous-page": "Перейти на попередню сторінку", "next-page": "Перейти на наступну сторінку", "last-page": "Перейти на останню сторінку", - "primary-nav": "primary", - "breadcrumb-nav": "breadcrumb", - "submit": "Use Ctrl + Enter to submit.", - "running-tests": "Running tests" + "primary-nav": "первинний", + "breadcrumb-nav": "навігаційна стежка", + "submit": "Використайте Ctrl + Enter, щоб відправити.", + "running-tests": "Запущені тести", + "step": "Крок", + "steps": "Кроки", + "steps-for": "Кроки для {{blockTitle}}" }, "flash": { - "honest-first": "Щоб отримати сертифікат, ви повинні спочатку прийняти нашу політику академічної доброчесності", + "honest-first": "Щоб отримати сертифікацію, ви повинні спочатку прийняти нашу політику академічної доброчесності", "really-weird": "Щось пішло не так. Якщо це повториться, будь ласка, повідомте про це за посиланням: https://github.com/freeCodeCamp/freeCodeCamp/issues/new", "not-right": "Щось пішло не так. Звіт було сформовано і команду freeCodeCamp.org вже сповістили.", "went-wrong": "Щось пішло не так. Будь ласка, перевірте та повторіть спробу.", @@ -489,7 +503,7 @@ "wrong-updating": "Щось пішло не так під час оновлення вашого облікового запису. Будь ласка, перевірте і повторіть спробу", "updated-preferences": "Ми оновили ваші налаштування", "email-invalid": "Неприпустимий формат адреси електронної пошти", - "email-valid": "Вашу електронну пошту змінено. Вдалого кодування!", + "email-valid": "Вашу електронну пошту змінено. Щасливого кодування!", "bad-challengeId": "currentChallengeId не є дійсним ідентифікатором завдання", "theme-invalid": "Недійсна тема", "theme-set": "Тема вже встановлена", @@ -502,53 +516,53 @@ "oops-not-right": "Щось пішло не так, будь ласка, створіть запит на нове посилання для входу/реєстрації", "expired-link": "Схоже, посилання, на яке ви натиснули, застаріло. Будь ласка, створіть запит на нове посилання, щоб увійти", "signin-success": "Ви успішно ввійшли у свій обліковий запис. Вдалого програмування!", - "social-auth-gone": "Ми відходимо від автентифікації з соцмереж через конфіденційність. Наступного разу ми рекомендуємо використовувати вашу адресу електронної пошти: {{email}} для входу в систему.", - "name-needed": "Нам потрібне ваше ім'я, щоб ми могли вказати його в вашому сертифікаті. Додайте своє ім'я до налаштувань облікового запису і натисніть кнопку \"Зберегти\". Після цього ми зможемо видати вам ваш сертифікат.", - "incomplete-steps": "Схоже, ви не завершили необхідні кроки. Будь ласка, виконайте необхідні проекти, щоб отримати сертифікат {{name}}.", - "already-claimed": "Схоже, ви вже отримали сертифікат {{name}}", - "cert-claim-success": "@{{username}}, ви успішно отримали сертифікат {{name}}! Вітаємо від імені команди freeCodeCamp.org!", + "social-auth-gone": "Ми відходимо від автентифікації з соцмереж через конфіденційність. Наступного разу ми рекомендуємо використовувати свою адресу електронної пошти: {{email}} для входу в систему.", + "name-needed": "Нам потрібне ваше ім'я, щоб ми могли вказати його в сертифікаті. Додайте своє ім'я до налаштувань облікового запису і натисніть кнопку «Зберегти». Після цього ми зможемо видати вам сертифікат.", + "incomplete-steps": "Схоже, ви не завершили необхідні кроки. Будь ласка, виконайте необхідні проєкти, щоб отримати сертифікацію {{name}}.", + "already-claimed": "Схоже, ви вже отримали сертифікацію {{name}}", + "cert-claim-success": "@{{username}}, ви успішно отримали сертифікацію {{name}}! Вітаємо від імені команди freeCodeCamp.org!", "wrong-name": "Щось пішло не так під час перевірки {{name}}, будь ласка, спробуйте ще раз. Якщо ви продовжуєте отримувати цю помилку, ви можете надіслати повідомлення на support@freeCodeCamp.org, щоб отримати допомогу.", "error-claiming": "Під час отримання {{certName}} сталася помилка", "refresh-needed": "Ви можете використовувати кнопку PaymentRequest тільки один раз. Оновіть сторінку, щоб почати знову.", - "username-not-found": "Ми не змогли знайти користувача з ім'ям \"{{username}}\"", - "add-name": "Цей користувач повинен додати своє ім'я до свого облікового запису, щоб інші могли переглянути його сертифікат.", - "not-eligible": "Наразі цей користувач не має права отримати безкоштовний сертифікат freeCodeCamp.org.", - "profile-private": "{{username}} has chosen to make their profile private. They will need to make their profile public in order for others to be able to view their certification.", - "certs-private": "{{username}} вирішив зробити свої сертифікати конфіденційними. Йому потрібно надати спільний доступ до своїх сертифікатів, щоб інші могли їх переглянути.", - "not-honest": "{{username}} ще не прийняв нашу Обітницю академічної доброчесності.", + "username-not-found": "Ми не змогли знайти користувача з ім'ям «{{username}}»", + "add-name": "Цей користувач повинен додати своє ім'я до свого облікового запису, щоб інші могли переглянути його сертифікацію.", + "not-eligible": "Наразі цей користувач не має права отримати безоплатну сертифікацію freeCodeCamp.org.", + "profile-private": "{{username}} вирішив(-ла) зробити свій профіль конфіденційним. Йому/їй потрібно надати спільний доступ до свого профілю, щоб інші мали змогу переглянути сертифікацію.", + "certs-private": "{{username}} вирішив(-ла) зробити свої сертифікації конфіденційними. Йому/їй потрібно надати спільний доступ до своїх сертифікацій, щоб інші могли їх переглянути.", + "not-honest": "{{username}} ще не прийняв(-ла) нашу Обітницю академічної доброчесності.", "user-not-certified": "Схоже, що користувач {{username}} не є сертифікованим {{cert}}", "invalid-challenge": "Не вдалося підтвердити завдання", - "no-links-provided": "Ви не надали нам дійсні посилання для перевірки вашої роботи.", + "no-links-provided": "Ви не надали нам дійсні посилання для перевірки своєї роботи.", "no-social": "Обліковий запис соціальної мережі не знайдено", "invalid-social": "Неправильний обліковий запис соціальної мережі", "no-account": "Немає облікового запису, пов'язаного з {{website}}", "unlink-success": "Ви успішно від'єдналися від {{website}}", "provide-username": "Перевірте, чи ви вказали ім'я користувача та звіт", "report-sent": "Звіт був відправлений команді з {{email}} в копії", - "certificate-missing": "Такий сертифікат не існує.", - "create-token-err": "An error occurred while creating your user token", - "delete-token-err": "An error occurred while deleting your user token", - "token-created": "You have successfully created a new user token.", - "token-deleted": "Your user token has been deleted.", - "start-project-err": "Something went wrong trying to start the project. Please try again.", - "complete-project-first": "You must complete the project first.", - "local-code-save-error": "Oops, your code did not save, your browser's local storage may be full.", - "local-code-saved": "Saved! Your code was saved to your browser's local storage.", - "code-saved": "Your code was saved to the database. It will be here when you return.", - "code-save-error": "An error occurred trying to save your code.", - "code-save-less": "Slow Down! Your code was not saved. Try again in a few seconds.", - "challenge-save-too-big": "Sorry, you cannot save your code. Your code is {{user-size}} bytes. We allow a maximum of {{max-size}} bytes. Please make your code smaller and try again or request assistance on https://forum.freecodecamp.org", - "challenge-submit-too-big": "Sorry, you cannot submit your code. Your code is {{user-size}} bytes. We allow a maximum of {{max-size}} bytes. Please make your code smaller and try again or request assistance on https://forum.freecodecamp.org", - "invalid-update-flag": "You are attempting to access forbidden resources. Please request assistance on https://forum.freecodecamp.org if this is a valid request." + "certificate-missing": "Такої сертифікації не існує", + "create-token-err": "Під час створення маркера користувача сталася помилка", + "delete-token-err": "Під час видалення маркера користувача сталася помилка", + "token-created": "Ви успішно створили новий маркер користувача.", + "token-deleted": "Ваш маркер користувача видалено.", + "start-project-err": "Під час запуску проєкту сталася помилка. Будь ласка, спробуйте ще раз.", + "complete-project-first": "Спочатку ви повинні завершити проєкт.", + "local-code-save-error": "Упс, ваш код не збережено. Можливо, локальне сховище вашого браузера заповнене.", + "local-code-saved": "Збережено! Код було збережено в локальному сховищі вашого браузера.", + "code-saved": "Ваш код збережено в базі даних. Він буде тут, коли ви повернетесь.", + "code-save-error": "Під час спроби зберегти ваш код сталася помилка.", + "code-save-less": "Зачекайте! Ваш код не було збережено. Спробуйте ще раз через кілька секунд.", + "challenge-save-too-big": "На жаль, ви не можете зберегти свій код. Ваш код займає {{user-size}} байт. Максимальна кількість байтів: {{max-size}}. Будь ласка, зменште свій код і повторіть спробу або попросіть допомоги на https://forum.freecodecamp.org", + "challenge-submit-too-big": "На жаль, ви не можете надіслати свій код. Ваш код займає {{user-size}} байт. Максимальна кількість байтів: {{max-size}}. Будь ласка, зменште свій код і повторіть спробу або попросіть допомоги на https://forum.freecodecamp.org", + "invalid-update-flag": "Ви намагаєтеся отримати доступ до заборонених ресурсів. Зверніться по допомогу на https://forum.freecodecamp.org, якщо це є дійсним запитом." }, "validation": { - "max-characters": "Максимальний розмір — 288 символів, у вас залишилося {{charsLeft}}", + "max-characters": "Максимальний розмір – 288 символів, у вас залишилося {{charsLeft}}", "same-email": "Ця адреса електронної пошти збігається з вашою поточною адресою", "invalid-email": "Ми не змогли перевірити вашу адресу електронної пошти. Будь ласка, переконайтеся, що вона правильна.", "email-mismatch": "Обидві нові адреси електронної пошти повинні збігатися", "title-required": "Необхідно вказати заголовок", - "title-short": "Заголовок занадто короткий", - "title-long": "Заголовок занадто довгий", + "title-short": "Закороткий заголовок", + "title-long": "Задовгий заголовок", "invalid-url": "Ми не змогли перевірити вашу URL-адресу. Будь ласка, переконайтеся, що вона правильна.", "invalid-protocol": "URL-адреса має починатися з http або https", "url-not-image": "URL-адреса повинна посилатись на файл зображення безпосередньо", @@ -560,27 +574,27 @@ }, "certification": { "executive": "Виконавчий директор, freeCodeCamp.org", - "verify": "Перевірити цей сертифікат за посиланням {{certURL}}", + "verify": "Перевірити сертифікацію за посиланням {{certURL}}", "issued": "Виданий", - "fulltext": "<0>Цей сертифікат засвідчує, що0> <1>{{user}}1> <2>успішно закінчив курс freeCodeCamp.org2> <3>{{title}}3> <4>Сертифікат розробника, що підтверджує приблизно {{time}} годин навчання на курсі.4>", + "fulltext": "<0>Цей сертифікат засвідчує, що0> <1>{{user}}1> <2>успішно закінчив(-ла) сертифікацію2> <3>{{title}}3> <4>від freeCodeCamp.org, виконавши приблизно {{time}} годин навчання на курсі.4>", "project": { - "heading-legacy-full-stack": "В рамках сертифікації програмного забезпечення повного циклу {{user}} отримав такі сертифікати:", - "heading": "У рамках цієї сертифікації, {{user}} створив такі проекти і успішно пройшов усі автоматизовані тестування:", + "heading-legacy-full-stack": "В рамках сертифікації програмного забезпечення повного циклу {{user}} отримав(-ла) такі сертифікації:", + "heading": "У рамках цієї сертифікації {{user}} створив(-ла) такі проєкти і успішно пройшов(-ла) усі автоматизовані тестування:", "solution": "рішення", - "no-solution": "error displaying solution, email support@freeCodeCamp.org to get help.", + "no-solution": "помилка відображення рішення, напишіть на support@freeCodeCamp.org, щоб отримати допомогу.", "source": "джерело", - "footnote": "Якщо ви підозрюєте, що будь-який з цих проектів порушує <2>політику академічної доброчесності2>, будь ласка, <5>повідомте про це нашій команді5>.", + "footnote": "Якщо ви підозрюєте, що будь-який з цих проєктів порушує <2>політику академічної доброчесності2>, будь ласка, <5>повідомте про це нашій команді5>.", "title": { "Build a Personal Portfolio Webpage": "Створіть вебсторінку персонального портфоліо", "Build a Random Quote Machine": "Створіть генератор випадкових цитат", "Build a 25 + 5 Clock": "Створіть таймер 25 + 5", - "Build a JavaScript Calculator": "Створіть JavaScript калькулятор", + "Build a JavaScript Calculator": "Створіть калькулятор JavaScript", "Show the Local Weather": "Покажіть місцеву погоду", "Use the TwitchTV JSON API": "Використайте TwitchTV JSON API", "Stylize Stories on Camper News": "Стилізуйте стрічку новин на Camper News", - "Build a Wikipedia Viewer": "Створіть переглядач Вікіпедії", - "Build a Tic Tac Toe Game": "Створіть гру хрестики-нулики", - "Build a Simon Game": "Створіть гру Simon", + "Build a Wikipedia Viewer": "Створіть переглядача вікіпедії", + "Build a Tic Tac Toe Game": "Створіть гру «Хрестики-нулики»", + "Build a Simon Game": "Створіть гру «Simon»", "Timestamp Microservice": "Мікросервіс позначок часу", "Request Header Parser Microservice": "Мікросервіс парсингу заголовків запиту", "URL Shortener Microservice": "Мікросервіс скорочування URL-адрес", @@ -591,14 +605,14 @@ "Chart the Stock Market": "Діаграма фондової біржі", "Manage a Book Trading Club": "Керуйте клубом книготоргівлі", "Build a Pinterest Clone": "Створіть копію Pinterest", - "Build a Markdown Previewer": "Створіть Markdown-програму попереднього перегляду", + "Build a Markdown Previewer": "Створіть попередній перегляд Markdown", "Build a Camper Leaderboard": "Створіть таблицю лідерів-кемперів", "Build a Recipe Box": "Створіть збірник рецептів", - "Build the Game of Life": "Створіть гру \"Життя\"", - "Build a Roguelike Dungeon Crawler Game": "Створіть гру Roguelike Dungeon Crawler", - "Visualize Data with a Bar Chart": "Візуалізуйте дані за допомогою гістограми", - "Visualize Data with a Scatterplot Graph": "Візуалізуйте дані за допомогою точкової діаграми", - "Visualize Data with a Heat Map": "Візуалізуйте дані за допомогою теплокарти", + "Build the Game of Life": "Створіть гру «Життя»", + "Build a Roguelike Dungeon Crawler Game": "Створіть гру «Roguelike Dungeon Crawler»", + "Visualize Data with a Bar Chart": "Візуалізуйте дані з допомогою стовпчикової діаграми", + "Visualize Data with a Scatterplot Graph": "Візуалізуйте дані з допомогою точкової діаграми", + "Visualize Data with a Heat Map": "Візуалізуйте дані з допомогою теплокарти", "Show National Contiguity with a Force Directed Graph": "Покажіть національну спільність за допомогою орієнтованого графу", "Map Data Across the Globe": "Картографічні дані з усього світу", "Metric-Imperial Converter": "Конвертер метрично-британських величин", @@ -608,16 +622,16 @@ "Anonymous Message Board": "Анонімна панель повідомлень", "Build a Tribute Page": "Створіть пам'ятну сторінку", "Build a Survey Form": "Створіть форму для опитування", - "Build a Product Landing Page": "Створіть цільову сторінку продукту", + "Build a Product Landing Page": "Створіть посадкову сторінку продукту", "Build a Technical Documentation Page": "Створіть сторінку технічної документації", "Palindrome Checker": "Перевірка паліндромів", "Roman Numeral Converter": "Конвертер римських цифр", "Caesars Cipher": "Шифр Цезаря", - "Telephone Number Validator": "Перевірка телефонного номера", + "Telephone Number Validator": "Валідатор мобільного номера", "Cash Register": "Касовий апарат", "Build a Drum Machine": "Створіть драм-машину", - "Visualize Data with a Choropleth Map": "Візуалізуйте дані за допомогою фонової картограми", - "Visualize Data with a Treemap Diagram": "Візуалізуйте дані за допомогою діаграми Treemap", + "Visualize Data with a Choropleth Map": "Візуалізуйте дані з допомогою хороплета", + "Visualize Data with a Treemap Diagram": "Візуалізуйте дані з допомогою деревової діаграми", "Exercise Tracker": "Трекер вправ", "Sudoku Solver": "Програма для розв'язування судоку", "American British Translator": "Американо-британський перекладач", @@ -632,7 +646,7 @@ "Page View Time Series Visualizer": "Візуалізатор часового ряду перегляду сторінки", "Sea Level Predictor": "Прогнозування змін рівня моря", "Port Scanner": "Сканер портів", - "SHA-1 Password Cracker": "SHA-1 Програма для злому паролів", + "SHA-1 Password Cracker": "Програма для злому паролів SHA-1", "Secure Real Time Multiplayer Game": "Безпечна багатокористувацька гра в режимі реального часу", "Rock Paper Scissors": "Камінь-ножиці-папір", "Cat and Dog Image Classifier": "Класифікатор зображень котів і собак", @@ -643,14 +657,14 @@ } }, "certification-card": { - "title": "Отримайте свій сертифікат", - "intro": "Завершіть наступні кроки, щоб мати змогу отримати та переглянути ваші {{i18nCertText}}", + "title": "Отримайте свою сертифікацію", + "intro": "Завершіть наступні кроки, щоб мати змогу отримати та переглянути свої {{i18nCertText}}", "complete-project": "Завершено {{i18nCertText}} проєкт", "accept-honesty": "Прийняти нашу Політику академічної доброчесності", "set-name": "Введіть своє ім'я та зробіть його загальнодоступним", - "set-certs-public": "Відкрити загальний доступ до сертифікатів", - "set-profile-public": "Відкрити загальний доступ до вашого профілю", - "set-claim": "Отримайте та перегляньте свої сертифікати" + "set-certs-public": "Відкрити загальний доступ до сертифікацій", + "set-profile-public": "Відкрити загальний доступ до профілю", + "set-claim": "Отримайте та перегляньте свої сертифікації" }, "forum-help": { "browser-info": "**Інформація про ваш браузер:**", @@ -658,7 +672,7 @@ "challenge": "**Завдання:** {{challengeTitle}}", "challenge-link": "**Посилання на завдання:**", "whats-happening": "**Розкажіть нам, що сталося:**", - "describe": "Детально опишіть вашу проблему тут.", + "describe": "Детально опишіть свою проблему тут.", "camper-project": "**Посилання на ваші проєкти**", "camper-code": "**Ваш код**", "warning": "УВАГА", @@ -670,16 +684,27 @@ "add-code-three": "тому що вони дозволяють вашому коду бути правильно відформатованим у повідомленні." }, "user-token": { - "title": "User Token", - "create": "Create a new token", - "create-p1": "It looks like you don't have a user token. Create one to save your progress on this section", - "create-p2": "Create a user token to save your progress on the curriculum sections that use a virtual machine.", - "delete": "Delete my user token", - "delete-title": "Delete My User Token", - "delete-p1": "Your user token is used to save your progress on curriculum sections that use a virtual machine. If you suspect it has been compromised, you can delete it without losing any progress. A new one will be created automatically the next time you open a project.", - "delete-p2": "If you suspect your token has been compromised, you can delete it to make it unusable. Progress on previously submitted lessons will not be lost.", - "delete-p3": "You will need to create a new token to save future progress on the curriculum sections that use a virtual machine.", - "no-thanks": "No thanks, I would like to keep my token", - "yes-please": "Yes please, I would like to delete my token" + "title": "Токен користувача", + "create": "Створити новий токен", + "create-p1": "Схоже, у вас немає токена користувача. Створіть його, щоб зберегти свій прогрес в цьому розділі", + "create-p2": "Створіть токен користувача, щоб зберегти свій прогрес у розділах навчальної програми, які використовують віртуальну машину.", + "delete": "Видалити мій токен", + "delete-title": "Видалити мій токен", + "delete-p1": "Ваш токен користувача використовується для збереження вашого прогресу в розділах навчальної програми, які використовують віртуальну машину. Якщо ви підозрюєте, що його було зламано, ви можете видалити його, не втрачаючи прогресу. Новий буде створено автоматично, коли ви відкриєте проєкт.", + "delete-p2": "Якщо ви підозрюєте, що ваш токен зламано, ви можете видалити його, щоб зробити його непридатним для використання. Прогрес на раніше поданих уроках не буде втрачено.", + "delete-p3": "Вам потрібно буде створити новий токен, щоб зберегти майбутній прогрес у розділах навчальної програми, які використовують віртуальну машину.", + "no-thanks": "Ні, дякую, я хотів(-ла) би зберегти свій токен", + "yes-please": "Так, я хотів(-ла) би видалити свій токен" + }, + "shortcuts": { + "title": "Гарячі клавіші", + "table-header-action": "Дія", + "table-header-key": "Ключ(і)", + "navigation-mode": "Режим навігації", + "execute-challenge": "Виконати завдання", + "focus-editor": "Редактор фокусу", + "focus-instructions-panel": "Панель інструкцій щодо фокусування", + "navigate-previous": "Перейти до попередньої вправи", + "navigate-next": "Перейти до наступної вправи" } } diff --git a/client/i18n/schema-validation.js b/client/i18n/schema-validation.js deleted file mode 100644 index 187ed2ed18e52c..00000000000000 --- a/client/i18n/schema-validation.js +++ /dev/null @@ -1,287 +0,0 @@ -const path = require('path'); -const { availableLangs } = require('../../config/i18n/all-langs'); -const introSchema = require('./locales/english/intro.json'); -const linksSchema = require('./locales/english/links.json'); -const metaTagsSchema = require('./locales/english/meta-tags.json'); -const motivationSchema = require('./locales/english/motivation.json'); -const translationsSchema = require('./locales/english/translations.json'); -const trendingSchema = require('./locales/english/trending.json'); - -/** - * Flattens a nested object structure into a single - * object with property chains as keys. - * @param {Object} obj Object to flatten - * @param {String} namespace Used for property chaining - */ -const flattenAnObject = (obj, namespace = '') => { - const flattened = {}; - Object.keys(obj).forEach(key => { - if (Array.isArray(obj[key])) { - flattened[namespace ? `${namespace}.${key}` : key] = obj[key]; - } else if (typeof obj[key] === 'object') { - Object.assign( - flattened, - flattenAnObject(obj[key], namespace ? `${namespace}.${key}` : key) - ); - } else { - flattened[namespace ? `${namespace}.${key}` : key] = obj[key]; - } - }); - return flattened; -}; - -/** - * Checks if a translation object is missing keys - * that are present in the schema. - * @param {String[]} file Array of translation object's keys - * @param {String[]} schema Array of matching schema's keys - * @param {String} path string path to file - */ -const findMissingKeys = (file, schema, path) => { - const missingKeys = []; - for (const key of schema) { - if (!file.includes(key)) { - missingKeys.push(key); - } - } - if (missingKeys.length) { - console.warn( - `${path} is missing these required keys: ${missingKeys.join(', ')}` - ); - } -}; - -/** - * Checks if a translation object has extra - * keys which are NOT present in the schema. - * @param {String[]} file Array of translation object's keys - * @param {String[]} schema Array of matching schema's keys - * @param {String} path string path to file - */ -const findExtraneousKeys = (file, schema, path) => { - const extraKeys = []; - for (const key of file) { - if (!schema.includes(key)) { - extraKeys.push(key); - } - } - if (extraKeys.length) { - console.warn( - `${path} has these keys that are not in the schema: ${extraKeys.join( - ', ' - )}` - ); - } -}; - -/** - * Validates that all values in the object are non-empty. Includes - * validation of nested objects. - * @param {Object} obj The object to check the values of - * @param {String} namespace String for tracking nested properties - */ -const noEmptyObjectValues = (obj, namespace = '') => { - const emptyKeys = []; - for (const key of Object.keys(obj)) { - if (Array.isArray(obj[key])) { - if (!obj[key].length) { - emptyKeys.push(namespace ? `${namespace}.${key}` : key); - } - } else if (typeof obj[key] === 'object') { - emptyKeys.push( - noEmptyObjectValues(obj[key], namespace ? `${namespace}.${key}` : key) - ); - } else if (!obj[key]) { - emptyKeys.push(namespace ? `${namespace}.${key}` : key); - } - } - return emptyKeys.flat(); -}; - -/** - * Grab the schema keys once, to avoid overhead of - * fetching within iterative function. - */ -const translationSchemaKeys = Object.keys(flattenAnObject(translationsSchema)); -const trendingSchemaKeys = Object.keys(flattenAnObject(trendingSchema)); -const motivationSchemaKeys = Object.keys(flattenAnObject(motivationSchema)); -const introSchemaKeys = Object.keys(flattenAnObject(introSchema)); -const metaTagsSchemaKeys = Object.keys(flattenAnObject(metaTagsSchema)); -const linksSchemaKeys = Object.keys(flattenAnObject(linksSchema)); - -/** - * Function that checks the translations.json file - * for each available client language. - * @param {String[]} languages List of languages to test - */ -const translationSchemaValidation = languages => { - languages.forEach(language => { - const filePath = path.join( - __dirname, - `/locales/${language}/translations.json` - ); - const fileJson = require(filePath); - const fileKeys = Object.keys(flattenAnObject(fileJson)); - findMissingKeys( - fileKeys, - translationSchemaKeys, - `${language}/translations.json` - ); - findExtraneousKeys( - fileKeys, - translationSchemaKeys, - `${language}/translations.json` - ); - const emptyKeys = noEmptyObjectValues(fileJson); - if (emptyKeys.length) { - console.warn( - `${language}/translation.json has these empty keys: ${emptyKeys.join( - ', ' - )}` - ); - } - console.info(`${language} translation.json validation complete.`); - }); -}; - -/** - * Function that checks the trending.json file - * for each available client language. - * @param {String[]} languages List of languages to test - */ -const trendingSchemaValidation = languages => { - languages.forEach(language => { - const filePath = path.join(__dirname, `/locales/${language}/trending.json`); - const fileJson = require(filePath); - const fileKeys = Object.keys(flattenAnObject(fileJson)); - findMissingKeys(fileKeys, trendingSchemaKeys, `${language}/trending.json`); - findExtraneousKeys( - fileKeys, - trendingSchemaKeys, - `${language}/trending.json` - ); - const emptyKeys = noEmptyObjectValues(fileJson); - if (emptyKeys.length) { - console.warn( - `${language}/trending.json has these empty keys: ${emptyKeys.join( - ', ' - )}` - ); - } - console.info(`${language} trending.json validation complete`); - }); -}; - -const motivationSchemaValidation = languages => { - languages.forEach(language => { - const filePath = path.join( - __dirname, - `/locales/${language}/motivation.json` - ); - const fileJson = require(filePath); - const fileKeys = Object.keys(flattenAnObject(fileJson)); - findMissingKeys( - fileKeys, - motivationSchemaKeys, - `${language}/motivation.json` - ); - findExtraneousKeys( - fileKeys, - motivationSchemaKeys, - `${language}/motivation.json` - ); - const emptyKeys = noEmptyObjectValues(fileJson); - if (emptyKeys.length) { - console.warn( - `${language}/motivation.json has these empty keys: ${emptyKeys.join( - ', ' - )}` - ); - } - // Special line to assert that objects in motivational quote are correct - if ( - !fileJson.motivationalQuotes.every( - object => - Object.prototype.hasOwnProperty.call(object, 'quote') && - Object.prototype.hasOwnProperty.call(object, 'author') - ) - ) { - console.warn(`${language}/motivation.json has malformed quote objects.`); - } - console.info(`${language} motivation.json validation complete`); - }); -}; - -/** - * Function that checks the intro.json file - * for each available client language. - * @param {String[]} languages List of languages to test - */ -const introSchemaValidation = languages => { - languages.forEach(language => { - const filePath = path.join(__dirname, `/locales/${language}/intro.json`); - const fileJson = require(filePath); - const fileKeys = Object.keys(flattenAnObject(fileJson)); - findMissingKeys(fileKeys, introSchemaKeys, `${language}/intro.json`); - findExtraneousKeys(fileKeys, introSchemaKeys, `${language}/intro.json`); - const emptyKeys = noEmptyObjectValues(fileJson); - if (emptyKeys.length) { - console.warn( - `${language}/intro.json has these empty keys: ${emptyKeys.join(', ')}` - ); - } - console.info(`${language} intro.json validation complete`); - }); -}; - -const metaTagsSchemaValidation = languages => { - languages.forEach(language => { - const filePath = path.join( - __dirname, - `/locales/${language}/meta-tags.json` - ); - const fileJson = require(filePath); - const fileKeys = Object.keys(flattenAnObject(fileJson)); - findMissingKeys(fileKeys, metaTagsSchemaKeys, `${language}/meta-tags.json`); - findExtraneousKeys( - fileKeys, - metaTagsSchemaKeys, - `${language}/metaTags.json` - ); - const emptyKeys = noEmptyObjectValues(fileJson); - if (emptyKeys.length) { - console.warn( - `${language}/metaTags.json has these empty keys: ${emptyKeys.join( - ', ' - )}` - ); - } - console.info(`${language} metaTags.json validation complete`); - }); -}; - -const linksSchemaValidation = languages => { - languages.forEach(language => { - const filePath = path.join(__dirname, `/locales/${language}/links.json`); - const fileJson = require(filePath); - const fileKeys = Object.keys(flattenAnObject(fileJson)); - findMissingKeys(fileKeys, linksSchemaKeys, `${language}/links.json`); - findExtraneousKeys(fileKeys, linksSchemaKeys, `${language}/links.json`); - const emptyKeys = noEmptyObjectValues(fileJson); - if (emptyKeys.length) { - console.warn( - `${language}/links.json has these empty keys: ${emptyKeys.join(', ')}` - ); - } - console.info(`${language} links.json validation complete`); - }); -}; - -const translatedLangs = availableLangs.client.filter(x => x !== 'english'); - -translationSchemaValidation(translatedLangs); -trendingSchemaValidation(translatedLangs); -motivationSchemaValidation(translatedLangs); -introSchemaValidation(translatedLangs); -metaTagsSchemaValidation(translatedLangs); -linksSchemaValidation(translatedLangs); diff --git a/client/i18n/schema-validation.ts b/client/i18n/schema-validation.ts new file mode 100644 index 00000000000000..c066cdc1fe07db --- /dev/null +++ b/client/i18n/schema-validation.ts @@ -0,0 +1,260 @@ +import path from 'path'; +import { readFile } from 'fs/promises'; +import { availableLangs } from '../../config/i18n/all-langs'; +import introSchema from './locales/english/intro.json'; +import linksSchema from './locales/english/links.json'; +import metaTagsSchema from './locales/english/meta-tags.json'; +import motivationSchema from './locales/english/motivation.json'; +import translationsSchema from './locales/english/translations.json'; +import trendingSchema from './locales/english/trending.json'; + +type MotivationalQuotes = { quote: string; author: string }[]; + +/** + * Flattens a nested object structure into a single + * object with property chains as keys. + * @param {Object} obj Object to flatten + * @param {String} namespace Used for property chaining + */ +const flattenAnObject = (obj: Record
+
Est. 2020
+