├── .github ├── dependabot.yml └── workflows │ ├── build.yml │ ├── buildRelease.yml │ ├── codeql-analysis.yml │ ├── dependabot_automerge.yml │ ├── fixup.yml │ ├── i18nExtract.yml │ └── standard_lint.yml ├── .gitignore ├── .transifex └── transifex_config.yml ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── assets ├── css │ ├── __style_root.scss │ ├── sk-bounce.scss │ ├── style.scss │ └── variables.scss ├── fonts │ ├── SourceSansPro-Black.otf │ ├── SourceSansPro-BlackIt.otf │ ├── SourceSansPro-Bold.otf │ ├── SourceSansPro-BoldIt.otf │ ├── SourceSansPro-ExtraLight.otf │ ├── SourceSansPro-ExtraLightIt.otf │ ├── SourceSansPro-It.otf │ ├── SourceSansPro-Light.otf │ ├── SourceSansPro-LightIt.otf │ ├── SourceSansPro-Regular.otf │ ├── SourceSansPro-Semibold.otf │ ├── SourceSansPro-SemiboldIt.otf │ └── fonts.scss ├── git-it.icns ├── git-it.ico ├── git-it.png ├── imgs │ ├── branches--cs-dark.png │ ├── branches.png │ ├── clone--cs-dark.png │ ├── clone.png │ ├── pull--cs-dark.png │ ├── pull.png │ ├── pullrequest--cs-dark.png │ ├── pullrequest.png │ ├── remotes--cs-dark.png │ ├── remotes.png │ ├── reporobot.png │ ├── repos--cs-dark.png │ └── repos.png ├── octicons │ ├── dot-fill.svg │ ├── dot.svg │ ├── octicons.scss │ ├── reply.svg │ ├── trash.svg │ └── triangle-right.svg └── screenshots │ ├── app.png │ ├── ghcc.png │ └── install.png ├── config ├── i18next-parser.config.js └── i18next.config.js ├── docs.md ├── empty-saved-dir.json ├── empty-user-data.json ├── forge.config.mjs ├── lib ├── build │ ├── build-challenges.js │ ├── build-css.js │ ├── build-helpers.js │ └── build-pages.js ├── challenge-sidebar-handler.js ├── challenge-verify-handler.js ├── handle-external-links.js ├── i18n-translate.js ├── i18nInit.js ├── index-challenge-handler.js ├── ipcMainHandlers.js ├── renderer-helpers.js ├── user-data.js └── verify │ ├── branches_arent_just_for_birds.js │ ├── commit_to_it.js │ ├── forks_and_clones.js │ ├── get_git.js │ ├── githubbin.js │ ├── its_a_small_world.js │ ├── merge_tada.js │ ├── pull_never_out_of_date.js │ ├── remote_control.js │ ├── repository.js │ ├── requesting_you_pull_please.js │ └── verify-helpers.js ├── main.js ├── menus ├── darwin-menu.js └── other-menu.js ├── package-lock.json ├── package.json └── resources ├── content ├── challenges │ ├── 10_requesting_you_pull_please.hbs │ ├── 11_merge_tada.hbs │ ├── 1_get_git.hbs │ ├── 2_repository.hbs │ ├── 3_commit_to_it.hbs │ ├── 4_githubbin.hbs │ ├── 5_remote_control.hbs │ ├── 6_forks_and_clones.hbs │ ├── 7_branches_arent_just_for_birds.hbs │ ├── 8_its_a_small_world.hbs │ └── 9_pull_never_out_of_date.hbs ├── pages │ ├── about.hbs │ ├── dictionary.hbs │ ├── index.hbs │ └── resources.hbs └── partials │ ├── chal-footer.hbs │ ├── chal-sidebar.hbs │ ├── header.hbs │ ├── verify-button.hbs │ └── verify-directory-button.hbs ├── i18n ├── de-DE │ ├── about.json │ ├── ch01.json │ ├── ch02.json │ ├── ch03.json │ ├── ch04.json │ ├── ch05.json │ ├── ch06.json │ ├── ch07.json │ ├── ch08.json │ ├── ch09.json │ ├── ch10.json │ ├── ch11.json │ ├── common.json │ ├── dictionary.json │ ├── index.json │ ├── menu.json │ ├── resources.json │ └── verify.json ├── en-US │ ├── about.json │ ├── ch01.json │ ├── ch02.json │ ├── ch03.json │ ├── ch04.json │ ├── ch05.json │ ├── ch06.json │ ├── ch07.json │ ├── ch08.json │ ├── ch09.json │ ├── ch10.json │ ├── ch11.json │ ├── common.json │ ├── dictionary.json │ ├── index.json │ ├── menu.json │ ├── resources.json │ └── verify.json ├── ko-KR │ ├── about.json │ ├── ch01.json │ ├── ch02.json │ └── menu.json ├── ku │ ├── about.json │ ├── ch01.json │ ├── ch02.json │ ├── ch03.json │ ├── ch04.json │ ├── ch05.json │ ├── ch06.json │ ├── ch07.json │ ├── ch08.json │ ├── ch09.json │ ├── ch10.json │ ├── ch11.json │ ├── common.json │ ├── dictionary.json │ ├── index.json │ ├── menu.json │ ├── resources.json │ └── verify.json └── pl-PL │ ├── about.json │ ├── ch01.json │ ├── ch02.json │ ├── ch03.json │ ├── ch04.json │ ├── ch05.json │ ├── ch06.json │ ├── ch07.json │ ├── ch08.json │ ├── ch09.json │ ├── ch10.json │ ├── ch11.json │ ├── common.json │ ├── dictionary.json │ ├── index.json │ ├── menu.json │ ├── resources.json │ └── verify.json └── layouts ├── challenge.hbs └── page.hbs /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: "npm" # See documentation for possible values 9 | directory: "/" # Location of package manifests 10 | schedule: 11 | interval: "weekly" 12 | 13 | - package-ecosystem: "github-actions" 14 | directory: "/" 15 | schedule: 16 | interval: "weekly" 17 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build App 2 | 3 | on: 4 | pull_request: 5 | push: 6 | branches: 7 | - main 8 | 9 | jobs: 10 | build: 11 | runs-on: ubuntu-latest 12 | strategy: 13 | matrix: 14 | node: ['24'] 15 | name: Run build via forge packager (Node ${{ matrix.node }}, ubuntu-latest) 16 | 17 | steps: 18 | - name: Checkout Repository 19 | uses: actions/checkout@v4 20 | 21 | - name: Set up node 22 | uses: actions/setup-node@v4 23 | with: 24 | node-version: ${{ matrix.node }} 25 | 26 | - name: Install dependencies 27 | run: npm ci 28 | 29 | - name: Build App 30 | run: npm run package 31 | -------------------------------------------------------------------------------- /.github/workflows/buildRelease.yml: -------------------------------------------------------------------------------- 1 | name: Build App Release Zip 2 | 3 | on: 4 | push: 5 | tags: 6 | - "v*" 7 | workflow_dispatch: 8 | 9 | jobs: 10 | build: 11 | strategy: 12 | matrix: 13 | node: ['24'] 14 | os: [ubuntu-latest, windows-latest, macos-latest] 15 | 16 | name: Run Make (${{ matrix.os }}) 17 | runs-on: ${{ matrix.os }} 18 | 19 | steps: 20 | - name: Checkout Repository 21 | uses: actions/checkout@v4 22 | 23 | - name: Set up node 24 | uses: actions/setup-node@v4 25 | with: 26 | node-version: ${{ matrix.node }} 27 | 28 | - name: Install dependencies 29 | run: npm ci 30 | 31 | - name: Build App 32 | run: npm run make 33 | 34 | - name: Upload Release Artifacts 35 | uses: softprops/action-gh-release@v2 36 | with: 37 | draft: true 38 | files: out/make/**/*.zip 39 | -------------------------------------------------------------------------------- /.github/workflows/codeql-analysis.yml: -------------------------------------------------------------------------------- 1 | # For most projects, this workflow file will not need changing; you simply need 2 | # to commit it to your repository. 3 | # 4 | # You may wish to alter this file to override the set of languages analyzed, 5 | # or to provide custom queries or build logic. 6 | # 7 | # ******** NOTE ******** 8 | # We have attempted to detect the languages in your repository. Please check 9 | # the `language` matrix defined below to confirm you have the correct set of 10 | # supported CodeQL languages. 11 | # 12 | name: "CodeQL" 13 | 14 | on: 15 | push: 16 | branches: [ main ] 17 | pull_request: 18 | # The branches below must be a subset of the branches above 19 | branches: [ main ] 20 | schedule: 21 | - cron: '29 5 * * 3' 22 | 23 | jobs: 24 | analyze: 25 | name: Analyze 26 | runs-on: ubuntu-latest 27 | 28 | strategy: 29 | fail-fast: false 30 | matrix: 31 | language: [ 'javascript' ] 32 | # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] 33 | # Learn more: 34 | # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed 35 | 36 | steps: 37 | - name: Checkout repository 38 | uses: actions/checkout@v4 39 | 40 | # Initializes the CodeQL tools for scanning. 41 | - name: Initialize CodeQL 42 | uses: github/codeql-action/init@v3 43 | with: 44 | languages: ${{ matrix.language }} 45 | # If you wish to specify custom queries, you can do so here or in a config file. 46 | # By default, queries listed here will override any specified in a config file. 47 | # Prefix the list here with "+" to use these queries and those in the config file. 48 | # queries: ./path/to/local/query, your-org/your-repo/queries@main 49 | 50 | # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). 51 | # If this step fails, then you should remove it and run the build manually (see below) 52 | - name: Autobuild 53 | uses: github/codeql-action/autobuild@v3 54 | 55 | # ℹ️ Command-line programs to run using the OS shell. 56 | # 📚 https://git.io/JvXDl 57 | 58 | # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines 59 | # and modify them (or add more) to build your code if your project 60 | # uses a compiled language 61 | 62 | #- run: | 63 | # make bootstrap 64 | # make release 65 | 66 | - name: Perform CodeQL Analysis 67 | uses: github/codeql-action/analyze@v3 68 | -------------------------------------------------------------------------------- /.github/workflows/dependabot_automerge.yml: -------------------------------------------------------------------------------- 1 | name: Dependabot Auto-Merge 2 | 3 | on: 4 | pull_request: 5 | branches: 6 | - main 7 | 8 | jobs: 9 | auto-merge: 10 | runs-on: ubuntu-latest 11 | permissions: 12 | pull-requests: write 13 | contents: write 14 | 15 | steps: 16 | - uses: fastify/github-action-merge-dependabot@v3 17 | with: 18 | target: minor 19 | use-github-auto-merge: true 20 | -------------------------------------------------------------------------------- /.github/workflows/fixup.yml: -------------------------------------------------------------------------------- 1 | on: pull_request 2 | 3 | name: Fixup-check 4 | 5 | jobs: 6 | message-check: 7 | name: Block Autosquash Commits 8 | 9 | runs-on: ubuntu-latest 10 | 11 | steps: 12 | - name: Block Autosquash Commits 13 | uses: xt0rted/block-autosquash-commits-action@v2 14 | with: 15 | repo-token: ${{ secrets.GITHUB_TOKEN }} 16 | -------------------------------------------------------------------------------- /.github/workflows/i18nExtract.yml: -------------------------------------------------------------------------------- 1 | name: i18n Extract 2 | 3 | on: 4 | pull_request: 5 | push: 6 | branches: 7 | - main 8 | 9 | jobs: 10 | extract: 11 | runs-on: ubuntu-latest 12 | strategy: 13 | matrix: 14 | node: ['24'] 15 | name: Block on unextracted Changes (Node ${{ matrix.node }}) 16 | 17 | steps: 18 | - name: Checkout Repository 19 | uses: actions/checkout@v4 20 | 21 | - name: Set up node 22 | uses: actions/setup-node@v4 23 | with: 24 | node-version: ${{ matrix.node }} 25 | 26 | - name: Install dependencies 27 | run: npm ci 28 | 29 | - name: Extract i18n 30 | run: npm run i18n:extract 31 | 32 | - name: Check for changes 33 | run: | 34 | bash -c "[[ ! \"`git status --porcelain `\" ]] || ( echo 'Unextracted changes on translations' && git status && exit 1 )" 35 | -------------------------------------------------------------------------------- /.github/workflows/standard_lint.yml: -------------------------------------------------------------------------------- 1 | name: Standard Lint 2 | 3 | on: 4 | pull_request: 5 | push: 6 | branches: 7 | - main 8 | 9 | jobs: 10 | linting: 11 | runs-on: ubuntu-latest 12 | strategy: 13 | matrix: 14 | node: ['24'] 15 | name: Block on linting errors (Node ${{ matrix.node }}) 16 | 17 | steps: 18 | - name: Checkout Repository 19 | uses: actions/checkout@v4 20 | 21 | - name: Set up node 22 | uses: actions/setup-node@v4 23 | with: 24 | node-version: ${{ matrix.node }} 25 | 26 | - name: Install dependencies 27 | run: npm ci 28 | 29 | - name: Run standard lint 30 | run: npm run lint 31 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | out 3 | .DS_Store 4 | built 5 | .idea 6 | .vscode -------------------------------------------------------------------------------- /.transifex/transifex_config.yml: -------------------------------------------------------------------------------- 1 | git: 2 | filters: 3 | - filter_type: dir 4 | # all supported i18n types: https://docs.transifex.com/formats 5 | file_format: KEYVALUEJSON 6 | source_language: en-US 7 | source_file_dir: 'resources/i18n/en-US' 8 | source_file_extension: json 9 | # path expression to translation files, must contain placeholder 10 | translation_files_expression: 'resources/i18n/' 11 | settings: 12 | pr_branch_name: translations/tx_update_ 13 | # Transifex uses Lodash to separate Country and language, i18next wants simple dash 14 | language_mapping: 15 | de_DE: de-DE 16 | ko_KR: ko-KR 17 | pl_PL: pl-PL 18 | it_IT: it-IT 19 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015, Jessica Lord 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | 7 | * Redistributions of source code must retain the above copyright notice, this 8 | list of conditions and the following disclaimer. 9 | 10 | * Redistributions in binary form must reproduce the above copyright notice, 11 | this list of conditions and the following disclaimer in the documentation 12 | and/or other materials provided with the distribution. 13 | 14 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 15 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 17 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 18 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 20 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 21 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 22 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 | 25 | -------------------------------------------------------------------------------- /assets/css/__style_root.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Style-Root to collect the various scss-files. 3 | * This file is given to the sass-compiler. 4 | */ 5 | 6 | @use '../css/variables.scss'; 7 | @use '../fonts/fonts.scss'; 8 | @use '../octicons/octicons.scss'; 9 | @use '../css/sk-bounce.scss'; 10 | @use 'style.scss'; 11 | -------------------------------------------------------------------------------- /assets/css/sk-bounce.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * This is a part of the awesome Spinkit by Tobias Ahlin! 3 | * http://tobiasahlin.com/spinkit/ 4 | */ 5 | 6 | /* Bounce Usage 7 |
8 |
9 |
10 |
11 | */ 12 | 13 | /* Config */ 14 | :root { 15 | --sk-size: 26px; 16 | --sk-color: #E0E0E0; 17 | } 18 | 19 | @media (prefers-color-scheme: dark) { 20 | :root { 21 | --sk-color: #000000; 22 | } 23 | } 24 | 25 | /* Implementation */ 26 | .sk-bounce { 27 | width: var(--sk-size); 28 | height: var(--sk-size); 29 | position: relative; 30 | 31 | &-dot { 32 | width: 100%; 33 | height: 100%; 34 | border-radius: 50%; 35 | background-color: var(--sk-color); 36 | opacity: 0.6; 37 | position: absolute; 38 | top: 0; 39 | left: 0; 40 | animation: sk-bounce 2s infinite cubic-bezier(0.455, 0.03, 0.515, 0.955); 41 | 42 | &:nth-child(2) { 43 | animation-delay: -1.0s; 44 | } 45 | } 46 | } 47 | 48 | /* Animation */ 49 | @keyframes sk-bounce { 50 | 0%, 100% { 51 | transform: scale(0); 52 | } 45%, 55% { 53 | transform: scale(1); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /assets/css/variables.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * This file contains some variables for common design 3 | * Trying to use more or less BEM-Model 4 | */ 5 | 6 | :root { 7 | --app-background: #ffffff; 8 | --background-separator: #e0e0e0; 9 | --header: #fafafa; 10 | --header__subtitle: #3da4ff; 11 | --text: #5a5a5a; 12 | --scrollbar: #e8e8e8; 13 | 14 | --main-blue: #0087ff; 15 | --main-blue--hover: #3da4ff; 16 | --main-blue__text: #ffffff; 17 | --light-blue: #88ccff; 18 | --light-blue--hover: #66bdff; 19 | 20 | --solidbox__background: #eaf6ff; 21 | --solidbox__text: #4f6375; 22 | --solidbox--codebox__background: #c7e7ff; 23 | --solidbox--codebox__shell-sign: #8f9aa2; 24 | 25 | --borderbox--grey__border: #999999; 26 | --borderbox--grey__title: #5a5a5a; 27 | 28 | --verifybox__button--hover: #ebf6ff; 29 | --verifybox__button--disabled: #007ae6; 30 | } 31 | 32 | /* Dark mode */ 33 | @media (prefers-color-scheme: dark) { 34 | :root { 35 | --app-background: #1b1b1b; 36 | --background-separator: #282c36; 37 | --header: #191919; 38 | --header__subtitle: #3da4ff; 39 | --text: #c0c0c0; 40 | --scrollbar: #323232; 41 | 42 | --main-blue: #0064bd; 43 | --main-blue--hover: #007ae6; 44 | --main-blue__text: #cfcfcf; 45 | --light-blue: #003564; 46 | --light-blue--hover: #00417a; 47 | 48 | --solidbox__background: #282c36; 49 | --solidbox__text: var(--text); 50 | --solidbox--codebox__background: #50586c; 51 | --solidbox--codebox__shell-sign: #8f9aa2; 52 | 53 | --borderbox--grey__border: #999999; 54 | --borderbox--grey__title: #5a5a5a; 55 | 56 | --verifybox__button--hover: #e6e6e6; 57 | --verifybox__button--disabled: #007ae6; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /assets/fonts/SourceSansPro-Black.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Git-it-App/git-it-electron/9609f16b23c094953de75831d0aeb83e89d2557f/assets/fonts/SourceSansPro-Black.otf -------------------------------------------------------------------------------- /assets/fonts/SourceSansPro-BlackIt.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Git-it-App/git-it-electron/9609f16b23c094953de75831d0aeb83e89d2557f/assets/fonts/SourceSansPro-BlackIt.otf -------------------------------------------------------------------------------- /assets/fonts/SourceSansPro-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Git-it-App/git-it-electron/9609f16b23c094953de75831d0aeb83e89d2557f/assets/fonts/SourceSansPro-Bold.otf -------------------------------------------------------------------------------- /assets/fonts/SourceSansPro-BoldIt.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Git-it-App/git-it-electron/9609f16b23c094953de75831d0aeb83e89d2557f/assets/fonts/SourceSansPro-BoldIt.otf -------------------------------------------------------------------------------- /assets/fonts/SourceSansPro-ExtraLight.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Git-it-App/git-it-electron/9609f16b23c094953de75831d0aeb83e89d2557f/assets/fonts/SourceSansPro-ExtraLight.otf -------------------------------------------------------------------------------- /assets/fonts/SourceSansPro-ExtraLightIt.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Git-it-App/git-it-electron/9609f16b23c094953de75831d0aeb83e89d2557f/assets/fonts/SourceSansPro-ExtraLightIt.otf -------------------------------------------------------------------------------- /assets/fonts/SourceSansPro-It.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Git-it-App/git-it-electron/9609f16b23c094953de75831d0aeb83e89d2557f/assets/fonts/SourceSansPro-It.otf -------------------------------------------------------------------------------- /assets/fonts/SourceSansPro-Light.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Git-it-App/git-it-electron/9609f16b23c094953de75831d0aeb83e89d2557f/assets/fonts/SourceSansPro-Light.otf -------------------------------------------------------------------------------- /assets/fonts/SourceSansPro-LightIt.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Git-it-App/git-it-electron/9609f16b23c094953de75831d0aeb83e89d2557f/assets/fonts/SourceSansPro-LightIt.otf -------------------------------------------------------------------------------- /assets/fonts/SourceSansPro-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Git-it-App/git-it-electron/9609f16b23c094953de75831d0aeb83e89d2557f/assets/fonts/SourceSansPro-Regular.otf -------------------------------------------------------------------------------- /assets/fonts/SourceSansPro-Semibold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Git-it-App/git-it-electron/9609f16b23c094953de75831d0aeb83e89d2557f/assets/fonts/SourceSansPro-Semibold.otf -------------------------------------------------------------------------------- /assets/fonts/SourceSansPro-SemiboldIt.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Git-it-App/git-it-electron/9609f16b23c094953de75831d0aeb83e89d2557f/assets/fonts/SourceSansPro-SemiboldIt.otf -------------------------------------------------------------------------------- /assets/fonts/fonts.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Font Definitions 3 | */ 4 | 5 | @font-face { 6 | font-family: 'Source Sans Pro'; 7 | font-style: normal; 8 | font-weight: 400; 9 | src: local('Source Sans Pro'), local('SourceSansPro-Regular'), url(../../assets/fonts/SourceSansPro-Regular.otf) format('opentype'); 10 | } 11 | 12 | @font-face { 13 | font-family: 'Source Sans Pro'; 14 | font-style: normal; 15 | font-weight: 600; 16 | src: local('Source Sans Pro Semibold'), local('SourceSansPro-Semibold'), url(../../assets/fonts/SourceSansPro-Semibold.otf) format('opentype'); 17 | } 18 | 19 | @font-face { 20 | font-family: 'Source Sans Pro'; 21 | font-style: normal; 22 | font-weight: 700; 23 | src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url(../../assets/fonts/SourceSansPro-Bold.otf) format('opentype'); 24 | } 25 | 26 | @font-face { 27 | font-family: 'Source Sans Pro'; 28 | font-style: normal; 29 | font-weight: 900; 30 | src: local('Source Sans Pro Black'), local('SourceSansPro-Black'), url(../../assets/fonts/SourceSansPro-Black.otf) format('opentype'); 31 | } 32 | -------------------------------------------------------------------------------- /assets/git-it.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Git-it-App/git-it-electron/9609f16b23c094953de75831d0aeb83e89d2557f/assets/git-it.icns -------------------------------------------------------------------------------- /assets/git-it.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Git-it-App/git-it-electron/9609f16b23c094953de75831d0aeb83e89d2557f/assets/git-it.ico -------------------------------------------------------------------------------- /assets/git-it.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Git-it-App/git-it-electron/9609f16b23c094953de75831d0aeb83e89d2557f/assets/git-it.png -------------------------------------------------------------------------------- /assets/imgs/branches--cs-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Git-it-App/git-it-electron/9609f16b23c094953de75831d0aeb83e89d2557f/assets/imgs/branches--cs-dark.png -------------------------------------------------------------------------------- /assets/imgs/branches.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Git-it-App/git-it-electron/9609f16b23c094953de75831d0aeb83e89d2557f/assets/imgs/branches.png -------------------------------------------------------------------------------- /assets/imgs/clone--cs-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Git-it-App/git-it-electron/9609f16b23c094953de75831d0aeb83e89d2557f/assets/imgs/clone--cs-dark.png -------------------------------------------------------------------------------- /assets/imgs/clone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Git-it-App/git-it-electron/9609f16b23c094953de75831d0aeb83e89d2557f/assets/imgs/clone.png -------------------------------------------------------------------------------- /assets/imgs/pull--cs-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Git-it-App/git-it-electron/9609f16b23c094953de75831d0aeb83e89d2557f/assets/imgs/pull--cs-dark.png -------------------------------------------------------------------------------- /assets/imgs/pull.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Git-it-App/git-it-electron/9609f16b23c094953de75831d0aeb83e89d2557f/assets/imgs/pull.png -------------------------------------------------------------------------------- /assets/imgs/pullrequest--cs-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Git-it-App/git-it-electron/9609f16b23c094953de75831d0aeb83e89d2557f/assets/imgs/pullrequest--cs-dark.png -------------------------------------------------------------------------------- /assets/imgs/pullrequest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Git-it-App/git-it-electron/9609f16b23c094953de75831d0aeb83e89d2557f/assets/imgs/pullrequest.png -------------------------------------------------------------------------------- /assets/imgs/remotes--cs-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Git-it-App/git-it-electron/9609f16b23c094953de75831d0aeb83e89d2557f/assets/imgs/remotes--cs-dark.png -------------------------------------------------------------------------------- /assets/imgs/remotes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Git-it-App/git-it-electron/9609f16b23c094953de75831d0aeb83e89d2557f/assets/imgs/remotes.png -------------------------------------------------------------------------------- /assets/imgs/reporobot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Git-it-App/git-it-electron/9609f16b23c094953de75831d0aeb83e89d2557f/assets/imgs/reporobot.png -------------------------------------------------------------------------------- /assets/imgs/repos--cs-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Git-it-App/git-it-electron/9609f16b23c094953de75831d0aeb83e89d2557f/assets/imgs/repos--cs-dark.png -------------------------------------------------------------------------------- /assets/imgs/repos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Git-it-App/git-it-electron/9609f16b23c094953de75831d0aeb83e89d2557f/assets/imgs/repos.png -------------------------------------------------------------------------------- /assets/octicons/dot-fill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/octicons/dot.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/octicons/octicons.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Just a small wrapper, picking the octicons used in Git-it. 3 | * Most octicons are adapted a bit to fill the full svg-size. 4 | * Octicons are provided by GitHub Inc. under MIT-License 5 | * Ref. https://github.com/primer/octicons 6 | */ 7 | 8 | .octicon { 9 | -webkit-mask-size: cover; 10 | display: inline-block; 11 | /* Just some default size and color */ 12 | width: 20px; 13 | height: 20px; 14 | background: black; 15 | 16 | &__trash { 17 | @extend .octicon; 18 | -webkit-mask-image: url('../../assets/octicons/trash.svg'); 19 | } 20 | 21 | &__reply { 22 | @extend .octicon; 23 | -webkit-mask-image: url('../../assets/octicons/reply.svg'); 24 | 25 | &--right{ 26 | @extend .octicon__reply; 27 | transform: rotate(180deg); 28 | } 29 | &--left { 30 | @extend .octicon__reply; 31 | transform: rotate3d(1, 0, 0, 180deg); 32 | } 33 | } 34 | 35 | &__triangleRight { 36 | @extend .octicon; 37 | -webkit-mask-image: url('../../assets/octicons/triangle-right.svg') 38 | } 39 | 40 | &__dot { 41 | @extend .octicon; 42 | -webkit-mask-image: url('../../assets/octicons/dot.svg') 43 | } 44 | 45 | &__dotFill { 46 | @extend .octicon; 47 | -webkit-mask-image: url('../../assets/octicons/dot-fill.svg') 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /assets/octicons/reply.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/octicons/trash.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/octicons/triangle-right.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/screenshots/app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Git-it-App/git-it-electron/9609f16b23c094953de75831d0aeb83e89d2557f/assets/screenshots/app.png -------------------------------------------------------------------------------- /assets/screenshots/ghcc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Git-it-App/git-it-electron/9609f16b23c094953de75831d0aeb83e89d2557f/assets/screenshots/ghcc.png -------------------------------------------------------------------------------- /assets/screenshots/install.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Git-it-App/git-it-electron/9609f16b23c094953de75831d0aeb83e89d2557f/assets/screenshots/install.png -------------------------------------------------------------------------------- /config/i18next-parser.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | /* Key separator used in your translation keys */ 3 | // contextSeparator: '_', 4 | 5 | /* Save the \_old files */ 6 | createOldCatalogs: false, 7 | 8 | /* Keep keys from the catalog that are no longer in code */ 9 | keepRemoved: false, 10 | 11 | /* Default namespace used in your i18next config */ 12 | defaultNamespace: 'common', 13 | 14 | /* Indentation of the catalog files */ 15 | indentation: 2, 16 | 17 | /* Key and Namespace separator used in your translation keys 18 | * If you want to use plain english keys, separators such as `.` and `:` will conflict. You might want to set `keySeparator: false` and 19 | * `namespaceSeparator: false`. That way, `t('Status: Loading...')` will not think that there are a namespace and three separator dots for instance. 20 | */ 21 | keySeparator: false, 22 | namespaceSeparator: '~', 23 | 24 | 25 | /* see below for more details */ 26 | lexers: { 27 | hbs: [{ // Use HTML-Lexer here, translations will be done on final built html-code, but not on handlebars-build. 28 | lexer: 'HTMLLexer', 29 | attr: 'i18n-data', // Attribute for the keys 30 | optionAttr: 'i18n-options' // Attribute for the options 31 | }], 32 | // handlebars: ['HandlebarsLexer'], 33 | htm: [{ 34 | lexer: 'HTMLLexer', 35 | attr: 'i18n-data', // Attribute for the keys 36 | optionAttr: 'i18n-options' // Attribute for the options 37 | }], 38 | html: [{ 39 | lexer: 'HTMLLexer', 40 | attr: 'i18n-data', // Attribute for the keys 41 | optionAttr: 'i18n-options' // Attribute for the options 42 | }], 43 | // mjs: ['JavascriptLexer'], 44 | js: [{ 45 | lexer: 'JavascriptLexer', 46 | functions: ['t', 'translate', 'addToVerifyList'], // Array of functions to match 47 | }], 48 | // ts: ['JavascriptLexer'], 49 | // jsx: ['JsxLexer'], 50 | // tsx: ['JsxLexer'], 51 | 52 | // default: ['JavascriptLexer'] 53 | }, 54 | 55 | /* Control the line ending. See options at https://github.com/ryanve/eol */ 56 | // lineEnding: 'auto', 57 | 58 | 59 | /* An array of the locales in your applications 60 | * Here just the parsed locale, all others are managed on transifex. 61 | */ 62 | locales: ['en-US'], 63 | 64 | /* Supports $LOCALE and $NAMESPACE injection 65 | * Supports JSON (.json) and YAML (.yml) file formats 66 | * Where to write the locale files relative to process.cwd() 67 | */ 68 | output: './resources/i18n/$LOCALE/$NAMESPACE.json', 69 | 70 | /* An array of globs that describe where to look for source files 71 | * relative to the location of the configuration file 72 | */ 73 | input: ['../main.js', '../lib/**/*.js', '../menus/*.js', '../resources/**/*.hbs'], 74 | 75 | /* For react file, extract the defaultNamespace - https://react.i18next.com/latest/withtranslation-hoc 76 | * Ignored when parsing a `.jsx` file and namespace is extracted from that file. 77 | */ 78 | // reactNamespace: false, 79 | 80 | /* Whether or not to sort the catalog 81 | * Not sorting here, to keep order and context of challenges/pages! 82 | */ 83 | sort: false, 84 | 85 | /* Display info about the parsing including some stats */ 86 | verbose: true, 87 | 88 | // Set Key as default value 89 | defaultValue: (locale, namespace, key, value) => { 90 | return key; 91 | } 92 | } -------------------------------------------------------------------------------- /config/i18next.config.js: -------------------------------------------------------------------------------- 1 | /** Configuration Settings for i18next */ 2 | 3 | /* Available appLanguages 4 | * Each language is defined as an object per languageKey: 5 | * The Object MUST contain a name-property, which will be shown in the dropdown-menu 6 | * Optional Property "direction: 'rtl'" is used to mark right-to-left lanugages. 7 | */ 8 | const appLanguages = { 9 | 'en-US': { name: 'English' }, 10 | 'de-DE': { name: 'Deutsch' }, 11 | 'ko-KR': { name: '한국어' }, 12 | 'ku': { name: 'کوردی', direction: 'rtl' }, 13 | 'pl-PL': { name: 'Polski' }, 14 | } 15 | const appLanguageKeys = Object.keys(appLanguages) 16 | 17 | const usedNamespaces = [ 18 | 'about', 'common', 'dictionary', 'index', 'menu', 'resources', 'verify', 19 | 'ch01', 'ch02', 'ch03', 'ch04', 'ch05', 'ch06', 'ch07', 'ch08', 'ch09', 'ch10', 'ch11' 20 | ] 21 | 22 | // defaultOptions for interpolation 23 | const i18nDefaultOptions = { 24 | br: '
', 25 | cde: '', 26 | cde_e: '', 27 | em: '', 28 | em_e: '', 29 | lnk_e: '', 30 | str: '', 31 | str_e: '', 32 | 33 | // Simple Text, no HTML-Content 34 | dqm: '"', // double quotation mark 35 | gt: '>', 36 | lt: '<', 37 | smc: ';' // semicolon 38 | } 39 | 40 | const i18nextConfig = { 41 | // debug: true, 42 | 43 | lng: 'en-US', // Startup Language 44 | fallbackLng: 'en-US', 45 | supportedLngs: appLanguageKeys, 46 | load: 'currentOnly', // not loading Languages 'en', 'de' etc. as they do not exist here. 47 | 48 | nsSeparator: '~', 49 | ns: usedNamespaces, 50 | defaultNS: 'common', 51 | 52 | initImmediate: false, 53 | backend: { 54 | // path where resources get loaded from 55 | loadPath: './resources/i18n/{/lng/}/{/ns/}.json', 56 | // jsonIndent to use when storing json files 57 | jsonIndent: 2 58 | }, 59 | interpolation: { 60 | prefix: '{/', 61 | suffix: '/}', 62 | escapeValue: false 63 | }, 64 | saveMissing: false, 65 | keySeparator: false, 66 | } 67 | 68 | exports.i18nextConfig = i18nextConfig 69 | exports.appLanguages = appLanguages 70 | exports.i18nDefaultOptions = i18nDefaultOptions 71 | -------------------------------------------------------------------------------- /docs.md: -------------------------------------------------------------------------------- 1 | # Documentation 2 | 3 | How does this thing work? Below are general descriptions of directories and content. Inside of each file, comments describe what that file's job is. 4 | 5 | ## Directories & Files 6 | - **assets** Project assets like css, fonts and images. 7 | - **config** Containing config files, currently only for internationalisation. 8 | - **lib** All the JavaScript files for the app. 9 | - **verify** The JavaScript files for each challenge that verify if the challenge is completed or not. 10 | - **menus** The app's menu layout. 11 | - **resources** Contains the Content-Resources 12 | - **content** The main Content of pages and challenges, which will then be compiled & bundled to the final html-files. 13 | - **challenges** Main content of the challenges to be used in generating the final full HTML for each challenge page 14 | - **pages** Main content of non-challenge pages to be used with a template to generate full HTML. 15 | - **partials** HTML bits that are shared between either challenges or non-challenges pages, to be used in order to generate full HTML for pages. 16 | - **i18n** The translation-json-files. Translations are managed on Transifex. 17 | - **layouts** Handlebars templates to compile pages. 18 | - **empty-user-data.json** The starter file that is duplicated and stored on the user's computer with their challenge completed statuses as they go through the lessons. 19 | - **main.js** App's main process file which spins up the renderer view for the pages. 20 | - **package.json** App's details and dependencies. 21 | 22 | ### Relationships 23 | Files and directories are grouped by their relationship in the app. Electron apps have a main process, which controls the lifecycle of the app, and the browser process, which is each HTML page that is spun up by the main process. 24 | 25 | **Main Process: Application Code** 26 | `main.js` controls the life of the app (start, quit) and the browser windows that make up the main app experience (what HTML files to show and what size). It is the app's **main process**. The `lib` and `lib/verify` directories contain all the code that the browser views, the app's **browser process**, use. Some of these communicate with the main process by sending and receiving messages. 27 | 28 | **Browser Process: Pages & Assets** 29 | The pages that the app displays are HTML, just like a website. The `assets` directory contains the CSS, images and fonts used in each view. Each page is built with it's main content (`pages`) and drops that into a template (`layouts`) along with the shared HTML elements (`partials`) like headers and footers. 30 | 31 | **Browser Process: Scripts** 32 | The `lib` directory contains scripts that each page uses. Inside of `lib/verify` are scripts for each challenge that tell it how to verify that challenge. The scripts `helpers.js` and `user-data.js` are shared between scripts. 33 | 34 | **Templating** 35 | There are scripts, templates and partials involved with generating the HTML pages. The main content for the challenges and non-challenge pages are within `resources/content/challenges` and `resources/content/pages`. The directory `resources/layouts` contains the templates, `resources/partials` the partials that are combined with the main content files according to the template. The scripts `lib/build/build-pages.js` and `lib/build/build-challenges.js` put it all in motion to generate the final HTML output which is placed inside a `built`-folder. You can run these scripts from the command line. 36 | -------------------------------------------------------------------------------- /empty-saved-dir.json: -------------------------------------------------------------------------------- 1 | { 2 | "helloWorld": null, 3 | "patchwork": null 4 | } 5 | -------------------------------------------------------------------------------- /empty-user-data.json: -------------------------------------------------------------------------------- 1 | { 2 | "get_git": { 3 | "challengeId": 1, 4 | "challengeComplete": false, 5 | "verifyList": [] 6 | }, 7 | "repository": { 8 | "challengeId": 2, 9 | "challengeComplete": false, 10 | "verifyList": [] 11 | }, 12 | "commit_to_it": { 13 | "challengeId": 3, 14 | "challengeComplete": false, 15 | "verifyList": [] 16 | }, 17 | "githubbin": { 18 | "challengeId": 4, 19 | "challengeComplete": false, 20 | "verifyList": [] 21 | }, 22 | "remote_control": { 23 | "challengeId": 5, 24 | "challengeComplete": false, 25 | "verifyList": [] 26 | }, 27 | "forks_and_clones": { 28 | "challengeId": 6, 29 | "challengeComplete": false, 30 | "verifyList": [] 31 | }, 32 | "branches_arent_just_for_birds": { 33 | "challengeId": 7, 34 | "challengeComplete": false, 35 | "verifyList": [] 36 | }, 37 | "its_a_small_world": { 38 | "challengeId": 8, 39 | "challengeComplete": false, 40 | "verifyList": [] 41 | }, 42 | "pull_never_out_of_date": { 43 | "challengeId": 9, 44 | "challengeComplete": false, 45 | "verifyList": [] 46 | }, 47 | "requesting_you_pull_please": { 48 | "challengeId": 10, 49 | "challengeComplete": false, 50 | "verifyList": [] 51 | }, 52 | "merge_tada": { 53 | "challengeId": 11, 54 | "challengeComplete": false, 55 | "verifyList": [] 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /forge.config.mjs: -------------------------------------------------------------------------------- 1 | import { execFile } from 'child_process'; 2 | import { promisify } from 'util'; 3 | import { rimraf } from 'rimraf' 4 | 5 | const execFileP = promisify(execFile); 6 | 7 | async function generateAssets() { 8 | // Delete old builds 9 | await rimraf('built') 10 | 11 | // Builds can run in parallel 12 | const buildChallenges = execFileP('node', ['./lib/build/build-challenges.js']) 13 | .then( ({stdout, stderr}) => { 14 | if (stderr) throw stderr 15 | console.log(stdout) 16 | }) 17 | const buildCss = execFileP('node', ['./lib/build/build-css.js']) 18 | .then( ({stdout, stderr}) => { 19 | if (stderr) throw stderr 20 | console.log(stdout) 21 | }) 22 | const buildPages = execFileP('node', ['./lib/build/build-pages.js']) 23 | .then( ({stdout, stderr}) => { 24 | if (stderr) throw stderr 25 | console.log(stdout) 26 | }) 27 | 28 | // But all builds need to be done to continue. 29 | await Promise.all([buildChallenges, buildCss, buildPages]) 30 | } 31 | 32 | export default { 33 | hooks: { 34 | // Waiting for builds to be finished. 35 | generateAssets: generateAssets, 36 | }, 37 | packagerConfig: { 38 | overwrite: true, 39 | icon: './assets/git-it', // Platform dependent extension comes automatically 40 | extraResource: [ 41 | 'resources/i18n' 42 | ], 43 | ignore: [ 44 | '.github', 45 | 'resources' 46 | ] 47 | }, 48 | makers: [ 49 | { 50 | name: '@electron-forge/maker-zip', 51 | platforms: ["darwin", "linux", "win32"], 52 | config: { 53 | appName: "Git-it", 54 | } 55 | } 56 | ] 57 | } 58 | -------------------------------------------------------------------------------- /lib/build/build-css.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Runs in: Node - Build Application 3 | * This file builds out the css using sass. 4 | */ 5 | const fs = require('fs') 6 | const path = require('path') 7 | const sass = require('sass') 8 | 9 | const basepath = path.normalize(path.join(__dirname, '../..')) 10 | const inputRootFile = path.join(basepath, 'assets', 'css', '__style_root.scss') 11 | const outputFolder = path.join(basepath, 'built', 'styles') 12 | const outputFile = path.join(outputFolder, 'style.css') 13 | 14 | // If output-folder does not exist, create it 15 | try { 16 | fs.accessSync(outputFolder) 17 | } catch (e) { 18 | fs.mkdirSync(outputFolder, { recursive: true }) 19 | } 20 | 21 | // Build css and write to file 22 | const result = sass.compile(inputRootFile, { 23 | style: 'compressed', 24 | }) 25 | fs.writeFileSync(outputFile, result.css) 26 | 27 | console.log('✅ Built styles!') 28 | -------------------------------------------------------------------------------- /lib/build/build-helpers.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Runs in: Node - Build Application 3 | * Some helper functions to be used in builds 4 | */ 5 | 6 | /** 7 | * Build locale menu 8 | * @return {string} 9 | */ 10 | function getLocaleMenu () { 11 | const { appLanguages } = require('../../config/i18next.config') 12 | let localeMenu = '' 13 | 14 | Object.entries(appLanguages).forEach(([languageKey, languageObject]) => { 15 | localeMenu = localeMenu.concat('') 16 | }) 17 | return localeMenu 18 | } 19 | 20 | exports.getLocaleMenu = getLocaleMenu 21 | -------------------------------------------------------------------------------- /lib/build/build-pages.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Runs in: Node - Build Application 3 | * This file builds out the general web pages (like the about page). A simple 4 | * static site generator. It uses `partials` and `layouts`. 5 | */ 6 | const fs = require('fs') 7 | const path = require('path') 8 | const Handlebars = require('handlebars') 9 | const { getLocaleMenu } = require('./build-helpers.js') 10 | 11 | const basepath = path.normalize(path.join(__dirname, '../..')) 12 | const inputFolder = path.join(basepath, 'resources', 'content', 'pages') 13 | const outputFolder = path.join(basepath, 'built', 'pages') 14 | const partialsFolder = path.join(basepath, 'resources', 'content', 'partials') 15 | 16 | const pageFiles = fs.readdirSync(inputFolder) 17 | const layout = fs.readFileSync(path.join(basepath, 'resources', 'layouts', 'page.hbs')).toString() 18 | const layoutTemplate = Handlebars.compile(layout) 19 | 20 | // If output-folder does not exist, create it 21 | try { 22 | fs.accessSync(outputFolder) 23 | } catch (e) { 24 | fs.mkdirSync(outputFolder, { recursive: true }) 25 | } 26 | 27 | // Process page-files one by one. 28 | pageFiles.forEach(filename => { 29 | let builtContent = '' 30 | 31 | // Only process '.hbs' files 32 | if (!filename.match('[.]hbs')) { 33 | console.log('Non-HBS file found!', filename) 34 | return 35 | } 36 | 37 | const content = { 38 | header: buildHeader(filename), 39 | body: fs.readFileSync(path.join(inputFolder, filename)).toString() 40 | } 41 | 42 | //Insert Script on index-page 43 | if (filename.match('index[.]hbs')) { 44 | content.script = '' 45 | } 46 | 47 | builtContent = layoutTemplate(content) 48 | fs.writeFileSync(path.join(outputFolder, filename.replace('\.hbs', '\.html')), builtContent) 49 | }) 50 | console.log('✅ Built pages!') 51 | 52 | /* 53 | * Function to get Header 54 | */ 55 | function buildHeader (filename) { 56 | const source = fs.readFileSync(path.join(partialsFolder, 'header.hbs')).toString() 57 | const template = Handlebars.compile(source) 58 | 59 | const content = { 60 | pageTitle: filename.replace('\.hbs', ''), 61 | localeMenu: new Handlebars.SafeString(getLocaleMenu()) 62 | } 63 | // Index without specific page-title 64 | if (content.pageTitle === 'index') { 65 | delete content.pageTitle 66 | } 67 | 68 | return template(content) 69 | } 70 | -------------------------------------------------------------------------------- /lib/challenge-sidebar-handler.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Runs in: Renderer-Process 3 | * Cares for the Challenge-Sidebar to be up-to-date with challengeComplete-status 4 | */ 5 | const path = require('path') 6 | const userData = require(path.normalize(path.join(__dirname, 'user-data.js'))) 7 | 8 | // Execute after DOM loaded. 9 | document.addEventListener('DOMContentLoaded', async () => { 10 | const challengeUserData = await userData.getChallengeData() 11 | 12 | Object.keys(challengeUserData).forEach((challengeKey) => { 13 | if (challengeUserData[challengeKey].challengeComplete) { 14 | showChallengeComplete(challengeKey, true) 15 | } 16 | }) 17 | }) 18 | 19 | /* 20 | * Show a challenge as complete/incomplete in sidebar 21 | */ 22 | async function showChallengeComplete (challengeKey, isComplete) { 23 | if (isComplete) { 24 | document.getElementById('sidebar__list__item--' + challengeKey).classList.add('complete') 25 | } else { 26 | document.getElementById('sidebar__list__item--' + challengeKey).classList.remove('complete') 27 | } 28 | } 29 | 30 | exports.showChallengeComplete = showChallengeComplete 31 | -------------------------------------------------------------------------------- /lib/handle-external-links.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Runs in: Renderer-Process 3 | * This file is used by every web page to make sure all links that are not local 4 | * are opened in the users default browser. 5 | */ 6 | const shell = require('electron').shell 7 | 8 | // Execute after DOM loaded 9 | document.addEventListener('DOMContentLoaded', () => { 10 | const links = document.querySelectorAll('a[href]') 11 | 12 | // On each external link add an event-listener, prevent default and open manually. 13 | links.forEach(link => { 14 | const url = link.getAttribute('href') 15 | if (url.startsWith('http')) { 16 | link.addEventListener('click', event => { 17 | event.preventDefault() 18 | shell.openExternal(url) 19 | }) 20 | } 21 | }) 22 | }) 23 | -------------------------------------------------------------------------------- /lib/i18n-translate.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Runs in: Renderer-Process 3 | * 4 | * Script to include in HTML-Pages 5 | * - Insert translated Content 6 | * - Set Language Dropdown 7 | * - Listen for Language Dropdown Change 8 | */ 9 | 10 | const ipc = require('electron').ipcRenderer 11 | const { appLanguages } = require('../config/i18next.config') 12 | const { translate } = require('./renderer-helpers.js') 13 | 14 | /* 15 | * Insert translated Content after loading page. 16 | */ 17 | document.addEventListener('DOMContentLoaded', () => { 18 | setDropdownLanguage() 19 | insertDataTranslations() 20 | insertTranslationStyles() 21 | }) 22 | 23 | /* 24 | * Set Language change listener 25 | * When changeLanguage is done, the main process will reload the window therefore executing translation-insert from scratch. 26 | */ 27 | const languageSelector = document.getElementById('header__lang__select') 28 | languageSelector.addEventListener('change', async () => { 29 | ipc.send('i18n.changeLanguage', languageSelector.value) 30 | }) 31 | 32 | /* 33 | * Select current Language in Dropdown-Element 34 | */ 35 | async function setDropdownLanguage () { 36 | const languageSelector = document.getElementById('header__lang__select') 37 | languageSelector.value = ipc.sendSync('i18n.language') 38 | } 39 | 40 | /* 41 | * Insert Translations into HTML 42 | */ 43 | async function insertDataTranslations () { 44 | const i18nElements = document.querySelectorAll('[i18n-data]') 45 | 46 | i18nElements.forEach(element => { 47 | const data = element.getAttribute('i18n-data') 48 | const type = element.getAttribute('i18n-type') 49 | const options = JSON.parse(element.getAttribute('i18n-options')) 50 | 51 | // If html only contains standard-elements, first interpret the options 52 | if (type === 'standard_html' && options !== null) { 53 | Object.entries(options).forEach(([key, value]) => { 54 | // Extend links 55 | if (key.startsWith('lnk_')) { 56 | options[key] = '' 57 | } 58 | }) 59 | } 60 | 61 | if (type === 'html' || type === 'standard_html') { 62 | element.innerHTML = translate(data, options) 63 | } else { 64 | element.innerText = translate(data, options) 65 | } 66 | }) 67 | } 68 | 69 | /* 70 | * Adding/Removing rtl-class if necessary. 71 | * Box Titles are done with CSS ::before, so the styles need to be inserted dynamically. 72 | * Here always removing old styles and adding new ones into the specific Stylesheet (see challenges.hbs). 73 | */ 74 | async function insertTranslationStyles () { 75 | const sheetTitle = 'jsTranslationStylesheet' 76 | const sheetIndex = [...document.styleSheets].findIndex(sheet => sheet.title === sheetTitle) 77 | 78 | // Insert Style for right-to-left languages 79 | if (appLanguages[ipc.sendSync('i18n.language')].direction === 'rtl') { 80 | document.getElementById('wrapper__content').classList.add('rtl') 81 | } else { 82 | document.getElementById('wrapper__content').classList.remove('rtl') 83 | } 84 | 85 | // Abort if stylesheet not found 86 | if (sheetIndex < 0) { 87 | return 88 | } 89 | // Delete old rules 90 | while (document.styleSheets[sheetIndex].rules.length > 0) { 91 | document.styleSheets[sheetIndex].deleteRule(0) 92 | } 93 | // Append rules for box-titles 94 | if (document.styleSheets[sheetIndex].ownerNode.id === 'challenge-translation-style') { 95 | document.styleSheets[sheetIndex].insertRule('.box--goal::before {content: "' + translate('Goal') + '";}') 96 | document.styleSheets[sheetIndex].insertRule('.box--fail::before {content: "' + translate("Didn't Pass?") + '";}') 97 | document.styleSheets[sheetIndex].insertRule('.box--tip::before {content: "' + translate('Tip') + '";}') 98 | document.styleSheets[sheetIndex].insertRule('.box--step::before {content: "' + translate('Step') + '";}') 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /lib/i18nInit.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Runs in: Main-Process 3 | * Init i18next and store instance on global i18n variable 4 | */ 5 | 6 | const i18next = require('i18next') 7 | const i18nextBackend = require('i18next-fs-backend') 8 | const { i18nextConfig } = require('../config/i18next.config.js') 9 | 10 | // Store and Init i18next 11 | function i18nInit (buildMenuFunction, mainWindow) { 12 | global.i18n = i18next 13 | global.i18n 14 | .use(i18nextBackend) 15 | .init(i18nextConfig) 16 | 17 | global.i18n.on('languageChanged', () => { 18 | buildMenuFunction() 19 | mainWindow.reload() 20 | }) 21 | } 22 | 23 | exports.i18nInit = i18nInit 24 | -------------------------------------------------------------------------------- /lib/index-challenge-handler.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Runs in: Renderer-Process 3 | * 4 | * This file is only required by the index page. 5 | * It touches the DOM by showing progress in challenge completion. 6 | * It also handles the clear buttons and writing to user-data. 7 | */ 8 | const path = require('path') 9 | const ipc = require('electron').ipcRenderer 10 | const userData = require(path.normalize(path.join(__dirname, '../../lib/user-data.js'))) 11 | 12 | const clearAllButtons = document.querySelectorAll('.js__clearAllChallenges') 13 | const pickupButton = document.getElementById('pgIndex__pickupButton') 14 | const progressCircles = document.querySelectorAll('.pgIndex__progress__dot') 15 | 16 | const IndexSectionStart = document.getElementById('pgIndex__section--start') 17 | const IndexSectionWip = document.getElementById('pgIndex__section--wip') 18 | const IndexSectionFinished = document.getElementById('pgIndex__section--finished') 19 | 20 | // Execute after DOM loaded. 21 | document.addEventListener('DOMContentLoaded', async () => { 22 | // Get stored challengeUserData & store Key-Array as often used 23 | const challengeUserData = await userData.getChallengeData() 24 | const challengeUserDataKeys = Object.keys(challengeUserData) 25 | 26 | // Go through the challenges in challengeUserData to see which are complete 27 | let countComplete = 0 28 | challengeUserDataKeys.forEach((challengeKey, index) => { 29 | if (challengeUserData[challengeKey].challengeComplete) { 30 | countComplete++ 31 | progressCircles[index].classList.add('complete') // Mark corresponding circle as complete 32 | if (index < challengeUserDataKeys.length - 1) { 33 | pickupButton.href = path.join(__dirname, '..', 'challenges', challengeUserDataKeys[index + 1] + '.html') // Set Link on pickupButton to next challenge 34 | } 35 | } 36 | }) 37 | 38 | // If no challenges are complete, show the start-section 39 | if (countComplete === 0) { 40 | showSection('start') 41 | } 42 | // If only some challenges are complete, show the wip-section 43 | if (countComplete !== 0 && countComplete !== challengeUserDataKeys.length) { 44 | showSection('wip') 45 | } 46 | // If all challenges are complete, show the finished-section 47 | if (countComplete === challengeUserDataKeys.length) { 48 | showSection('finished') 49 | } 50 | 51 | // Add Listeners to ClearAll Buttons 52 | clearAllButtons.forEach(btn => { 53 | btn.addEventListener('click', () => { 54 | ipc.send('dialog-clearAll') 55 | }) 56 | }) 57 | }) 58 | 59 | /* 60 | * Catch confirmed Clear-All Dialog 61 | * Clear all challenges on userData, progressCircles and show Start-Section 62 | */ 63 | ipc.on('confirm-clearAll', () => { 64 | // Clear stored userData 65 | userData.clearAllChallenges() 66 | 67 | // Clear all ProgressCircles in TopBar 68 | progressCircles.forEach(progressCircle => { 69 | progressCircle.classList.remove('complete') 70 | }) 71 | 72 | // Show Start-Index Page 73 | showSection('start') 74 | }) 75 | 76 | /* 77 | * Show exclusively the specified section. 78 | * section = 'start'|'wip'|'finished' 79 | */ 80 | async function showSection (section) { 81 | // Only accept specific section-keywords 82 | const accept = ['start', 'wip', 'finished'] 83 | 84 | // Log if wrong keyword 85 | if (accept.indexOf(section) < 0) { 86 | console.error('Wrong Section Keyword: ', section) 87 | } 88 | 89 | switch (section) { 90 | case 'finished': 91 | IndexSectionStart.style.display = 'none' 92 | IndexSectionWip.style.display = 'none' 93 | IndexSectionFinished.style.display = 'block' 94 | break 95 | case 'wip': 96 | IndexSectionStart.style.display = 'none' 97 | IndexSectionWip.style.display = 'block' 98 | IndexSectionFinished.style.display = 'none' 99 | break 100 | case 'start': 101 | default: 102 | IndexSectionStart.style.display = 'block' 103 | IndexSectionWip.style.display = 'none' 104 | IndexSectionFinished.style.display = 'none' 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /lib/renderer-helpers.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Runs in: Renderer-Process 3 | * 4 | * Helpers to be used within renderer-process. 5 | */ 6 | 7 | const ipc = require('electron').ipcRenderer 8 | 9 | // Just a small wrapper to ease translation-extraction. 10 | function translate (data, options = {}) { 11 | return ipc.sendSync('i18n.t', data, options) 12 | } 13 | 14 | exports.translate = translate 15 | -------------------------------------------------------------------------------- /lib/user-data.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Runs in: Renderer-Process 3 | * This file handles the user-data.json and saved-dir.json files 4 | * Uses electron-remote fs-module to still write out async, even when function gets terminated. 5 | */ 6 | const ipc = require('electron').ipcRenderer 7 | const path = require('path') 8 | 9 | const userDataPath = ipc.sendSync('getUserDataPath') 10 | const userDataFile = path.join(userDataPath, 'user-data.json') 11 | const savedDirFile = path.join(userDataPath, 'saved-dir.json') 12 | 13 | // Map challenge verify-directories 14 | const verifyDir = { 15 | repository: 'helloWorld', 16 | commit_to_it: 'helloWorld', 17 | remote_control: 'helloWorld', 18 | forks_and_clones: 'patchwork', 19 | branches_arent_just_for_birds: 'patchwork', 20 | pull_never_out_of_date: 'patchwork', 21 | merge_tada: 'patchwork' 22 | } 23 | 24 | /**** 25 | * user-data.json 26 | */ 27 | // Returns either an object out of all challengesData-objects or if called with parameter the object to the given challenge. 28 | async function getChallengeData (challenge = null) { 29 | const fileContent = await readData(userDataFile) 30 | if (challenge) { 31 | return fileContent[challenge] 32 | } 33 | return fileContent 34 | } 35 | // Store challenge verify-data 36 | async function storeChallengeResult (challenge, challengeComplete, verifyList) { 37 | const fileContent = await getChallengeData() 38 | fileContent[challenge].challengeComplete = challengeComplete 39 | fileContent[challenge].verifyList = verifyList 40 | writeData(userDataFile, fileContent) 41 | } 42 | // Clear challenge verify-data 43 | async function clearChallengeResult (challenge) { 44 | const fileContent = await getChallengeData() 45 | fileContent[challenge].challengeComplete = false 46 | fileContent[challenge].verifyList = [] 47 | writeData(userDataFile, fileContent) 48 | } 49 | // Clear all challenges - Set all challenges as incomplete and clear verifyLists 50 | async function clearAllChallenges () { 51 | const fileContent = await getChallengeData() 52 | Object.keys(fileContent).forEach(challenge => { 53 | fileContent[challenge].challengeComplete = false 54 | fileContent[challenge].verifyList = [] 55 | }) 56 | writeData(userDataFile, fileContent) 57 | } 58 | 59 | /**** 60 | * saved-dir.json 61 | */ 62 | async function getSavedDir (currentChallenge = null) { 63 | const fileContent = await readData(savedDirFile) 64 | if (currentChallenge) { 65 | return fileContent[verifyDir[currentChallenge]] 66 | } 67 | return fileContent 68 | } 69 | // Store directory 70 | async function updateSavedDir (currentChallenge, path) { 71 | const fileContent = await getSavedDir() 72 | fileContent[verifyDir[currentChallenge]] = path 73 | writeData(savedDirFile, fileContent) 74 | } 75 | 76 | /**** 77 | * Common function 78 | * Write out data to file 79 | * Writes out asynchronously. 80 | */ 81 | async function writeData (file, data) { 82 | ipc.invoke('fs-writeAsJson', file, data).then( 83 | // Resolved 84 | () => { 85 | // Silent Handle, everything as expected. 86 | }, 87 | // Rejected, sth. went wrong. 88 | (rejectErr) => { 89 | console.error('Some error occured while writing into', file, rejectErr) 90 | } 91 | ) 92 | } 93 | 94 | /**** 95 | * Common function 96 | * Read Data from File asynchronously, but wait for returned data. 97 | */ 98 | async function readData (file) { 99 | try { 100 | return await ipc.invoke('fs-readFromJson', file) 101 | } catch (err) { 102 | console.debug('Some error occured while reading from ', file, err) 103 | return {} 104 | } 105 | } 106 | 107 | exports.getChallengeData = getChallengeData 108 | exports.storeChallengeResult = storeChallengeResult 109 | exports.clearChallengeResult = clearChallengeResult 110 | exports.clearAllChallenges = clearAllChallenges 111 | exports.getSavedDir = getSavedDir 112 | exports.updateSavedDir = updateSavedDir 113 | -------------------------------------------------------------------------------- /lib/verify/branches_arent_just_for_birds.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | const path = require('path') 3 | const { addToVerifyList, checkChallengeComplete, execGit, getEmptyVerifyResult } = require('./verify-helpers') 4 | 5 | // get their username 6 | // verify branch matches username, case too. 7 | // verify they've pushed 8 | // check the file is in contributors directory 9 | 10 | module.exports = async function (repopath) { 11 | const result = getEmptyVerifyResult() 12 | let username = '' 13 | 14 | // path should be a directory 15 | if (!fs.lstatSync(repopath, { throwIfNoEntry: false }) || !fs.lstatSync(repopath).isDirectory()) { 16 | addToVerifyList('verify~Path is not a directory.', false, result.verifyList) 17 | return result 18 | } 19 | 20 | // Get stored username 21 | try { 22 | username = await execGit('config user.username', { cwd: repopath }) 23 | } catch (err) { 24 | addToVerifyList('Error: ' + err.message, false, result.verifyList) 25 | return result 26 | } 27 | 28 | let currentBranch = '' 29 | try { 30 | currentBranch = await execGit('rev-parse --abbrev-ref HEAD', { cwd: repopath }) 31 | 32 | const expectedBranch = 'add-' + username 33 | if (currentBranch.match(expectedBranch)) { 34 | addToVerifyList('verify~Found branch as expected!', true, result.verifyList) 35 | } else { 36 | addToVerifyList('verify~Branch name expected: {/expectedBranch/}', false, result.verifyList, { expectedBranch }) 37 | } 38 | } catch (err) { 39 | addToVerifyList('Error: ' + err.message, false, result.verifyList) 40 | return result 41 | } 42 | 43 | // see if repopath is already contributors folder & search file add-username 44 | let pathToCheck = '' 45 | if (repopath.match('contributors')) { 46 | pathToCheck = repopath 47 | } else { 48 | pathToCheck = path.join(repopath, '/contributors/') 49 | } 50 | try { 51 | const out = fs.readdirSync(pathToCheck) 52 | const allFiles = out.join() 53 | 54 | if (allFiles.match('add-' + username)) { 55 | addToVerifyList('verify~File in contributors folder!', true, result.verifyList) 56 | } else { 57 | addToVerifyList('verify~File not found in contributors folder.', false, result.verifyList) 58 | return result 59 | } 60 | } catch (err) { 61 | // TODO ENOENT: no such file or directory, scandir '/Users/jlord/jCode/.../contributors/' 62 | addToVerifyList('Error: ' + err.message, false, result.verifyList) 63 | return result 64 | } 65 | 66 | // Check push 67 | // TODO look into this, is using reflog the best way? what about origin? 68 | // sometimes it seems this doesn't work 69 | try { 70 | const log = await execGit('reflog show origin/' + currentBranch, { cwd: repopath }) 71 | 72 | if (log.match('update by push')) { 73 | addToVerifyList('verify~Changes have been pushed!', true, result.verifyList) 74 | } else { 75 | addToVerifyList('verify~Changes not pushed.', false, result.verifyList) 76 | } 77 | } catch (err) { 78 | console.log(err.message) 79 | addToVerifyList('verify~Changes not pushed.', false, result.verifyList) 80 | } 81 | 82 | result.challengeComplete = checkChallengeComplete(result.verifyList) 83 | return result 84 | } 85 | -------------------------------------------------------------------------------- /lib/verify/commit_to_it.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | const { addToVerifyList, checkChallengeComplete, execGit, getEmptyVerifyResult } = require('./verify-helpers') 3 | 4 | // check that they've commited changes 5 | module.exports = async function (path) { 6 | const result = getEmptyVerifyResult() 7 | 8 | // path should be a directory 9 | if (!fs.lstatSync(path, { throwIfNoEntry: false }) || !fs.lstatSync(path).isDirectory()) { 10 | addToVerifyList('verify~Path is not a directory.', false, result.verifyList) 11 | return result 12 | } 13 | 14 | try { 15 | const show = await execGit('status', { cwd: path }) 16 | 17 | if (show.match('No commits yet')) { 18 | addToVerifyList("verify~Can't find committed changes.", false, result.verifyList) 19 | } else if (show.match('nothing to commit')) { 20 | addToVerifyList('verify~Changes have been committed!', true, result.verifyList) 21 | } else { 22 | addToVerifyList('verify~Seems there are still changes to commit.', false, result.verifyList) 23 | } 24 | } catch (err) { 25 | addToVerifyList('Error: ' + err.message, false, result.verifyList) 26 | } 27 | 28 | result.challengeComplete = checkChallengeComplete(result.verifyList) 29 | return result 30 | } 31 | -------------------------------------------------------------------------------- /lib/verify/forks_and_clones.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | const { addToVerifyList, checkChallengeComplete, execGit, getEmptyVerifyResult } = require('./verify-helpers') 3 | 4 | // check that they've added the remote, that shows 5 | // that they've also then forked and cloned. 6 | // TODO Separate check on fork for nice feedback?! 7 | 8 | module.exports = async function (path) { 9 | const result = getEmptyVerifyResult() 10 | let username = '' 11 | 12 | // path should be a directory 13 | if (!fs.lstatSync(path, { throwIfNoEntry: false }) || !fs.lstatSync(path).isDirectory()) { 14 | addToVerifyList('verify~Path is not a directory.', false, result.verifyList) 15 | return result 16 | } 17 | 18 | // Get stored username 19 | try { 20 | username = await execGit('config user.username') 21 | } catch (err) { 22 | addToVerifyList('Error: ' + err.message, false, result.verifyList) 23 | return result 24 | } 25 | 26 | let remotes = [] 27 | try { 28 | const out = await execGit('remote -v', { cwd: path }) 29 | remotes = out.split('\n') 30 | 31 | if (remotes.length !== 4) { 32 | addToVerifyList('verify~Did not find 2 remotes set up.', false, result.verifyList) 33 | } 34 | } catch (err) { 35 | addToVerifyList('Error: ' + err.message, false, result.verifyList) 36 | } 37 | 38 | remotes.splice(1, 2) 39 | remotes.forEach(remote => { 40 | if (remote.match('origin')) { 41 | if (remote.match('github.com[:/]' + username + '/patchwork')) { 42 | addToVerifyList('verify~Origin points to your fork!', true, result.verifyList) 43 | } else { 44 | addToVerifyList('verify~No Origin remote found pointing to {/userrepo/}.', false, result.verifyList, { userrepo: username + '/patchwork' }) 45 | } 46 | } 47 | 48 | if (remote.match('upstream')) { 49 | if (remote.match('github.com[:/]jlord/patchwork')) { 50 | addToVerifyList('verify~Upstream remote set up!', true, result.verifyList) 51 | } else { 52 | addToVerifyList('verify~No Upstream remote found pointing to {/patchworkrepo/}.', false, result.verifyList, { patchworkrepo: 'jlord/patchwork' }) 53 | } 54 | } 55 | }) 56 | 57 | result.challengeComplete = checkChallengeComplete(result.verifyList) 58 | return result 59 | } 60 | -------------------------------------------------------------------------------- /lib/verify/get_git.js: -------------------------------------------------------------------------------- 1 | const { addToVerifyList, checkChallengeComplete, execGit, getEmptyVerifyResult } = require('./verify-helpers') 2 | 3 | // TODO 4 | // Think about how best to show errors to user 5 | 6 | module.exports = async function () { 7 | const result = getEmptyVerifyResult() 8 | 9 | // Check version, return if no git installed, as further checks are useless. 10 | try { 11 | const gitOutput = await execGit('--version') 12 | 13 | if (gitOutput.match('git version')) { 14 | addToVerifyList('verify~Found Git installed!', true, result.verifyList) 15 | } else { 16 | addToVerifyList('verify~Did not find Git installed.', false, result.verifyList) 17 | return result 18 | } 19 | } catch (err) { 20 | console.log(err) 21 | addToVerifyList('verify~Did not find Git installed.', false, result.verifyList) 22 | return result 23 | } 24 | 25 | // Check user.name 26 | try { 27 | const name = await execGit('config user.name') 28 | 29 | if (name !== '') { 30 | addToVerifyList('verify~Name Added!', true, result.verifyList) 31 | } else { 32 | addToVerifyList('verify~No name found.', false, result.verifyList) 33 | } 34 | } catch (err) { 35 | console.log(err) 36 | addToVerifyList('verify~No name found.', false, result.verifyList) 37 | } 38 | 39 | // Check user.email 40 | try { 41 | const email = await execGit('config user.email') 42 | 43 | if (email !== '') { 44 | addToVerifyList('verify~Email Added!', true, result.verifyList) 45 | } else { 46 | addToVerifyList('verify~No email found.', false, result.verifyList) 47 | } 48 | } catch (err) { 49 | console.log(err) 50 | addToVerifyList('verify~No email found.', false, result.verifyList) 51 | } 52 | 53 | // Check default branch 54 | try { 55 | const defaultBranch = await execGit('config init.defaultBranch') 56 | 57 | if (defaultBranch === 'main') { 58 | addToVerifyList('verify~Default branch is set to main!', true, result.verifyList) 59 | } else { 60 | addToVerifyList('verify~The default branch is not set to main.', false, result.verifyList) 61 | } 62 | } catch (err) { 63 | console.log(err) 64 | addToVerifyList('verify~The default branch is not set to main.', false, result.verifyList) 65 | } 66 | 67 | result.challengeComplete = checkChallengeComplete(result.verifyList) 68 | return result 69 | } 70 | -------------------------------------------------------------------------------- /lib/verify/githubbin.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios') 2 | const { addToVerifyList, checkChallengeComplete, execGit, getEmptyVerifyResult } = require('./verify-helpers') 3 | 4 | // Specifically request current REST-API v3 from Github 5 | const axiosOptions = { 6 | headers: { 7 | Accept: 'application/vnd.github.v3+json' 8 | } 9 | } 10 | 11 | // verify they set up git config 12 | // verify that user exists on GitHub (not case sensitve) 13 | // compare the two to make sure cases match 14 | 15 | module.exports = async function () { 16 | const result = getEmptyVerifyResult() 17 | let username = '' 18 | let githubUsername = '' 19 | 20 | // Check if username has been set on git-config 21 | try { 22 | username = await execGit('config user.username') 23 | 24 | if (username === '') { 25 | addToVerifyList('verify~No username found.', false, result.verifyList) 26 | return result 27 | } else { 28 | addToVerifyList('verify~Username added to Git config!', true, result.verifyList) 29 | } 30 | } catch (err) { 31 | // TODO Catch 'Command failed: /bin/sh -c git config user.username' 32 | addToVerifyList('verify~No username found.', false, result.verifyList) 33 | return result 34 | } 35 | 36 | // Check if respecitve user exists on github 37 | try { 38 | const response = await axios.get('https://api.github.com/users/' + username, axiosOptions) 39 | 40 | if (response.status === 200) { 41 | addToVerifyList("verify~You're on GitHub!", true, result.verifyList) 42 | githubUsername = response.data.login 43 | } else { 44 | addToVerifyList('verify~GitHub account matching stored Git-username was not found.', false, result.verifyList) 45 | return result 46 | } 47 | } catch (err) { 48 | if (err.response.status === 404) { 49 | addToVerifyList('verify~GitHub account matching stored Git-username was not found.', false, result.verifyList) 50 | return result 51 | } else { 52 | addToVerifyList('Error: ' + err.message, false, result.verifyList) 53 | return result 54 | } 55 | } 56 | 57 | // Check if stored username matches Github-Username - CaseSensitive! 58 | if (username === githubUsername) { 59 | addToVerifyList('verify~Username capitalisation identical on GitHub and Git config!', true, result.verifyList) 60 | } else { 61 | addToVerifyList('verify~GitHub & Git config usernames do not match (Take care on capitalisation!).', false, result.verifyList) 62 | } 63 | 64 | result.challengeComplete = checkChallengeComplete(result.verifyList) 65 | return result 66 | } 67 | -------------------------------------------------------------------------------- /lib/verify/its_a_small_world.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios') 2 | const { addToVerifyList, checkChallengeComplete, execGit, getEmptyVerifyResult } = require('./verify-helpers') 3 | 4 | const url = 'http://reporobot.jlord.us/collab?username=' 5 | 6 | module.exports = async function () { 7 | const result = getEmptyVerifyResult() 8 | let username = '' 9 | 10 | // Get stored username 11 | try { 12 | username = await execGit('config user.username') 13 | } catch (err) { 14 | addToVerifyList('Error: ' + err.message, false, result.verifyList) 15 | return result 16 | } 17 | 18 | // check that they've added RR as a collaborator 19 | try { 20 | const response = await axios.get(url + username) 21 | 22 | if (response.status === 200) { 23 | if (response.data.collab === true) { 24 | addToVerifyList('verify~Reporobot has been added!', true, result.verifyList) 25 | } else { 26 | // If they have a non 200 error, log it so that we can use 27 | // devtools to help user debug what went wrong 28 | if (response.data.error) { 29 | console.log('StatusCode:', response.status, 'Body:', response.data) 30 | } 31 | addToVerifyList('verify~Reporobot seems not to have access to your fork.', false, result.verifyList) 32 | } 33 | } 34 | } catch (err) { 35 | addToVerifyList('Error: ' + err.message, false, result.verifyList) 36 | } 37 | 38 | result.challengeComplete = checkChallengeComplete(result.verifyList) 39 | return result 40 | } 41 | -------------------------------------------------------------------------------- /lib/verify/merge_tada.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | const { addToVerifyList, checkChallengeComplete, execGit, getEmptyVerifyResult } = require('./verify-helpers') 3 | 4 | // check that they performed a merge 5 | // check there is not username named branch 6 | 7 | module.exports = async function (path) { 8 | const result = getEmptyVerifyResult() 9 | let username = '' 10 | 11 | // path should be a directory 12 | if (!fs.lstatSync(path, { throwIfNoEntry: false }) || !fs.lstatSync(path).isDirectory()) { 13 | addToVerifyList('verify~Path is not a directory.', false, result.verifyList) 14 | return result 15 | } 16 | 17 | // Get stored username 18 | try { 19 | username = await execGit('config user.username') 20 | } catch (err) { 21 | addToVerifyList('Error: ' + err.message, false, result.verifyList) 22 | return result 23 | } 24 | 25 | // Search log for merge activity 26 | try { 27 | const ref = await execGit('reflog -10', { cwd: path }) 28 | if (ref.match('merge add-' + username)) { 29 | addToVerifyList('verify~Your branch has been merged!', true, result.verifyList) 30 | } else { 31 | addToVerifyList('verify~No merge of your branch in history.', false, result.verifyList) 32 | } 33 | } catch (err) { 34 | addToVerifyList('Error: ' + err.message, false, result.verifyList) 35 | } 36 | 37 | // Check if branch still exists 38 | try { 39 | const branches = await execGit('branch', { cwd: path }) 40 | if (branches.match('add-' + username)) { 41 | addToVerifyList('verify~Uh oh, your branch is still there.', false, result.verifyList) 42 | } else { 43 | addToVerifyList('verify~Branch deleted!', true, result.verifyList) 44 | } 45 | } catch (err) { 46 | addToVerifyList('Error: ' + err.message, false, result.verifyList) 47 | } 48 | 49 | result.challengeComplete = checkChallengeComplete(result.verifyList) 50 | return result 51 | } 52 | -------------------------------------------------------------------------------- /lib/verify/pull_never_out_of_date.js: -------------------------------------------------------------------------------- 1 | const { addToVerifyList, checkChallengeComplete, execGit, getEmptyVerifyResult } = require('./verify-helpers') 2 | 3 | // do a fetch dry run to see if there is anything 4 | // to pull; if there is they haven't pulled yet 5 | 6 | module.exports = async function (path) { 7 | const result = getEmptyVerifyResult() 8 | 9 | try { 10 | const status = await execGit('fetch --dry-run', { cwd: path }) 11 | 12 | if (status === '') { 13 | addToVerifyList('verify~Up to date!', true, result.verifyList) 14 | } else { 15 | addToVerifyList('verify~There are changes to pull in.', false, result.verifyList) 16 | } 17 | } catch (err) { 18 | addToVerifyList('Error: ' + err.message, false, result.verifyList) 19 | } 20 | 21 | result.challengeComplete = checkChallengeComplete(result.verifyList) 22 | return result 23 | } 24 | -------------------------------------------------------------------------------- /lib/verify/remote_control.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | const { addToVerifyList, checkChallengeComplete, execGit, getEmptyVerifyResult } = require('./verify-helpers') 3 | 4 | module.exports = async function (path) { 5 | const result = getEmptyVerifyResult() 6 | 7 | // path should be a directory 8 | if (!fs.lstatSync(path, { throwIfNoEntry: false }) || !fs.lstatSync(path).isDirectory()) { 9 | addToVerifyList('verify~Path is not a directory.', false, result.verifyList) 10 | return result 11 | } 12 | 13 | // Checks for added remote 14 | try { 15 | const remotes = await execGit('remote -v', { cwd: path }) 16 | 17 | if (remotes.match('origin')) { 18 | addToVerifyList('verify~Found remote set up.', true, result.verifyList) 19 | } else { 20 | addToVerifyList('verify~Did not find remote origin.', false, result.verifyList) 21 | return result 22 | } 23 | } catch (err) { 24 | addToVerifyList('Error: ' + err.message, false, result.verifyList) 25 | return result 26 | } 27 | 28 | // check that they've made a push 29 | try { 30 | const ref = await execGit('reflog show origin/main', { cwd: path }) 31 | 32 | if (ref.match('update by push')) { 33 | addToVerifyList('verify~You pushed changes!', true, result.verifyList) 34 | } else { 35 | addToVerifyList('verify~No evidence of push.', false, result.verifyList) 36 | } 37 | } catch (err) { 38 | // TODO provide nicer error-message and only log the error? 39 | console.log(err.message) 40 | addToVerifyList('verify~No pushed changes found.', false, result.verifyList) 41 | } 42 | 43 | result.challengeComplete = checkChallengeComplete(result.verifyList) 44 | return result 45 | } 46 | -------------------------------------------------------------------------------- /lib/verify/repository.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | const { addToVerifyList, checkChallengeComplete, execGit, getEmptyVerifyResult } = require('./verify-helpers') 3 | 4 | module.exports = async function (path) { 5 | const result = getEmptyVerifyResult() 6 | 7 | // path should be a directory 8 | if (!fs.lstatSync(path, { throwIfNoEntry: false }) || !fs.lstatSync(path).isDirectory()) { 9 | addToVerifyList('verify~Path is not a directory.', false, result.verifyList) 10 | return result 11 | } 12 | 13 | try { 14 | const status = await execGit('status', { cwd: path }) 15 | 16 | if (status.match('On branch')) { 17 | addToVerifyList('verify~This is a Git repository!', true, result.verifyList) 18 | } else { 19 | addToVerifyList('verify~This folder is not being tracked by Git.', false, result.verifyList) 20 | } 21 | } catch (err) { 22 | addToVerifyList('verify~This folder is not being tracked by Git.', false, result.verifyList) 23 | } 24 | 25 | result.challengeComplete = checkChallengeComplete(result.verifyList) 26 | return result 27 | } 28 | -------------------------------------------------------------------------------- /lib/verify/requesting_you_pull_please.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios') 2 | const { addToVerifyList, checkChallengeComplete, execGit, getEmptyVerifyResult } = require('./verify-helpers') 3 | 4 | const url = 'http://reporobot.jlord.us/pr?username=' 5 | 6 | // check that they've submitted a pull request 7 | // to the original repository jlord/patchwork 8 | 9 | module.exports = async function () { 10 | const result = getEmptyVerifyResult() 11 | let username = '' 12 | 13 | // Get stored username 14 | try { 15 | username = await execGit('config user.username') 16 | } catch (err) { 17 | addToVerifyList('Error: ' + err.message, false, result.verifyList) 18 | return result 19 | } 20 | 21 | try { 22 | const response = await axios.get(url + username) 23 | 24 | if (response.status === 200) { 25 | const pr = response.data.pr 26 | if (pr) { 27 | addToVerifyList('verify~Found your pull request!', true, result.verifyList) 28 | } else { 29 | // TODO give user url to their repo also 30 | addToVerifyList('verify~No merged pull request found for username {/username/}. If you created a pull request on github, return there to see if reporobot left some comments.', 31 | false, result.verifyList, { username } 32 | ) 33 | } 34 | } 35 | } catch (err) { 36 | addToVerifyList('Error: ' + err.message, false, result.verifyList) 37 | } 38 | 39 | result.challengeComplete = checkChallengeComplete(result.verifyList) 40 | return result 41 | } 42 | -------------------------------------------------------------------------------- /lib/verify/verify-helpers.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Helpers for challenge-specific verification-scripts 3 | */ 4 | 5 | const { exec } = require('child_process') 6 | const { promisify } = require('util') 7 | const execPromise = promisify(exec) 8 | 9 | // Set process to use english language (necessary for text verification) 10 | process.env.LANG = 'C' 11 | 12 | /* 13 | * Add a formatted object to given verifyList. 14 | * Some kind of strange argument sorting: Message first, for easy parsing, data last for optional argument. 15 | */ 16 | function addToVerifyList (message, pass, list, data = {}) { 17 | list.push({ 18 | pass, 19 | message, 20 | data 21 | }) 22 | } 23 | 24 | /* 25 | * Checks if a challenge is complete, by reducing the pass-states of verifyList 26 | */ 27 | function checkChallengeComplete (verifyList) { 28 | return verifyList.reduce((complete, listItem) => { 29 | return complete && listItem.pass 30 | }, true) 31 | } 32 | 33 | /* 34 | * Wrapper to the exec call used in each of the verify scripts. 35 | */ 36 | async function execGit (command, options = {}) { 37 | // Encoding utf8 for usable output 38 | Object.assign(options, { 39 | encoding: 'utf8' 40 | }) 41 | 42 | // Use system-Git to execute command, trim output 43 | const execResult = await execPromise('git ' + command, options) 44 | return execResult.stdout.trim() 45 | } 46 | 47 | /* 48 | * Returns an empty verify-Result template. 49 | */ 50 | function getEmptyVerifyResult () { 51 | return { 52 | challengeComplete: false, 53 | verifyList: [] 54 | } 55 | } 56 | 57 | exports.addToVerifyList = addToVerifyList 58 | exports.checkChallengeComplete = checkChallengeComplete 59 | exports.execGit = execGit 60 | exports.getEmptyVerifyResult = getEmptyVerifyResult 61 | -------------------------------------------------------------------------------- /menus/darwin-menu.js: -------------------------------------------------------------------------------- 1 | const { nativeTheme } = require('electron') 2 | const path = require('path') 3 | 4 | module.exports = function (mainWindow, i18n) { 5 | const darwinMenu = [ 6 | { 7 | label: 'Git-it', 8 | submenu: [ 9 | { 10 | label: i18n.t('menu~About Git-it'), 11 | selector: 'orderFrontStandardAboutPanel:' 12 | }, 13 | { 14 | type: 'separator' 15 | }, 16 | { 17 | label: i18n.t('menu~Services'), 18 | submenu: [] 19 | }, 20 | { 21 | type: 'separator' 22 | }, 23 | { 24 | label: i18n.t('menu~Hide Git-it'), 25 | role: 'hide' 26 | }, 27 | { 28 | label: i18n.t('menu~Hide Others'), 29 | role: 'hideOthers' 30 | }, 31 | { 32 | label: i18n.t('menu~Show All'), 33 | role: 'unhide' 34 | }, 35 | { 36 | type: 'separator' 37 | }, 38 | { 39 | label: i18n.t('menu~Quit'), 40 | role: 'quit' 41 | } 42 | ] 43 | }, 44 | { 45 | label: i18n.t('menu~View'), 46 | submenu: [ 47 | { 48 | label: i18n.t('menu~Reload'), 49 | role: 'reload' 50 | }, 51 | { 52 | label: i18n.t('menu~Full Screen'), 53 | role: 'togglefullscreen' 54 | }, 55 | { 56 | label: i18n.t('menu~Minimize'), 57 | role: 'minimize' 58 | }, 59 | { 60 | label: i18n.t('menu~Use Dark Theme'), 61 | type: 'checkbox', 62 | accelerator: 'Ctrl+D', 63 | checked: nativeTheme.shouldUseDarkColors, 64 | click: event => { 65 | if (event.checked) { 66 | nativeTheme.themeSource = 'dark' 67 | } else { 68 | nativeTheme.themeSource = 'light' 69 | } 70 | } 71 | }, 72 | { 73 | type: 'separator' 74 | }, 75 | { 76 | label: i18n.t('menu~Bring All to Front'), 77 | role: 'front' 78 | }, 79 | { 80 | type: 'separator' 81 | }, 82 | { 83 | label: i18n.t('menu~Toggle Developer Tools'), 84 | role: 'toggleDevTools' 85 | } 86 | ] 87 | }, 88 | { 89 | label: i18n.t('menu~Window'), 90 | submenu: [ 91 | { 92 | label: i18n.t('menu~Home'), 93 | click: function () { 94 | const filepath = path.normalize(path.join(__dirname, '..', 'built', 'pages', 'index.html')) 95 | mainWindow.loadFile(filepath) 96 | } 97 | }, 98 | { 99 | label: i18n.t('menu~Dictionary'), 100 | click: function () { 101 | const filepath = path.normalize(path.join(__dirname, '..', 'built', 'pages', 'dictionary.html')) 102 | mainWindow.loadFile(filepath) 103 | } 104 | }, 105 | { 106 | label: i18n.t('menu~Resources'), 107 | click: function () { 108 | const filepath = path.normalize(path.join(__dirname, '..', 'built', 'pages', 'resources.html')) 109 | mainWindow.loadFile(filepath) 110 | } 111 | } 112 | ] 113 | }, 114 | { 115 | label: i18n.t('menu~Help'), 116 | submenu: [ 117 | { 118 | label: i18n.t('menu~App Repository'), 119 | click: function () { 120 | require('electron').shell.openExternal('http://github.com/Git-it-App/git-it-electron') 121 | } 122 | }, 123 | { 124 | label: i18n.t('menu~Open Issue'), 125 | click: function () { 126 | require('electron').shell.openExternal('https://github.com/Git-it-App/git-it-electron/issues/new') 127 | } 128 | }, 129 | { 130 | label: i18n.t('menu~About App'), 131 | click: function () { 132 | const filepath = path.normalize(path.join(__dirname, '..', 'built', 'pages', 'about.html')) 133 | mainWindow.loadFile(filepath) 134 | } 135 | } 136 | ] 137 | } 138 | ] 139 | return darwinMenu 140 | } 141 | -------------------------------------------------------------------------------- /menus/other-menu.js: -------------------------------------------------------------------------------- 1 | const { nativeTheme } = require('electron') 2 | const path = require('path') 3 | 4 | module.exports = function (mainWindow, i18n) { 5 | const otherMenu = [ 6 | { 7 | label: i18n.t('menu~&File'), 8 | submenu: [ 9 | { 10 | label: i18n.t('menu~Quit'), 11 | role: 'quit' 12 | } 13 | ] 14 | }, 15 | { 16 | label: i18n.t('menu~&View'), 17 | submenu: [ 18 | { 19 | label: i18n.t('menu~Reload'), 20 | role: 'reload' 21 | }, 22 | { 23 | label: i18n.t('menu~Full Screen'), 24 | role: 'togglefullscreen' 25 | }, 26 | { 27 | label: i18n.t('menu~Minimize'), 28 | role: 'minimize' 29 | }, 30 | { 31 | label: i18n.t('menu~Use Dark Theme'), 32 | type: 'checkbox', 33 | accelerator: 'Ctrl+D', 34 | checked: nativeTheme.shouldUseDarkColors, 35 | click: event => { 36 | if (event.checked) { 37 | nativeTheme.themeSource = 'dark' 38 | } else { 39 | nativeTheme.themeSource = 'light' 40 | } 41 | } 42 | }, 43 | { 44 | type: 'separator' 45 | }, 46 | { 47 | label: i18n.t('menu~Toggle Developer Tools'), 48 | role: 'toggleDevTools' 49 | } 50 | ] 51 | }, 52 | { 53 | label: i18n.t('menu~&Window'), 54 | submenu: [ 55 | { 56 | label: i18n.t('menu~Home'), 57 | click: function () { 58 | const filepath = path.normalize(path.join(__dirname, '..', 'built', 'pages', 'index.html')) 59 | mainWindow.loadFile(filepath) 60 | } 61 | }, 62 | { 63 | label: i18n.t('menu~Dictionary'), 64 | click: function () { 65 | const filepath = path.normalize(path.join(__dirname, '..', 'built', 'pages', 'dictionary.html')) 66 | mainWindow.loadFile(filepath) 67 | } 68 | }, 69 | { 70 | label: i18n.t('menu~Resources'), 71 | click: function () { 72 | const filepath = path.normalize(path.join(__dirname, '..', 'built', 'pages', 'resources.html')) 73 | mainWindow.loadFile(filepath) 74 | } 75 | } 76 | ] 77 | }, 78 | { 79 | label: i18n.t('menu~&Help'), 80 | submenu: [ 81 | { 82 | label: i18n.t('menu~App Repository'), 83 | click: function () { 84 | require('electron').shell.openExternal('https://github.com/Git-it-App/git-it-electron') 85 | } 86 | }, 87 | { 88 | label: i18n.t('menu~Open Issue'), 89 | click: function () { 90 | require('electron').shell.openExternal('https://github.com/Git-it-App/git-it-electron/issues/new') 91 | } 92 | }, 93 | { 94 | label: i18n.t('menu~About App'), 95 | click: function () { 96 | const filepath = path.normalize(path.join(__dirname, '..', 'built', 'pages', 'about.html')) 97 | mainWindow.loadFile(filepath) 98 | } 99 | } 100 | ] 101 | } 102 | ] 103 | return otherMenu 104 | } 105 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "git-it-electron", 3 | "productName": "Git-it", 4 | "version": "6.0.1", 5 | "description": "An open source desktop app for learning Git and GitHub", 6 | "author": "Jessica Lord", 7 | "contributors": [ 8 | "Jonas Rittershofer" 9 | ], 10 | "license": "BSD-2-Clause", 11 | "repository": { 12 | "type": "git", 13 | "url": "https://github.com/Git-it-App/git-it-electron.git" 14 | }, 15 | "bugs": { 16 | "url": "https://github.com/Git-it-App/git-it-electron/issues" 17 | }, 18 | "homepage": "https://github.com/Git-it-App/git-it-electron", 19 | "keywords": [ 20 | "Git", 21 | "GitHub", 22 | "Git-it", 23 | "tutorial", 24 | "guide", 25 | "learn", 26 | "desktop" 27 | ], 28 | "main": "main.js", 29 | "//": { 30 | "--no-sandbox": "The --no-sandbox option is temporarily used to fix the SUID sandbox issue on newer linux distributions. To be checked and removed again." 31 | }, 32 | "scripts": { 33 | "start": "electron-forge start -- --no-sandbox", 34 | "debug": "electron-forge start -- --no-sandbox -- --debug", 35 | "debug:none": "electron-forge start -- --no-sandbox -- --debug --none", 36 | "debug:some": "electron-forge start -- --no-sandbox -- --debug --some", 37 | "debug:all": "electron-forge start -- --no-sandbox -- --debug --all", 38 | "package": "electron-forge package", 39 | "make": "electron-forge make", 40 | "lint": "standard lib/*.js lib/verify/*.js menus/*.js main.js", 41 | "lint:fix": "standard --fix lib/*.js lib/verify/*.js menus/*.js main.js", 42 | "i18n:extract": "i18next -c ./config/i18next-parser.config.js" 43 | }, 44 | "devDependencies": { 45 | "@electron-forge/cli": "^7.8.1", 46 | "@electron-forge/maker-zip": "^7.8.1", 47 | "electron": "^36.5.0", 48 | "handlebars": "^4.7.8", 49 | "i18next-parser": "^9.3.0", 50 | "rimraf": "^6.0.1", 51 | "sass": "^1.89.2", 52 | "standard": "^17.1.2" 53 | }, 54 | "dependencies": { 55 | "axios": "^1.10.0", 56 | "i18next": "^25.3.1", 57 | "i18next-fs-backend": "^2.6.0" 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /resources/content/challenges/3_commit_to_it.hbs: -------------------------------------------------------------------------------- 1 |
2 |

