diff --git a/.github/ISSUE_TEMPLATE/bug.md b/.github/ISSUE_TEMPLATE/bug.md deleted file mode 100644 index 63e0e64f94..0000000000 --- a/.github/ISSUE_TEMPLATE/bug.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -name: 🐛 Bug Report -about: Submit a bug report to help us improve -labels: "bug" ---- - -## 🐛 Bug Report - -(A clear and concise description of what the bug is) - -## Have you spent some time to check if this issue has been raised before? - -(Have you googled for a similar issue or checked our older issues for a similar bug) - -## To Reproduce - -(Write your steps here:) - -## Expected behavior - - - -(Write what you thought would happen.) - -## Actual Behavior - - - -(Write what happened. Add screenshots, if applicable.) - -## Your Environment - - - -(Write Environment, Operating system and version etc.) diff --git a/.github/ISSUE_TEMPLATE/bug.yaml b/.github/ISSUE_TEMPLATE/bug.yaml new file mode 100644 index 0000000000..2f33d76b82 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug.yaml @@ -0,0 +1,75 @@ +name: "🐛 Bug Report" +description: "Submit a bug report to help us improve" +title: "🐛 Bug Report: " +labels: [bug] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out our bug report form 🙏 + - type: textarea + id: steps-to-reproduce + validations: + required: true + attributes: + label: "👟 Reproduction steps" + description: "How do you trigger this bug? Please walk us through it step by step." + placeholder: "When I ..." + - type: textarea + id: expected-behavior + validations: + required: true + attributes: + label: "👍 Expected behavior" + description: "What did you think would happen?" + placeholder: "It should ..." + - type: textarea + id: actual-behavior + validations: + required: true + attributes: + label: "👎 Actual Behavior" + description: "What did actually happen? Add screenshots, if applicable." + placeholder: "It actually ..." + - type: dropdown + id: appwrite-version + attributes: + label: "🎲 Appwrite version" + description: "What version of Appwrite are you running?" + options: + - Version 0.10.x + - Version 0.9.x + - Version 0.8.x + - Version 0.7.x + - Version 0.6.x + - Different version (specify in environment) + validations: + required: true + - type: dropdown + id: operating-system + attributes: + label: "💻 Operating system" + description: "What OS is your server / device running on?" + options: + - Linux + - MacOS + - Windows + - Something else + validations: + required: true + - type: textarea + id: enviromnemt + validations: + required: false + attributes: + label: "🧱 Your Environment" + description: "Is your environment customized in any way?" + placeholder: "I use Cloudflare for ..." + - type: checkboxes + id: no-duplicate-issues + attributes: + label: "👀 Have you spent some time to check if this issue has been raised before?" + description: "Have you Googled for a similar issue or checked our older issues for a similar bug?" + options: + - label: "I checked and didn't find similar issue" + required: true \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/documentation.md b/.github/ISSUE_TEMPLATE/documentation.md deleted file mode 100644 index 9aa7e59e19..0000000000 --- a/.github/ISSUE_TEMPLATE/documentation.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -name: 📚 Documentation -about: Report an issue related to documentation -labels: "documentation" ---- - -## 📚 Documentation - -(A clear and concise description of what the issue is.) - -## Have you spent some time to check if this issue has been raised before? - -(Have you googled for a similar issue or checked our older issues for a similar bug) - -### Have you read the [Code of Conduct](https://github.com/appwrite/appwrite/blob/master/CODE_OF_CONDUCT.md)? - -(Write your answer here.) diff --git a/.github/ISSUE_TEMPLATE/documentation.yaml b/.github/ISSUE_TEMPLATE/documentation.yaml new file mode 100644 index 0000000000..5e8d8fd083 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/documentation.yaml @@ -0,0 +1,33 @@ +name: "📚 Documentation" +description: "Report an issue related to documentation" +title: "📚 Documentation: " +labels: [documentation] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out our documentation update request form 🙏 + - type: textarea + id: issue-description + validations: + required: true + attributes: + label: "💭 Description" + description: "A clear and concise description of what the issue is." + placeholder: "Documentation should not ..." + - type: checkboxes + id: no-duplicate-issues + attributes: + label: "👀 Have you spent some time to check if this issue has been raised before?" + description: "Have you Googled for a similar issue or checked our older issues for a similar bug?" + options: + - label: "I checked and didn't find similar issue" + required: true + - type: checkboxes + id: read-code-of-conduct + attributes: + description: "This is our [Code of Conduct](https://github.com/appwrite/appwrite/blob/master/CODE_OF_CONDUCT.md)." + label: "🏢 Have you read the Code of Conduct?" + options: + - label: "I read the Code of Conduct" + required: true \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/feature.md b/.github/ISSUE_TEMPLATE/feature.md deleted file mode 100644 index 35ad1b9d8f..0000000000 --- a/.github/ISSUE_TEMPLATE/feature.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -name: 🚀 Feature -about: Submit a proposal for a new feature -labels: "feature" ---- - -## 🚀 Feature - -(A clear and concise description of what the feature is.) - -## Have you spent some time to check if this issue has been raised before? - -(Have you googled for a similar issue or checked our older issues for a similar bug) - -### Have you read the [Code of Conduct](https://github.com/appwrite/appwrite/blob/master/CODE_OF_CONDUCT.md)? - -(Write your answer here.) - -## Pitch - -(Please explain why this feature should be implemented and how it would be used. Add examples, if applicable.) diff --git a/.github/ISSUE_TEMPLATE/feature.yaml b/.github/ISSUE_TEMPLATE/feature.yaml new file mode 100644 index 0000000000..025614bc8a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature.yaml @@ -0,0 +1,33 @@ +name: 🚀 Feature +description: "Submit a proposal for a new feature" +title: "🚀 Feature: " +labels: [feature] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out our feature request form 🙏 + - type: textarea + id: feature-description + validations: + required: true + attributes: + label: "🔖 Feature description" + description: "A clear and concise description of what the feature is." + placeholder: "You should add ..." + - type: textarea + id: pitch + validations: + required: true + attributes: + label: "🎤 Pitch" + description: "Please explain why this feature should be implemented and how it would be used. Add examples, if applicable." + placeholder: "In my use-case, ..." + - type: checkboxes + id: no-duplicate-issues + attributes: + label: "👀 Have you spent some time to check if this issue has been raised before?" + description: "Have you Googled for a similar issue or checked our older issues for a similar bug?" + options: + - label: "I checked and didn't find similar issue" + required: true \ No newline at end of file diff --git a/README.md b/README.md index b3a0714789..ab4670f19a 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@