3 |
4 | 5 |
6 |

7 |

8 |
9 | 10 |
11 |

12 |

13 |

14 |
15 | 16 |
17 |

18 |

20 | 21 |

22 | 23 |

24 |
git status
25 |

26 | 27 |

29 |
git add readme.txt
30 | 31 |

33 |
git commit -m "Created readme"
34 |
35 | 36 |
37 |

38 |

39 | 40 |

42 | 43 |

45 |
git diff
46 | 47 |

48 |
49 | 50 |
51 |

52 | {{{ verify_directory_button }}} 53 |
54 | 55 |
56 |
    57 |
  • 58 | 59 |
    git status
    60 |
  • 61 |
  • 62 | 63 |
    git diff
    64 |
  • 65 |
  • 66 | 67 |
    git add <FILENAME>
    68 |
  • 69 |
  • 70 | 71 |
    git add .
    72 |
  • 73 |
  • 74 | 75 |
    git commit -m "your commit message"
    76 |
  • 77 |
78 |
79 | -------------------------------------------------------------------------------- /resources/content/challenges/4_githubbin.hbs: -------------------------------------------------------------------------------- 1 |
2 |

3 |
4 | 5 |
6 |

7 | 8 |

9 | 10 |

11 |
12 | 13 |
14 |

15 | 16 |

21 |
22 | 23 |
24 |

25 |

31 | 32 |

33 |
git config --global user.username <UserName>
34 | 35 |

36 |
git config --global user.username
37 |
38 | 39 |
40 |

41 | {{{ verify_button }}} 42 |
43 | 44 |
45 |

47 |
48 | 49 |
50 |

51 | 52 |

53 |

54 |
git config --global user.username <UserName>
55 |

56 |
57 | -------------------------------------------------------------------------------- /resources/content/challenges/8_its_a_small_world.hbs: -------------------------------------------------------------------------------- 1 |
2 |

3 |
4 | 5 |
6 |

7 |

8 | 9 |

11 | 12 |
13 | A photo of a cat with a space helment drawn on. This is Reporobot the cat and your collaborator 15 |
20 |
21 |
22 | 23 |
24 |

25 |

26 | 27 |

29 | 30 |
https://github.com/YOURUSERNAME/patchwork/settings/access
31 |
32 | 33 |
34 |

35 | {{{ verify_button }}} 36 |
37 | -------------------------------------------------------------------------------- /resources/content/challenges/9_pull_never_out_of_date.hbs: -------------------------------------------------------------------------------- 1 |
2 |

3 |
4 | 5 |
6 |

7 |

9 | 10 |
11 | 12 | 13 | A diagram shows a computer pulling information down from a repository's website 15 | 16 |
17 |
18 |
19 | 20 |
21 |