-[![Hacktoberfest](https://badgen.net/badge/hacktoberfest/friendly/pink)](https://hacktoberfest.appwrite.io) +[![Hacktoberfest](https://img.shields.io/static/v1?label=hacktoberfest&message=friendly&color=90a88b&style=flat-square)](https://hacktoberfest.appwrite.io) [![Discord](https://img.shields.io/discord/564160730845151244?label=discord&style=flat-square)](https://appwrite.io/discord) [![Docker Pulls](https://img.shields.io/docker/pulls/appwrite/appwrite?color=f02e65&style=flat-square)](https://hub.docker.com/r/appwrite/appwrite) [![Build Status](https://img.shields.io/travis/com/appwrite/appwrite?style=flat-square)](https://travis-ci.com/appwrite/appwrite) diff --git a/app/config/locale/translations/de.json b/app/config/locale/translations/de.json index 4812c911d0..e680db4a1f 100644 --- a/app/config/locale/translations/de.json +++ b/app/config/locale/translations/de.json @@ -3,30 +3,30 @@ "settings.locale": "de", "settings.direction": "ltr", "emails.sender": "%s Team", - "emails.verification.subject": "", - "emails.verification.hello": "", - "emails.verification.body": "", - "emails.verification.footer": "", - "emails.verification.thanks": "", - "emails.verification.signature": "", - "emails.magicSession.subject": "", - "emails.magicSession.hello": "", - "emails.magicSession.body": "", - "emails.magicSession.footer": "", - "emails.magicSession.thanks": "", - "emails.magicSession.signature": "", - "emails.recovery.subject": "", - "emails.recovery.hello": "", - "emails.recovery.body": "", - "emails.recovery.footer": "", - "emails.recovery.thanks": "", - "emails.recovery.signature": "", - "emails.invitation.subject": "", - "emails.invitation.hello": "", - "emails.invitation.body": "", - "emails.invitation.footer": "", - "emails.invitation.thanks": "", - "emails.invitation.signature": "", + "emails.verification.subject": "Kontoverifizierung", + "emails.verification.hello": "Hey {{name}}", + "emails.verification.body": "Folge diesem Link, um deine E-Mail-Adresse zu bestätigen.", + "emails.verification.footer": "Solltest du keine Verifizierung dieser E-Mail-Adresse angefordert haben, kannst du diese Nachricht ignorieren.", + "emails.verification.thanks": "Danke", + "emails.verification.signature": "{{project}}-Team", + "emails.magicSession.subject": "Login", + "emails.magicSession.hello": "Hey,", + "emails.magicSession.body": "Folge diesem Link, um dich einzuloggen.", + "emails.magicSession.footer": "Solltest du keinen Login für diese E-Mail-Adresse angefordert haben, kannst du diese Nachricht ignorieren.", + "emails.magicSession.thanks": "Danke", + "emails.magicSession.signature": "{{project}}-Team", + "emails.recovery.subject": "Kennwort zurücksetzen", + "emails.recovery.hello": "Hallo {{name}}", + "emails.recovery.body": "Folge diesem Link, um dein {{project}}-Kennwort zurückzusetzen.", + "emails.recovery.footer": "Solltest du keine Kennwort-Zurücksetzung angefordert haben, kannst du diese Nachricht ignorieren.", + "emails.recovery.thanks": "Danke", + "emails.recovery.signature": "{{project}}-Team", + "emails.invitation.subject": "Einladung zum %s-Team auf %s", + "emails.invitation.hello": "Hello", + "emails.invitation.body": "Du erhälst diese E-Mail, weil {{owner}} dich in das Team {{team}} auf {{project}} eingeladen hat.", + "emails.invitation.footer": "Wenn du nicht interessiert bist, kannst du diese Nachricht ignorieren.", + "emails.invitation.thanks": "Danke", + "emails.invitation.signature": "{{project}}-Team", "locale.country.unknown": "Unbekannt", "countries.af": "Afghanistan", "countries.ao": "Angola", @@ -229,4 +229,4 @@ "continents.na": "Nordamerika", "continents.oc": "Ozeanien", "continents.sa": "Südamerika" -} \ No newline at end of file +} diff --git a/docs/tutorials/add-oauth2-provider.md b/docs/tutorials/add-oauth2-provider.md index 6f36a6b716..bbd3b3011e 100644 --- a/docs/tutorials/add-oauth2-provider.md +++ b/docs/tutorials/add-oauth2-provider.md @@ -1,56 +1,178 @@ -# Adding a New OAuth2 Provider +# Adding a new OAuth2 provider 🛡 This document is part of the Appwrite contributors' guide. Before you continue reading this document make sure you have read the [Code of Conduct](https://github.com/appwrite/appwrite/blob/master/CODE_OF_CONDUCT.md) and the [Contributing Guide](https://github.com/appwrite/appwrite/blob/master/CONTRIBUTING.md). -## Getting Started - -### Agenda +## Getting started OAuth2 providers help users to log in to the apps and websites without the need to provide passwords or any other type of credentials. Appwrite's goal is to have support from as many **major** OAuth2 providers as possible. As of the writing of these lines, we do not accept any minor OAuth2 providers. For us to accept some smaller and potentially unlimited number of OAuth2 providers, some product design and software architecture changes must be applied first. -### List Your new Provider +## 1. Prerequisites -The first step in adding a new OAuth2 provider is to add it to the list in providers config file array, located at: +It's really easy to contribute to an open source project, but when using GitHub, there are a few steps we need to follow. This section will take you step-by-step through the process of preparing your own local version of Appwrite, where you can make any changes without affecting Appwrite right away. -``` -./app/config/providers.php +> If you are experienced with GitHub or have made a pull request before, you can skip to [Implement new provider](#2-implement-new-provider). + +### 1.1 Fork the Appwrite repository + +Before making any changes, you will need to fork Appwrite's repository to keep branches on the official repo clean. To do that, visit the [Appwrite Github repository](https://github.com/appwrite/appwrite) and click on the fork button. + +![Fork button](images/fork.png) + +This will redirect you from `github.com/appwrite/appwrite` to `github.com/YOUR_USERNAME/appwrite`, meaning all changes you do are only done inside your repository. Once you are there, click the highlighted `Code` button, copy the URL and clone the repository to your computer using `git clone` command: + +```shell +$ git clone COPIED_URL ``` -Make sure to fill all data needed and that your provider array key name: +> To fork a repository, you will need a basic understanding of CLI and git-cli binaries installed. If you are a beginner, we recommend you to use `Github Desktop`. It is a really clean and simple visual Git client. -- is in camelCase format -- has no spaces or special characters. +Finally, you will need to create a `feat-XXX-YYY-oauth` branch based on the `master` branch and switch to it. The `XXX` should represent the issue ID and `YYY` the OAuth provider name. -### Add Provider Logo +## 2. Implement new provider -Add a logo image to your new provider in this path: `./public/images/users`. Your logo should be a png 100×100px file with the name of your provider (all lowercase). Please make sure to leave about 30px padding around the logo to be consistent with other logos. +### 2.1 List your new provider -### Add Provider Class +The first step in adding a new OAuth2 provider is to add it to the list of providers located at: + +``` +app/config/providers.php +``` + +Make sure to fill in all data needed and that your provider array key name: + +- is in [`camelCase`](https://en.wikipedia.org/wiki/Camel_case) format +- has no spaces or special characters + +> Please make sure to keep the list of providers in `providers.php` in the alphabetical order A-Z. + +### 2.2 Add Provider Logo + +Add a logo image to your new provider in this path: `public/images/users`. Your logo should be a png 100×100px file with the name of your provider (all lowercase). Please make sure to leave about 30px padding around the logo to be consistent with other logos. + +### 2.3 Add Provider Class Once you have finished setting up all the metadata for the new provider, you need to start coding. -Create a new class that extends the basic OAuth2 provider abstract class in this location: - +Create a new file `XXX.php` where `XXX` is the name of the OAuth provider in [`PascalCase`](https://stackoverflow.com/a/41769355/7659504) in this location ```bash -./src/Auth/OAuth/ProviderName +src/Appwrite/Auth/OAuth2/XXX.php ``` -Note that the class name should start with a capital letter as PHP FIG standards suggest. +Inside this file, create a new class that extends the basic OAuth2 provider abstract class. Note that the class name should start with a capital letter, as PHP FIG standards suggest. -Once a new class is created, you can start to implement your new provider's login flow. The best way to do this correctly is to have a look at another provider's implementation and try to follow the same standards. +Once a new class is created, you can start to implement your new provider's login flow. We have prepared a starting point for Oauth provider class below, but you should also consider looking at other provider's implementation and try to follow the same standards. + +```php +endpoint . '[LOGIN_URL_STUFF]'; + return $url; + } + + /** + * @param string $code + * + * @return string + */ + public function getAccessToken(string $code): string + { + // TODO: Fire request to oauth API to generate access_token + $accessToken = "[FETCHED ACCESS TOKEN]"; + + return $accessToken; + } + + /** + * @param string $accessToken + * + * @return string + */ + public function getUserID(string $accessToken): string + { + // TODO: Fetch user from oauth API and select the user ID + $userId = "[FETCHED USER ID]"; + + return $userId; + } + + /** + * @param string $accessToken + * + * @return string + */ + public function getUserEmail(string $accessToken): string + { + // TODO: Fetch user from oauth API and select the user's email + $userEmail = "[FETCHED USER EMAIL]"; + + return $userEmail; + } + + /** + * @param string $accessToken + * + * @return string + */ + public function getUserName(string $accessToken): string + { + // TODO: Fetch user from oauth API and select the username + $username = "[FETCHED USERNAME]"; + + return $username; + } +} +``` + +> If you copy this template, make sure to replace all placeholders wrapped like `[THIS]` and to implement everything marked as `TODO:`. Please mention in your documentation what resources or API docs you used to implement the provider's OAuth2 protocol. -### Test Your Provider +## 3. Test your provider -After you finished adding your new provider to Appwrite you should be able to see it in your Appwrite console. Navigate to 'Project > Users > Providers' and check your new provider's settings form. +After you finished adding your new provider to Appwrite, you should be able to see it in your Appwrite console. Navigate to 'Project > Users > Providers' and check your new provider's settings form. -Add credentials and check both a successful and a failed login (where the user denies integration on provider page). +> To start Appwrite console from the source code, you can simply run `docker-compose up -d'. + +Add credentials and check both a successful and a failed login (where the user denies integration on the provider page). You can test your OAuth2 provider by trying to login using the [OAuth2 method](https://appwrite.io/docs/client/account#accountCreateOAuth2Session) when integrating the Appwrite Web SDK in a demo app. Pass your new adapter name as the provider parameter. If login is successful, you will be redirected to your success URL parameter. Otherwise, you will be redirected to your failure URL. -If everything goes well, submit a pull request and be ready to respond to any feedback which can arise during our code review. +If everything goes well, raise a pull request and be ready to respond to any feedback which can arise during our code review. + +## 4. Raise a pull request + +First of all, commit the changes with the message `Added XXX OAuth2 Provider` and push it. This will publish a new branch to your forked version of Appwrite. If you visit it at `github.com/YOUR_USERNAME/appwrite`, you will see a new alert saying you are ready to submit a pull request. Follow the steps GitHub provides, and at the end, you will have your pull request submitted. + +## 🤕 Stuck ? +If you need any help with the contribution, feel free to head over to [our discord channel](https://appwrite.io/discord) and we'll be happy to help you out. diff --git a/docs/tutorials/add-translations.md b/docs/tutorials/add-translations.md index 30570f6377..48131f8ad1 100644 --- a/docs/tutorials/add-translations.md +++ b/docs/tutorials/add-translations.md @@ -2,20 +2,47 @@ This document is part of the Appwrite contributors' guide. Before you continue reading this document make sure you have read the [Code of Conduct](https://github.com/appwrite/appwrite/blob/master/CODE_OF_CONDUCT.md) and the [Contributing Guide](https://github.com/appwrite/appwrite/blob/master/CONTRIBUTING.md). -## Getting Started +## Getting started -### Agenda +Appwrite's Locale API, Email Templates ( and soon our Dashboard ) has support for returning responses in your own locale based on the value of the `X-Appwrite-Locale` header. Behind the scenes, we use the value of this header to find the correct translation file for the locale. This guide will walk you through the process of adding a new Locale to Appwrite. -Appwrite's Locale API, Email Templates ( and soon our Dashboard ) has support for returning responses in your own locale based on the value of the `X-Appwrite-Locale` header. Behind the scenes, we use the value in this header to find the correct translation file for the locale. This guide will walk you through the process of adding a new Locale to Appwrite. +You can help in three distinct ways: +* Adding support for new locales +* Helping us with existing incomplete translations +* Reviewing existing translations for correctness -You can help in three distinct ways -* Adding support for new locales. -* Helping us with existing incomplete translations. -* Reviewing existing translations for correctness. -You can choose to contribute either directly on [**Github**](#contributing-with-github) or using [**POEditor**](#contributing-with-po-editor) if you prefer a GUI. +## 1. Prerequisites + +It's really easy to contribute to an open-sourced project, but when using GitHub, there are a few steps we need to follow. This section will take you step-by-step through the process of preparing your own local version of Appwrite, where you can make any changes without affecting Appwrite right away. + +> If you are experienced with GitHub or have made a pull request before, you can skip to [Generate the translations](#2-generate-the-translations). + +### 1.1 Fork the Appwrite repository + +Before making any changes, you will need to fork Appwrite's repository to keep branches on the official repo clean. To do that, visit the [Appwrite Github repository](https://github.com/appwrite/appwrite) and click on the fork button. + +![Fork button](images/fork.png) + +This will redirect you from `github.com/appwrite/appwrite` to `github.com/YOUR_USERNAME/appwrite`, meaning all changes you do are only done inside your repository. Once you are there, click the highlighted `Code` button, copy the URL and clone the repository to your computer using `git clone` command: + +```shell +$ git clone COPIED_URL +``` + +> To fork a repository, you will need a basic understanding of CLI and git-cli binaries installed. If you are a beginner, we recommend you to use `Github Desktop`. It is a really clean and simple visual Git client. + +Finally, you will need to create a `feat-XXX-YYY-translation` branch based on the `locale` branch and switch to it. The `XXX` should represent issue ID and `YYY` the language name. + + +## 2. Generate the translations + +You can choose to contribute either directly on [**GitHub**](#21-manually-using-github) or using [**POEditor**](#22-visually-using-po-editor) if you prefer a GUI. + +### 2.1 Manually using GitHub + +> Proceed to [Visually using PO Editor](#22-visually-using-po-editor) if you want to use graphical interface instead. -### Contributing with Github We maintain a [`locale branch`](https://github.com/appwrite/appwrite/tree/locale/) under the [appwrite/appwrite repo](https://github.com/appwrite/appwrite/) exclusively for translations related PRs. Here are a few files that you need to refer to help with your contribution. @@ -67,16 +94,10 @@ Next, choose a reference language. If English is your reference language, copy t ... ... } ``` -Add your language code to [codes.php](https://github.com/appwrite/appwrite/blob/locale/app/config/locale/codes.php#L14) in the following format -```php - ... - 'es', // Spanish - ... -``` -Finally, load your translation file in `init.php` by following a pattern similar to the [existing languages](https://github.com/appwrite/appwrite/blob/locale/app/init.php#L269). +### 2.2 Visually using PO Editor -### Contributing with PO Editor +> Proceed to [Add the translations to the project](#3-add-the-translations-to-the-project) if you already followed the GitHub approach. We use [PO Editor](https://poeditor.com/) to manage all our translations in a convenient way. The first step is to join the Appwrite Project on PO Editor using [our invite link](https://poeditor.com/join/project?hash=BNrWbRXyk6). @@ -98,9 +119,64 @@ You're now ready to start contributing. On the left, you'll find the string to b ![Reference Language](images/reference-language.png) -Once you're happy with your translations, you can export them. Head over to the **Exports** tab and choose the **Key-Value JSON** option only. Download the file and you can then follow the steps similar to the Github approach. +Once you're happy with your translations, you can export them. Head over to the **Exports** tab and choose the **Key-Value JSON** option only. Download the file and you can then follow the steps similar to the Github approach. ![Exporting](images/export.png) -### 🤕 Stuck ? +> **Attention! 🛑** There are two JSON exports. Please make sure to export the one saying `Key-value JSON`. Refer to the screenshot if you are not sure which one is correct. + +After exporting a JSON file, we need to rename it to follow the **[ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)** standards. You can use [languages.php](https://github.com/appwrite/appwrite/blob/locale/app/config/locale/languages.php) file to find your language code when making a contribution for your language. For example, Spanish translation should have file called `es.json`. + + +## 3. Add the translations to the project + +Add your language code to [codes.php](https://github.com/appwrite/appwrite/blob/locale/app/config/locale/codes.php#L14) in the following format. +```php + ... + 'es', // Spanish + ... +``` + +Finally, load your translation file in `init.php` by following a pattern similar to the [existing languages](https://github.com/appwrite/appwrite/blob/locale/app/init.php#L270). + +> Please make sure to keep both `codes.php` and `init.php` in the alphabetical order A-Z. + +## 4. Test the translations + +To test if the translation is properly loaded, we will send a GET request to get a list of EU countries. + +First of all, we need to start a local instance of Appwrite. Thanks to Docker, this can be done using one command. + +```shell +$ docker-compose up -d +``` + +If this is your first time running Appwrite, it may take up to few minutes to download all images and start all containers. Once everything is started, you should see Appwrite running on `http://localhost:80`. When you visit this URL, it will ask you to sign up. After that, it will show you your empty dashboard where you need to create a new project - give it any name you want. Then you need to go to `Settings` of the project and copy `Project-ID`. + +If you are lost in the Appwrite dashboard, check out our [Article about Appwrite's dashboard](https://dev.to/appwrite/30daysofappwrite-appwrite-dashboard-15cc). + + +Now, let's send the request. We will be editing headers of the request, so you will need a tool to do that, such as Postman or Insomnia. + +First, let's see English translations. Let's set request type to `GET`, URL to `https://localhost/v1/locale/countries/eu` and add `X-Appwrite-Project` header. + +![English test](images/test-en.png) + +> Make sure to use your own project ID for the header. + +After firing the request, we can see countries named `Austria, Belgium, Bulgaria...` So far, we are getting English translations of the country names. + +Once we add `X-Appwrite-Locale` header and send the request again, we will get the names in a specific language. + +![Czech test](images/test-cs.png) + +> Make sure to replace the locale code with the language code you are writing translations for. + +If you can see countries names translated, everything works, and you are ready for the last step. 😊 + +## 5. Raise a pull request + +First of all, commit the changes with the message `Added YYY translations` where `YYY` is the translated language and push it. This will publish a new branch to your forked version of Appwrite. If you visit it at `github.com/YOUR_USERNAME/appwrite`, you will see a new alert saying you are ready to submit a pull request. Follow the steps GitHub provides, and at the end, you will have your pull request submitted. + +## 🤕 Stuck ? If you need any help with the contribution, feel free to head over to [our discord channel](https://appwrite.io/discord) and we'll be happy to help you out. diff --git a/docs/tutorials/images/export.png b/docs/tutorials/images/export.png index f074632230..362518f5d6 100644 Binary files a/docs/tutorials/images/export.png and b/docs/tutorials/images/export.png differ diff --git a/docs/tutorials/images/fork.png b/docs/tutorials/images/fork.png new file mode 100644 index 0000000000..53c794acfc Binary files /dev/null and b/docs/tutorials/images/fork.png differ diff --git a/docs/tutorials/images/test-cs.png b/docs/tutorials/images/test-cs.png new file mode 100644 index 0000000000..d1e79de299 Binary files /dev/null and b/docs/tutorials/images/test-cs.png differ diff --git a/docs/tutorials/images/test-en.png b/docs/tutorials/images/test-en.png new file mode 100644 index 0000000000..28e5278c0b Binary files /dev/null and b/docs/tutorials/images/test-en.png differ