22 |

23 | 24 |
git pull <REMOTENAME> <BRANCHNAME>
25 | 26 |

27 | 28 |

29 |
30 | 31 |
32 |

33 | {{{ verify_directory_button }}} 34 |
35 | 36 |
37 |
    38 |
  • 39 | 40 |
    git status
    41 |
  • 42 |
  • 43 | 44 |
    git pull <REMOTENAME> <REMOTEBRANCH>
    45 |
  • 46 |
  • 47 | 48 |
    git fetch --dry-run
    49 |
  • 50 |
51 |
52 | -------------------------------------------------------------------------------- /resources/content/pages/about.hbs: -------------------------------------------------------------------------------- 1 |

2 |

3 | 4 |

5 | 6 |

7 | 8 |

9 | 10 |

11 | 12 |

19 | -------------------------------------------------------------------------------- /resources/content/partials/chal-footer.hbs: -------------------------------------------------------------------------------- 1 |
13 | -------------------------------------------------------------------------------- /resources/content/partials/chal-sidebar.hbs: -------------------------------------------------------------------------------- 1 | 18 | -------------------------------------------------------------------------------- /resources/content/partials/header.hbs: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 7 |
8 |
9 | Git-it 10 | {{#if pageTitle}} 11 | | 12 | {{ pageTitle }} 13 | {{/if}} 14 |
15 |
16 | -------------------------------------------------------------------------------- /resources/content/partials/verify-button.hbs: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |
5 |
6 |
7 |
    8 | 9 |
    10 | -------------------------------------------------------------------------------- /resources/content/partials/verify-directory-button.hbs: -------------------------------------------------------------------------------- 1 |
    2 | 3 | 4 |
    5 |
    6 |
    7 |
    8 | 9 |
    10 | 11 | 12 |
    13 |
      14 | 15 |
      16 | -------------------------------------------------------------------------------- /resources/i18n/de-DE/about.json: -------------------------------------------------------------------------------- 1 | { 2 | "About Git-it": "Über Git-it", 3 | "Git-it teaches the essential, everyday Git commands developers use everyday along with the GitHub Flow, the way developers collaborate on GitHub.": "Git-it lehrt die essentiellen Git-Grundlagen, die Entwickler im täglichen Git-Verlauf nutzen um damit z.B. auf GitHub zusammenarbeiten.", 4 | "Some challenges require an internet connection, so you'll need to be online to complete Git-it. But you can always open the app and view the challenges and resources offline.": "Manche Aufgaben benötigen eine Internetverbindung. Um Git-it also vollständig absolvieren zu können, solltest du online sein. Alle Aufgaben und Informationen sind aber immer offline in der App verfügbar.", 5 | "Real Development Environment": "Reale Entwicklungsumgebung", 6 | "Git-it uses the real terminal, Git and GitHub (rather than emulating them). When you finish you'll have real repositories on your GitHub account and green squares on your contribution chart!": "Git-it verwendet das reale Terminal, Git und GitHub (anstatt sie zu emulieren). Wenn du Git-it beendet hast, sind Repositories auf deinem GitHub-Account verfügbar und deine Beitragsstatistik zeigt bereits erste grüne Kästchen!", 7 | "The Code that made Git-it": "Der Code, aus dem Git-it besteht", 8 | "This app is built with HTML, CSS and JS and uses the {/lnk_electron/}Electron{/lnk_e/} library. All of the code for Git-it is online in its {/lnk_repo/}repository on GitHub{/lnk_e/}. Git-it is a labor of love, originally created by Jessica Lord ({/lnk_jlord/}@jlord{/lnk_e/}) and kind contributors.": "Diese App ist in HTML, CSS und JS entwickelt und verwendet die {/lnk_electron/}Electron{/lnk_e/} Bibliothek. Der gesamte Code für Git-it ist im {/lnk_repo/}Repository auf GitHub{/lnk_e/} online verfügbar. Git-it ist ein Dienst aus Liebe, ursprünglich erstellt von Jessica Lord ({/lnk_jlord/}@jlord{/lnk_e/}) unter Mithilfe von freundlichen Mitwirkenden." 9 | } 10 | -------------------------------------------------------------------------------- /resources/i18n/de-DE/ch08.json: -------------------------------------------------------------------------------- 1 | { 2 | "Add a collaborator to your project.": "Füge einen Mitarbeiter zu deinem Projekt hinzu.", 3 | "Social Coding": "Soziales Programmieren", 4 | "Working with others is one of the best things about GitHub because it is easier to work from any place or timezone with someone else.": "Mit anderen Nutzern zusammenarbeiten zu können ist eines der besten Features von GitHub. Personen aus unterschiedlichsten Orten und Zeitzonen können hier gemeinsam an einem Projekt arbeiten.", 5 | "{/str/}Collaborators{/str_e/} are other GitHub users who are given permission to make edits to a repository owned by someone else. You may also hear the term {/str/}contributor{/str_e/}, this describes another GitHub user who has made contributions, through a Fork and Pull Request, to a project.": "{/str/}Collaborators{/str_e/} (dt. Mitarbeiter) sind GitHub-Nutzer, denen es erlaubt wird im Repository eines anderen Nutzers Änderungen vorzunehmen. Auch der Begriff {/str/}contributor{/str_e/} (dt. Mitwirkender) taucht immer wieder auf. Dies beschreibt einen GitHub-Nutzer, der durch einen Fork und Pull-Request (s. Aufgabe 10) zum Projekt beigetragen hat.", 6 | "{/lnk_reporobot/}@reporobot{/lnk_e/} is a robot from outer space that loves collaborating on repos.": "{/lnk_reporobot/}@reporobot{/lnk_e/} ist ein Roboter aus dem All, der sehr gerne an Repositorys mitarbeitet.", 7 | "Hello, Repo Robot!": "Herzlich Willkommen, RepoRobot!", 8 | "To add collaborators to one of your projects, visit the repository's page on your GitHub account and click the 'Settings' tab in the menu in the upper part of the page. Then select the 'Collaborators' option and click on 'Add people'. Type the username into the text box, select the right user and finally add the collaborator to your repository by clicking the green button.": "Um einen Mitarbeiter zu deinem Projekt hinzuzufügen, öffne die Repository-Seite in deinem GitHub-Account und klicke auf den Einstellungs-Button ('Settings') im oberen Menü der Seite. Wähle die Option 'Collaborators' aus und klicke auf 'Add People' (dt. 'Menschen hinzufügen'). Tippe den Nutzernamen in die Textbox ein, wähle den richtigen Nutzer aus und füge den Mitarbeiter schließlich zu deinem Repository hinzu, indem du auf das grüne Feld klickst.", 9 | "{/str/}Now go to your forked Patchwork repository's page on GitHub and add 'RepoRobot' as a collaborator.{/str_e/} The URL should look like this, but with your own username.": "{/str/}Öffne nun die Seite deines abgespalteten Patchwork-Repository auf GitHub und füge 'RepoRobot' als Mitarbeiter hinzu.{/str_e/} Die URL sollte in etwa so aussehen, entsprechend mit deinem eigenen Nutzernamen:" 10 | } 11 | -------------------------------------------------------------------------------- /resources/i18n/de-DE/ch09.json: -------------------------------------------------------------------------------- 1 | { 2 | "Keep your file up to date by pulling in changes from collaborators.": "Halte deine lokalen Dateien aktuell, indem du die Änderungen von Mitarbeitern zu dir ziehst.", 3 | "Pulling from a Remote": "Von einem Remote ziehen", 4 | "If you're working on something with someone else you need to stay up to date with the latest changes. So you'll want to {/str/}pull{/str_e/} in any changes that may have been pushed to the central GitHub repository.": "Wenn du mit Anderen gemeinsam an einem Projekt arbeitest, sollten deine Dateien natürlich immer mit allen Änderungen synchron bleiben. Änderungen, die auf dem zentralen GitHub-Repository gemacht wurden solltest du dir also regelmäßig in dein lokales Repository ziehen (engl. {/str/}pull{/str_e/}).", 5 | "If someone else {/str/}pushed{/str_e/} changes to the {/str/}remote{/str_e/} repository (on GitHub), you might want to {/str/}pull{/str_e/} these changes into your {/str/}local{/str_e/} repository.": "Wenn eine andere Person Änderungen zum {/str/}Remote{/str_e/}-Repository (bei GitHub) geschoben hat (engl. {/str/}push{/str_e/}), möchtest du diese Änderungen wahrscheinlich in dein {/str/}lokales{/str_e/} Repository ziehen (engl. {/str/}pull{/str_e/}).", 6 | "What has Reporobot been up to?": "Was hat Reporobot vor?", 7 | "See if Reporobot has made any changes to your branch by pulling in any changes from the remote named 'origin' on GitHub:": "Sieh nach, ob Reporobot in deinem Branch etwas geändert hat, indem du die Änderungen vom Remote 'origin' (bei GitHub) auf deinen Computer ziehst:", 8 | "If nothing's changed, it will tell you 'Already up-to-date'. If there are changes, Git will merge those changes into your local version.": "Wenn sich nichts geändert hat, wird Git dir 'Already up-to-date' (dt. bereits aktuell) zurückgeben. Falls aber etwas geändert wurde, pflegt Git diese Änderungen automatisch in deine lokale Version ein.", 9 | "Did Reporobot make changes? Git tells you where changes were made. You can open that file and see Reporobot's updates. Surprise, Reporobot is an artist!": "Hat Reporobot etwas geändert? Git sagt dir, wo Änderungen erfolgt sind. Du kannst die Datei öffnen und Reporobot's Änderungen anschauen. Überraschung, Reporobot ist ein Künstler!", 10 | "Check Git status": "Prüfe den Git Status", 11 | "Pull in changes from a remote branch": "Ziehe Änderungen von einem Remote Branch", 12 | "See changes to the remote before you pull in": "Schaue dir die Änderungen an, bevor du sie vom Remote ziehst" 13 | } 14 | -------------------------------------------------------------------------------- /resources/i18n/de-DE/ch11.json: -------------------------------------------------------------------------------- 1 | { 2 | "Merge your branch locally, delete the branch and pull from upstream.": "Führe deine Branches lokal zusammen, lösche den dann überflüssigen Branch und ziehe vom Remote 'upstream'.", 3 | "Cleaning up": "Aufräumen", 4 | "Once you don't need branches anymore you can delete them locally and remotely. This is helpful so that you don't end up with a pile of old branches.": "Wenn du Branches nicht mehr benötigst kannst du sie sowohl lokal, als auch auf dem Remote löschen. Dies hilft dir nicht irgendwann mit einem Haufen alter Branches dazustehen.", 5 | "Merge Locally": "Führe deine Branches lokal zusammen", 6 | "Your pull request has been merged! Your branch was merged into the 'gh-pages' branch of the original on GitHub. You can merge your branch locally, too.": "Dein Pull-Request wurde integriert! Dein Branch wurde in den Branch 'gh-pages' des originalen GitHub-Repository integriert (engl. merge). Du kannst nun deinen lokalen Branch auch im lokalen Repository integrieren.", 7 | "First, move into the branch you want to merge into — in this case, the branch 'gh-pages'.": "Wähle dazu zuerst den Branch aus, in den du hinein integrieren möchtest. In unserem Fall der Branch 'gh-pages'.", 8 | "Now tell Git what branch you want to merge in — in this case, your feature branch that begins with {/dqm/}add-{/dqm/}.": "Nun sage Git, welchen Branch du integrieren möchtest. In unserem Fall ist das dein Branch {/dqm/}add-{/dqm/}.", 9 | "Tidy up by deleting your feature branch. Now that it has been merged you don't really need it around.": "Räume auf, indem du den jetzt integrierten Branch löschst. Da die Änderungen zusammengeführt wurden brauchst du den Branch nicht mehr, deine Änderungen sind jetzt im anderen Branch integriert.", 10 | "You can also delete the branch from your remote on GitHub:": "Du kannst den Branch auch von deinem Remote-Repository auf GitHub löschen:", 11 | "Pull from Upstream": "Vom Remote 'upstream' ziehen", 12 | "And last but not least, the original has changed since your pull request was merged — Reporobot added your name to the website! If you pull in these changes from upstream you'll be up to date and have that version too. You can actually see it live as well at: yourusername.github.io/patchwork.": "Letztlich hat sich auch das originale Repository verändert, da dein Pull-Request akzeptiert wurde. - Reporobot hat deinen Namen zur Webseite hinzugefügt! Wenn du diese Änderungen nun vom originalen Repository (Remote 'upstream') ziehst, wird dein Repository wieder aktuell sein und die Webseite die Version mit deinem Namen anzeigen. Du kannst die Webseite deines Repository unter der folgenden URL anschauen: DeinNutzerName.github.io/patchwork.", 13 | "To pull from the original upstream:": "Um vom originalen Repository 'upstream' zu ziehen:", 14 | "Congratulations!": "Herzlichen Glückwunsch!", 15 | "You've created local repositories, remote repositories, worked with a collaborator, pushed, pulled and joined the millions of others developing and enriching open source!": "Du hast lokale Repositorys und Remote-Repositorys erstellt, mit Mitarbeitern zusammen gearbeitet, Änderungen zum Server geschoben und von dort gezogen und bist der GitHub-Gemeinschaft von Millionen anderer Entwickler beigetreten, die Open-Source Software bereichern!", 16 | "Visit {/lnk_patchwork/}jlord.github.io/patchwork{/lnk_e/} to see your name incorporated! Looking to keep going? Checkout the {/lnk_next/}What Next{/lnk_e/} section on the resources page in this app.": "Öffne {/lnk_patchwork/}jlord.github.io/patchwork{/lnk_e/} um die Aufnahme deines Namens in das Verzeichnis der Workshop-Absolventen zu sehen! Du willst weitermachen? Schau dir den Abschnitt {/lnk_next/}'Und was jetzt?'{/lnk_e/} auf der Ressourcen-Seite dieser App an!", 17 | "Merge a branch into current branch": "Integriere einen Branch in den aktuellen Branch", 18 | "Change the branch you're working on": "Wähle den Branch aus, auf dem du aktuell arbeitest", 19 | "Delete a local branch": "Lösche den lokalen Branch", 20 | "Delete a remote branch": "Lösche einen Remote-Branch", 21 | "Pull from a remote branch": "Ziehe von einem Remote-Branch" 22 | } 23 | -------------------------------------------------------------------------------- /resources/i18n/de-DE/common.json: -------------------------------------------------------------------------------- 1 | { 2 | "Change Directory": "Verzeichnis wechseln", 3 | "Goal": "Ziel", 4 | "Didn't Pass?": "Da ging was schief...?", 5 | "Tip": "Tipp", 6 | "Step": "Schritt", 7 | "Yes": "Ja", 8 | "No": "Nein", 9 | "Confirm Clearing Statuses": "Bestätigung Status löschen", 10 | "Are you sure you want to clear the status for every challenge?": "Bist du sicher, dass du den Status aller Aufgaben zurücksetzen möchtest?", 11 | "Challenges": "Aufgaben" 12 | } 13 | -------------------------------------------------------------------------------- /resources/i18n/de-DE/dictionary.json: -------------------------------------------------------------------------------- 1 | { 2 | "Below are the terminal and Git commands used in the Git-it challenges.": "Aufgelistet sind die Terminal- und Git-Kommandos, die in den Git-it Aufgaben verwendet werden.", 3 | "Bash/Terminal Basics": "Bash/Terminal Grundlagen", 4 | "Make a new folder (aka make directory)": "Erstelle einen neuen Ordner (aka make directory)", 5 | "Navigate into an existing folder (aka 'change directory')": "Navigiere in einen existierenden Ordner (aka change directory)", 6 | "List the items in a folder": "Liste die Elemente in einem Ordner auf", 7 | "Configuring Git": "Git konfigurieren", 8 | "Check Git version": "Überprüfe die Git-Version", 9 | "Set your name": "Speichere deinen Namen", 10 | "Set your email": "Speichere deine Email-Adresse", 11 | "Set the default branch name to 'main'": "Setze den Standard Branch als 'main' fest.", 12 | "Set your Github account (case sensitive)": "Speichere deinen GitHub Account (Groß- & Kleinschreibung beachten!)", 13 | "Git Basics": "Git Grundlagen", 14 | "Turn Git on for a folder": "Initialisiere Git in einem Ordner", 15 | "Check status of changes to a repository": "Überprüfe den Status der Veränderungen deines Repository", 16 | "View changes to files": "Lass dir die Unterschiede anzeigen", 17 | "Add a file's changes to be committed": "Füge die Änderungen an einer Datei zum nächsten Commit hinzu.", 18 | "To add all files changes": "Um alle geänderten Dateien hinzuzufügen", 19 | "To commit (aka save) the changes you've added with a short message describing the changes": "Speichere ('commit') die Änderungen mit einer kurzen Nachricht zur Beschreibung", 20 | "Copy a repository to your computer": "Klone ein Repository auf deinen Computer", 21 | "Git Branches": "Git Branches", 22 | "Create a new branch": "Erzeugen einen neuen Branch", 23 | "Move onto a branch": "Wähle einen Branch aus", 24 | "You can create and switch to a branch in one line": "Du kannst einen Branch mit einem einzigen Kommando erzeugen und auswählen", 25 | "List the branches": "Liste die verfügbaren Branches auf", 26 | "Rename a branch you're currently on": "Benenne den aktuell ausgewählten Branch um", 27 | "Git Remotes": "Git Remotes", 28 | "Add remote connections": "Füge Remote-Verbindungen hinzu", 29 | "Set a URL to a remote": "Speichere die URL zu einem existierenden Remote", 30 | "View remote connections": "Liste die gespeicherten Remote-Verbindungen auf", 31 | "Pulling in Git": "Ziehen(pull) vom Git-Server", 32 | "Pull in changes": "Ziehe Änderungen vom Server", 33 | "Pull in changes from a remote branch": "Ziehe Änderungen von einem Remote Branch", 34 | "See changes to the remote before you pull in": "Schaue dir die Änderungen an, bevor du sie vom Remote ziehst", 35 | "Push & Merge in Git": "Schieben(push) & Integrieren(merge) in Git", 36 | "Push changes": "Schiebe Änderungen auf den Server", 37 | "Merge a branch into current branch": "Integriere einen Branch in den aktuellen Branch", 38 | "Deleting Remotes and Branches in Git": "Remotes und Branches löschen", 39 | "Delete a local branch": "Lösche den lokalen Branch", 40 | "Delete a remote branch": "Lösche einen Remote-Branch" 41 | } 42 | -------------------------------------------------------------------------------- /resources/i18n/de-DE/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "Challenges completed:": "Abgeschlossene Aufgaben:", 3 | "Welcome!": "Herzlich Willkommen!", 4 | "Git-it teaches the basics of using Git and GitHub. These basics aren't merely beginner Git and GitHub skills, they are the commands and steps you'll use over and over as in your awesome social coding + version controlled future.": "Git-it erklärt dir die Grundlagen der Nutzung von Git und GitHub. Dabei sind diese Grundlagen nicht nur einfaches Anfänger-Wissen, sondern es handelt sich um die Kommandos und Abläufe, die du als Entwickler in der Versionsverwaltung tagtäglich und immer wieder verwenden wirst!", 5 | "But Wait – There's More!": "Moment! - Bevor es losgeht", 6 | "You can also complete Git-it in several other languages, just select the language you want from the menu in the upper left.": "Du kannst Git-it auch in verschiedenen anderen Sprachen absolvieren, wähle einfach deine bevorzugte Sprache aus dem Menü oben aus!", 7 | "The 'Window' option in the application menu will take you to the {/lnk_dictionary/}Dictionary{/lnk_e/}, {/lnk_resources/}Resources{/lnk_e/} and {/lnk_about/}About{/lnk_e/} page.": "Der Menüpunkt 'Fenster' im Hauptmenü wird dich zu den Seiten {/lnk_dictionary/}Wörterbuch{/lnk_e/}, {/lnk_resources/}Ressourcen{/lnk_e/} und {/lnk_about/}Über die App{/lnk_e/} bringen.", 8 | "Start challenge one!": "Beginne mit der ersten Aufgabe!", 9 | "On your way!": "Du bist auf einem guten Weg!", 10 | "You're making progress, keep going and pick up where you left off.": "Du machst Fortschritte! - Bleibe dran und mache dort weiter wo du aufgehört hast.", 11 | "Pick up where you left off!": "Aufgaben fortsetzen!", 12 | "Congratulations!": "Herzlichen Glückwunsch!", 13 | "You finished the challenges and are primed for social coding—so what's next?": "Du hast alle Aufgaben erfüllt und bist vorbereitet für gemeinsame Entwicklungen - Und was jetzt?", 14 | "Ideas for beginner projects": "Ideen für erste Projekte", 15 | "Clear and start over": "Status zurücksetzen und neustarten" 16 | } 17 | -------------------------------------------------------------------------------- /resources/i18n/de-DE/menu.json: -------------------------------------------------------------------------------- 1 | { 2 | "About Git-it": "Über Git-it", 3 | "Services": "Services", 4 | "Hide Git-it": "Git-it verstecken", 5 | "Hide Others": "Andere verstecken", 6 | "Show All": "Alle anzeigen", 7 | "Quit": "Beenden", 8 | "View": "Ansicht", 9 | "Reload": "Neu laden", 10 | "Full Screen": "Vollbild", 11 | "Minimize": "Minimieren", 12 | "Use Dark Theme": "Dunkles Erscheinungsbild nutzen", 13 | "Bring All to Front": "Alles in den Vordergrund", 14 | "Toggle Developer Tools": "Entwicklertools de-/aktivieren", 15 | "Window": "Fenster", 16 | "Home": "Startseite", 17 | "Dictionary": "Wörterbuch", 18 | "Resources": "Ressourcen", 19 | "Help": "Hilfe", 20 | "App Repository": "App Repository", 21 | "Open Issue": "Problem melden", 22 | "About App": "Über die App", 23 | "&File": "&Datei", 24 | "&View": "&Ansicht", 25 | "&Window": "&Fenster", 26 | "&Help": "&Hilfe" 27 | } 28 | -------------------------------------------------------------------------------- /resources/i18n/en-US/about.json: -------------------------------------------------------------------------------- 1 | { 2 | "About Git-it": "About Git-it", 3 | "Git-it teaches the essential, everyday Git commands developers use everyday along with the GitHub Flow, the way developers collaborate on GitHub.": "Git-it teaches the essential, everyday Git commands developers use everyday along with the GitHub Flow, the way developers collaborate on GitHub.", 4 | "Some challenges require an internet connection, so you'll need to be online to complete Git-it. But you can always open the app and view the challenges and resources offline.": "Some challenges require an internet connection, so you'll need to be online to complete Git-it. But you can always open the app and view the challenges and resources offline.", 5 | "Real Development Environment": "Real Development Environment", 6 | "Git-it uses the real terminal, Git and GitHub (rather than emulating them). When you finish you'll have real repositories on your GitHub account and green squares on your contribution chart!": "Git-it uses the real terminal, Git and GitHub (rather than emulating them). When you finish you'll have real repositories on your GitHub account and green squares on your contribution chart!", 7 | "The Code that made Git-it": "The Code that made Git-it", 8 | "This app is built with HTML, CSS and JS and uses the {/lnk_electron/}Electron{/lnk_e/} library. All of the code for Git-it is online in its {/lnk_repo/}repository on GitHub{/lnk_e/}. Git-it is a labor of love, originally created by Jessica Lord ({/lnk_jlord/}@jlord{/lnk_e/}) and kind contributors.": "This app is built with HTML, CSS and JS and uses the {/lnk_electron/}Electron{/lnk_e/} library. All of the code for Git-it is online in its {/lnk_repo/}repository on GitHub{/lnk_e/}. Git-it is a labor of love, originally created by Jessica Lord ({/lnk_jlord/}@jlord{/lnk_e/}) and kind contributors." 9 | } 10 | -------------------------------------------------------------------------------- /resources/i18n/en-US/ch03.json: -------------------------------------------------------------------------------- 1 | { 2 | "Create a file in your new repository, add something to that file and commit that change with Git.": "Create a file in your new repository, add something to that file and commit that change with Git.", 3 | "Commits": "Commits", 4 | "Commits are core to using Git. They are the moments in which you save and describe the work you've done. They are the ticks in the timeline of your project's history.": "Commits are core to using Git. They are the moments in which you save and describe the work you've done. They are the ticks in the timeline of your project's history.", 5 | "Create a New File": "Create a New File", 6 | "Now that you've got a repository started let's add a file to it.": "Now that you've got a repository started let's add a file to it.", 7 | "Open your text editor and create a new empty file. Now write a little bit of text, perhaps type {/dqm/}Hello!{/dqm/}, and save the file as 'readme.txt' in the 'hello-world' folder you created in the last challenge.": "Open your text editor and create a new empty file. Now write a little bit of text, perhaps type {/dqm/}Hello!{/dqm/}, and save the file as 'readme.txt' in the 'hello-world' folder you created in the last challenge.", 8 | "Check Status + Add and Commit Changes": "Check Status + Add and Commit Changes", 9 | "Next check the {/str/}status{/str_e/} of your repository to find out if there have been changes. You know you have changed something, but does Git?": "Next check the {/str/}status{/str_e/} of your repository to find out if there have been changes. You know you have changed something, but does Git?", 10 | "Make sure you're still within your 'hello-world' directory when you're running these commands. Use Git to see what changed in your repository:": "Make sure you're still within your 'hello-world' directory when you're running these commands. Use Git to see what changed in your repository:", 11 | "First, check the status:": "First, check the status:", 12 | "Git should tell you that a file has been added.": "Git should tell you that a file has been added.", 13 | "Then {/str/}add{/str_e/} the file you just created so that it becomes a part of the changes you will {/str/}commit{/str_e/} (aka save) with Git:": "Then {/str/}add{/str_e/} the file you just created so that it becomes a part of the changes you will {/str/}commit{/str_e/} (aka save) with Git:", 14 | "Finally, {/str/}commit{/str_e/} those changes to the repository's history with a short (m) message describing the updates.": "Finally, {/str/}commit{/str_e/} those changes to the repository's history with a short (m) message describing the updates.", 15 | "Step: Make More Changes": "Step: Make More Changes", 16 | "Now add another line to 'readme.txt' and save the file again.": "Now add another line to 'readme.txt' and save the file again.", 17 | "In terminal, you can view the {/str/}diff{/str_e/}erence between the file now and how it was at your last commit.": "In terminal, you can view the {/str/}diff{/str_e/}erence between the file now and how it was at your last commit.", 18 | "Tell Git to show you the {/str/}diff{/str_e/}:": "Tell Git to show you the {/str/}diff{/str_e/}:", 19 | "Now with what you just learned above, commit this latest change.": "Now with what you just learned above, commit this latest change.", 20 | "Check status of changes to a repository": "Check status of changes to a repository", 21 | "View changes to files": "View changes to files", 22 | "Add a file's changes to be committed": "Add a file's changes to be committed", 23 | "To add all files changes": "To add all files changes", 24 | "To commit (aka save) the changes you've added with a short message describing the changes": "To commit (aka save) the changes you've added with a short message describing the changes" 25 | } 26 | -------------------------------------------------------------------------------- /resources/i18n/en-US/ch04.json: -------------------------------------------------------------------------------- 1 | { 2 | "Create a GitHub account and add your username to your Git config.": "Create a GitHub account and add your username to your Git config.", 3 | "Working Better, Together": "Working Better, Together", 4 | "The repository you've created so far is just on your computer, which is handy, but makes it pretty hard to share and work on with others. No worries, that's what GitHub is for!": "The repository you've created so far is just on your computer, which is handy, but makes it pretty hard to share and work on with others. No worries, that's what GitHub is for!", 5 | "GitHub is a website that allows people everywhere to upload what they're working on with Git so that everyone can easily work together on the same project. GitHub acts as a central repository for you and everyone else to share. You push your changes to it and pull down changes from others.": "GitHub is a website that allows people everywhere to upload what they're working on with Git so that everyone can easily work together on the same project. GitHub acts as a central repository for you and everyone else to share. You push your changes to it and pull down changes from others.", 6 | "Create a GitHub Account": "Create a GitHub Account", 7 | "Visit {/lnk_github/}github.com{/lnk_e/} and sign up for a free account. {/str/}High five, welcome!{/str_e/}": "Visit {/lnk_github/}github.com{/lnk_e/} and sign up for a free account. {/str/}High five, welcome!{/str_e/}", 8 | "Add GitHub username to Git": "Add GitHub username to Git", 9 | "Add your GitHub username to your Git configuration. We'll do this just for the sake of Git-it{/smc/} it makes it easier to verify the upcoming challenges. Save it exactly as you created it on GitHub and {/str/}capitalize where capitalized{/str_e/}. Note, you don't need to enter the {/lt-sign/} and {/gt-sign/}.": "Add your GitHub username to your Git configuration. We'll do this just for the sake of Git-it{/smc/} it makes it easier to verify the upcoming challenges. Save it exactly as you created it on GitHub and {/str/}capitalize where capitalized{/str_e/}. Note, you don't need to enter the {/lt-sign/} and {/gt-sign/}.", 10 | "Add your GitHub username to your Git configuration:": "Add your GitHub username to your Git configuration:", 11 | "You can double check what you have set in your Git config by typing:": "You can double check what you have set in your Git config by typing:", 12 | "Make sure you type {/cde/}user.username{/cde_e/} above and not {/cde/}user.name{/cde_e/}, which would override the name you set in the first challenge and leave you with no username property! If you found you did that, it's ok, just repeat the step in the first challenge to add your name and then complete the step above.": "Make sure you type {/cde/}user.username{/cde_e/} above and not {/cde/}user.name{/cde_e/}, which would override the name you set in the first challenge and leave you with no username property! If you found you did that, it's ok, just repeat the step in the first challenge to add your name and then complete the step above.", 13 | "GitHub & Git config usernames do not match": "GitHub & Git config usernames do not match", 14 | "A common error is not having your GitHub username match the case of the one you set with {/cde/}git config{/cde_e/}. For instance, 'JLord' isn't the same as 'jlord'": "A common error is not having your GitHub username match the case of the one you set with {/cde/}git config{/cde_e/}. For instance, 'JLord' isn't the same as 'jlord'", 15 | "To change your username set with Git, just do the same command you did earlier, but with the correct capitalization:": "To change your username set with Git, just do the same command you did earlier, but with the correct capitalization:", 16 | "When you've made your updates, verify again!": "When you've made your updates, verify again!" 17 | } 18 | -------------------------------------------------------------------------------- /resources/i18n/en-US/ch08.json: -------------------------------------------------------------------------------- 1 | { 2 | "Add a collaborator to your project.": "Add a collaborator to your project.", 3 | "Social Coding": "Social Coding", 4 | "Working with others is one of the best things about GitHub because it is easier to work from any place or timezone with someone else.": "Working with others is one of the best things about GitHub because it is easier to work from any place or timezone with someone else.", 5 | "{/str/}Collaborators{/str_e/} are other GitHub users who are given permission to make edits to a repository owned by someone else. You may also hear the term {/str/}contributor{/str_e/}, this describes another GitHub user who has made contributions, through a Fork and Pull Request, to a project.": "{/str/}Collaborators{/str_e/} are other GitHub users who are given permission to make edits to a repository owned by someone else. You may also hear the term {/str/}contributor{/str_e/}, this describes another GitHub user who has made contributions, through a Fork and Pull Request, to a project.", 6 | "{/lnk_reporobot/}@reporobot{/lnk_e/} is a robot from outer space that loves collaborating on repos.": "{/lnk_reporobot/}@reporobot{/lnk_e/} is a robot from outer space that loves collaborating on repos.", 7 | "Hello, Repo Robot!": "Hello, Repo Robot!", 8 | "To add collaborators to one of your projects, visit the repository's page on your GitHub account and click the 'Settings' tab in the menu in the upper part of the page. Then select the 'Collaborators' option and click on 'Add people'. Type the username into the text box, select the right user and finally add the collaborator to your repository by clicking the green button.": "To add collaborators to one of your projects, visit the repository's page on your GitHub account and click the 'Settings' tab in the menu in the upper part of the page. Then select the 'Collaborators' option and click on 'Add people'. Type the username into the text box, select the right user and finally add the collaborator to your repository by clicking the green button.", 9 | "{/str/}Now go to your forked Patchwork repository's page on GitHub and add 'RepoRobot' as a collaborator.{/str_e/} The URL should look like this, but with your own username.": "{/str/}Now go to your forked Patchwork repository's page on GitHub and add 'RepoRobot' as a collaborator.{/str_e/} The URL should look like this, but with your own username." 10 | } 11 | -------------------------------------------------------------------------------- /resources/i18n/en-US/ch09.json: -------------------------------------------------------------------------------- 1 | { 2 | "Keep your file up to date by pulling in changes from collaborators.": "Keep your file up to date by pulling in changes from collaborators.", 3 | "Pulling from a Remote": "Pulling from a Remote", 4 | "If you're working on something with someone else you need to stay up to date with the latest changes. So you'll want to {/str/}pull{/str_e/} in any changes that may have been pushed to the central GitHub repository.": "If you're working on something with someone else you need to stay up to date with the latest changes. So you'll want to {/str/}pull{/str_e/} in any changes that may have been pushed to the central GitHub repository.", 5 | "If someone else {/str/}pushed{/str_e/} changes to the {/str/}remote{/str_e/} repository (on GitHub), you might want to {/str/}pull{/str_e/} these changes into your {/str/}local{/str_e/} repository.": "If someone else {/str/}pushed{/str_e/} changes to the {/str/}remote{/str_e/} repository (on GitHub), you might want to {/str/}pull{/str_e/} these changes into your {/str/}local{/str_e/} repository.", 6 | "What has Reporobot been up to?": "What has Reporobot been up to?", 7 | "See if Reporobot has made any changes to your branch by pulling in any changes from the remote named 'origin' on GitHub:": "See if Reporobot has made any changes to your branch by pulling in any changes from the remote named 'origin' on GitHub:", 8 | "If nothing's changed, it will tell you 'Already up-to-date'. If there are changes, Git will merge those changes into your local version.": "If nothing's changed, it will tell you 'Already up-to-date'. If there are changes, Git will merge those changes into your local version.", 9 | "Did Reporobot make changes? Git tells you where changes were made. You can open that file and see Reporobot's updates. Surprise, Reporobot is an artist!": "Did Reporobot make changes? Git tells you where changes were made. You can open that file and see Reporobot's updates. Surprise, Reporobot is an artist!", 10 | "Check Git status": "Check Git status", 11 | "Pull in changes from a remote branch": "Pull in changes from a remote branch", 12 | "See changes to the remote before you pull in": "See changes to the remote before you pull in" 13 | } 14 | -------------------------------------------------------------------------------- /resources/i18n/en-US/ch11.json: -------------------------------------------------------------------------------- 1 | { 2 | "Merge your branch locally, delete the branch and pull from upstream.": "Merge your branch locally, delete the branch and pull from upstream.", 3 | "Cleaning up": "Cleaning up", 4 | "Once you don't need branches anymore you can delete them locally and remotely. This is helpful so that you don't end up with a pile of old branches.": "Once you don't need branches anymore you can delete them locally and remotely. This is helpful so that you don't end up with a pile of old branches.", 5 | "Merge Locally": "Merge Locally", 6 | "Your pull request has been merged! Your branch was merged into the 'gh-pages' branch of the original on GitHub. You can merge your branch locally, too.": "Your pull request has been merged! Your branch was merged into the 'gh-pages' branch of the original on GitHub. You can merge your branch locally, too.", 7 | "First, move into the branch you want to merge into — in this case, the branch 'gh-pages'.": "First, move into the branch you want to merge into — in this case, the branch 'gh-pages'.", 8 | "Now tell Git what branch you want to merge in — in this case, your feature branch that begins with {/dqm/}add-{/dqm/}.": "Now tell Git what branch you want to merge in — in this case, your feature branch that begins with {/dqm/}add-{/dqm/}.", 9 | "Tidy up by deleting your feature branch. Now that it has been merged you don't really need it around.": "Tidy up by deleting your feature branch. Now that it has been merged you don't really need it around.", 10 | "You can also delete the branch from your remote on GitHub:": "You can also delete the branch from your remote on GitHub:", 11 | "Pull from Upstream": "Pull from Upstream", 12 | "And last but not least, the original has changed since your pull request was merged — Reporobot added your name to the website! If you pull in these changes from upstream you'll be up to date and have that version too. You can actually see it live as well at: yourusername.github.io/patchwork.": "And last but not least, the original has changed since your pull request was merged — Reporobot added your name to the website! If you pull in these changes from upstream you'll be up to date and have that version too. You can actually see it live as well at: yourusername.github.io/patchwork.", 13 | "To pull from the original upstream:": "To pull from the original upstream:", 14 | "Congratulations!": "Congratulations!", 15 | "You've created local repositories, remote repositories, worked with a collaborator, pushed, pulled and joined the millions of others developing and enriching open source!": "You've created local repositories, remote repositories, worked with a collaborator, pushed, pulled and joined the millions of others developing and enriching open source!", 16 | "Visit {/lnk_patchwork/}jlord.github.io/patchwork{/lnk_e/} to see your name incorporated! Looking to keep going? Checkout the {/lnk_next/}What Next{/lnk_e/} section on the resources page in this app.": "Visit {/lnk_patchwork/}jlord.github.io/patchwork{/lnk_e/} to see your name incorporated! Looking to keep going? Checkout the {/lnk_next/}What Next{/lnk_e/} section on the resources page in this app.", 17 | "Merge a branch into current branch": "Merge a branch into current branch", 18 | "Change the branch you're working on": "Change the branch you're working on", 19 | "Delete a local branch": "Delete a local branch", 20 | "Delete a remote branch": "Delete a remote branch", 21 | "Pull from a remote branch": "Pull from a remote branch" 22 | } 23 | -------------------------------------------------------------------------------- /resources/i18n/en-US/common.json: -------------------------------------------------------------------------------- 1 | { 2 | "Goal": "Goal", 3 | "Didn't Pass?": "Didn't Pass?", 4 | "Tip": "Tip", 5 | "Step": "Step", 6 | "Confirm Clearing Statuses": "Confirm Clearing Statuses", 7 | "Are you sure you want to clear the status for every challenge?": "Are you sure you want to clear the status for every challenge?", 8 | "Yes": "Yes", 9 | "No": "No", 10 | "Challenges": "Challenges" 11 | } 12 | -------------------------------------------------------------------------------- /resources/i18n/en-US/dictionary.json: -------------------------------------------------------------------------------- 1 | { 2 | "Below are the terminal and Git commands used in the Git-it challenges.": "Below are the terminal and Git commands used in the Git-it challenges.", 3 | "Bash/Terminal Basics": "Bash/Terminal Basics", 4 | "Make a new folder (aka make directory)": "Make a new folder (aka make directory)", 5 | "Navigate into an existing folder (aka 'change directory')": "Navigate into an existing folder (aka 'change directory')", 6 | "List the items in a folder": "List the items in a folder", 7 | "Configuring Git": "Configuring Git", 8 | "Check Git version": "Check Git version", 9 | "Set your name": "Set your name", 10 | "Set your email": "Set your email", 11 | "Set the default branch name to 'main'": "Set the default branch name to 'main'", 12 | "Set your Github account (case sensitive)": "Set your Github account (case sensitive)", 13 | "Git Basics": "Git Basics", 14 | "Turn Git on for a folder": "Turn Git on for a folder", 15 | "Check status of changes to a repository": "Check status of changes to a repository", 16 | "View changes to files": "View changes to files", 17 | "Add a file's changes to be committed": "Add a file's changes to be committed", 18 | "To add all files changes": "To add all files changes", 19 | "To commit (aka save) the changes you've added with a short message describing the changes": "To commit (aka save) the changes you've added with a short message describing the changes", 20 | "Copy a repository to your computer": "Copy a repository to your computer", 21 | "Git Branches": "Git Branches", 22 | "Create a new branch": "Create a new branch", 23 | "Move onto a branch": "Move onto a branch", 24 | "You can create and switch to a branch in one line": "You can create and switch to a branch in one line", 25 | "List the branches": "List the branches", 26 | "Rename a branch you're currently on": "Rename a branch you're currently on", 27 | "Git Remotes": "Git Remotes", 28 | "Add remote connections": "Add remote connections", 29 | "Set a URL to a remote": "Set a URL to a remote", 30 | "View remote connections": "View remote connections", 31 | "Pulling in Git": "Pulling in Git", 32 | "Pull in changes": "Pull in changes", 33 | "Pull in changes from a remote branch": "Pull in changes from a remote branch", 34 | "See changes to the remote before you pull in": "See changes to the remote before you pull in", 35 | "Push & Merge in Git": "Push & Merge in Git", 36 | "Push changes": "Push changes", 37 | "Merge a branch into current branch": "Merge a branch into current branch", 38 | "Deleting Remotes and Branches in Git": "Deleting Remotes and Branches in Git", 39 | "Delete a local branch": "Delete a local branch", 40 | "Delete a remote branch": "Delete a remote branch" 41 | } 42 | -------------------------------------------------------------------------------- /resources/i18n/en-US/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "Challenges completed:": "Challenges completed:", 3 | "Welcome!": "Welcome!", 4 | "Git-it teaches the basics of using Git and GitHub. These basics aren't merely beginner Git and GitHub skills, they are the commands and steps you'll use over and over as in your awesome social coding + version controlled future.": "Git-it teaches the basics of using Git and GitHub. These basics aren't merely beginner Git and GitHub skills, they are the commands and steps you'll use over and over as in your awesome social coding + version controlled future.", 5 | "But Wait – There's More!": "But Wait – There's More!", 6 | "You can also complete Git-it in several other languages, just select the language you want from the menu in the upper left.": "You can also complete Git-it in several other languages, just select the language you want from the menu in the upper left.", 7 | "The 'Window' option in the application menu will take you to the {/lnk_dictionary/}Dictionary{/lnk_e/}, {/lnk_resources/}Resources{/lnk_e/} and {/lnk_about/}About{/lnk_e/} page.": "The 'Window' option in the application menu will take you to the {/lnk_dictionary/}Dictionary{/lnk_e/}, {/lnk_resources/}Resources{/lnk_e/} and {/lnk_about/}About{/lnk_e/} page.", 8 | "Start challenge one!": "Start challenge one!", 9 | "On your way!": "On your way!", 10 | "You're making progress, keep going and pick up where you left off.": "You're making progress, keep going and pick up where you left off.", 11 | "Pick up where you left off!": "Pick up where you left off!", 12 | "Congratulations!": "Congratulations!", 13 | "You finished the challenges and are primed for social coding—so what's next?": "You finished the challenges and are primed for social coding—so what's next?", 14 | "Ideas for beginner projects": "Ideas for beginner projects", 15 | "Clear and start over": "Clear and start over" 16 | } 17 | -------------------------------------------------------------------------------- /resources/i18n/en-US/menu.json: -------------------------------------------------------------------------------- 1 | { 2 | "About Git-it": "About Git-it", 3 | "Services": "Services", 4 | "Hide Git-it": "Hide Git-it", 5 | "Hide Others": "Hide Others", 6 | "Show All": "Show All", 7 | "Quit": "Quit", 8 | "View": "View", 9 | "Reload": "Reload", 10 | "Full Screen": "Full Screen", 11 | "Minimize": "Minimize", 12 | "Use Dark Theme": "Use Dark Theme", 13 | "Bring All to Front": "Bring All to Front", 14 | "Toggle Developer Tools": "Toggle Developer Tools", 15 | "Window": "Window", 16 | "Home": "Home", 17 | "Dictionary": "Dictionary", 18 | "Resources": "Resources", 19 | "Help": "Help", 20 | "App Repository": "App Repository", 21 | "Open Issue": "Open Issue", 22 | "About App": "About App", 23 | "&File": "&File", 24 | "&View": "&View", 25 | "&Window": "&Window", 26 | "&Help": "&Help" 27 | } 28 | -------------------------------------------------------------------------------- /resources/i18n/ko-KR/about.json: -------------------------------------------------------------------------------- 1 | { 2 | "About Git-it": "Git-It에 대해", 3 | "Git-it teaches the essential, everyday Git commands developers use everyday along with the GitHub Flow, the way developers collaborate on GitHub.": "Git It은 GitHub에서 개발자들이 협업하기 위한 필수적이고 일상적인 Git 커맨드들 및 GitHub Flow에 대해서 가르쳐줍니다.", 4 | "Some challenges require an internet connection, so you'll need to be online to complete Git-it. But you can always open the app and view the challenges and resources offline.": "일부 도전 과제들은 인터넷 연결을 필요로 하기 때문에 Git-It을 완료하기 위해서는 인터넷에 연결되어 있어야 합니다. 인터넷 연결이 없는 경우, 앱을 열거나 도전 과제 및 리소스를 확인하는 것은 가능합니다.", 5 | "Real Development Environment": "실제 개발 환경", 6 | "Git-it uses the real terminal, Git and GitHub (rather than emulating them). When you finish you'll have real repositories on your GitHub account and green squares on your contribution chart!": "Git-It은 에뮬레이션이 아닌 실제 terminal, Git, GitHub을 사용합니다. Git-It을 완료할 시점에 여러분은 실제 리포(repository)와 GitHub 계정, 그리고 contribution 차트에 마크를 가지고 있을 것 입니다!", 7 | "The Code that made Git-it": "Git이 작성된 코드에 대해", 8 | "This app is built with HTML, CSS and JS and uses the {/lnk_electron/}Electron{/lnk_e/} library. All of the code for Git-it is online in its {/lnk_repo/}repository on GitHub{/lnk_e/}. Git-it is a labor of love, originally created by Jessica Lord ({/lnk_jlord/}@jlord{/lnk_e/}) and kind contributors.": "이 앱은 HTML, CSS 그리고 JS로 만들어졌으며 {/lnk_electron/}Electron{/lnk_e/} 라이브러리를 사용합니다. Git-It을 위한 모든 코드는 {/lnk_repo/}GitHub의 repository{/lnk_e/}에 공개되어 있습니다. Git-It은 원작자인 Jessica Lord ({/lnk_jlord/}@jlord{/lnk_e/})와 친절한 기여자들의 애정어린 노고로 만들어졌습니다." 9 | } 10 | -------------------------------------------------------------------------------- /resources/i18n/ko-KR/ch01.json: -------------------------------------------------------------------------------- 1 | { 2 | "Install Git on your computer and configure your name and email.": "Git을 컴퓨터에 설치하고 이름과 이메일을 설정해주세요.", 3 | "Git": "Git", 4 | "Git is free {/str/}open source software{/str_e/} (the {/lnk_git/}source code is public{/lnk_e/}) written by Linus Torvalds who also wrote the Linux operating system's kernel.": "Git 은 무료 ({/lnk_git/}소스 코드가 공개된{/lnk_e/}) {/str/}오픈 소스 소프트웨어{/str_e/}로 Linux OS의 커널을 작성한 것으로 유명한 Linus Torvalds에 의해 작성되었습니다.", 5 | "Git is a program for keeping track of changes over time, known in programming as {/str/}version control{/str_e/}. If you've used a track changes feature in a text editing software then you're already familiar with the concept!": "Git은 변경 사항에 대한 내용을 시간에 따라 기록하는 프로그램이며, 이러한 프로그램은 프로그래밍 세계에서 {/str/}버전 컨트롤{/str_e/}이라 합니다.", 6 | "Install Git": "Git 설치하기", 7 | "We recommend installing Git on your computer by installing the {/lnk_git/}latest version{/lnk_e/} from the Git website.": "Git 웹사이트에서 {/lnk_git/}최신 버전{/lnk_e/}을 다운로드 하여 설치 하시는 것을 권장합니다.", 8 | "{/str/}Windows{/str_e/}: Use the {/str/}Git Shell{/str_e/} for your terminal.": "{/str/}윈도우즈{/str_e/}: {/str/}Git Shell{/str_e/}을 터미널로 사용합니다.", 9 | "{/str/}Mac{/str_e/}: You can use the {/str/}terminal{/str_e/} app as your terminal.": "{/str/}Mac{/str_e/}: {/str/}terminal{/str_e/} 앱을 터미널로 사용합니다.", 10 | "Already have Git or not sure? Type {/cde/}git --version{/cde_e/} in your terminal and if it returns a version number higher than {/cde/}1.7.10{/cde_e/}, you're set! For more information, visit the {/lnk_git/}Git website{/lnk_e/}.": "이미 Git이 설치되어 있는지 확인하시려면 터미널을 여신 후 {/cde/}git --version{/cde_e/}을 입력해주세요. 만약 반환된 버전의 숫자가 {/cde/}1.7.10{/cde_e/} 이상이면 성공적으로 설지된 것 입니다! 더 많은 정보를 원하시면 {/lnk_git/}Git 웹사이트{/lnk_e/}를 방문해주세요.", 11 | "Git Software": "Git 소프트웨어", 12 | "Git on its own isn't like other programs on your computer. You'll likely not see an icon on your desktop, but it will always be available to you and you'll be able to access it at any time from your terminal or Git desktop applications.": "Git은 여러분의 컴퓨터에 있는 프로그램들과는 다소 다릅니다. 하지만 데스크탑에서 아이콘을 찾아서 클릭하고 실행할 수는 없더라도 여러분은 언제나 터미널이나 Git 데스크탑 어플리케이션을 통해 Git을 사용할 수 있습니다.", 13 | "GitHub provides such an desktop application, the {/lnk_desktop/}GitHub Desktop{/lnk_e/} app. The GitHub Desktop app can do a lot of things with Git but not all, which is why learning the terminal is important. But once you've got that down, you'll be glad to have the desktop app because it organizes your project's information more visually, like the GitHub website.": "GitHub은 {/lnk_desktop/}GitHub Desktop{/lnk_e/} 앱을 제공하고 있습니다. GitHub Desktop 앱은 Git에 관련된 많은 기능들을 편리하게 사용할 수 있도록 하지만, 모든 기능을 제공하지는 않으므로 터미널을 학습하는 것 이 중요합니다. 그 이후부터는 여러분이 GitHub 웹사이트와 같이 프로젝트의 정보를 더 정돈하여 제공하는 데스크탑 앱을 더 적극적으로 사용할 수 있을 것 입니다.", 14 | "Configure Git": "Git 설정하기", 15 | "Once Git is installed, open your {/str/}terminal{/str_e/}. You can verify that Git is really there by typing:": "Git을 설치하신 후 {/str/}terminal{/str_e/}을 열어주세요. 다음과 같이 입력하여 Git이 설치되어 있는지 확인할 수 있습니다:", 16 | "This will return the version of Git on your computer and look something like this:": "이것은 현재 컴퓨터에 설치된 Git의 버전을 반환할 것 이며 아래와 같이 나타날 것 입니다:", 17 | "Next, configure Git so it knows to associate your work to you:": "이제 Git을 설정하여 Git이 여러분을 여러분의 작업에 연결할 수 있도록 합니다:", 18 | "Set your name:": "이름을 설정하세요:", 19 | "Now set your email:": "이메일을 설정하세요:", 20 | "You're done with your first challenge! Click the 'Verify' button to check the challenge.": "이제 첫 도전 과제를 완료했어요! 'Verify' 버튼을 클릭해서 도전 과제를 체크 해주세요.", 21 | "Dollar Signs in Code Documentation": "코드 문서화에서의 달러 표시", 22 | "Dollar signs {/cde/}${/cde_e/} are often used in programming documentation to signify that the line is {/str/}command line{/str_e/} code (see the code snippets above). You don't actually type the {/cde/}${/cde_e/} in though, only type what comes after.": "달러 표시들{/cde/}${/cde_e/}은 프로그래밍 문서화에서 해당 줄이 {/str/}커맨드 라인{/str_e/}에 해당함을 암시합니다 (상단의 코드 블록을 확인 해주세요.) 여러분은 {/cde/}${/cde_e/} 표시 이후의 코드만을 입력하시면 됩니다." 23 | } 24 | -------------------------------------------------------------------------------- /resources/i18n/ko-KR/menu.json: -------------------------------------------------------------------------------- 1 | { 2 | "About Git-it": "About Git-It", 3 | "Services": "Services", 4 | "Hide Git-it": "Hide Git-it", 5 | "Hide Others": "Hide Others", 6 | "Show All": "Show All", 7 | "Quit": "Quit", 8 | "View": "View", 9 | "Reload": "Reload", 10 | "Full Screen": "Full Screen", 11 | "Minimize": "Minimize", 12 | "Bring All to Front": "Bring All to Front", 13 | "Toggle Developer Tools": "Toggle Developer Tools", 14 | "Window": "Window", 15 | "Home": "Home", 16 | "Dictionary": "Dictionary", 17 | "Resources": "Resources", 18 | "Help": "Help", 19 | "App Repository": "App Repository", 20 | "Open Issue": "Open Issue", 21 | "About App": "About App", 22 | "&File": "&File", 23 | "&Quit": "&Quit" 24 | } 25 | -------------------------------------------------------------------------------- /resources/i18n/ku/about.json: -------------------------------------------------------------------------------- 1 | { 2 | "About Git-it": "دەربارەی Git-it", 3 | "Git-it teaches the essential, everyday Git commands developers use everyday along with the GitHub Flow, the way developers collaborate on GitHub.": "Git-it فێری بنەماکان، فرمانەکانی گیت کە ڕۆژانە گەشەپێدەران بەکاری دەهێنن لەکاتی کارکردنیان لەگەڵ Github، هەروەها ئەو ڕێگایەی کە گەشەپێدەران هاریکاری یەکتری پێدەکەن لەسەر Github.", 4 | "Some challenges require an internet connection, so you'll need to be online to complete Git-it. But you can always open the app and view the challenges and resources offline.": "هەندێک لە ئەرکەکان پێویستیان بە هەبوونی ئینتەرنێتە، بۆیە پێویستە سەرهێڵ بیت بۆ ئەوەی Git-it تەواو بکەیت. بەڵام لە هەرکاتێکدا ئەتوانیت ئەپەکە بکەیتەوە و ئەرکەکان و سەرچاوەکان ببینیت بە دەرهێڵ.", 5 | "Real Development Environment": "ژینگەیەکی گەشەپێدانی ڕاستەقینە", 6 | "Git-it uses the real terminal, Git and GitHub (rather than emulating them). When you finish you'll have real repositories on your GitHub account and green squares on your contribution chart!": "Git-it وێستگە ڕاستەقینەکە بەکاردەهێنێ، کە Git و Githubـن (نەک بەرجەستەیان بکات بە شتێکی تر). کە تەواو بوویت ڕیپۆیەکی ڕاستەقینەت دەبێ لەسەر هەژماری Githubـەکەت و چوارگۆشەی سەوز لەسەر خشتەی هەروەزیەکەت دەردەکەوێ.", 7 | "The Code that made Git-it": "ئەو کۆدەی Git-itـی دروستکردووە.", 8 | "This app is built with HTML, CSS and JS and uses the {/lnk_electron/}Electron{/lnk_e/} library. All of the code for Git-it is online in its {/lnk_repo/}repository on GitHub{/lnk_e/}. Git-it is a labor of love, originally created by Jessica Lord ({/lnk_jlord/}@jlord{/lnk_e/}) and kind contributors.": "ئەم ئەپە دروستکراوە بە HTML, CSS و JS و {/lnk_electron/} Electron {/lnk_e/} بەکاردەهێنێ. هەموو کۆدەکانی Git-it لە سەرهێڵە لە {/lnk_repo/}ڕیپۆکەی Github{/lnk_e/}. Git-it هەوڵدانێکی خۆشەویستیە، سەرەتا لەلایەن Jessica Lord ({/lnk_jlord/} @jlord{/lnk_e/}) و دروستکراوە لەگەڵ خۆبەخشە میهرەبانەکان." 9 | } 10 | -------------------------------------------------------------------------------- /resources/i18n/ku/ch03.json: -------------------------------------------------------------------------------- 1 | { 2 | "Create a file in your new repository, add something to that file and commit that change with Git.": "پەڕگەیەک لە ڕیپۆ نوێیەکەت دروست بکە، شتێک زیاد بکە بۆ ئەو پەڕگەیە و ئەو گۆڕانکارییە commit بکە بە Git.", 3 | "Commits": "commitـەکان", 4 | "Commits are core to using Git. They are the moments in which you save and describe the work you've done. They are the ticks in the timeline of your project's history.": "commitـەکان بنەمان بۆ بەکارهێنانی Git. ئەو ساتانەن کە تێیدا ئەو کارەی تەواوت کردووە پاشەکەوت و پێناسە دەکەیت. ئەو ساتانەن کە لە سەر هێڵی کات دەردەکەوێ لە مێژووی پڕۆژەکەتدا.", 5 | "Create a New File": "پەڕگەیەکی نوێ دروست بکە", 6 | "Now that you've got a repository started let's add a file to it.": "ئێستا کە کۆگایەکت دەستپێکردووە، با پەڕگەیەکی بۆ زیاد بکەین.", 7 | "Open your text editor and create a new empty file. Now write a little bit of text, perhaps type {/dqm/}Hello!{/dqm/}, and save the file as 'readme.txt' in the 'hello-world' folder you created in the last challenge.": "دەستکاریکەری دەقەکەت بکەرەوە و پەڕگەیەکی بەتاڵ دروست بکە. ئێستا هەندێک دەق بنووسە، ئەتوانی بنووسی {/dqm/}سڵاو!{/dqm/}، وە پەڕگەکە پاشەکەوت بکە وەک 'readme.txt' لە بوخچەی 'hello-world' کە لە ئەرکی پێشوودا دروستت کرد.", 8 | "Check Status + Add and Commit Changes": "دۆخ بپشکنە + گۆڕانکارییەکان زیادبکە و پاشەکەوتیان بکە", 9 | "Next check the {/str/}status{/str_e/} of your repository to find out if there have been changes. You know you have changed something, but does Git?": "پاشان {/str/}دۆخی{/str_e/} کۆگاکەت بپشکنە تا بزانی هیچ گۆڕانکارییەک کراون. تۆ ئەزانی کە شتێکت گۆڕیوە، بەڵام ئایا Git دەزانێ؟", 10 | "Make sure you're still within your 'hello-world' directory when you're running these commands. Use Git to see what changed in your repository:": "دڵنیابەرەوە هێشتا لە بوخچەی 'hello-world' دایت کە ئەم فرمانانە جێبەجێ دەکەیت. Git بەکاربهێنە تا ببینی چی گۆڕاوە لە کۆگاکەتدا:", 11 | "First, check the status:": "سەرەتا، دۆخەکە بپشکنە:", 12 | "Git should tell you that a file has been added.": "Git پێویستە پێت بڵێ کە پەڕگەیەک گۆڕابێ.", 13 | "Then {/str/}add{/str_e/} the file you just created so that it becomes a part of the changes you will {/str/}commit{/str_e/} (aka save) with Git:": "دواتر پەڕگەکان کە زۆرنابێ دروستتکردوون {/str/}زیادبکە{/str_e/} تا ببێ بە بەشێک لەو گۆڕانکارییانەی کە {/str/}commit{/str_e/}(یان پاشەکەوت)ـی ئەکەیت بە Git:", 14 | "Finally, {/str/}commit{/str_e/} those changes to the repository's history with a short (m) message describing the updates.": "لە کۆتاییدا، ئەو گۆڕانکارییانە {/str/}commit{/str_e/} بکە بۆ مێژووی کۆگاکەت لەگەڵ نامەیەکی (m) کورت کە پێناسەی نوێکارییەکە دەکات.", 15 | "Step: Make More Changes": "هەنگاو: گۆڕانکاری زیاتر بکە", 16 | "Now add another line to 'readme.txt' and save the file again.": "ئێستا دێڕێکی دیکە زیادبکە بۆ 'readme.txt' و دووبارە پەڕگەکە پاشەکەوت بکە.", 17 | "In terminal, you can view the {/str/}diff{/str_e/}erence between the file now and how it was at your last commit.": "لە تێرمیناڵ، ئەتوانیت {/str/}diff{/str_e/}جیاوازی پەڕگەکە ببینیت کە ئێستا چۆنە و لە commitـی پێشوودا چۆن بووە.", 18 | "Tell Git to show you the {/str/}diff{/str_e/}:": "بە Git بڵێ کە {/str/}diff{/str_e/}ـەکەت پشان بدات:", 19 | "Now with what you just learned above, commit this latest change.": "ئێستا لەگەڵ ئەوەی لەسەرەوە فێربوویت، کۆتا گۆڕانکارییەکان commit بکە.", 20 | "Check status of changes to a repository": "دۆخی گۆڕانکارییەکان بپشکنە لە ڕیپۆیەکدا", 21 | "View changes to files": "گۆڕانکاری پەڕگەکان ببینە", 22 | "Add a file's changes to be committed": "گۆڕانکاری پەڕگەکان زیادبکە تا commit بکرێن", 23 | "To add all files changes": "بۆ زیادکردنی هەموو گۆڕانکارییەکانی پەڕگەکان", 24 | "To commit (aka save) the changes you've added with a short message describing the changes": "بۆ commit (یانی پاشەکەوت کردن)ـی گۆڕانکارییەکان کە زیادت کردوون لەگەڵ نامەیەکی کورت لە پێناسەی گۆڕانکارییەکان ئەکا" 25 | } 26 | -------------------------------------------------------------------------------- /resources/i18n/ku/ch04.json: -------------------------------------------------------------------------------- 1 | { 2 | "Create a GitHub account and add your username to your Git config.": "هەژمارێکی GitHub دروست بکە و نازناوەکەت زیادبکە بۆ ڕێکخستنی Gitـەکەت.", 3 | "Working Better, Together": "کارکردنی باشتر، بەیەکەوە", 4 | "The repository you've created so far is just on your computer, which is handy, but makes it pretty hard to share and work on with others. No worries, that's what GitHub is for!": "ئەو کۆگایەی دروستت کردووە تا ئێستا تەنها لەسەر کۆمپیوتەرەکەتە، کە خۆی لە خۆیدا بەسوودە، بەڵام هاوبەشی پێکردنی و کارکردن لەسەری لەگەڵ ئەوانی تردا گران دەکات. نیگەران مەبە، GitHub بۆ ئەوەیە!", 5 | "GitHub is a website that allows people everywhere to upload what they're working on with Git so that everyone can easily work together on the same project. GitHub which acts as the central repository for you and everyone else to share. You push your changes to it and pull down changes from others.": "GitHub ماڵپەڕێکە کە ڕێگە بە خەڵک دەدات لە هەموو شوێنێکەوە ئەو شتەی کە کاری لەسەر دەکەن بە Git بەرزبکەنەوە تا هەموو کەس بە ئاسانی بتوانن بەیەکەوە کاربکەن لەسەر هەمان پڕۆژە. تۆ گۆڕانکارییەکانتی بۆ ئەنێری و گۆڕانکاریی لەوانی ترەوە ڕادەکێشی.", 6 | "Create a GitHub Account": "هەژمارێکی GitHub دروست بکە", 7 | "Visit {/lnk_github/}github.com{/lnk_e/} and sign up for a free account. {/str/}High five, welcome!{/str_e/}": "سەردانی {/lnk_github/}github.com{/lnk_e/} بکە و هەژمارێکی خۆڕایی دروست بکە. {/str/}لێدەوە، یاخوا بەخێربێی!{/str_e/}", 8 | "Add GitHub username to Git": "نازاناوی GitHub زیادبکە بۆ Git", 9 | "Add your GitHub username to your Git configuration. We'll do this just for the sake of Git-it{/smc/} it makes it easier to verify the upcoming challenges. Save it exactly as you created it on GitHub and {/str/}capitalize where capitalized{/str_e/}. Note, you don't need to enter the {/dqm/}{/lt/}{/dqm/} and {/dqm/}{/gt/}{/dqm/}.": "نازناوی GitHub زیادبکە بۆ ڕێکخستنی Git. ئێمە ئەمە تەنها لەبەر Git-it ئەکەین{/smc/}ئەمە وادەکات بەئاسانی دڵنیاببینەوە لە گۆڕانکارییەکانی داهاتوو. پاشەکەوتی بکە ڕێک بەوجۆرەی دروستت کرد لەسەر GitHub و {/str/}پیتەکان گەورە بکە لە کوێ گەورە کرابوو{/str_e/}. تێبینی بکە، پێویست ناکات ئەمانە {/dqm/}{/lt/}{/dqm/} و {/dqm/}{/gt/}{/dqm/} بنووسیت. ", 10 | "Add your GitHub username to your Git configuration:": "نازناوی GitHubـەکەت زیادبکە بۆ ڕێکخستنی Git:", 11 | "You can double check what you have set in your Git config by typing:": "ئەتوانی دووبارە دڵنیاببیتەوە چیت داناوە لە ڕێکخستنەکەی Gitـت:", 12 | "Make sure you type {/cde/}user.username{/cde_e/} above and not {/cde/}user.name{/cde_e/}, which would override the name you set in the first challenge and leave you with no username property! If you found you did that, it's ok, just repeat the step in the first challenge to add your name and then complete the step above.": "دڵنیابەرەوە کە بنووسیت {/cde/}user.username{/cde_e/} لەسەرە و نەک {/cde/}user.name{/cde_e/}، کە ئەمە ناوەکەت ئەگۆڕێ کە لەیەک ئەرکدا داتنابوو وە نازناوەکەت بە بەتاڵی بەجێ دەمێنێ! ئەگەر ئەوەت کردووە، قەیناکە، تەنها هەنگاوی یەکەم ئەرک دووبارە بکەرەوە بۆ زیادکردنی ناوەکەت و ئینجا هەنگاوی سەرەوە جێبەجێ بکەوە.", 13 | "GitHub & Git config usernames do not match": "نازناوەکانی GitHub و نازناوی ڕێکخستنەکانی Git هەمان شت نین", 14 | "A common error is not having your GitHub username match the case of the one you set with {/cde/}git config{/cde_e/}. For instance, 'JLord' isn't the same as 'jlord'": "هەڵەیەکی باوە کە نازناوی GitHubـەکەت هەمان گەورەو بچووکی نەبێ کە داتناوە بە {/cde/}git config{/cde_e/}. بۆ نموونە، 'JLord' هەمان شت نییە لەگەڵ 'jlord'", 15 | "To change your username set with Git, just do the same command you did earlier, but with the correct capitalization:": "بۆ گۆڕینی نازناوەکەت بە Git، تەنها هەمان فرمان ئەنجام بدەوە کە پێشتر کردت، بەڵام با گەورەو بچووکی پیتەکان ڕاست بن:", 16 | "When you've made your updates, verify again!": "کە نوێکارییەکانت تەواو کرد، دووبارە بسەلمێنە!" 17 | } 18 | -------------------------------------------------------------------------------- /resources/i18n/ku/ch08.json: -------------------------------------------------------------------------------- 1 | { 2 | "Add a collaborator to your project.": "خۆبەخشێك زیادبکە بۆ پڕۆژەکەت.", 3 | "Social Coding": "کۆدنووسی کۆمەڵایەتی", 4 | "Working with others is one of the best things about GitHub because it is easier to work from any place or timezone with someone else.": "کارکردن لەگەڵ ئەوانی دیکە یەکێکە لە باشترین شتەکان دەربارەی Github چونکە ئاسانترە بۆ کارکردن لە هەر شوێن و ناوچەیەکی کاتەوە لەگەڵ کەسێکی دیکە.", 5 | "{/str/}Collaborators{/str_e/} are other GitHub users who are given permission to make edits to a repository owned by someone else. You may also hear the term {/str/}contributor{/str_e/}, this describes another GitHub user who has made contributions, through a Fork and Pull Request, to a project.": "{/str/} هاوکاران{/str_e/} بەکارهێنەرەکانی تری Githubـن کە ڕێگەیان پێدەدرێ گۆڕانکاری بکەن لە ڕیپۆیەکدا کە خاوەندارێتی ئەکرێ لەلایەن کەسێکی دیکەوە. هەروەها ڕەنگە گوێبیستی {/str/}خۆبەخش{/str_e/} ببیت، ئەمە پێناسەی بەکارهێنەرێکی تری Github دەکات کە بەشداری کردووە، بەهۆی Fork و Pull Requestـێکەوە، لە پڕۆژەکەدا.", 6 | "{/lnk_reporobot/}@reporobot{/lnk_e/} is a robot from outer space that loves collaborating on repos.": "{/lnk_reporobot/}@reporobot{/lnk_e/} ڕۆبۆتێکە لە بۆشایی دەرەوە حەز بە هاوکاری دەکات لە ڕیپۆکان.", 7 | "Hello, Repo Robot!": "سڵاو، ڕۆبۆتی ڕیپۆ!", 8 | "To add collaborators to one of your projects, visit the repository's page on your GitHub account and click the 'Settings' tab in the menu in the upper part of the page. Then select the 'Manage access' option and click on 'Invite a collaborator'. Type the username into the text box, select the right user and finally add the collaborator to your repository by clicking the green button.": "بۆ زیادکرانی هاوکارەکان بۆ یەکێک لە پڕۆژەکانت، سەردانی پەڕەی ڕیپۆکەت بکە لەسەر هەژماری Githubـەکەت و کرتە بکە لە بەشی 'Settings' لە لیستەکەدا لە بەشی سەرەوەی پەڕەکە. پاشان هەڵبژاردەی 'Manage access' دیاریبکە و کرتە لە 'Invite collaborator' بکە. نازناوەکەی لە لاکێشەی نوسینەکە بنووسە، بەکارهێنەرە دروستەکە هەڵبژێرە و لە کۆتاییدا هاوکارەکە زیادبکە بۆ ڕیپۆکەت بە کرتە کردن لەسەر دوگمە سەوزەکە.", 9 | "{/str/}Now go to your forked Patchwork repository's page on GitHub and add 'RepoRobot' as a collaborator.{/str_e/} The URL should look like this, but with your own username.": "{/str/}ئێستا بڕۆ بۆ پەڕەی کۆگای Patchworkـە fork کراوەکەت لەسەر Github و 'RepoRobot' زیادبکە وەک هاوکار.{/str_e/} URLـەکە دەبێ لەمە دەچێ بەڵام نازناوەکەی خۆتی لەگەڵە." 10 | } 11 | -------------------------------------------------------------------------------- /resources/i18n/ku/ch09.json: -------------------------------------------------------------------------------- 1 | { 2 | "Keep your file up to date by pulling in changes from collaborators.": "پەڕگەکانت لە نوێترین بهێڵەوە بە ڕاکێشانی گۆڕانکارییەکان لە هاوکارانەوە.", 3 | "Pulling from a Remote": "ڕاکێشان لە remoteـەوە", 4 | "If you're working on something with someone else you need to stay up to date with the latest changes. So you'll want to {/str/}pull{/str_e/} in any changes that may have been pushed to the central GitHub repository.": "ئەگەر تۆ لەگەڵ کەسێکی دیکە کاردەکەیت لەسەر شتێک پێویستت بەوەیە لەگەڵ کۆتا گۆڕانکارییەکان بڕۆیت. هەربۆیە پێویستە هەر گۆڕانکارییەک نێردرابوو بۆ ڕیپۆی ناوەندی لە Github {/str/}ڕابکێشی{/str_e/}.", 5 | "If someone else {/str/}pushed{/str_e/} changes to the {/str/}remote{/str_e/} repository (on GitHub), you might want to {/str/}pull{/str_e/} these changes into your {/str/}local{/str_e/} repository.": "ئەگەر کەسێکی دیکە گۆڕانکارییەکانی {/str/}push کرد{/str_e/} بۆ ئەو کۆگا {/str/}remote{/str_e/}ـە (لەسەر GitHub)، لەوانەیە بتەوێ {/str/}pull{/str_e/}ـی ئەو گۆڕانکارییانە بکەیت بۆ کۆگا {/str/}local{/str_e/}ـەکەت.", 6 | "What has Reporobot been up to?": "Reporobot چی ئەکرد؟", 7 | "See if Reporobot has made any changes to your branch by pulling in any changes from the remote named 'origin' on GitHub:": "ببینە ئایا Reporobot هیچ گۆڕانکارییەکی کردووە لە لقەکەت بە ڕاکێشانی هەر گۆڕانکارییەک لە Githubـەوە بەهۆی ئەو remoteـەی ناونراوە 'origin'.", 8 | "If nothing's changed, it will tell you 'Already up-to-date'. If there are changes, Git will merge those changes into your local version.": "ئەگەر هیچ نەگۆڕابوو، پێت ئەڵێ 'Already up-to-date'. ئەگەر گۆڕانکاری هەبوو، Git گۆڕانکارییەکان یەکدەخات لەگەڵ وەشانە ناوخۆییەکەت.", 9 | "Did Reporobot make changes? Git tells you where changes were made. You can open that file and see Reporobot's updates. Surprise, Reporobot is an artist!": "ئایا Reporobot گۆڕانکاری کردووە؟ Git پێت ئەڵێ گۆڕانکارییەکان لە کوێ کراون. ئەتوانی ئەو پەڕگەیە بکەیتەوە و نوێکارییەکانی Reporobot ببینیت. جا بڵێ چی، Reporobot هونەرمەندە!", 10 | "Check Git status": "دۆخی Git بپشکنە", 11 | "Pull in changes from a remote branch": "گۆڕانکارییەکان ڕابکێشە لە لقێکی remoteـەوە", 12 | "See changes to the remote before you pull in": "گۆڕانکارییەکان ببینەوە پێش ئەوەی ڕایان بکێشیتە ناوەوە" 13 | } 14 | -------------------------------------------------------------------------------- /resources/i18n/ku/ch11.json: -------------------------------------------------------------------------------- 1 | { 2 | "Merge your branch locally, delete the branch and pull from upstream.": "لقەکەت لە ناوخۆدا یەکبخە، لقەکە بسڕەوە و لە upstreamـەوە pull بکە.", 3 | "Cleaning up": "خاوێنکردنەوە", 4 | "Once you don't need branches anymore you can delete them locally and remotely. This is helpful so that you don't end up with a pile of old branches.": "هەرکە پێویستیت نەما بە لقەکان چیدیکە ئەتوانی لە ناوخۆ و لە remoteـدا بیانسڕیتەوە. ئەمە یارمەتیدەرە تا کۆمەڵێ لقی کۆنت بەسەرەوە کەڵەکە نەبێ.", 5 | "Merge Locally": "یەکخستنی ناوخۆیی", 6 | "Your pull request has been merged! Your branch was merged into the 'gh-pages' branch of the original on GitHub. You can merge your branch locally, too.": "pull requestـەکەت یەکخرا! لقەکەر یەکخرا لەگەڵ لقی 'gh-pages'ـە ڕەسەنەکە لەسەر GitHub. ئەتوانی لقەکەت لە ناوخۆشدا یەکبخەیت.", 7 | "First, move into the branch you want to merge into — in this case, the branch 'gh-pages'.": "سەرەتا، بڕۆ ئەو لقەی کە ئەتەوێ یەکخستنی لەگەڵ بکەیت — لەم حاڵەتەدا، لقی 'gh-pages'ـە.", 8 | "Now tell Git what branch you want to merge in — in this case, your feature branch that begins with {/dqm/}add-{/dqm/}.": "ئێستا بە Git بڵێ دەتەوێ کام لقی لەگەڵ یەکبخەی — لەم حاڵەتەدا لقی تایبەتمەندییەکەت کە بە {/dqm/}add-{/dqm/} دەست پێ دەکات.", 9 | "Tidy up by deleting your feature branch. Now that it has been merged you don't really need it around.": "خاوێنی بکەوە بە سڕینەوەی لقی تایبەتمەندییەکەت. ئێستا کە یەکخراوە چیتر پێویستت پێی نابێ.", 10 | "You can also delete the branch from your remote on GitHub:": "هەروەها ئەتوانیت لقەکە لەسەر remoteـەکەشت بسڕیتەوە لەسەر GitHub:", 11 | "Pull from Upstream": "ڕابکێشە لە Upstreamـەوە", 12 | "And last but not least, the original has changed since your pull request was merged — Reporobot added your name to the website! If you pull in these changes from upstream you'll be up to date and have that version too. You can actually see it live as well at: yourusername.github.io/patchwork.": "دواهەمین بەڵام گرنگ، ڕەسەنەکە گۆڕاوە دوای ئەوەی pull requestـەکەت یەکخرا — Reporobot ناوەکەتی زیادکرد بۆ ماڵپەڕەکە! ئەگەر لە upstreamـەوە pull بکەیت ئەوە نوێترین ئەبیت و ئەو وەشانەشت ئەبێت. بەڕاستی بەهەمان شێوە ئەتوانی بیبینیت کە ئەژی لە: yourusername.github.io/patchwork.", 13 | "To pull from the original upstream:": "بۆ pull کردن لە upstreamـە ڕەسەنەکەوە:", 14 | "Congratulations!": "پیرۆزە!", 15 | "You've created local repositories, remote repositories, worked with a collaborator, pushed, pulled and joined the millions of others developing and enriching open source!": "کۆگای ناوخۆیی و کۆگای remoteـت درووست کردووە، لەگەڵ هاوکارێکدا کارت کردووە، pushـت کردووە، pullـت کردووە و چوویتە پاڵ ملیۆنانی دیکە کە سەرچاوە کراوە گەشەپێ دەدەن و دەوڵەمەند دەکەن!", 16 | "Visit {/lnk_patchwork/}jlord.github.io/patchwork{/lnk_e/} to see your name incorporated! Looking to keep going? Checkout the {/lnk_next/}What Next{/lnk_e/} section on the resources page in this app.": "سەردانی {/lnk_patchwork/}jlord.github.io/patchwork{/lnk_e/} بکە بۆ بینینی ناوەکەت کە زیادکراوە! ئەتەوێت بەردەوام بیت؟ بەشی {/lnk_next/}دواتر چی{/lnk_e/} ببینە لە پەڕەی سەرچاوەکان لەم ئەپەدا.", 17 | "Merge a branch into current branch": "لقێک یەکبخە لەگەڵ لقی ئێستا", 18 | "Change the branch you're working on": "ئەو لقە بگۆڕە کە کاری لەسەر دەکەیت", 19 | "Delete a local branch": "لقێکی ناوخۆیی بسڕەوە", 20 | "Delete a remote branch": "لقێکی remote بسڕەوە", 21 | "Pull from a remote branch": "pull بکە لە لقێکی remoteـەوە" 22 | } 23 | -------------------------------------------------------------------------------- /resources/i18n/ku/common.json: -------------------------------------------------------------------------------- 1 | { 2 | "Goal": "ئامانج", 3 | "Didn't Pass?": "دەرنەچوویت؟", 4 | "Tip": "زانیاری", 5 | "Step": "هەنگاو", 6 | "Confirm Clearing Statuses": "دڵنیابوونەوە لە سڕینەوەی دۆخەکان", 7 | "Are you sure you want to clear the status for every challenge?": "ئایا دڵنیای دەتەوێ دۆخی هەموو ئەرکەکان بسڕیتەوە؟", 8 | "Yes": "بەڵێ", 9 | "No": "نەخێر", 10 | "Challenges": "ئەرکەکان" 11 | } 12 | -------------------------------------------------------------------------------- /resources/i18n/ku/dictionary.json: -------------------------------------------------------------------------------- 1 | { 2 | "Below are the terminal and Git commands used in the Git-it challenges.": "ئەمانەی خوارەوە فرمانەکانی تێرمیناڵ و Gitـن کە لە ئەرکەکانی Git-itـدا بەکارهاتووە.", 3 | "Bash/Terminal Basics": "بنەماکانی Bash/Terminal", 4 | "Make a new folder (aka make directory)": "بوخچەیەکی نوێ دروست بکە (یانی folderـێک دروستبکە)", 5 | "Navigate into an existing folder (aka 'change directory')": "بڕۆ ناو بوخچەیەک کە بوونی هەیە (یانی folder بگۆڕە)", 6 | "List the items in a folder": "دانەکانی نێو بوخچەیەک ڕیز بکە", 7 | "Configuring Git": "ڕێکخستنی Git", 8 | "Check Git version": "وەشانی Git بپشکنە", 9 | "Set your name": "ناوت دابنێ", 10 | "Set your email": "ئیمەیڵەکەت دابنێ", 11 | "Set your Github account (case sensitive)": "هەژماری Guthubـەکەت دابنێ (گەورە و بچووکی پیتەکان هەژماردەکرێ)", 12 | "Git Basics": "بنەماکانی گیت", 13 | "Turn Git on for a folder": "Git دابگیرسێنە بۆ بوخچەیەک", 14 | "Check status of changes to a repository": "دۆخی گۆڕانکارییەکان بپشکنە لە ڕیپۆیەکدا", 15 | "View changes to files": "گۆڕانکاری پەڕگەکان ببینە", 16 | "Add a file's changes to be committed": "گۆڕانکاری پەڕگەکان زیادبکە تا commit بکرێن", 17 | "To add all files changes": "بۆ زیادکردنی هەموو گۆڕانکارییەکانی پەڕگەکان", 18 | "To commit (aka save) the changes you've added with a short message describing the changes": "بۆ commit (یانی پاشەکەوت کردن)ـی گۆڕانکارییەکان کە زیادت کردوون لەگەڵ نامەیەکی کورت لە پێناسەی گۆڕانکارییەکان ئەکا", 19 | "Copy a repository to your computer": "ڕیپۆیەک کۆپی بکە بۆ سەر کۆمپیوتەرەکەت", 20 | "Git Branches": "لقەکانی گیت", 21 | "Create a new branch": "لقێکی نوێ دروست بکە", 22 | "Move onto a branch": "بڕۆ سەر لقێک", 23 | "You can create and switch to a branch in one line": "ئەتوانی لقێک دروست بکەیت و بچیتە ئەو لقە بە یەک دێڕ", 24 | "List the branches": "لقەکان ڕیز بکە", 25 | "Rename a branch you're currently on": "ناوی ئەو لقە بگۆڕە کە ئێستا لەسەریت", 26 | "Git Remotes": "remoteـەکانی گیت", 27 | "Add remote connections": "پەیوەندییە remoteـەکان زیادبکە", 28 | "Set a URL to a remote": "URLـی remoteـێک دابنێ", 29 | "View remote connections": "پەیوەندییە remoteـەکان ببینە", 30 | "Pulling in Git": "ڕاکێشان لە گیت", 31 | "Pull in changes": "گۆڕانکارییەکان ڕابکێشە", 32 | "Pull in changes from a remote branch": "گۆڕانکارییەکان ڕابکێشە لە لقێکی remoteـەوە", 33 | "See changes to the remote before you pull in": "گۆڕانکارییەکان ببینەوە پێش ئەوەی ڕایان بکێشیتە ناوەوە", 34 | "Push & Merge in Git": "ناردن و یەکخستن لە گیت", 35 | "Push changes": "گۆڕانکارییەکان بنێرە", 36 | "Merge a branch into current branch": "لقێک یەکبخە لەگەڵ لقی ئێستا", 37 | "Deleting Remotes and Branches in Git": "سڕینەوەی remote و لقەکان لە گیت", 38 | "Delete a local branch": "لقێکی ناوخۆیی بسڕەوە", 39 | "Delete a remote branch": "لقێکی remote بسڕەوە" 40 | } 41 | -------------------------------------------------------------------------------- /resources/i18n/ku/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "Challenges completed:": "ئەرکەکان تەواوبوون:", 3 | "Welcome!": "بەخێربێیت!", 4 | "Git-it teaches the basics of using Git and GitHub. These basics aren't merely beginner Git and GitHub skills, they are the commands and steps you'll use over and over as in your awesome social coding + version controlled future.": "Git-it فێری بنەماکانی بەکارهێنانی Git و Githubـت ئەکا. ئەم بنەمایانە تەنها کارامەییە سەرەتاییەکانی Git و Github نین، ئەمانە ئەو فرمان و هەنگاوانەن کە بەکاری دەهێنیت لە داهاتووە پڕشنگدارەکەی کۆدنووسی کۆمەڵایەتی و وەشان کۆنتڕۆڵکراوەکەتدا.", 5 | "But Wait – There's More!": "بەڵام چاوەڕێکە – زیاتر هەیە!", 6 | "You can also complete Git-it in several other languages, just select the language you want from the menu in the upper left.": "ئەتوانی Git-it تەواو بکەی بە چەندین زمانی دیکە. تەنها ئەو زمانە هەڵبژێرە کە دەتەوێت لە لیستەکەی سەرەوە لە دەستەچەپ.", 7 | "The 'Window' option in the application menu will take you to the {/lnk_dictionary/}Dictionary{/lnk_e/}, {/lnk_resources/}Resources{/lnk_e/} and {/lnk_about/}About{/lnk_e/} page.": "هەڵبژاردەی 'پەنجەرە' لە لیستی ئەپەکە دەتبات بۆ پەڕەی {/lnk_dictionary/}فەرهەنگ{/lnk_e/}، {/lnk_resources/}سەرچاوەکان{/lnk_e/} وە {/lnk_about/}دەربارە{/lnk_e/}. ", 8 | "Start challenge one!": "ئەرکی یەکەم دەست پێبکە!", 9 | "On your way!": "لە ڕێگادایت!", 10 | "You're making progress, keep going and pick up where you left off.": "خەریکیت پێش ئەکەویت، بەردەوامبە و لەو شوێنەوە دەست پێبکە کە لێی وەستابوویت.", 11 | "Pick up where you left off!": "لەو شوێنەوە دەست پێبکە کە لێی وەستابوویت!", 12 | "Congratulations!": "پیرۆزە!", 13 | "You finished the challenges and are primed for social coding—so what's next?": "ئەرکەکانت تەواو کرد ئامادەیت بۆ کۆدنووسینی کۆمەڵایەتی — کەوایە دواتر چی؟", 14 | "Ideas for beginner projects": "بیرۆکەکەکان بۆ پڕۆژە سەرەتاییەکان", 15 | "Clear and start over": "بسڕەوە و لەسەرەتاوە دەستپێبکەوە" 16 | } 17 | -------------------------------------------------------------------------------- /resources/i18n/ku/menu.json: -------------------------------------------------------------------------------- 1 | { 2 | "About Git-it": "دەربارەی Git-it", 3 | "Services": "خزمەتگوزارییەکان", 4 | "Hide Git-it": "Git-it بشارەوە", 5 | "Hide Others": "ئەوانی تر بشارەوە", 6 | "Show All": "هەموو پشان بدە", 7 | "Quit": "دەرچوون", 8 | "View": "پێشاندان", 9 | "Reload": "باربکەوە", 10 | "Full Screen": "پڕ بەشاشە", 11 | "Minimize": "بچوککردنەوە", 12 | "Bring All to Front": "هەموو بهێنە پێشەوە", 13 | "Toggle Developer Tools": "ئامرازەکانی گەشەپێدەر بگۆڕە", 14 | "Window": "پەنجەرە", 15 | "Home": "ماڵەوە", 16 | "Dictionary": "فەرهەنگ", 17 | "Resources": "سەرچاوەکان", 18 | "Help": "یارمەتی", 19 | "App Repository": "ڕیپۆی ئەپەکە", 20 | "Open Issue": "کێشەیەک بکەرەوە", 21 | "About App": "دەربارەی ئەپ", 22 | "&File": "&پەڕگە", 23 | "&Quit": "&دەرچوون" 24 | } 25 | -------------------------------------------------------------------------------- /resources/i18n/ku/resources.json: -------------------------------------------------------------------------------- 1 | { 2 | "Resources": "سەرچاوەکان", 3 | "To reinforce what you just learned or to try another way, here are suggestions for other guides and tutorials.": "بۆ دووپاتکردنەوەی ئەوەی کە تازە فێری بوویت یان بۆ تاقیکردنەوەی ڕێگای دیکە، ئەمە چەن پێشنیارێکە بۆ چەند فێرکاری و ڕێنیشاندەرێکی دیکە.", 4 | "If you're ready to dive into a project, jump to the {/lnk_next/}beginner projects{/lnk_e/} section.": "ئەگەر ئامادەی بچیتە وردەکاری پڕۆژەیەکەوە، بازبدە بۆ بەشی {/lnk_next/}پڕۆژەی سەرەتاکان{/lnk_e/}", 5 | "Interactive Tutorial": "فێرکاری بەژدارییانە", 6 | "{/lnk_learngitbranching/}Learn Git Branching{/lnk_e/} (Uses an terminal emulator) by Peter Cottle": "{/lnk_learngitbranching/}Learn Git Branching{/lnk_e/} (بەرجەستەکەری تێرمیناڵ بەکاردەهێنێ) لەلایەن Peter Cottle", 7 | "Guides, Books and Cheatsheets": "ڕێنیشاندانەکان، پەرتووکەکان و کورتکراوەکان", 8 | "{/lnk_intro/}Introduction to Git{/lnk_e/} by Git": "{/lnk_intro/}Introduction to Git{/lnk_e/} لەلایەن Git", 9 | "{/lnk_book/}Pro Git Book{/lnk_e/} by Scott Chacon": "{/lnk_book/}Pro Git Book{/lnk_e/} لەلایەن Scott Chacon", 10 | "{/lnk_guide/}Simple Guide{/lnk_e/} by Roger Dudler": "{/lnk_guide/}ڕێنیشاندەرێکی ئاسان{/lnk_e/} لەلایەن Roger Dudler", 11 | "{/lnk_help/}Github Help{/lnk_e/} by GitHub": "{/lnk_help/}Github Help{/lnk_e/} لەلایەن Github", 12 | "{/lnk_immersion/}Git Immersion{/lnk_e/} by Neo": "{/lnk_immersion/}Git Immersion{/lnk_e/} لەلایەن Neo", 13 | "{/lnk_cheatsheet/}Git Cheatsheet{/lnk_e/} by GitHub": "{/lnk_cheatsheet/}Git Cheatsheet{/lnk_e/} لەلایەن Github", 14 | "{/lnk_guides/}GitHub Guides{/lnk_e/} by GitHub": "{/lnk_guides/}GitHub Guides{/lnk_e/} لەلایەن Github", 15 | "{/lnk_kaigi/}GitHub Kaigi{/lnk_e/} by Yunico Nagata": "{/lnk_kaigi/}GitHub Kaigi{/lnk_e/} لەلایەن Yunico Nagata", 16 | "GitHub Desktop": "GitHub Desktop", 17 | "You likely installed this before you started Git-it but if you didn't, here's the link.": "وادەردەکەوێ ئەمەت دامەزراندووە پێش دەستپێکردنی Git-it بەڵام ئەگەر وات نەکردووە، ئەمە لینکەکەیە.", 18 | "The GitHub Desktop app lets you do much of what you can do in terminal (though not all) and is a bit easier to read at times. Personally, I use it to look over anything not small {/cde/}diff{/cde_e/} I have. Your changes are really nice to see this way.": "ئەپی GitHub Desktop لێدەگەڕێ زۆرتر ئەنجام بدەیت وەک ئەوەی ئەتوانی بیکەیت لە تێرمیناڵ(نەک هەموو شتێکیش) و تۆزێک ئاسانتریشە بۆ خوێندنەوە. وەک خۆم، بەکاری دەهێنم بۆ سەیرکردنی هەرشتێک جگە لە {/cde/}diff{/cde_e/}ـێکی بچووک. گۆڕانکارییەکانت زۆر جوانن کە بەم شێوەیە سەیریان بکەیت.", 19 | "{/lnk_desktop/}Github Desktop App{/lnk_e/} (OSX, Windows) by GitHub": "{/lnk_desktop/}ئەپی Github Desktop{/lnk_e/} (OSX, Windows) لەلایەن GitHub", 20 | "{/lnk_guides/}Github Desktop Guides{/lnk_e/} by GitHub": "{/lnk_guides/}Github Desktop Guides{/lnk_e/} لەلایەن Github", 21 | "You can checkout further git desktop applications on the Git website: {/lnk_guis/}Git GUIs{/lnk_e/}": "ئەتوانی ئەپی زیاتری گیت ببینیت لەسەر ماڵپەڕی Git: {/lnk_guis/}Git GUIs{/lnk_e/}", 22 | "What Next?": "دواتر چی؟", 23 | "Now that you're feeling good because you've got the fundamentals down, here are some beginner project ideas to keep you going!": "ئێستا کە هەست بەباشی ئەکەیت چونکە بنەماکانت وەرگرتووە، ئەمانە بیرۆکەی چەند پڕۆژەیەکی سەرەتایین بۆ ئەوەی بەردەوامبیت لە ڕۆشتن!", 24 | "{/lnk_hello/}Fork this{/lnk_e/} to create a personal website (Requires HTML & CSS)": "{/lnk_hello/}ئەمە Fork بکە{/lnk_e/} بۆ دروستکردنی ماڵپەڕێکی کەسی (پێویستت هەیە بە HTML & CSS)", 25 | "{/lnk_forkngo/}Gallery of forkable sites{/lnk_e/} (Requires HTML & CSS)": "{/lnk_forkngo/}ئەلبومی ئەو ماڵپەڕانەی fork دەکرێن{/lnk_e/} (پێویستت هەیە بە HTML & CSS)", 26 | "Create a repository and open issues with {/lnk_tasks/}to-do lists{/lnk_e/}.": "ڕیپۆیەک دروست بکەو کێشەیەک بکەرەوە لەگەڵ {/lnk_tasks/}to-do lists{/lnk_e/}.", 27 | "{/lnk_explore/}Explore GitHub projects{/lnk_e/} for ones that match your interest.": "{/lnk_explore/}بگەڕێ لەناو پڕۆژەکانی Github{/lnk_e/} بۆ ئەوانەی کە لەگەڵ حەزەکانت یەکدێتەوە." 28 | } 29 | -------------------------------------------------------------------------------- /resources/i18n/ku/verify.json: -------------------------------------------------------------------------------- 1 | { 2 | "Change Directory": "بوخچە بگۆڕە", 3 | "Select directory": "بوخچە دیاریبکە", 4 | "Path is not a directory.": "ڕێچکەکە بوخچە نییە.", 5 | "Found branch as expected!": "لقەکە دۆزرایەوە وەک چاوەڕوان دەکرا!", 6 | "Branch name expected: {/expectedBranch/}": "ناوی لقی چاوەڕوانکراو: {/expectedBranch/}", 7 | "File in contributors folder!": "پەڕگە لە بوخچەی خۆبەخشەکان!", 8 | "File not found in contributors folder.": "پەڕگە لە بوخچەی خۆبەخشەکان نەدۆزرایەوە.", 9 | "Changes have been pushed!": "گۆڕانکارییەکان نێردران!", 10 | "Changes not pushed.": "گۆڕانکارییەکان نەنێردران.", 11 | "Can't find committed changes.": "ناتوانرێ گۆڕانکارییە کۆمیت کراوەکان بدۆزێتەوە.", 12 | "Changes have been committed!": "گۆڕانکارییەکان کۆمیت کران!", 13 | "Seems there are still changes to commit.": "وادیارە گۆڕانکاری تر هەن بۆ کۆمیت کردن.", 14 | "Did not find 2 remotes set up.": "دامەزراندنی 2 remote نەدۆزرایەوە.", 15 | "Origin points to your fork!": "Origin ئاماژە بە forkـەکەت ئەکات!", 16 | "No Origin remote found pointing to {/userrepo/}.": "remoteـی Origin نەدۆزرایەوە ئاماژە بکا بە {/userrepo/}.", 17 | "Upstream remote set up!": "remoteـی سەرچاوە دامەزرا!", 18 | "No Upstream remote found pointing to {/patchworkrepo/}.": "هیچ remoteـێکی سەرچاوە نەدۆزرایەوە ئاماژە بکا بە {/patchworkrepo/}.", 19 | "Found Git installed!": "Git دۆزرایەوە و دامەزراوە!", 20 | "Did not find Git installed.": "Git نەدۆزرایەوە کە دامەزرابێ.", 21 | "Name Added!": "ناو زیادکرا!", 22 | "No name found.": "هیچ ناوێک نەدۆزرایەوە.", 23 | "Email Added!": "ئیمەیڵ زیادکرا!", 24 | "No email found.": "هیچ ئیمەیڵێک نەدۆزرایەوە.", 25 | "No username found.": "هیچ نازناوێک نەدۆزرایەوە.", 26 | "Username added to Git config!": "نازناو زیادکرا بۆ ڕێکخستنەکانی Git!", 27 | "You're on GitHub!": "تۆ لەسەر Githubـیت!", 28 | "GitHub account matching stored Git-username was not found.": "هیچ هەژمارێکی Github هەمان نازناوی کۆگاکراوی هەبێت نەدۆزرایەوە.", 29 | "Username capitalisation identical on GitHub and Git config!": "گەورەکردنی پیتەکان لەسەر Github و ڕێکخستنی Git هەمان شتن!", 30 | "GitHub & Git config usernames do not match (Take care on capitalisation!).": "نازناو لە Github و ڕێکخستنی Git وەک یەک نین ( ئاگاداری گەورەیی و بچووکی پیتەکان بە!).", 31 | "Reporobot has been added!": "Reporobot زیادکرا!", 32 | "Reporobot seems not to have access to your fork.": "واپێدەچێ Reporobot دەستی نەگات بە forkـەکەت.", 33 | "Your branch has been merged!": "لقەکەت یەکخرا!", 34 | "No merge of your branch in history.": "هیچ یەکخستنێک لە مێژوودا بۆ لقەکەت نییە!", 35 | "Uh oh, your branch is still there.": "ئا‌ی ئای، ئەوە لقەکەت هەر لێرەیە.", 36 | "Branch deleted!": "لق سڕایەوە!", 37 | "Up to date!": "نوێترینە!", 38 | "There are changes to pull in.": "گۆڕانکاری هەیە بۆ ڕاکێشان.", 39 | "Found remote set up.": "دامەزراندنی remote دۆزرایەوە.", 40 | "Did not find remote origin.": "remoteـی origin نەدۆزرایەوە.", 41 | "You pushed changes!": "گۆڕانکارییەکانت نارد!", 42 | "No evidence of push.": "هیچ بەڵگەیەکی ناردن نییە.", 43 | "No pushed changes found.": "هیچ گۆڕانکارییەکی نێردراو نەدۆزرایەوە.", 44 | "This is a Git repository!": "ئەمە ڕیۆیەکی Gitـە!", 45 | "This folder is not being tracked by Git.": "ئەم بوخچەیە لەلایەن Gitـەوە چاودێری ناکرێ.", 46 | "Found your pull request!": "pull requestـەکەت دۆزرایەوە!", 47 | "No merged pull request found for username {/username/}. If you created a pull request on github, return there to see if reporobot left some comments.": "هیچ pull requestـێکی یەکخراو نەدۆزرایەوە بۆ نازناوەکەت {/username/}. ئەگەر pull requestـێکت دروست کردووە لەسەر github، بگەڕێوە بۆ ئەوێ و بزانە ئایا reporobot هیچ سەرنجێکی جێهێشتووە.", 48 | "Verify!": "بسەلمێنە!", 49 | "Clear status": "دۆخ بسڕەوە", 50 | "Please select your repository directory.": "تکایە بوخچەی ڕیپۆکەت دیاری بکە.", 51 | "Selected directory: ": "بوخچەی دیاریکراو:" 52 | } 53 | -------------------------------------------------------------------------------- /resources/i18n/pl-PL/about.json: -------------------------------------------------------------------------------- 1 | { 2 | "About Git-it": "O Git-it", 3 | "Git-it teaches the essential, everyday Git commands developers use everyday along with the GitHub Flow, the way developers collaborate on GitHub.": "Git-it uczy podstawowych komend Gita używanych codziennie przez deweloperów, wraz z GitHub Flow, sposobem w jaki deweloperzy współpracują na GitHubie.", 4 | "Some challenges require an internet connection, so you'll need to be online to complete Git-it. But you can always open the app and view the challenges and resources offline.": "Część wyzwań wymaga połączenia z internetem, więc by ukończyć Git-it będziesz potrzebować połączenia z siecią. Zawsze jednak możesz otworzyć aplikację i przeglądać wyzwania i zasoby bez łączenia się z Internetem.", 5 | "Real Development Environment": "Rzeczywiste środowisko deweloperskie", 6 | "Git-it uses the real terminal, Git and GitHub (rather than emulating them). When you finish you'll have real repositories on your GitHub account and green squares on your contribution chart!": "Git-it używa prawdziwego terminala, Gita i GitHuba (bez potrzeby emulowania ich). Kiedy ukończysz wszystkie wyzwania, na Twoim koncie GitHub znajdą się rzeczywiste repozytoria oraz zielone kwadraciki na grafie współpracy.", 7 | "The Code that Made Git-it": "Kod, który tworzy Git-it", 8 | "This app is built with HTML, CSS and JS and uses the {/lnk_electron/}Electron{/lnk_e/} library. All of the code for Git-it is online in its {/lnk_repo/}repository on GitHub{/lnk_e/}. Git-it is a labor of love, originally created by Jessica Lord ({/lnk_jlord/}@jlord{/lnk_e/}) and kind contributors.": "Ta aplikacja została zbudowana przy użyciu HTML, CSS i JS oraz wykorzystuje bibliotekę {/lnk_electron/}Electron{/lnk_e/}. Pełen kod aplikacji Git-it jest dostępny online w {/lnk_repo/}repozytorium GitHub{/lnk_e/}. Git-it jest owocem pasji, oryginalnie stworzony przez Jessicę Lord ({/lnk_jlord/}@jlord{/lnk_e/}) i życzliwych współtwórców." 9 | } 10 | -------------------------------------------------------------------------------- /resources/i18n/pl-PL/ch03.json: -------------------------------------------------------------------------------- 1 | { 2 | "Create a file in your new repository, add something to that file and commit that change with Git.": "Tworzenie pliku w Twoim nowym repozytorium, dodawanie mu zawartości i zatwierdzenie zmian za pomocą Git.", 3 | "Commits": "Zatwierdzenia zmian", 4 | "Commits are core to using Git. They are the moments in which you save and describe the work you've done. They are the ticks in the timeline of your project's history.": "Zatwierdzenia zmian (potocznie zwane commitami od angielskiego Commits) są kluczem do korzystania z Gita. Są to momenty w których zapisywałeś i opisywałeś wykonaną pracę. To punkty na osi czasu Twojego projektu.", 5 | "Create a New File": "Tworzenie nowego pliku", 6 | "Now that you've got a repository started let's add a file to it.": "Teraz gdy masz już skonfigurowane repozytorium dodaj do niego plik.", 7 | "Open your text editor and create a new empty file. Now write a little bit of text, perhaps type {/dqm/}Hello!{/dqm/}, and save the file as 'readme.txt' in the 'hello-world' folder you created in the last challenge.": "Otwórz swój edytor tekstowy i utwórz nowy pusty plik. Teraz wprowadź do niego zawartość, może podstawowe przywitanie {/dqm/}Cześć!{/dqm/}, i zapisz go jako 'readme.txt' w folderze 'hello-world' utworzonym w ostatnim wyzwaniu.", 8 | "Check Status + Add and Commit Changes": "Sprawdzanie statusu + dodawanie i zatwierdzanie zmian", 9 | "Next check the {/str/}status{/str_e/} of your repository to find out if there have been changes. You know you have changed something, but does Git?": "Następnie sprawdź {/str/}status{/str_e/} repozytorium by dowiedzieć się czy miały miejsce zmiany. Ty wiesz o tym kiedy coś zmieniasz, ale czy Git wie?", 10 | "Make sure you're still within your 'hello-world' directory when you're running these commands. Use Git to see what changed in your repository:": "Upewnij się, że nadal jesteś w folderze 'hello-world' kiedy będziesz uruchamiał poniższe polecenia. Za pomocą Gita sprawdź co się zmieniło w repozytorium:", 11 | "First, check the status:": "Najpierw sprawdź status repozytorium:", 12 | "Git should tell you that a file has been added.": "Git powinien powiedzieć Ci, że plik został dodany.", 13 | "Then {/str/}add{/str_e/} the file you just created so that it becomes a part of the changes you will {/str/}commit{/str_e/} (aka save) with Git:": "Następnie {/str/}dodaj{/str_e/} dopiero utworzony plik do listy zmian do {/str/}zatwierdzenia{/str_e/} (zapisania) za pomocą Gita:", 14 | "Finally, {/str/}commit{/str_e/} those changes to the repository's history with a short (m) message describing the updates.": "Na koniec, {/str/}zatwierdź{/str_e/} wybrane zmiany w historii repozytorium wraz z krótką wiadomością opisującą zawartość aktualizacji.", 15 | "Step: Make More Changes": "Krok: zrób więcej zmian", 16 | "Now add another line to 'readme.txt' and save the file again.": "Dodaj kolejną linię do 'readme.txt' i po raz kolejny zapisz plik.", 17 | "In terminal, you can view the {/str/}diff{/str_e/}erence between the file now and how it was at your last commit.": "W terminalu możesz zobaczyć {/str/}różnicę{/str_e/} pomiędzy plikiem teraz, a ostatnim zatwierdzonym stanem.", 18 | "Tell Git to show you the {/str/}diff{/str_e/}:": "Poinstruuj gita by wyświetlił {/str/}różnice{/str_e/}:", 19 | "Now with what you just learned above, commit this latest change.": "Wykorzystując wiedzę z poprzedniego kroku, zapisz bieżące zmiany.", 20 | "Check status of changes to a repository": "Sprawdzanie statusu zmian w repozytorium", 21 | "View changes to files": "Wyświetlanie zmian w plikach", 22 | "Add a file's changes to be committed": "Dodawanie zmian w pliku do zatwierdzania", 23 | "To add all files changes": "Dodawanie wszystkich zmian do zatwierdzania", 24 | "To commit (aka save) the changes you've added with a short message describing the changes": "Zatwierdzanie dodanych zmian wraz z ich krótkim opisem" 25 | } 26 | -------------------------------------------------------------------------------- /resources/i18n/pl-PL/ch04.json: -------------------------------------------------------------------------------- 1 | { 2 | "Create a GitHub account and add your username to your Git config.": "Tworzenie konta GitHub i dodawanie nazwy użytkownika do konfiguracji Gita.", 3 | "Working Better, Together": "Lepsza (współ)praca", 4 | "The repository you've created so far is just on your computer, which is handy, but makes it pretty hard to share and work on with others. No worries, that's what GitHub is for!": "Repozytorium które utworzyłeś znajduje się w tej chwili tylko na Twoim komputerze, co jest poręczne, ale czyni to je niezbyt wygodnym jeśli chodzi o współpracę z innymi. Nie martw się, właśnie po to istnieje GitHub!", 5 | "GitHub is a website that allows people everywhere to upload what they're working on with Git so that everyone can easily work together on the same project. GitHub which acts as the central repository for you and everyone else to share. You push your changes to it and pull down changes from others.": "GitHub jest stroną pozwalającą ludziom z całego świata na udostępnianie tego nad czym obecnie pracują używając Gita, by każdy mógł wygodnie współpracować nad tym samym projektem. GitHub działa jak centralne repozytorium dla Ciebie i innych. 'Wypychasz' (od angielskiego push) swoje zmiany i pobierasz zmiany od innych osób.", 6 | "Create a GitHub Account": "Tworzenie konta GitHub", 7 | "Visit {/lnk_github/}github.com{/lnk_e/} and sign up for a free account. {/str/}High five, welcome!{/str_e/}": "Odwiedź stronę {/lnk_github/}github.com{/lnk_e/} i utwórz darmowe konto. {/str/}Witamy, przybij piątkę!{/str_e/}", 8 | "Add GitHub username to Git": "Dodawanie nazwy użytkownika GitHub do Gita", 9 | "Add your GitHub username to your Git configuration. We'll do this just for the sake of Git-it{/smc/} it makes it easier to verify the upcoming challenges. Save it exactly as you created it on GitHub and {/str/}capitalize where capitalized{/str_e/}. Note, you don't need to enter the {/dqm/}{/lt/}{/dqm/} and {/dqm/}{/gt/}{/dqm/}.": "Dodaj swoją nazwę użytkownika GitHub do konfiguracji Gita. Zrobimy to na potrzeby Git-it{/smc/} ułatwi to weryfikację przyszłych wyzwań. Zapisz ją dokładnie w taki sposób w jaki widnieje ona w GitHub i {/str/}pamiętaj, iż wielkość znaków ma znaczenie{/str_e/}. Zauważ, że nie musisz wpisywać znaków {/dqm/}{/lt/}{/dqm/} i {/dqm/}{/gt/}{/dqm/}.", 10 | "Add your GitHub username to your Git configuration:": "Dodaj nazwę użytkownika GitHub do swojej konfiguracji Gita:", 11 | "You can double check what you have set in your Git config by typing:": "Zawsze możesz upewnić się co do poprawności ustawień wpisując:", 12 | "Make sure you type {/cde/}user.username{/cde_e/} above and not {/cde/}user.name{/cde_e/}, which would override the name you set in the first challenge and leave you with no username property! If you found you did that, it's ok, just repeat the step in the first challenge to add your name and then complete the step above.": "Upewnij się, że powyżej wpisujesz {/cde/}user.username{/cde_e/} a nie {/cde/}user.name{/cde_e/}, które nadpisałoby ustawioną w pierwszym wyzwaniu nazwę i pozostawiło Cię bez skonfigurowanej właściwości username! Jeśli tak się stało, w porządku, po prostu powtórz krok z pierwszego wyzwania w celu dodania swojej nazwy, a następnie wykonaj krok powyżej.", 13 | "GitHub & Git config usernames do not match": "Nazwy GitHub i ta w konfiguracji Git nie pasują", 14 | "A common error is not having your GitHub username match the case of the one you set with {/cde/}git config{/cde_e/}. For instance, 'JLord' isn't the same as 'jlord'": "Popularnym błędem jest wystąpienie różnic pomiędzy nazwą GitHub, a wprowadzoną w {/cde/}git config{/cde_e/}. Na przykład, 'JLord' to nie to samo co 'jlord'", 15 | "To change your username set with Git, just do the same command you did earlier, but with the correct capitalization:": "By zmienić ustawioną w git nazwę użytkownika, zrób to samo co poprzednio, tym razem z poprawną wielkością liter:", 16 | "When you've made your updates, verify again!": "Kiedy to już zrobisz, zweryfikuj poprawność ponownie!" 17 | } 18 | -------------------------------------------------------------------------------- /resources/i18n/pl-PL/ch08.json: -------------------------------------------------------------------------------- 1 | { 2 | "Add a collaborator to your project.": "Dodawanie współpracowników do swojego projektu.", 3 | "Social Coding": "Społeczne programowanie", 4 | "Working with others is one of the best things about GitHub because it is easier to work from any place or timezone with someone else.": "Pracowanie z innymi jest jedną z najlepszych rzeczy w GitHub, ponieważ łatwiej jest pracować z dowolnego miejsca o dowolnej porze z kimś innym.", 5 | "{/str/}Collaborators{/str_e/} are other GitHub users who are given permission to make edits to a repository owned by someone else. You may also hear the term {/str/}contributor{/str_e/}, this describes another GitHub user who has made contributions, through a Fork and Pull Request, to a project.": "{/str/}Współpracownicy{/str_e/} to inni użytkownicy GitHub, którzy posiadają uprawnienia do czynienia poprawek na rzecz repozytoriów będących w posiadaniu innej osoby (np. Ciebie). Często określani są także kontrybutorami ({/str/}contributor{/str_e/}), jest to określenie użytkownika, który dodał już coś od siebie, za pomocą forka i Pull Requesta, do projektu.", 6 | "{/lnk_reporobot/}@reporobot{/lnk_e/} is a robot from outer space that loves collaborating on repos.": "{/lnk_reporobot/}@reporobot{/lnk_e/} to robot pochodzący z przestrzeni kosmicznej, który uwielbia współpracować z innymi.", 7 | "Hello, Repo Robot!": "Cześć, Repo Robocie!", 8 | "To add collaborators to one of your projects, visit the repository's page on your GitHub account and click the 'Settings' tab in the menu in the upper part of the page. Then select the 'Manage access' option and click on 'Invite a collaborator'. Type the username into the text box, select the right user and finally add the collaborator to your repository by clicking the green button.": "To add collaborators to one of your projects, visit the repository's page on your GitHub account and click the 'Settings' tab in the menu in the upper part of the page. Then select the 'Manage access' option and click on 'Invite a collaborator'. Type the username into the text box, select the right user and finally add the collaborator to your repository by clicking the green button.", 9 | "{/str/}Now go to your forked Patchwork repository's page on GitHub and add 'RepoRobot' as a collaborator.{/str_e/} The URL should look like this, but with your own username.": "{/str/}Now go to your forked Patchwork repository's page on GitHub and add 'RepoRobot' as a collaborator.{/str_e/} The URL should look like this, but with your own username." 10 | } 11 | -------------------------------------------------------------------------------- /resources/i18n/pl-PL/ch09.json: -------------------------------------------------------------------------------- 1 | { 2 | "Keep your file up to date by pulling in changes from collaborators.": "Dbanie o aktualność plików poprzez pobieranie zmian od współpracowników.", 3 | "Pulling from a Remote": "Pobieranie z repozytorium zdalnego", 4 | "If you're working on something with someone else you need to stay up to date with the latest changes. So you'll want to {/str/}pull{/str_e/} in any changes that may have been pushed to the central GitHub repository.": "Jeśli pracujesz nad czymś z kimś innym musisz posiadać aktualną wersję projektu. Będziesz zatem {/str/}pobierać{/str_e/} zmiany które mogły zostać wypchnięte do centralnego repozytorium GitHub.", 5 | "What has Reporobot been up to?": "Co zrobił Reporobot?", 6 | "See if Reporobot has made any changes to your branch by pulling in any changes from the remote named 'origin' on GitHub:": "Sprawdź czy Reporobot dokonał zmian na Twojej gałęzi próbując pobrać zmiany z 'origin' na GitHub:", 7 | "If nothing's changed, it will tell you 'Already up-to-date'. If there are changes, Git will merge those changes into your local version.": "Jeśli nic się nie zmieniło, otrzymasz komunikat 'Already up-to-date'. Jeśli jednak pojawiły się zmiany, Git scali je do Twojej wersji lokalnej.", 8 | "Did Reporobot make changes? Git tells you where changes were made. You can open that file and see Reporobot's updates. Surprise, Reporobot is an artist!": "Czy Reporobot zrobił jakieś zmiany? Git powie Ci gdzie zostały one zrobione. Możesz otworzyć ten plik i zobaczyć poprawki Reporobota. Niespodzianka, Reporobot jest artystą!", 9 | "Check Git status": "Sprawdzenie statusu repozytorium", 10 | "Pull in changes from a remote branch": "Pobieranie zmian z gałęzi zdalnej", 11 | "See changes to the remote before you pull in": "Podgląd zmian zanim zostaną pobrane" 12 | } 13 | -------------------------------------------------------------------------------- /resources/i18n/pl-PL/ch11.json: -------------------------------------------------------------------------------- 1 | { 2 | "Merge your branch locally, delete the branch and pull from upstream.": "Scalanie gałęzi lokalnie, usuwanie gałęzi i pobieranie z repozytorium oryginalnego.", 3 | "Cleaning up": "Sprzątanie", 4 | "Once you don't need branches anymore you can delete them locally and remotely. This is helpful so that you don't end up with a pile of old branches.": "Kiedy gałęzie nie są Ci już potrzebne możesz usunąć je z repozytorium lokalnego i zdalnego. Jest to pomocne, gdyż repozytorium nie zostaje zaśmiecone starymi gałęziami.", 5 | "Merge Locally": "Scalanie lokalni", 6 | "Your pull request has been merged! Your branch was merged into the 'gh-pages' branch of the original on GitHub. You can merge your branch locally, too.": "Twój pull request został scalony! Twoja gałąź została scalona do gałęzi 'gh-pages' w oryginalnym repozytorium na GitHubie. Możesz również scalić swoją gałąź lokalnie.", 7 | "First, move into the branch you want to merge into — in this case, the branch 'gh-pages'.": "Najpierw, przejdź na gałąź do której chcesz scalać — w tym wypadku będzie to gałąź 'gh-pages'.", 8 | "Now tell Git what branch you want to merge in — in this case, your feature branch that begins with {/dqm/}add-{/dqm/}.": "Teraz poinstruuj Gita którą gałąź chcesz scalić — w tym wypadku będzie to gałąź, której nazwa zaczyna się od {/dqm/}add-{/dqm/}.", 9 | "Tidy up by deleting your feature branch. Now that it has been merged you don't really need it around.": "Posprzątaj po sobie usuwając scaloną już gałąź. Gdy została scalona nie będzie już więcej potrzebna.", 10 | "You can also delete the branch from your remote on GitHub:": "Możesz również usunąć gałąź z Twojego repozytorium zdalnego na GitHubie:", 11 | "Pull from Upstream": "Pobieranie z repozytorium oryginalnego", 12 | "And last but not least, the original has changed since your pull request was merged — Reporobot added your name to the website! If you pull in these changes from upstream you'll be up to date and have that version too. You can actually see it live as well at: yourusername.github.io/patchwork.": "Ostatnią, ale nie mniej ważną informacją jest fakt, że oryginalne repozytorium zmieniło się ponieważ Twój pull request został zaakceptowany — Reporobot dodał Twoją nazwę do strony! Jeśli pobierzesz te zmiany z repozytorium oryginalnego będziesz posiadał aktualną kopię repozytorium. Możesz również zobaczyć ją na żywo pod adresem: twojanazwaużytkownika.github.io/patchwork.", 13 | "To pull from the original upstream:": "Aby pobrać zmiany z oryginalnego repozytorium:", 14 | "Congratulations!": "Gratulacje!", 15 | "You've created local repositories, remote repositories, worked with a collaborator, pushed, pulled and joined the millions of others developing and enriching open source!": "Tworzyłeś lokalne repozytoria, zdalne repozytoria, pracowałeś ze współpracownikiem, wypychałeś, pobierałeś i dołączyłeś do milionów innych ludzi programujących i wzbogacających świat open source!", 16 | "Visit {/lnk_patchwork/}jlord.github.io/patchwork{/lnk_e/} to see your name incorporated! Looking to keep going? Checkout the {/lnk_next/}What Next{/lnk_e/} section on the resources page in this app.": "Odwiedź {/lnk_patchwork/}jlord.github.io/patchwork{/lnk_e/} by zobaczyć swój nick w tym gronie! Nie chcesz zwalniać tempa? Sprawdź sekcję {/lnk_next/}Co dalej?{/lnk_e/} na stronie z zasobami do nauki w tej aplikacji.", 17 | "Merge a branch into current branch": "Scalanie gałęzi do aktywnej gałęzi", 18 | "Change the branch you're working on": "Zmiana aktywnej gałęzi", 19 | "Delete a local branch": "Usuwanie gałęzi lokalnej", 20 | "Delete a remote branch": "Usuwanie gałęzi zdalnej", 21 | "Pull from a remote branch": "Pobieranie z gałęzi zdalnej" 22 | } 23 | -------------------------------------------------------------------------------- /resources/i18n/pl-PL/common.json: -------------------------------------------------------------------------------- 1 | { 2 | "Change Directory": "Zmiana katalogu", 3 | "Goal": "Goal", 4 | "Didn't Pass?": "Didn't Pass?", 5 | "Tip": "Tip", 6 | "Step": "Step", 7 | "Yes": "Tak", 8 | "No": "Nie", 9 | "Confirm Clearing Statuses": "Potwierdź wyczyszczenie statusów", 10 | "Are you sure you want to clear the status for every challenge?": "Czy na pewno chcesz wyczyścić statusy wszystkich wyzwań?", 11 | "Challenges": "Wyzwania", 12 | "Git-it Challenges": "Wyzwania Git-it", 13 | "About": "Informacj", 14 | "Dictionary": "Słownik", 15 | "Resources": "Zasoby", 16 | "Open an Issue": "Zgłoś problem" 17 | } 18 | -------------------------------------------------------------------------------- /resources/i18n/pl-PL/dictionary.json: -------------------------------------------------------------------------------- 1 | { 2 | "Below are the terminal and Git commands used in the Git-it challenges.": "Below are the terminal and Git commands used in the Git-it challenges.", 3 | "Bash/Terminal Basics": "Bash/Terminal Basics", 4 | "Make a new folder (aka make directory)": "Tworzenie nowego folderu (aka tworzenie katalogu)", 5 | "Navigate into an existing folder (aka 'change directory')": "Navigate into an existing folder (aka 'change directory')", 6 | "List the items in a folder": "Wyświetlenie zawartości bieżącego katalogu", 7 | "Configuring Git": "Configuring Git", 8 | "Check Git version": "Check Git version", 9 | "Set your name": "Set your name", 10 | "Set your email": "Set your email", 11 | "Set your Github account (case sensitive)": "Set your Github account (case sensitive)", 12 | "Git Basics": "Git Basics", 13 | "Turn Git on for a folder": "Inicjalizacja repozytorium Git w bieżącym katalogu", 14 | "Check status of changes to a repository": "Sprawdzanie statusu zmian w repozytorium", 15 | "View changes to files": "Wyświetlanie zmian w plikach", 16 | "Add a file's changes to be committed": "Dodawanie zmian w pliku do zatwierdzania", 17 | "To add all files changes": "Dodawanie wszystkich zmian do zatwierdzania", 18 | "To commit (aka save) the changes you've added with a short message describing the changes": "Zatwierdzanie dodanych zmian wraz z ich krótkim opisem", 19 | "Copy a repository to your computer": "Copy a repository to your computer", 20 | "Git Branches": "Git Branches", 21 | "Create a new branch": "Tworzenie nowej gałęzi", 22 | "Move onto a branch": "Zmiana aktualnej gałęzi", 23 | "You can create and switch to a branch in one line": "Tworzenie i zmiana aktualnej gałęzi jednym poleceniem", 24 | "List the branches": "Wypisanie wszystkich gałęzi", 25 | "Rename a branch you're currently on": "Zmiana nazwy aktualnej gałęzi", 26 | "Git Remotes": "Git Remotes", 27 | "Add remote connections": "Dodawanie repozytorium zdalnego", 28 | "Set a URL to a remote": "Dodawanie repozytorium zdalnego", 29 | "View remote connections": "Wyświetlanie listy repozytoriów zdalnych", 30 | "Pulling in Git": "Pulling in Git", 31 | "Pull in changes": "Zmiana adresu URL do repozytorium zdalnego", 32 | "Pull in changes from a remote branch": "Pobieranie zmian z gałęzi zdalnej", 33 | "See changes to the remote before you pull in": "Podgląd zmian zanim zostaną pobrane", 34 | "Push & Merge in Git": "Push & Merge in Git", 35 | "Push changes": "Wypychanie zmian", 36 | "Merge a branch into current branch": "Scalanie gałęzi do aktywnej gałęzi", 37 | "Deleting Remotes and Branches in Git": "Deleting Remotes and Branches in Git", 38 | "Delete a local branch": "Usuwanie gałęzi lokalnej", 39 | "Delete a remote branch": "Usuwanie gałęzi zdalnej" 40 | } 41 | -------------------------------------------------------------------------------- /resources/i18n/pl-PL/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "Challenges completed:": "Ukończone wyzwania", 3 | "Welcome!": "Witaj!", 4 | "Git-it teaches the basics of using Git and GitHub. These basics aren't merely beginner Git and GitHub skills, they are the commands and steps you'll use over and over as in your awesome social coding + version controlled future.": "Git-it uczy podstaw używania Git i GitHub. Te podstawy nie są jedynie zalążkiem umiejętności korzystania z Git i GitHub, są to polecenia i kroki, które będziesz wykorzystywać non-stop w swojej wspaniałej pracy towarzyskiej + przyszłości kontrolowanej wersją.", 5 | "But Wait – There's More!": "Ale czekaj, to nie wszystko!", 6 | "You can also complete Git-it in several other languages, just select the language you want from the menu in the upper left.": "Możesz także ukończyć Git-it w kilku innych językach, po prostu wybierz wybrany język z menu w lewym górnym rogu.", 7 | "The 'Window' option in the application menu will take you to the {/lnk_dictionary/}Dictionary{/lnk_e/}, {/lnk_resources/}Resources{/lnk_e/} and {/lnk_about/}About{/lnk_e/} page.": "Opcja 'Okno' (Window) w menu aplikacji zabierze Cię do {/lnk_dictionary/}Słownika (Dictionary){/lnk_e/}, {/lnk_resources/}Zasobów (Resources){/lnk_e/} i strony {/lnk_about/}'Informacje (About){/lnk_e/}.", 8 | "Start challenge one!": "Rozpocznij pierwsze wyzwanie!", 9 | "On your way!": "W drodze!", 10 | "You're making progress, keep going and pick up where you left off.": "Czynisz postępy, kontynuuj naukę od momentu, w którym została przerwana.", 11 | "Pick up where you left off!": "Kontynuuj naukę!", 12 | "Congratulations!": "Gratulacje!", 13 | "You finished the challenges and are primed for social coding—so what's next?": "Ukończyłeś wyzwania i otrzymujesz certyfikat dojrzałości do społecznego kodowania - co dalej?", 14 | "Ideas for beginner projects": "Pomysły na projekty dla początkujących", 15 | "Clear and start over": "Wyczyść postęp i rozpocznij od nowa" 16 | } 17 | -------------------------------------------------------------------------------- /resources/i18n/pl-PL/menu.json: -------------------------------------------------------------------------------- 1 | { 2 | "About Git-it": "O Git-it", 3 | "Services": "Usługi", 4 | "Hide Git-it": "Ukryj Git-it", 5 | "Hide Others": "Ukryj inne", 6 | "Show All": "Pokaż wszystko", 7 | "Quit": "Wyjście", 8 | "View": "Widok", 9 | "Reload": "Przeładuj", 10 | "Full Screen": "Pełen Ekran", 11 | "Minimize": "Minimalizuj", 12 | "Bring All to Front": "Przenieś na pierwszy plan", 13 | "Toggle Developer Tools": "Przełącz narzędzia dla deweloperów", 14 | "Window": "Okno", 15 | "Home": "Strona startowa", 16 | "Dictionary": "Słownik", 17 | "Resources": "Zasoby", 18 | "Help": "Pomoc", 19 | "App Repository": "Repozytorium aplikacji", 20 | "Open Issue": "Zgłoś błąd", 21 | "About App": "O aplikacji", 22 | "&File": "Plik (&F)", 23 | "&Quit": "Wyjście (&Q)" 24 | } 25 | -------------------------------------------------------------------------------- /resources/i18n/pl-PL/resources.json: -------------------------------------------------------------------------------- 1 | { 2 | "Resources": "Zasoby", 3 | "To reinforce what you just learned or to try another way, here are suggestions for other guides and tutorials.": "By utrwalić nowo nabytą wiedzę lub spróbować innego podejścia do tematu, poniżej zgromadzone zostały sugerowane inne poradniki.", 4 | "If you're ready to dive into a project, jump to the {/lnk_next/}beginner projects{/lnk_e/} section.": "Jeśli jesteś gotowy zanurzyć się w projekcie, przejdź do sekcji {/lnk_next/}projektów dla początkujących{/lnk_e/}.", 5 | "Interactive Tutorial": "Interaktywny samouczek", 6 | "{/lnk_trygit/}Try Git{/lnk_e/} (Uses an terminal emulator) by CodeSchool": "{/lnk_trygit/}Wypróbuj Git{/lnk_e/} (wykorzystuje emulator terminala) od CodeSchool", 7 | "Guides, Books and Cheatsheets": "Poradniki, książki i ściągawki", 8 | "{/lnk_intro/}Introduction to Git{/lnk_e/} by Git": "{/lnk_intro/}Wprowadzenie do Git {/lnk_e/} od Git", 9 | "{/lnk_book/}Pro Git Book{/lnk_e/} by Scott Chacon": "{/lnk_book/}Pro Git{/lnk_e/} od Scotta Chacona", 10 | "{/lnk_guide/}Simple Guide{/lnk_e/} by Roger Dudler": "{/lnk_guide/}Prosty poradnik{/lnk_e/} od Rogera Dudlera", 11 | "{/lnk_help/}Github Help{/lnk_e/} by GitHub": "{/lnk_help/}Github Help{/lnk_e/} od GitHub", 12 | "{/lnk_immersion/}Git Immersion{/lnk_e/} by Neo": "{/lnk_immersion/}Git Immersion{/lnk_e/} od Neo", 13 | "{/lnk_cheatsheet/}Git Cheatsheet{/lnk_e/} by GitHub": "{/lnk_cheatsheet/}Git Cheatsheet{/lnk_e/} od GitHub", 14 | "{/lnk_guides/}GitHub Guides{/lnk_e/} by GitHub": "{/lnk_guides/}GitHub Guides{/lnk_e/} od GitHub", 15 | "{/lnk_kaigi/}GitHub Kaigi{/lnk_e/} by Yunico Nagata": "{/lnk_kaigi/}GitHub Kaigi{/lnk_e/} od Yunico Nagaty", 16 | "GitHub Desktop": "GitHub Desktop", 17 | "You likely installed this before you started Git-it but if you didn't, here's the link.": "Prawdopodobnie zainstalowałeś ten program zanim zacząłeś przygodę z Git-it, jeśli jednak tego nie uczyniłeś, poniżej znajdziesz stosowny link.", 18 | "The GitHub Desktop app lets you do much of what you can do in terminal (though not all) and is a bit easier to read at times. Personally, I use it to look over anything not small {/cde/}diff{/cde_e/} I have. Your changes are really nice to see this way.": "Aplikacja GitHub Desktop pozwala na zrobienie wielu rzeczy możliwych także za pośrednictwem terminala (ale nie wszystkie) i często dostarcza dane w czytelniejszej formie. Osobiście korzystam z niej do weryfikacji {/cde/}różnic{/cde_e/} w moim kodzie. Twoje zmiany są znacznie lepiej widoczne w ten sposób.", 19 | "{/lnk_desktop/}Github Desktop App{/lnk_e/} (OSX, Windows) by GitHub": "{/lnk_desktop/}Aplikacja Github Desktop{/lnk_e/} (OSX, Windows) od GitHub", 20 | "{/lnk_guides/}Github Desktop Guides{/lnk_e/} by GitHub": "{/lnk_guides/}Github Desktop Guides{/lnk_e/} od GitHub", 21 | "You can checkout further git desktop applications on the Git website: {/lnk_guis/}Git GUIs{/lnk_e/}": "Możesz sprawdzić także inne aplikacje okienkowe na stronie Git: {/lnk_guis/}Git GUIs{/lnk_e/}", 22 | "What Next?": "Co dalej?", 23 | "Now that you're feeling good because you've got the fundamentals down, here are some beginner project ideas to keep you going!": "Jeśli czujesz się pewnie mając pewne fundamenty pracy z Gitem, poniżej znajdziesz pomysły na projekty dla początkujących, byś mógł rozwijać się dalej!", 24 | "{/lnk_hello/}Fork this{/lnk_e/} to create a personal website (Requires HTML & CSS)": "{/lnk_hello/}Sforkuj to{/lnk_e/} by utworzyć swoją oobistą stronę (Wymaga znajomości HTML i CSS)", 25 | "{/lnk_forkngo/}Gallery of forkable sites{/lnk_e/} (Requires HTML & CSS)": "{/lnk_forkngo/}Galeria forkowalnych stron{/lnk_e/} (Wymaga znajomości HTML i CSS)", 26 | "Create a repository and open issues with {/lnk_tasks/}to-do lists{/lnk_e/}.": "Utwórz repozytorium i zgłoś błąd za pomocą {/lnk_tasks/}listy zadań do zrobienia{/lnk_e/}.", 27 | "{/lnk_explore/}Explore GitHub projects{/lnk_e/} for ones that match your interest.": "{/lnk_explore/}Eksploruj projekty na GitHubie{/lnk_e/} w poszukiwaniu tych, które wzbudzą Twoje zainteresowanie." 28 | } 29 | -------------------------------------------------------------------------------- /resources/i18n/pl-PL/verify.json: -------------------------------------------------------------------------------- 1 | { 2 | "Path is not a directory.": "Ścieżka nie jest katalogiem.", 3 | "Found branch as expected!": "Znaleziono gałąź zgodnie z oczekiwaniami!", 4 | "Branch name expected: {/expectedBranch/}": "Oczekiwano nazwy gałęzi: {/expectedBranch/}", 5 | "File in contributors folder!": "Plik w katalogu kontrybutorów!", 6 | "File not found in contributors folder.": "Plik nie znaleziony w katalogu kontrybutorów.", 7 | "Changes have been pushed!": "Zmiany zostały wypchnięte!", 8 | "Changes not pushed.": "Zmiany nie zostały wypchnięte.", 9 | "Can't find committed changes.": "Nie odnaleziono zatwierdzonych zmian.", 10 | "Changes have been committed!": "Zmiany zostały zatwierdzone!", 11 | "Seems there are still changes to commit.": "Zdaje się, że nadal istnieją zmiany czekające na zatwierdzenie.", 12 | "Did not find 2 remotes set up.": "Nie odnaleziono konfiguracji 2 repozytoriów zdalnych.", 13 | "Origin points to your fork!": "Origin wskazuje na Twojego forka!", 14 | "No Origin remote found pointing to {/userrepo/}.": "Nie znaleziono repozytorium zdalnego wskazującego na {/userrepo/}.", 15 | "Upstream remote set up!": "Repozytorium zdalne Upstream skonfigurowane!", 16 | "No Upstream remote found pointing to {/patchworkrepo/}.": "Nie znaleziono repozytorium zdalnego Upstream wskazującego na {/patchworkrepo/}.", 17 | "Found Git installed!": "Odnaleziono instalację GIta!", 18 | "Did not find Git installed.": "Nie odnaleziono instalacji Gita.", 19 | "Name Added!": "Dodano imię!", 20 | "No name found.": "Nie odnaleziono imienia.", 21 | "Email Added!": "Dodano adres email!", 22 | "No email found.": "Nie odnaleziono adresu email.", 23 | "No username found.": "Nie odnaleziono nazwy użytkownika.", 24 | "Username added to Git config!": "Nazwa użytkownika dodana do konfiguracji Gita!", 25 | "You're on GitHub!": "Jesteś na GitHub!", 26 | "GitHub account matching stored Git-username was not found.": "Nie odnaleziono konta GitHub o nazwie odpowiadającej przechowywanej nazwie użytkownika.", 27 | "Username identical on GitHub and Git config!": "Nazwa użytkownika GitHub zgadza się ze skonfigurowaną w Gicie!", 28 | "GitHub & Git config usernames do not match.": "Nazwy użytkowników GitHub oraz skonfigurowana nie zgadzają się.", 29 | "Reporobot has been added!": "Reporobot został dodany!", 30 | "Reporobot seems not to have access to your fork.": "Zdaje się, że Reporobot nie ma dostępu do Twojego forka.", 31 | "Your branch has been merged!": "Twoja gałąź została scalona!", 32 | "No merge of your branch in history.": "Nie znaleziono zapisu scalenia Twojej gałęzi w historii.", 33 | "Uh oh, your branch is still there.": "Oho, Twoja gałąź nadal tutaj jest.", 34 | "Branch deleted!": "Gałąź usunięta!", 35 | "Up to date!": "Zsynchronizowany!", 36 | "There are changes to pull in.": "Dostępne są zmiany do pobrania.", 37 | "Found remote set up.": "Odnaleziono konfigurację repozytorium zdalnego.", 38 | "Did not find remote origin.": "Nie odnaleziono repozytorium zdalnego origin.", 39 | "You pushed changes!": "Wypchnięto zmiany!", 40 | "No evidence of push.": "Nie wypchnięto zmian.", 41 | "No pushed changes found.": "Nie odnaleziono wypchniętych zmian.", 42 | "This is a Git repository!": "This is a Git repository!", 43 | "This folder is not being tracked by Git.": "This folder is not being tracked by Git.", 44 | "Found your pull request!": "Found your pull request!", 45 | "No merged pull request found for username {/username/}. If you created a pull request on github, return there to see if reporobot left some comments.": "No merged pull request found for username {/username/}. If you created a pull request on github, return there to see if reporobot left some comments.", 46 | "Verify!": "Verify!", 47 | "Clear status": "Clear status", 48 | "Select directory": "Select directory", 49 | "Please select your repository directory.": "Please select your repository directory." 50 | } 51 | -------------------------------------------------------------------------------- /resources/layouts/challenge.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Git-it 6 | 7 | 8 | 9 | 10 | 11 | {{{ header }}} 12 | 13 |
      14 |
      15 | {{{ sidebar }}} 16 |
      17 |
      18 | {{{ body }}} 19 | {{{ footer }}} 20 |
      21 |
      22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /resources/layouts/page.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Git-it 6 | 7 | 8 | 9 | 10 | 11 | {{{ header }}} 12 | 13 |
      14 | {{{ body }}} 15 |
      16 | 17 | {{{ script }}} 18 | 19 | 20 | 21 | 22 | --------------------------------------------------------------------------------