1
0
Fork 0
mirror of synced 2024-09-28 07:21:35 +12:00

Merge branch 'master' of github.com:appwrite/appwrite

This commit is contained in:
Eldad Fux 2021-12-11 02:17:34 +02:00
commit 07551dc902
32 changed files with 892 additions and 406 deletions

View file

@ -100,7 +100,7 @@
- Refactored E-Mail template (#1422)
- Improved locale management (#1440)
- Added `$permissions` to execution response (#948)
- Switch from using Docker CLI to Docker API by intergrating [utopia-php/orchestration](https://github.com/utopia-php/orchestration) (#1420)
- Switch from using Docker CLI to Docker API by integrating [utopia-php/orchestration](https://github.com/utopia-php/orchestration) (#1420)
- Added DOCKERHUB_PULL_USERNAME, DOCKERHUB_PULL_PASSWORD and DOCKERHUB_PULL_EMAIL env variables for pulling from private DockerHub repos (#1420)
- Added `updateName`, `updateEmail` and `updatePassword` to Users service and console (#1547)
@ -155,7 +155,7 @@
- Added internal support for connection pools for improved performance (#1278)
- Added new abstraction for workers executable files (#1276)
- Added a new API in the Users API to allow you to force update your user verification status (#1223)
- Using a fixed commit to avoid breaking changes for imagemagick extenstion (#1274)
- Using a fixed commit to avoid breaking changes for imagemagick extension (#1274)
- Updated the design of all the email templates (#1225)
- Refactored Devices page in Console: (#1167)
- Renamed *Devices* to *Sessions*
@ -186,7 +186,7 @@
- Fixed a bug in the Twitch OAuth adapter (#1209)
- Fixed missing session object when OAuth session creation event is triggered (#1208)
- Fixed bug where we didn't ignore the email case, converted all emails to lowercase internally (#1243)
- Fixed a console bug where you can't click a user with no name, added a placehoder for anonyomous users (#1220)
- Fixed a console bug where you can't click a user with no name, added a placeholder for anonymous users (#1220)
- Fixed unique keys not being updated when changing a user's email address (#1301)
- Fixed a bug where decimal integers where wrongly used with database filters (#1349)
@ -280,8 +280,8 @@
## Upgrades
- Upgraded redis extenstion lib to version 5.3.3
- Upgraded maxmind extenstion lib to version 1.10.0
- Upgraded redis extension lib to version 5.3.3
- Upgraded maxmind extension lib to version 1.10.0
- Upgraded utopia-php/cli lib to version 0.10.0
- Upgraded matomo/device-detector lib to version 4.1.0
- Upgraded dragonmantank/cron-expression lib to version 3.1.0
@ -293,7 +293,7 @@
## Bug Fixes
- Updated missing storage env vars
- Fixed a bug, that added a wrong timzone offset to user log timestamps
- Fixed a bug, that added a wrong timezone offset to user log timestamps
- Fixed a bug, that Response format header was not added in the access-control-allow-header list.
- Fixed a bug where countryName is unknown on sessions (#933)
- Added missing event users.update.prefs (#952)
@ -372,13 +372,13 @@
- Upgraded Influxdb Docker image to version 1.8 (alpine)
- Upgraded Redis Resque queue library to version 1.3.6 ([#319](https://github.com/appwrite/appwrite/issues/319))
- Upgraded ClamAV container image to version 1.0.11 ([#412](https://github.com/appwrite/appwrite/issues/412))
- Upgraded device detctor to version 3.12.6
- Upgraded device detector to version 3.12.6
- Upgraded GEOIP DB file to Feb 2021 release
## Breaking Changes (Read before upgrading!)
- **Deprecated** `first` and `last` query params for documents list route in the database API
- **Deprecated** Deprectaed Pubjabi Translations ('pn')
- **Deprecated** Deprecated Pubjabi Translations ('pn')
- **Deprecated** `PATCH /account/prefs` is now updating the prefs payload and not just merging it
- **Deprecated** `PATCH /users/:userId/prefs` is now updating the prefs payload and not just merging it
- Switched order of limit and offset params in all the SDKs `listDocuments` method for better consistency
@ -424,7 +424,7 @@
- Block iframe access to Appwrite console using the `X-Frame-Options` header.
- Fixed `roles` param input validator
- API Keys are now stored encrypted
- Disabled domains whitlist ACL for the Appwrite console
- Disabled domains whitelist ACL for the Appwrite console
# Version 0.6.2 (PRE-RELEASE)

View file

@ -9,7 +9,7 @@
</p>
[![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)
[![Discord](https://img.shields.io/discord/564160730845151244?label=discord&style=flat-square)](https://appwrite.io/discord?r=Github)
[![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)
[![Twitter Account](https://img.shields.io/twitter/follow/appwrite_io?color=00acee&label=twitter&style=flat-square)](https://twitter.com/appwrite_io)

View file

@ -37,16 +37,16 @@ return [
'kn', // Kannada
'km', // Khmer
'ko', // Korean
'la', // Latin
'lb', // Luxembourgish
'lt', // Lithuanian
'lv', // Latvian
'ml', // Malayalam
'mr', // Marathi
'ms', // Malay
'nb', // Norwegian - Bokmål
'nb', // Norwegian bokmål
'nl', // Dutch
'nn', // Norwegian (nynorsk)
'no', // Norwegian (bokmål)
'nn', // Norwegian nynorsk
'ne', // Nepali
'or', // Oriya
'tl', // Filipino
@ -64,6 +64,7 @@ return [
'sq', // Albanian
'sv', // Swedish
'ta', // Tamil
'te', // Telugu
'th', // Thai
'tr', // Turkish
'uk', // Ukrainian

View file

@ -593,11 +593,6 @@ return [
"name" => "Norwegian Nynorsk",
"nativeName" => "Norsk nynorsk"
],
[
"code" => "no",
"name" => "Norwegian",
"nativeName" => "Norsk"
],
[
"code" => "nr",
"name" => "South Ndebele",

View file

@ -3,30 +3,30 @@
"settings.locale": "bn",
"settings.direction": "ltr",
"emails.sender": "%s টীম",
"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": "বিষয়",
"emails.verification.hello": "নমস্কার {{name}}",
"emails.verification.body": "এই লিঙ্কের মাধ্যমে ইমেইল যাচাই করুন।",
"emails.verification.footer": "আপনি যদি এই ঠিকানা যাচাই করতে না বলেন, তাহলে আপনি এই বার্তাটি উপেক্ষা করতে পারেন।",
"emails.verification.thanks": "ধন্যবাদ",
"emails.verification.signature": "{{project}} টীম",
"emails.magicSession.subject": "লগ ইন",
"emails.magicSession.hello": "নমস্কার",
"emails.magicSession.body": "এই লিঙ্কের মাধ্যমে লগ ইন করুন।",
"emails.magicSession.footer": "আপনি যদি এই ইমেলটি ব্যবহার করে লগইন করতে না বলেন, তাহলে আপনি এই বার্তাটি উপেক্ষা করতে পারেন।",
"emails.magicSession.thanks": "ধন্যবাদ",
"emails.magicSession.signature": "{{project}} টীম",
"emails.recovery.subject": "পাসওয়ার্ড রিসেট",
"emails.recovery.hello": "নমস্কার {{name}}",
"emails.recovery.body": "এই লিঙ্কের মাধ্যমে আপনার {{project}} পাসওয়ার্ড পুনরায় সেট করুন।",
"emails.recovery.footer": "আপনি যদি আপনার পাসওয়ার্ড পুনরায় সেট করতে না বলেন, তাহলে আপনি এই বার্তাটি উপেক্ষা করতে পারেন।",
"emails.recovery.thanks": "ধন্যবাদ",
"emails.recovery.signature": "{{project}} টীম",
"emails.invitation.subject": "%s টিমকে %s তে আমন্ত্রণ জানান",
"emails.invitation.hello": "নমস্কার",
"emails.invitation.body": "এই মেইলটি আপনাকে পাঠানো হয়েছে কারণ {{owner}} আপনাকে {{project}} এর সাথে যুক্ত {{team}} টিমের সদস্য হওয়ার জন্য আমন্ত্রণ জানাতে চেয়েছিলেন।",
"emails.invitation.footer": "যদি এটি আপনার জন্য প্রয়োজনীয় না হয়, আপনি এই বার্তাটি উপেক্ষা করতে পারেন।",
"emails.invitation.thanks": "ধন্যবাদ",
"emails.invitation.signature": "{{project}} টীম",
"locale.country.unknown": "অজানা",
"countries.af": "আফগানিস্তান",
"countries.ao": "অ্যাঙ্গোলা",
@ -229,4 +229,4 @@
"continents.na": "উত্তর আমেরিকা",
"continents.oc": "ওশেনিয়া",
"continents.sa": "দক্ষিণ আমেরিকা"
}
}

View file

@ -3,30 +3,30 @@
"settings.locale": "hu",
"settings.direction": "ltr",
"emails.sender": "%s Csapat",
"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": "Fiók Megerősítése",
"emails.verification.hello": "Szia {{name}}",
"emails.verification.body": "Kattints a linkre, hogy megerősítsd az email címedet.",
"emails.verification.footer": "Ha nem te kérted a címed megerősítését, akkor nyugodtan hagyd figyelmen kívül ezt az üzenetet.",
"emails.verification.thanks": "Köszönettel",
"emails.verification.signature": "a {{project}} csapat",
"emails.magicSession.subject": "Bejelentkezés",
"emails.magicSession.hello": "Szia,",
"emails.magicSession.body": "Kattints a linkre a bejelentkezéshez.",
"emails.magicSession.footer": "Ha nem te szerettél volna bejelentkezni ezzel az email címmel, akkor nyugodtan hagyd figyelmen kívül ezt az üzenetet.",
"emails.magicSession.thanks": "Köszönettel",
"emails.magicSession.signature": "a {{project}} csapat",
"emails.recovery.subject": "Jelszó Visszaállítása",
"emails.recovery.hello": "Hahó, {{name}}",
"emails.recovery.body": "Kattints a linkre a {{project}} jelszavad visszaállításához.",
"emails.recovery.footer": "Ha nem te kezdeményezted a jelszavad visszaállítását, akkor nyugodtan hagyd figyelmen kívül ezt az üzenetet.",
"emails.recovery.thanks": "Köszönettel",
"emails.recovery.signature": "a {{project}} csapat",
"emails.invitation.subject": "Meghívó a(z) %s csapatba, a(z) %s projektbe",
"emails.invitation.hello": "Szia",
"emails.invitation.body": "Ezt a levelet azért kaptad, mert {{owner}} meghívott, hogy légy a {{team}} csapat tagja a {{project}} projektben.",
"emails.invitation.footer": "Ha nem érdekel a lehetőség, nyugodtan hagyd figyelmen kívül ezt az üzenetet.",
"emails.invitation.thanks": "Köszönettel",
"emails.invitation.signature": "a {{project}} csapat",
"locale.country.unknown": "Ismeretlen",
"countries.af": "Afganisztán",
"countries.ao": "Angola",

View file

@ -0,0 +1,232 @@
{
"settings.inspire": "\"Ars sapiendi est ars sciendi quid negligat.\"",
"settings.locale": "la",
"settings.direction": "ltr*",
"emails.sender": "%s team",
"emails.verification.subject": "Ratio comprobatio",
"emails.verification.hello": "Salve ibi {{name}}",
"emails.verification.body": "Sequere hanc nexum ut quin inscriptionem tuum.",
"emails.verification.footer": "Si verificationem huius inscriptionis non postulasti, nuntium hunc ignorare potes.",
"emails.verification.thanks": "Gratias",
"emails.verification.signature": "{{project}} Team",
"emails.magicSession.subject": "Log in",
"emails.magicSession.hello": "Salve ibi,",
"emails.magicSession.body": "Hanc nexum cum login",
"emails.magicSession.footer": "Si verificationem huius inscriptionis non postulasti, nuntium hunc ignorare potes.",
"emails.magicSession.thanks": "Gratias",
"emails.magicSession.signature": "{{project}} team",
"emails.recovery.subject": "Recuperet password",
"emails.recovery.hello": "Salve ibi {{name}}",
"emails.recovery.body": "Sequere hanc conjunctionem ut recipias project password {{project}}",
"emails.recovery.footer": "Si tesseram tuam recuperare non petis, nuntium hunc ignorare potes",
"emails.recovery.thanks": "Gratias",
"emails.recovery.signature": "{{project}} team",
"emails.invitation.subject": "Invitatio pro %s in quadrigis %s",
"emails.invitation.hello": "Salve ibi",
"emails.invitation.body": "Haec inscriptio ad te missa est quia dominus incepto {{owner}} te invitare vult ut membrum {{team}} quadrigis fias ad {{project}}",
"emails.invitation.footer": "Si non quaero, potes hunc nuntium ignorare",
"emails.invitation.thanks": "Gratias",
"emails.invitation.signature": "{{project}} team",
"locale.country.unknown": "Ignotum",
"countries.af": "Afghanistan",
"countries.ao": "Angola",
"countries.al": "Albania",
"countries.ad": "Andorra",
"countries.ae": "Emiratos Arabes Unidos",
"countries.ar": "Argentina",
"countries.am": "Armenia",
"countries.ag": "Antigua and Barbuda",
"countries.au": "Australia",
"countries.at": "Austria",
"countries.az": "Azerbaijan",
"countries.bi": "Burundi",
"countries.be": "Belgium",
"countries.bj": "Benin",
"countries.bf": "Burkina Faso",
"countries.bd": "Bangladesh",
"countries.bg": "Bulgaria",
"countries.bh": "Bahrain",
"countries.bs": "Bahamas",
"countries.ba": "Bosnia and Herzegovina",
"countries.by": "Belarus",
"countries.bz": "Belize",
"countries.bo": "Bolivia",
"countries.br": "Brazil",
"countries.bb": "Barbados",
"countries.bn": "Brunei",
"countries.bt": "Bhutan",
"countries.bw": "Botswana",
"countries.cf": "Central African Republic",
"countries.ca": "Canada",
"countries.ch": "Switzerland",
"countries.cl": "Chile",
"countries.cn": "China",
"countries.ci": "Ivory Coast",
"countries.cm": "Cameroon",
"countries.cd": "DR Congo",
"countries.cg": "Republic of the Congo",
"countries.co": "Colombia",
"countries.km": "Comoros",
"countries.cv": "Cape Verde",
"countries.cr": "Costa Rica",
"countries.cu": "Cuba",
"countries.cy": "Cyprus",
"countries.cz": "Czechia",
"countries.de": "Germany",
"countries.dj": "Djibouti",
"countries.dm": "Dominica",
"countries.dk": "Denmark",
"countries.do": "Republica dominicana",
"countries.dz": "Algeria",
"countries.ec": "Ecuador",
"countries.eg": "Egypt",
"countries.er": "Eritrea",
"countries.es": "Spain",
"countries.ee": "Estonia",
"countries.et": "Ethiopia",
"countries.fi": "Finland",
"countries.fj": "Fiji",
"countries.fr": "France",
"countries.fm": "Micronesia",
"countries.ga": "Gabon",
"countries.gb": "Reino Unido",
"countries.ge": "Georgia",
"countries.gh": "Ghana",
"countries.gn": "Guinea",
"countries.gm": "Gambia",
"countries.gw": "Guinea-Bissau",
"countries.gq": "Equatorial Guinea",
"countries.gr": "Greece",
"countries.gd": "Grenada",
"countries.gt": "Guatemala",
"countries.gy": "Guyana",
"countries.hn": "Honduras",
"countries.hr": "Croatia",
"countries.ht": "Haiti",
"countries.hu": "Hungary",
"countries.id": "Indonesia",
"countries.in": "India",
"countries.ie": "Ireland",
"countries.ir": "Iran",
"countries.iq": "Iraq",
"countries.is": "Iceland",
"countries.il": "Israel",
"countries.it": "Italy",
"countries.jm": "Jamaica",
"countries.jo": "Jordan",
"countries.jp": "Japan",
"countries.kz": "Kazakhstan",
"countries.ke": "Kenya",
"countries.kg": "Kyrgyzstan",
"countries.kh": "Cambodia",
"countries.ki": "Kiribati",
"countries.kn": "Saint Kitts and Nevis",
"countries.kr": "South Korea",
"countries.kw": "Kuwait",
"countries.la": "Laos",
"countries.lb": "Lebanon",
"countries.lr": "Liberia",
"countries.ly": "Libya",
"countries.lc": "Saint Lucia",
"countries.li": "Liechtenstein",
"countries.lk": "Sri Lanka",
"countries.ls": "Lesotho",
"countries.lt": "Lithuania",
"countries.lu": "Luxembourg",
"countries.lv": "Latvia",
"countries.ma": "Morocco",
"countries.mc": "Monaco",
"countries.md": "Moldova",
"countries.mg": "Madagascar",
"countries.mv": "Maldives",
"countries.mx": "Mexico",
"countries.mh": "Marshall Islands",
"countries.mk": "Macedonia",
"countries.ml": "Mali",
"countries.mt": "Malta",
"countries.mm": "Myanmar",
"countries.me": "Montenegro",
"countries.mn": "Mongolia",
"countries.mz": "Mozambique",
"countries.mr": "Mauritania",
"countries.mu": "Mauritius",
"countries.mw": "Malawi",
"countries.my": "Malaysia",
"countries.na": "Namibia",
"countries.ne": "Niger",
"countries.ng": "Nigeria",
"countries.ni": "Nicaragua",
"countries.nl": "Netherlands",
"countries.no": "Norway",
"countries.np": "Nepal",
"countries.nr": "Nauru",
"countries.nz": "New Zealand",
"countries.om": "Oman",
"countries.pk": "Pakistan",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Philippines",
"countries.pw": "Palau",
"countries.pg": "Papua New Guinea",
"countries.pl": "Poland",
"countries.kp": "North Korea",
"countries.pt": "Portugal",
"countries.py": "Paraguay",
"countries.qa": "Qatar",
"countries.ro": "Romania",
"countries.ru": "Russia",
"countries.rw": "Rwanda",
"countries.sa": "Saudi Arabia",
"countries.sd": "Sudan",
"countries.sn": "Senegal",
"countries.sg": "Singapore",
"countries.sb": "Solomon Islands",
"countries.sl": "Sierra Leone",
"countries.sv": "El Salvador",
"countries.sm": "San Marino",
"countries.so": "Somalia",
"countries.rs": "Serbia",
"countries.ss": "South Sudan",
"countries.st": "São Tomé and Príncipe",
"countries.sr": "Suriname",
"countries.sk": "Slovakia",
"countries.si": "Slovenia",
"countries.se": "Sweden",
"countries.sz": "Swaziland",
"countries.sc": "Seychelles",
"countries.sy": "Syria",
"countries.td": "Chad",
"countries.tg": "Togo",
"countries.th": "Thailand",
"countries.tj": "Tajikistan",
"countries.tm": "Turkmenistan",
"countries.tl": "Timor-Leste",
"countries.to": "Tonga",
"countries.tt": "Trinidad and Tobago",
"countries.tn": "Tunisia",
"countries.tr": "Turkey",
"countries.tv": "Tuvalu",
"countries.tz": "Tanzania",
"countries.ug": "Uganda",
"countries.ua": "Ukraine",
"countries.uy": "Uruguay",
"countries.us": "United States",
"countries.uz": "Uzbekistan",
"countries.va": "Vatican City",
"countries.vc": "Saint Vincent and the Grenadines",
"countries.ve": "Venezuela",
"countries.vn": "Vietnam",
"countries.vu": "Vanuatu",
"countries.ws": "Samoa",
"countries.ye": "Yemen",
"countries.za": "Sud-Africa",
"countries.zm": "Zambia",
"countries.zw": "Zimbabwe",
"continents.af": "Africa",
"continents.an": "Antarctica",
"continents.as": "Asia",
"continents.eu": "Europe",
"continents.na": "America del Norte",
"continents.oc": "Oceania",
"continents.sa": "America del Sur"
}

View file

@ -2,31 +2,31 @@
"settings.inspire": "\"Kunsten å være klok er kunsten å vite hva man skal overse.\"",
"settings.locale": "nb",
"settings.direction": "ltr",
"emails.sender": "%s Teamet",
"emails.verification.subject": "Konto Verifisering",
"emails.sender": "%s Team",
"emails.verification.subject": "Kontobekreftelse",
"emails.verification.hello": "Hei {{name}}",
"emails.verification.body": "Følg denne lenken for å verifisere din epost adresse.",
"emails.verification.footer": "Hvis du ikke ba om å bekrefte denne adressen, kan du ignorere denne meldingen.",
"emails.verification.body": "Følg denne lenken for å bekrefte din e-postadresse.",
"emails.verification.footer": "Dersom du ikke ba om å bekrefte e-postadressen, kan du se bort fra denne meldingen.",
"emails.verification.thanks": "Takk",
"emails.verification.signature": "{{project}} teamet",
"emails.magicSession.subject": "Login",
"emails.verification.signature": "{{project}} team",
"emails.magicSession.subject": "Pålogging",
"emails.magicSession.hello": "Hei,",
"emails.magicSession.body": "Følg denne lenken for å logge inn.",
"emails.magicSession.footer": "Hvis du ikke ba om å logge inn med denne adressen, kan du ignorere denne meldingen.",
"emails.magicSession.body": "Følg denne lenken for å logge .",
"emails.magicSession.footer": "Dersom du ikke ba om å logge på med denne e-postadressen, kan du se bort fra denne meldingen.",
"emails.magicSession.thanks": "Takk",
"emails.magicSession.signature": "{{project}} teamet",
"emails.recovery.subject": "Reset Passord",
"emails.magicSession.signature": "{{project}} team",
"emails.recovery.subject": "Nullstille passord",
"emails.recovery.hello": "Hei {{name}}",
"emails.recovery.body": "Følg denne lenken for å resette ditt {{project}} passord.",
"emails.recovery.footer": "Hvis du ikke ba om å resette ditt passord, kan du ignorere denne meldingen.",
"emails.recovery.body": "Følg denne lenken for å nullstille ditt {{project}} passord.",
"emails.recovery.footer": "Dersom du ikke ba om å nullstille passordet ditt, kan du se bort fra denne meldingen.",
"emails.recovery.thanks": "Takk",
"emails.recovery.signature": "{{project}} teamet",
"emails.recovery.signature": "{{project}} team",
"emails.invitation.subject": "Invitasjon til %s Team ved %s",
"emails.invitation.hello": "Hei",
"emails.invitation.body": "Denne mailen ble sendt til deg fordi {{owner}} hadde lyst til å invitere deg til å bli et medlem av {{team}} teamet ved {{project}}.",
"emails.invitation.footer": "Hvis du ikke er interessert, kan du ignorere denne meldingen.",
"emails.invitation.body": "Denne meldingen ble sendt til deg fordi {{owner}} ønsket å invitere deg til å bli medlem av {{team}} team ved {{project}}.",
"emails.invitation.footer": "Dersom du ikke er interessert, kan du se bort fra denne meldingen.",
"emails.invitation.thanks": "Takk",
"emails.invitation.signature": "{{project}} teamet",
"emails.invitation.signature": "{{project}} team",
"locale.country.unknown": "Ukjent",
"countries.af": "Afghanistan",
"countries.ao": "Angola",
@ -229,4 +229,4 @@
"continents.na": "Nord-Amerika",
"continents.oc": "Oseania",
"continents.sa": "Sør-Amerika"
}
}

View file

@ -1,232 +0,0 @@
{
"settings.inspire": "\"Kunsten å være klok er kunsten å vite hva man skal overse.\"",
"settings.locale": "no",
"settings.direction": "ltr",
"emails.sender": "%s Team",
"emails.verification.subject": "Kontobekreftelse",
"emails.verification.hello": "Hallo {{name}}",
"emails.verification.body": "Følg denne lenken for å bekrefte din e-postadresse.",
"emails.verification.footer": "Dersom du ikke ba om å bekrefte e-postadressen, kan du se bort fra denne meldingen.",
"emails.verification.thanks": "Takk",
"emails.verification.signature": "{{project}} team",
"emails.magicSession.subject": "Pålogging",
"emails.magicSession.hello": "Hei,",
"emails.magicSession.body": "Følg denne lenken for å logge på.",
"emails.magicSession.footer": "Dersom du ikke ba om å logge på med denne e-postadressen, kan du se bort fra denne meldingen.",
"emails.magicSession.thanks": "Takk",
"emails.magicSession.signature": "{{project}} team",
"emails.recovery.subject": "Nullstille passord",
"emails.recovery.hello": "Hallo {{name}}",
"emails.recovery.body": "Følg denne lenken for å nullstille ditt {{project}} passord.",
"emails.recovery.footer": "Dersom du ikke ba om å nullstille passordet ditt, kan du se bort fra denne meldingen.",
"emails.recovery.thanks": "Takk",
"emails.recovery.signature": "{{project}} team",
"emails.invitation.subject": "Invitasjon til %s Team ved %s",
"emails.invitation.hello": "Hallo",
"emails.invitation.body": "Denne meldingen ble sendt til deg fordi {{owner}} ønsket å invitere deg til å bli medlem av {{team}} team i {{project}}.",
"emails.invitation.footer": "Dersom du ikke er interessert, kan du se bort fra denne meldingen.",
"emails.invitation.thanks": "Takk",
"emails.invitation.signature": "{{project}} team",
"locale.country.unknown": "Ukjent",
"countries.af": "Afghanistan",
"countries.ao": "Angola",
"countries.al": "Albania",
"countries.ad": "Andorra",
"countries.ae": "De forente arabiske emirater",
"countries.ar": "Argentina",
"countries.am": "Armenia",
"countries.ag": "Antigua og Barbuda",
"countries.au": "Australia",
"countries.at": "Østerrike",
"countries.az": "Aserbajdsjan",
"countries.bi": "Burundi",
"countries.be": "Belgia",
"countries.bj": "Benin",
"countries.bf": "Burkina Faso",
"countries.bd": "Bangladesh",
"countries.bg": "Bulgaria",
"countries.bh": "Bahrain",
"countries.bs": "Bahamas",
"countries.ba": "Bosnia-Hercegovina",
"countries.by": "Hviterussland",
"countries.bz": "Belize",
"countries.bo": "Bolivia",
"countries.br": "Brasil",
"countries.bb": "Barbados",
"countries.bn": "Brunei Darussalam",
"countries.bt": "Bhutan",
"countries.bw": "Botswana",
"countries.cf": "Den sentralafrikanske republikken",
"countries.ca": "Canada",
"countries.ch": "Sveits",
"countries.cl": "Chile",
"countries.cn": "Kina",
"countries.ci": "Elfenbenskysten",
"countries.cm": "Kamerun",
"countries.cd": "Den demokratiske republikken Kongo",
"countries.cg": "Republikken Kongo",
"countries.co": "Colombia",
"countries.km": "Komorene",
"countries.cv": "Kapp Verde",
"countries.cr": "Costa Rica",
"countries.cu": "Cuba",
"countries.cy": "Kypros",
"countries.cz": "Tjekkia",
"countries.de": "Tyskland",
"countries.dj": "Djibouti",
"countries.dm": "Dominica",
"countries.dk": "Danmark",
"countries.do": "Den dominikanske republikk",
"countries.dz": "Algerie",
"countries.ec": "Ecuador",
"countries.eg": "Egypt",
"countries.er": "Eritrea",
"countries.es": "Spania",
"countries.ee": "Estland",
"countries.et": "Etiopia",
"countries.fi": "Finland",
"countries.fj": "Fiji",
"countries.fr": "Frankrike",
"countries.fm": "Mikronesia",
"countries.ga": "Gabon",
"countries.gb": "Storbritannia",
"countries.ge": "Georgia",
"countries.gh": "Ghana",
"countries.gn": "Guinea",
"countries.gm": "Gambia",
"countries.gw": "Guinea-Bissau",
"countries.gq": "Ekvatorial-Guinea",
"countries.gr": "Hellas",
"countries.gd": "Grenada",
"countries.gt": "Guatemala",
"countries.gy": "Guyana",
"countries.hn": "Honduras",
"countries.hr": "Kroatia",
"countries.ht": "Haiti",
"countries.hu": "Ungarn",
"countries.id": "Indonesia",
"countries.in": "India",
"countries.ie": "Irland",
"countries.ir": "Iran",
"countries.iq": "Irak",
"countries.is": "Island",
"countries.il": "Israel",
"countries.it": "Italia",
"countries.jm": "Jamaica",
"countries.jo": "Jordan",
"countries.jp": "Japan",
"countries.kz": "Kasakhstan",
"countries.ke": "Kenya",
"countries.kg": "Kirgisistan",
"countries.kh": "Kambodsja",
"countries.ki": "Kiribati",
"countries.kn": "Saint Kitts og Nevis",
"countries.kr": "Sør-Korea",
"countries.kw": "Kuwait",
"countries.la": "Laos",
"countries.lb": "Libanon",
"countries.lr": "Liberia",
"countries.ly": "Libya",
"countries.lc": "Saint Lucia",
"countries.li": "Liechtenstein",
"countries.lk": "Sri Lanka",
"countries.ls": "Lesotho",
"countries.lt": "Litauen",
"countries.lu": "Luxembourg",
"countries.lv": "Latvia",
"countries.ma": "Marokko",
"countries.mc": "Monaco",
"countries.md": "Moldova",
"countries.mg": "Madagaskar",
"countries.mv": "Maldivene",
"countries.mx": "Mexico",
"countries.mh": "Marshalløyene",
"countries.mk": "Nord-Makedonia",
"countries.ml": "Mali",
"countries.mt": "Malta",
"countries.mm": "Myanmar",
"countries.me": "Montenegro",
"countries.mn": "Mongolia",
"countries.mz": "Mozambik",
"countries.mr": "Mauritania",
"countries.mu": "Mauritius",
"countries.mw": "Malawi",
"countries.my": "Malaysia",
"countries.na": "Namibia",
"countries.ne": "Niger",
"countries.ng": "Nigeria",
"countries.ni": "Nicaragua",
"countries.nl": "Nederland",
"countries.no": "Norge",
"countries.np": "Nepal",
"countries.nr": "Nauru",
"countries.nz": "New Zealand",
"countries.om": "Oman",
"countries.pk": "Pakistan",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Filippinene",
"countries.pw": "Palau",
"countries.pg": "Papua Ny-Guinea",
"countries.pl": "Polen",
"countries.kp": "Nord-Korea",
"countries.pt": "Portugal",
"countries.py": "Paraguay",
"countries.qa": "Qatar",
"countries.ro": "Romania",
"countries.ru": "Russland",
"countries.rw": "Rwanda",
"countries.sa": "Saudi-Arabia",
"countries.sd": "Sudan",
"countries.sn": "Senegal",
"countries.sg": "Singapore",
"countries.sb": "Solomonøyene",
"countries.sl": "Sierra Leone",
"countries.sv": "El Salvador",
"countries.sm": "San Marino",
"countries.so": "Somalia",
"countries.rs": "Serbia",
"countries.ss": "Sør-Sudan",
"countries.st": "São Tomé og Príncipe",
"countries.sr": "Surinam",
"countries.sk": "Slovakia",
"countries.si": "Slovenia",
"countries.se": "Sverige",
"countries.sz": "Swaziland",
"countries.sc": "Seychellene",
"countries.sy": "Syria",
"countries.td": "Tsjad",
"countries.tg": "Togo",
"countries.th": "Thailand",
"countries.tj": "Tajikistan",
"countries.tm": "Turkmenistan",
"countries.tl": "Øst-Timor",
"countries.to": "Tonga",
"countries.tt": "Trinidad og Tobago",
"countries.tn": "Tunisia",
"countries.tr": "Tyrkia",
"countries.tv": "Tuvalu",
"countries.tz": "Tanzania",
"countries.ug": "Uganda",
"countries.ua": "Ukraina",
"countries.uy": "Uruguay",
"countries.us": "Amerikas forente stater",
"countries.uz": "Usbekistan",
"countries.va": "Vatikanstaten",
"countries.vc": "Saint Vincent og Grenadinene",
"countries.ve": "Venezuela",
"countries.vn": "Vietnam",
"countries.vu": "Vanuatu",
"countries.ws": "Samoa",
"countries.ye": "Jemen",
"countries.za": "Sør-Africa",
"countries.zm": "Zambia",
"countries.zw": "Zimbabwe",
"continents.af": "Afrika",
"continents.an": "Antarktis",
"continents.as": "Asia",
"continents.eu": "Europa",
"continents.na": "Nord-Amerika",
"continents.oc": "Oseania",
"continents.sa": "Sør-Amerika"
}

View file

@ -3,30 +3,30 @@
"settings.locale": "ta",
"settings.direction": "ltr",
"emails.sender": "%s குழு",
"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": "கணக்கு சரிபார்ப்பு",
"emails.verification.hello": "ஏய் {{name}}",
"emails.verification.body": "உங்கள் மின்னஞ்சல் முகவரியைச் சரிபார்க்க இந்த இணைப்பைப் பின்தொடரவும்.",
"emails.verification.footer": "இந்த முகவரியைச் சரிபார்க்கும்படி உங்களிடம் கேட்கப்படவில்லை என்றால், இந்தச் செய்தியை நீங்கள் புறக்கணிக்கலாம்.",
"emails.verification.thanks": "நன்றி",
"emails.verification.signature": "{{project}} குழு ",
"emails.magicSession.subject": "உள்நுழைய",
"emails.magicSession.hello": "ஏய்,",
"emails.magicSession.body": "இந்த இணைப்பைப் பின்தொடரவும் உள்நுழைய",
"emails.magicSession.footer": "இந்த மின்னஞ்சலைப் பயன்படுத்தி உள்நுழையுமாறு உங்களிடம் கேட்கப்படாவிட்டால், இந்தச் செய்தியைப் புறக்கணிக்கலாம்.",
"emails.magicSession.thanks": "நன்றி",
"emails.magicSession.signature": "{{project}} குழு",
"emails.recovery.subject": "கடவுச்சொல் மீட்டமைப்பு",
"emails.recovery.hello": "வணக்கம் {{name}}",
"emails.recovery.body": "மீட்டமைக்க இந்த இணைப்பைப் பின்தொடரவும் {{project}} கடவுச்சொல்.",
"emails.recovery.footer": "உங்கள் கடவுச்சொல்லை மீட்டமைக்கும்படி உங்களிடம் கேட்கப்படவில்லை என்றால், இந்தச் செய்தியை நீங்கள் புறக்கணிக்கலாம்.",
"emails.recovery.thanks": "நன்றி",
"emails.recovery.signature": "{{project}} குழு",
"emails.invitation.subject": "அழைப்பிதழ் %s குழு %s ",
"emails.invitation.hello": "வணக்கம்",
"emails.invitation.body": "{{project}} இல் {{team}} குழுவில் உறுப்பினராக உங்களை {{owner}} அழைக்க விரும்புவதால், இந்த அஞ்சல் உங்களுக்கு அனுப்பப்பட்டது.",
"emails.invitation.footer": "உங்களுக்கு ஆர்வம் இல்லை என்றால், இந்த செய்தியை நீங்கள் புறக்கணிக்கலாம்.",
"emails.invitation.thanks": "நன்றி",
"emails.invitation.signature": "{{project}} குழு",
"locale.country.unknown": "அறியவில்லை",
"countries.af": "ஆப்கானித்தான்",
"countries.ao": "அங்கோலா",

View file

@ -0,0 +1,232 @@
{
"settings.inspire": "\"ఏది విస్మరించాలో తెలుసుకోవడమే తెలివైన వ్యక్తి యొక్క కళ.\"",
"settings.locale": "te",
"settings.direction": "ltr",
"emails.sender": "%s జట్టు",
"emails.verification.subject": "ఖాతా ధృవీకరణ",
"emails.verification.hello": "నమస్కారము {{name}}",
"emails.verification.body": "ఈ లింక్ ద్వారా ఇమెయిల్ ని ధృవీకరించండి",
"emails.verification.footer": "మీరు ఈ చిరునామాను ధృవీకరించమని అడగనట్లయితే, మీరు ఈ సందేశాన్ని విస్మరించవచ్చు",
"emails.verification.thanks": "ధన్యవాదాలు",
"emails.verification.signature": "{{project}} జట్",
"emails.magicSession.subject": "లాగిన్",
"emails.magicSession.hello": "నమస్కారము,",
"emails.magicSession.body": "లాగిన్ చేయడానికి ఈ లింక్ ని అనుసరించండి",
"emails.magicSession.footer": "మీరు ఈ ఇమెయిల్ ని ఉపయోగించి లాగిన్ చేయమని అడగకపోతే, మీరు ఈ సందేశాన్ని విస్మరించవచ్చు",
"emails.magicSession.thanks": "ధన్యవాదాలు",
"emails.magicSession.signature": "{{project}} జట్",
"emails.recovery.subject": "పాస్వర్డ్ రీసెట్",
"emails.recovery.hello": "నమస్కారమ {{name}}",
"emails.recovery.body": "మీ {{project}} పాస్వర్డ్ ని రీసెట్ చేయడానికి ఈ లింక్ ని అనుసరించండి",
"emails.recovery.footer": "మీరు మీ పాస్వర్డ్ ని రీసెట్ చేయమని అడగనట్లయితే, మీరు ఈ సందేశాన్ని విస్మరించవచ్చు",
"emails.recovery.thanks": "ధన్యవాదాల",
"emails.recovery.signature": "{{project}} జట్",
"emails.invitation.subject": "%s వద్ద %s బృందానికి ఆహ్వానం",
"emails.invitation.hello": "నమస్కారమ",
"emails.invitation.body": "{{owner}} మిమ్మల్ని {{project}} లో {{team}} బృందంలో సభ్యునిగా ఉండమని ఆహ్వానించాలనుకుంటున్నందున ఈ మెయిల్ మీకు పంపబడింది.",
"emails.invitation.footer": "మీకు ఆసక్తి లేకుంటే, మీరు ఈ సందేశాన్ని విస్మరించవచ్చు.",
"emails.invitation.thanks": "ధన్యవాదాల",
"emails.invitation.signature": "{{project}} జట్",
"locale.country.unknown": "తెలియని",
"countries.af": "ఆఫ్ఘనిస్తాన్",
"countries.ao": "అంగోలా",
"countries.al": "అల్బేనియా",
"countries.ad": "అండోరా",
"countries.ae": "యునైటెడ్ అరబ్ ఎమిరేట్స్",
"countries.ar": "అర్జెంటీనా",
"countries.am": "అర్మేనియా",
"countries.ag": "ఆంటిగ్వా మరియు బార్బుడా",
"countries.au": "ఆస్ట్రేలియా",
"countries.at": "ఆస్ట్రియా",
"countries.az": "అజర్బైజాన్",
"countries.bi": "బురుండి",
"countries.be": "బెల్జియం",
"countries.bj": "బెనిన్",
"countries.bf": "బుర్కినా ఫాసో",
"countries.bd": "బంగ్లాదేశ్",
"countries.bg": "బల్గేరియా",
"countries.bh": "బహ్రెయిన్",
"countries.bs": "బహామాస్",
"countries.ba": "బోస్నియా మరియు హెర్జెగోవినా",
"countries.by": "బెలారస్",
"countries.bz": "బెలీజ్",
"countries.bo": "బొలీవియా",
"countries.br": "బ్రెజిల్",
"countries.bb": "బార్బడోస్",
"countries.bn": "బ్రూనై",
"countries.bt": "భూటాన్",
"countries.bw": "బోట్స్వానా",
"countries.cf": "సెంట్రల్ ఆఫ్రికన్ రిపబ్లిక్",
"countries.ca": "కెనడా",
"countries.ch": "స్విట్జర్లాండ్",
"countries.cl": "చిలీ",
"countries.cn": "చైనా",
"countries.ci": "ఐవరీ కోస్ట్",
"countries.cm": "కామెరూన్",
"countries.cd": "DR కాంగో",
"countries.cg": "రిపబ్లిక్ ఆఫ్ కాంగో",
"countries.co": "కొలంబియా",
"countries.km": "కొమోరోస్",
"countries.cv": "కేప్ వర్దె",
"countries.cr": "కోస్టా రికా",
"countries.cu": "క్యూబా",
"countries.cy": "సైప్రస్",
"countries.cz": "చెకియా",
"countries.de": "జర్మనీ",
"countries.dj": "జిబౌటీ",
"countries.dm": "డొమినికా",
"countries.dk": "డెన్మార్క్",
"countries.do": "డొమినికన్ రిపబ్లిక్",
"countries.dz": "అల్జీరియా",
"countries.ec": "ఈక్వెడార్",
"countries.eg": "ఈజిప్ట్",
"countries.er": "ఎరిత్రియా",
"countries.es": "స్పెయిన్",
"countries.ee": "ఎస్టోనియా",
"countries.et": "ఇథియోపియా",
"countries.fi": "ఫిన్లాండ్",
"countries.fj": "ఫిజీ",
"countries.fr": "ఫ్రాన్స్",
"countries.fm": "మైక్రోనేషియా",
"countries.ga": "గాబోన్",
"countries.gb": "యునైటెడ్ కింగ్డమ్",
"countries.ge": "జార్జియా",
"countries.gh": "ఘానా",
"countries.gn": "గినియా",
"countries.gm": "గాంబియా",
"countries.gw": "గిన్-బిస్సౌ",
"countries.gq": "ఈక్వటోరియల్ గిన్",
"countries.gr": "గ్రీస్",
"countries.gd": "గ్రెనడా",
"countries.gt": "గ్వాటెమాల",
"countries.gy": "గయానా",
"countries.hn": "హోండురాస్",
"countries.hr": "క్రొయేషియా",
"countries.ht": "హైతీ",
"countries.hu": "హంగేరి",
"countries.id": "ఇండోనేషియా",
"countries.in": "భారతదేశం",
"countries.ie": "ఐర్లాండ్",
"countries.ir": "ఇరాన్",
"countries.iq": "ఇరాక్",
"countries.is": "ఐస్లాండ్",
"countries.il": "ఇజ్రాయెల్",
"countries.it": "ఇటలీ",
"countries.jm": "జమైకా",
"countries.jo": "జోర్డాన్",
"countries.jp": "జపాన్",
"countries.kz": "కజకిస్తాన్",
"countries.ke": "కెన్యా",
"countries.kg": "కిర్గిజ్స్తాన్",
"countries.kh": "కంబోడియా",
"countries.ki": "కిరిబాటి",
"countries.kn": "సెయింట్ కిట్స్ అండ్ నెవిస్",
"countries.kr": "దక్షిణ కొరియా",
"countries.kw": "కువైట్",
"countries.la": "లావోస్",
"countries.lb": "లెబనాన్",
"countries.lr": "లైబీరియా",
"countries.ly": "లిబియా",
"countries.lc": "సెయింట్ లూసియా",
"countries.li": "లీచ్టెన్స్టెయిన్",
"countries.lk": "శ్రీలంక",
"countries.ls": "లెసోతో",
"countries.lt": "లిథువేనియా",
"countries.lu": "లక్సెంబర్గ్",
"countries.lv": "లాట్వియా",
"countries.ma": "మొరాకో",
"countries.mc": "మొనాకో",
"countries.md": "మోల్డోవా",
"countries.mg": "మడగాస్కర్",
"countries.mv": "మాల్దీవులు",
"countries.mx": "మెక్సికో",
"countries.mh": "మార్షల్ దీవులు",
"countries.mk": "మాసిడోనియా",
"countries.ml": "మాలి",
"countries.mt": "మాల్టా",
"countries.mm": "మయన్మార్",
"countries.me": "మాంటెనెగ్రో",
"countries.mn": "మంగోలియా",
"countries.mz": "మొజాంబిక్",
"countries.mr": "మౌరిటానియా",
"countries.mu": "మారిషస్",
"countries.mw": "మలావి",
"countries.my": "మలేషియా",
"countries.na": "నమీబియా",
"countries.ne": "నైజర్",
"countries.ng": "నైజీరియా",
"countries.ni": "నికరాగ్వా",
"countries.nl": "నెదర్లాండ్స్",
"countries.no": "నార్వే",
"countries.np": "నేపాల్",
"countries.nr": "నౌరు",
"countries.nz": "న్యూజిలాండ్",
"countries.om": "ఒమన్",
"countries.pk": "పాకిస్తాన్",
"countries.pa": "పనామా",
"countries.pe": "పెరూ",
"countries.ph": "ఫిలిప్పీన్స్",
"countries.pw": "పలావ్",
"countries.pg": "పాపువా న్యూ గిన్",
"countries.pl": "పోలాండ్",
"countries.kp": "ఉత్తర కొరియా",
"countries.pt": "పోర్చుగల్",
"countries.py": "పరాగ్వే",
"countries.qa": "ఖతార్",
"countries.ro": "రొమేనియా",
"countries.ru": "రష్యా",
"countries.rw": "రువాండా",
"countries.sa": "సౌదీ అరేబియా",
"countries.sd": "సూడాన్",
"countries.sn": "సెనెగల్",
"countries.sg": "సింగపూర్",
"countries.sb": "సోలమన్ దీవులు",
"countries.sl": "సియెర్రా లియోన్",
"countries.sv": "ఎల్ సాల్వడార్",
"countries.sm": "శాన్ మారినో",
"countries.so": "సోమాలియా",
"countries.rs": "సెర్బియా",
"countries.ss": "దక్షిణ సూడాన్",
"countries.st": "సావో టోమ్ మరియు ప్రిన్సిపే",
"countries.sr": "సురినామ్",
"countries.sk": "స్లోవేకియా",
"countries.si": "స్లోవేనియా",
"countries.se": "స్వీడన్",
"countries.sz": "స్వాజిలాండ్",
"countries.sc": "సీషెల్స్",
"countries.sy": "సిరియా",
"countries.td": "చాడ్",
"countries.tg": "టోగో",
"countries.th": "థాయిలాండ్",
"countries.tj": "తజికిస్తాన్",
"countries.tm": "తుర్క్మెనిస్తాన్",
"countries.tl": "తైమోర్-లెస్టే",
"countries.to": "టాంగా",
"countries.tt": "ట్రినిడాడ్ మరియు టొబాగో",
"countries.tn": "ట్యునీషియా",
"countries.tr": "టర్కీ",
"countries.tv": "తువాలు",
"countries.tz": "టాంజానియా",
"countries.ug": "ఉగాండా",
"countries.ua": "ఉక్రెయిన్",
"countries.uy": "ఉరుగ్వే",
"countries.us": "యునైటెడ్ స్టేట్స్",
"countries.uz": "ఉజ్బెకిస్తాన్",
"countries.va": "వాటికన్ నగరం",
"countries.vc": "సెయింట్ విన్సెంట్ మరియు గ్రెనడిన్స్",
"countries.ve": "వెనిజులా",
"countries.vn": "వియత్నాం",
"countries.vu": "వనాటు",
"countries.ws": "సమోవా",
"countries.ye": "యెమెన్",
"countries.za": "దక్షిణాఫ్రికా",
"countries.zm": "జాంబియా",
"countries.zw": "జింబాబ్వే",
"continents.af": "ఆఫ్రికా",
"continents.an": "అంటార్కిటికా",
"continents.as": "ఆసియా",
"continents.eu": "యూరోప్",
"continents.na": "ఉత్తర అమెరికా",
"continents.oc": "ఓషియానియా",
"continents.sa": "దక్షిణ అమెరికా"
}

View file

@ -3,30 +3,30 @@
"settings.locale": "ur",
"settings.direction": "rtl",
"emails.sender": "%s ٹیم",
"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": "اکاؤنٹ کی تصدیق",
"emails.verification.hello": "خوش آمدید {{name}}",
"emails.verification.body": "براہ کرم اپنے ای میل کی تصدیق کے لیے درج ذیل لنک پر عمل کریں۔",
"emails.verification.footer": "اگر آپ نے اس پتے کی تصدیق کے لیے نہیں کہا تو آپ اس پیغام کو نظر انداز کر سکتے ہیں۔",
"emails.verification.thanks": "شکریہ",
"emails.verification.signature": "ٹیم۔ {{project}}",
"emails.magicSession.subject": "اگ ان کریں",
"emails.magicSession.hello": "خوش آمدید,",
"emails.magicSession.body": "لاگ ان کرنے کے لیے اس لنک پر عمل کریں۔",
"emails.magicSession.footer": "اگر آپ نے اس ای میل کا استعمال کرتے ہوئے لاگ ان کرنے کے لیے نہیں کہا تو آپ اس پیغام کو نظر انداز کر سکتے ہیں۔",
"emails.magicSession.thanks": "شکریہ",
"emails.magicSession.signature": "ٹیم۔ {{project}}",
"emails.recovery.subject": "پاس ورڈ ری سیٹ۔",
"emails.recovery.hello": "ہیلو {{name}}",
"emails.recovery.body": "{{project}} کا پاس ورڈ تبدیل کرنے کے لیے درج ذیل لنک پر عمل کریں",
"emails.recovery.footer": "اگر آپ نے اپنا پاس ورڈ دوبارہ ترتیب دینے کے لیے نہیں کہا تو آپ اس پیغام کو نظر انداز کر سکتے ہیں۔",
"emails.recovery.thanks": "شکریہ",
"emails.recovery.signature": "ٹیم۔ {{project}}",
"emails.invitation.subject": "%s پر %s ٹیم کو دعوت",
"emails.invitation.hello": "خوش آمدید",
"emails.invitation.body": "یہ پیغام آپ کو اس لیے بھیجا گیا تھا کہ {{owner}} نے آپ کو {{project}} میں {{team}} ٹیم کا رکن بننے کی دعوت بھیجی",
"emails.invitation.footer": "اگر آپ دلچسپی نہیں رکھتے تو آپ اس پیغام کو نظر انداز کر سکتے ہیں۔",
"emails.invitation.thanks": "شکریہ",
"emails.invitation.signature": "ٹیم۔ {{project}",
"locale.country.unknown": "نامعلوم",
"countries.af": "افغانستان",
"countries.ao": "انگولا",
@ -229,4 +229,4 @@
"continents.na": "شمالی امریکہ",
"continents.oc": "اوشینیا",
"continents.sa": "جنوبی امریکہ"
}
}

View file

@ -72,7 +72,7 @@ return [
],
[
'name' => '_APP_CONSOLE_WHITELIST_ROOT',
'description' => 'This option allows you to disable the creation of new users on the Appwrite console. When enabled only 1 user will be able to use the registration form. New users can be added by invting them to your project. By default this option is enabled.',
'description' => 'This option allows you to disable the creation of new users on the Appwrite console. When enabled only 1 user will be able to use the registration form. New users can be added by inviting them to your project. By default this option is enabled.',
'introduction' => '0.8.0',
'default' => 'enabled',
'required' => false,
@ -359,7 +359,7 @@ return [
'variables' => [
[
'name' => '_APP_STORAGE_LIMIT',
'description' => 'Maximun file size allowed for file upload. The default value is 10MB limitation. You should pass your size limit value in bytes.',
'description' => 'Maximum file size allowed for file upload. The default value is 10MB limitation. You should pass your size limit value in bytes.',
'introduction' => '0.7.0',
'default' => '10000000',
'required' => false,
@ -455,7 +455,7 @@ return [
],
[
'name' => '_APP_FUNCTIONS_ENVS',
'description' => 'Deprectated with 0.8.0, use \'_APP_FUNCTIONS_RUNTIMES\' instead!',
'description' => 'Deprecated with 0.8.0, use \'_APP_FUNCTIONS_RUNTIMES\' instead!',
'introduction' => '0.7.0',
'default' => 'node-16.0,php-7.4,python-3.9,ruby-3.0,java-16.0',
'required' => false,
@ -533,4 +533,4 @@ return [
],
],
],
];
];

View file

@ -68,7 +68,7 @@ App::init(function ($utopia, $request, $response, $project, $user, $register, $e
$isAppUser = Auth::isAppUser(Authorization::$roles);
if (($abuse->check() // Route is rate-limited
&& App::getEnv('_APP_OPTIONS_ABUSE', 'enabled') !== 'disabled') // Abuse is not diabled
&& App::getEnv('_APP_OPTIONS_ABUSE', 'enabled') !== 'disabled') // Abuse is not disabled
&& (!$isAppUser && !$isPrivilegedUser)) // User is not an admin or API key
{
throw new Exception('Too many requests', 429);

View file

@ -298,6 +298,7 @@ Locale::setLanguageFromJSON('jv', __DIR__.'/config/locale/translations/jv.json')
Locale::setLanguageFromJSON('kn', __DIR__.'/config/locale/translations/kn.json');
Locale::setLanguageFromJSON('km', __DIR__.'/config/locale/translations/km.json');
Locale::setLanguageFromJSON('ko', __DIR__.'/config/locale/translations/ko.json');
Locale::setLanguageFromJSON('la', __DIR__.'/config/locale/translations/la.json');
Locale::setLanguageFromJSON('lb', __DIR__.'/config/locale/translations/lb.json');
Locale::setLanguageFromJSON('lt', __DIR__.'/config/locale/translations/lt.json');
Locale::setLanguageFromJSON('lv', __DIR__.'/config/locale/translations/lv.json');
@ -308,7 +309,6 @@ Locale::setLanguageFromJSON('nb', __DIR__.'/config/locale/translations/nb.json')
Locale::setLanguageFromJSON('ne', __DIR__.'/config/locale/translations/ne.json');
Locale::setLanguageFromJSON('nl', __DIR__.'/config/locale/translations/nl.json');
Locale::setLanguageFromJSON('nn', __DIR__.'/config/locale/translations/nn.json');
Locale::setLanguageFromJSON('no', __DIR__.'/config/locale/translations/no.json');
Locale::setLanguageFromJSON('or', __DIR__.'/config/locale/translations/or.json');
Locale::setLanguageFromJSON('pa', __DIR__.'/config/locale/translations/pa.json');
Locale::setLanguageFromJSON('pl', __DIR__.'/config/locale/translations/pl.json');
@ -324,6 +324,7 @@ Locale::setLanguageFromJSON('sl', __DIR__ . '/config/locale/translations/sl.json
Locale::setLanguageFromJSON('sq', __DIR__ . '/config/locale/translations/sq.json');
Locale::setLanguageFromJSON('sv', __DIR__ . '/config/locale/translations/sv.json');
Locale::setLanguageFromJSON('ta', __DIR__ . '/config/locale/translations/ta.json');
Locale::setLanguageFromJSON('te', __DIR__.'/config/locale/translations/te.json');
Locale::setLanguageFromJSON('th', __DIR__.'/config/locale/translations/th.json');
Locale::setLanguageFromJSON('tl', __DIR__.'/config/locale/translations/tl.json');
Locale::setLanguageFromJSON('tr', __DIR__.'/config/locale/translations/tr.json');

View file

@ -487,7 +487,7 @@ $server->onMessage(function (int $connection, string $message) use ($server, $re
*
* Abuse limits are sending 32 times per minute and connection.
*/
$timeLimit = new TimeLimit('url:{url},conection:{connection}', 32, 60, $db);
$timeLimit = new TimeLimit('url:{url},connection:{connection}', 32, 60, $db);
$timeLimit
->setNamespace('app_' . $realtime->connections[$connection]['projectId'])
->setParam('{connection}', $connection)

View file

@ -381,7 +381,7 @@ class FunctionsV1 extends Worker
}
}
if (isset($list[$container]) && !(\substr($list[$container]->getStatus(), 0, 2) === 'Up')) { // Remove conatiner if not online
if (isset($list[$container]) && !(\substr($list[$container]->getStatus(), 0, 2) === 'Up')) { // Remove container if not online
$stdout = '';
$stderr = '';
@ -403,7 +403,7 @@ class FunctionsV1 extends Worker
* Make sure no access to NFS server / storage volumes
* Access Appwrite REST from internal network for improved performance
*/
if (!isset($list[$container])) { // Create contianer if not ready
if (!isset($list[$container])) { // Create container if not ready
$stdout = '';
$stderr = '';

View file

@ -1 +1 @@
Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email recieved by the user.
Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.

View file

@ -17,7 +17,7 @@
## 0.2.2
- Fixed an error that happend when the OAuth session creation request was sent before any other API call
- Fixed an error that happened when the OAuth session creation request was sent before any other API call
- Fixed a bug in the Avatars service where location URL generation had syntax error
## 0.2.1
@ -27,7 +27,7 @@
## 0.2.0
- Updated flutter_web_auth plugin to version 0.2.4
- Added per project unique callback for OAuth2 redirects to aviod conflicts between multiple Appwrite projects
- Added per project unique callback for OAuth2 redirects to avoid conflicts between multiple Appwrite projects
## 0.1.1
@ -56,9 +56,9 @@
## 0.0.9
- Updated deafult params
- Updated default params
## 0.0.8
- Fixed compilation error in Client class
- Shorter description for package
- Shorter description for package

View file

@ -120,7 +120,7 @@
## 0.2.2
- Fixed an error that happend when the OAuth session creation request was sent before any other API call
- Fixed an error that happened when the OAuth session creation request was sent before any other API call
- Fixed a bug in the Avatars service where location URL generation had syntax error
## 0.2.1
@ -130,7 +130,7 @@
## 0.2.0
- Updated flutter_web_auth plugin to version 0.2.4
- Added per project unique callback for OAuth2 redirects to aviod conflicts between multiple Appwrite projects
- Added per project unique callback for OAuth2 redirects to avoid conflicts between multiple Appwrite projects
## 0.1.1
@ -159,7 +159,7 @@
## 0.0.9
- Updated deafult params
- Updated default params
## 0.0.8

View file

@ -9,7 +9,7 @@ Adding new features may require various configurations options to be set by the
This tutorial will cover, how to properly add a new environment variable in Appwrite.
### Naming environment varialbe
### Naming environment variable
The environment variables in Appwrite are prefixed with `_APP_`. If it belongs to a specific category, the category name is appended as `_APP_REDIS` for the redis category. The available categories are General, Redis, MariaDB, InfluxDB, StatsD, SMTP, Storage and Functions. Finally a properly describing name is given to the variable. For example `_APP_REDIS_HOST` is an environment variable for redis connection host. You can find more information on available categories and existing environment variables in the [environment variables doc](https://appwrite.io/docs/environment-variables).
### Describe new environment variable

View file

@ -0,0 +1,257 @@
# Creating a new functions runtime 🏃
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
Function Runtimes allow you to execute code written in any language and form the basis of Appwrite's Cloud Functions! Appwrite's goal is to support as many function runtimes as possible.
## 1. Prerequisites
For a function runtime to work, two prerequisites **must** be met due to the way Appwrite's Runtime Execution Model works:
- [ ] The Language in question must be able to run a web server that can serve JSON and text.
- [ ] The Runtime must be able to be packaged into a Docker container
Note: Both Compiled and Interpreted languages work with Appwrite's execution model but are written in slightly different ways.
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 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 [Implement new runtime](https://github.com/appwrite/appwrite/blob/master/docs/tutorials/add-runtime.md#2-implement-new-runtime).
### 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 [Appwrite's Runtime repository](https://github.com/appwrite/php-runtimes) and click on the fork button.
[![Fork button](https://github.com/appwrite/appwrite/raw/master/docs/tutorials/images/fork.png)](https://github.com/appwrite/appwrite/blob/master/docs/tutorials/images/fork.png)
This will redirect you from `github.com/appwrite/php-runtimes` to `github.com/YOUR_USERNAME/php-runtimes`, 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 the `git clone` command:
```bash
$ 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 clean and simple visual Git client.
Finally, you will need to create a `feat-XXX-YYY-runtime` branch based on the `refactor` branch and switch to it. The `XXX` should represent the issue ID and `YYY` the runtime name.
## 2. Implement new runtime
### 2.1 Preparing the files for your new runtime
The first step to writing a new runtime is to create a folder within `/runtimes` with the name of the runtime and the version separated by a dash. For instance, if I was to write a Rust Runtime with version 1.55 the folder name would be: `rust-1.55`
Within that folder you will need to create a few basic files that all Appwrite runtimes require:
```
Dockerfile - Dockerfile that explains how the container will be built.
README.md - A readme file explaining the runtime and any special notes for the runtime. A good example of this is the PHP 8.0 runtime.
```
### 2.2 Differences between compiled and interpreted runtimes
Runtimes within Appwrite are created differently depending on whether they are compiled or interpreted. This is due to the fundamental differences between the two ways of running the code.
Interpreted languages have both a `build.sh` file and a `launch.sh` file.
The `build.sh` file for an interpreted runtime is normally used for installing any dependencies for both the server itself and the user's code and then to copy it to the `/usr/code` folder which is then packaged and can be used later for running the server.
The build script is always executed during the build stage of tag deployment.
The `launch.sh` file for an interpreted runtime should extract the `/tmp/code.tar.gz` file that contains both the user's code and the dependencies. This tarball was created by Appwrite from the `/usr/code` folder and should install the dependencies that were pre-installed by the build stage and move them into the relevant locations for that runtime. It will then run the server ready for execution.
---
Compiled Languages only have a `build.sh` file.
The `build.sh` script for a compiled runtime is used to move the user's source code and rename it into source files for the runtime (The `APPWRITE_ENTRYPOINT_NAME` environment variable can help with this) it will also build the code and move it into the `/usr/code` folder. Compiled runtime executables **must** be called `runtime` for the ubuntu or alpine images to detect and run them.
#### Note:
`/tmp/code.tar.gz` is always created from the `/usr/code` folder in the build stage. If you need any files for either compiled or interpreted runtimes you should place them there and extract them from the `/tmp/code.tar.gz` during the `launch.sh` script to get the files you need.
### 2.3 Writing the runtime
Internally the runtime can be anything you like as long as it follows the standards set by the other runtimes.
The best way to go about writing a runtime is like so:
Initialize a web server that runs on port 3000 and uses any IP Address (0.0.0.0) and on each `POST` request do the following:
1. Check that the `x-internal-challenge` header matches the `APPWRITE_INTERNAL_RUNTIME_KEY` environment variable. If not return an error with a `401` status code and an `unauthorized` error message.
2. Decode the executor's JSON POST request. This normally looks like so:
```json
{
"path": "/usr/code",
"file": "index.js",
"env": {
"hello":"world!"
},
"payload":"An Example Payload",
"timeout": 10
}
```
For a compiled language you can disregard the `path` and `file` attribute if you like,
`timeout` is also an optional parameter to deal with, if you can handle it please do. Otherwise, it doesn't matter since the connection will simply be dropped by the executor.
You must create two classes for users to use within their scripts. A `Request` Class and a `Response` class
The `Request` class must store `env`, `payload` and `headers` and pass them to the user's function.
The Request always goes before the response in the user's function parameters.
The `Response` class must have two functions.
- A `send(string)` function which will return text to the request
- and a `json(object)` function which will return JSON to the request setting the appropriate headers
For interpreted languages use the `path` and `file` parameters to find the file and require it.
Please make sure to add appropriate checks to make sure the imported file is a function that you can execute.
5. Finally execute the function and handle whatever response the user's code returns. Try to wrap the function into a `try catch` statement to handle any errors the user's function encounters and return them cleanly to the executor with the error schema.
### 2.4 The Error Schema
All errors that occur during the execution of a user's function **MUST** be returned using this JSON Object otherwise Appwrite will be unable to parse them for the user.
```json
{
"code": 500, // (Int) Use 404 if function not found or use 401 if the x-internal-challenge check failed.
"message": "Error: Tried to divide by 0 \n /usr/code/index.js:80:7", // (String) Try to return a stacktrace and detailed error message if possible. This is shown to the user.
}
```
### 2.5 Writing your Dockerfile
The Dockerfile is very important as it's the environment you are creating to run build the runtime and also run the code if you are writing an Interpreted Runtime (Compiled runtimes will use an alpine or ubuntu image)
The first thing you need to do is find a docker image to base your runtime off, You can find these at [Docker Hub](https://hub.docker.com). If possible try to use verified official builds of the language you are creating a runtime for.
Next in your Dockerfile at the start add the docker image you want to base it off at the top like so:
```bash
FROM Dart:2.12 # Dart is used as an example.
```
This will download and require the image when you build your runtime and allow you to use the toolset of the language you are building a runtime for.
Create a user and group for the runtime, this user will be used to both build and run the code:
```bash
RUN groupadd -g 2000 appwrite \
&& useradd -m -u 2001 -g appwrite appwrite
```
then create the folders you will use in your build step:
```bash
RUN mkdir -p /usr/local/src/
RUN mkdir -p /usr/code
RUN mkdir -p /usr/workspace
RUN mkdir -p /usr/builtCode
```
Next copy your source code and set the working directory for the image like so:
```
WORKDIR /usr/local/src
COPY . /usr/local/src
```
Next, you want to make sure you are adding execute permissions to any scripts you may run, the main ones are `build.sh` and `launch.sh`. You can run commands in Dockerfile's using the `RUN` prefix like so:
```
RUN chmod +x ./build.sh
RUN chmod +x ./launch.sh
```
Note: Do not chmod a `launch.sh` file if you don't have one.
If needed use the `RUN` commands to install any dependencies you require for the build stage.
Next set the permissions for the user you created so your build and run step will have access to them:
```
RUN ["chown", "-R", "appwrite:appwrite", "/usr/local/src"]
RUN ["chown", "-R", "appwrite:appwrite", "/usr/code"]
RUN ["chown", "-R", "appwrite:appwrite", "/usr/workspace"]
RUN ["chown", "-R", "appwrite:appwrite", "/usr/builtCode"]
```
Finally, you'll add a `CMD` command. For an interpreted language this should be:
```
CMD ["/usr/local/src/launch.sh"]
```
Since this will use your launch script when the runtime starts.
For a compiled language this must be:
```
CMD ["tail", "-f", "/dev/null"]
```
so the build steps can be run.
## 3. Building your Docker image and adding it to the list
With your runtime successfully created you can now move on to building your docker image and adding it to the script files used for generating all of the image files.
Open up the `/runtimes/buildLocalOnly.sh` script first and add your runtime to it. The following is an example with dart version 2.12
```
echo 'Dart 2.12...'
docker build -t dart-runtime:2.12 ./runtimes/dart-2.12
```
Next, open up the `/runtimes/build.sh` script and also add your runtime to it. This one is slightly different as this is the one that will be used for cross-platform compiles and deploying it to Docker hub. The following is an example also with dart version 2.12:
```
echo 'Dart 2.12...'
docker buildx build --platform linux/amd64,linux/arm64 -t dart-runtime:2.12 ./runtimes/dart-2.12/ --push
```
## 4. Adding the runtime to the runtimes list
In `src/Runtimes/Runtimes` create a new entry in the `__construct()` method in the Runtimes class like so:
```
$dart = new Runtime('dart', 'Dart');
$dart->addVersion('2.12', 'dart-runtime:2.12', 'appwrite-ubuntu:20.04', [System::X86, System::ARM]);
$this->runtimes['dart'] = $dart;
```
This is an example of what you would do for a compiled language such as dart.
The first line is creating a new language entry, The first parameter is the internal name and the second one is the external one which is what the user will see in Appwrite.
The second line adds a new version to the language entry, I'll break down the parameters:
```
1: Version - The version of the runtime you are creating.
2: Build Image - The image used to build the code
3: Run Image - The image used to run the code.
For interpreted languages, this is normally the same as the Build Image, but for compiled languages, this can be either "appwrite-alpine:3.13.6" or "appwrite-ubuntu:20.04"
We recommend using Alpine when possible and using Ubuntu if the runtime doesn't work on Alpine.
4: Platforms Supported - These are the architectures this runtime is available to.
```
The third line simply adds the new runtime to the main list.
## 5. Adding tests
### 5.1 Writing your test execution script
Adding tests for your runtime is simple, go into the `/tests/resources` folder and create a folder for the language you are creating then within the folder create a source code file for the language you are writing a runtime for as if you were creating a user function for your runtime. Within this user function you are writing all you need to do is return some JSON with the following schema:
```json
{
"normal": "Hello World!",
"env1": request.env['ENV1'], // ENV1 from the request environment variable
"payload": request.payload, // Payload from the request
}
```
### 5.2 Creating the test packaging script for your runtime
With your test execution written you can move on to writing the script used to package your test execution script into a tarball for later use by the test system. Move into `/test/resources` again and notice how we have shell scripts for all runtimes we have made tests for.
Next create a shell script yourself with your language name. As an example, the shell script name for dart would be `package-dart.sh`
Within this newly created script copy-paste this script and replace all the `LANGUAGE_NAME` parts with your language's name
```
echo 'LANGUAGE_NAME Packaging...'
rm $(pwd)/tests/resources/LANGUAGE_NAME.tar.gz
tar -zcvf $(pwd)/tests/resources/LANGUAGE_NAME.tar.gz -C $(pwd)/tests/resources/LANGUAGE_NAME .
```
Then save this file. Then `cd` into the root of the `php-runtimes` project in a terminal. Run the following command replacing the `LANGUAGE_NAME` with your language's name:
```
chmod +x ./tests/resources/package-LANGUAGE_NAME.sh && ./tests/resources/package-LANGUAGE_NAME.sh
```
This command adds execution permissions to your script and executes it.
NOTE: If you ever want to repackage your script you can simply run: `./tests/resources/package-LANGUAGE_NAME.sh` in the root of the `php-runtimes` project since you don't have to change permissions more than once.
### 5.3 Adding your runtime to the main testing script
Now you have created your test execution script and have packaged it up for your runtime to execute you can now add it to the main testing script. Open up the `./tests/Runtimes/RuntimesTest.php` file and find the part where we are defining `$this->tests`.
Once you have found this, Add your own entry into this array like so:
```php
'LANGUAGE_NAME-VERSION' => [
'code' => $functionsDir . ' /LANGUAGE_NAME.tar.gz',
'entrypoint' => 'Test file', // Replace with the name of the test file you wrote in ./tests/resources/LANGUAGE_NAME
'timeout' => 15,
'runtime' => 'LANGUAGE_NAME-VERSION',
'tarname' => 'LANGUAGE_NAME-VERSION.tar.gz', // Note: If your version has a point in it replace it with a dash instead for this value.
],
```
Make sure to replace all instances of `LANGUAGE_NAME` with your language's name and `VERSION` with your runtime's version.
Once you have done this and saved it, it is finally time to move onto one of the final steps.
### 5.4 Running the tests.
Running the tests is easy, simply run `docker-compose up` in the root of the `php-runtimes` folder. This will launch a Docker container with the test script and start running through all the runtimes making sure to test them thoroughly.
If all tests pass then congratulations! You can now go ahead and file a PR against the `php-runtimes` repo making sure to target the `refactor` branch, make sure you're ready to respond to any feedback which can arise during our code review.
## 6. Raise a pull request
First of all, commit the changes with the message `Added XXX Runtime` and push it. This will publish a new branch to your forked version of Appwrite. If you visit it at `github.com/YOUR_USERNAME/php-runtimes`, 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.
## ![face_with_head_bandage](https://github.githubassets.com/images/icons/emoji/unicode/1f915.png) 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.

14
package-lock.json generated
View file

@ -9,7 +9,7 @@
"version": "0.1.0",
"license": "BSD-3-Clause",
"dependencies": {
"chart.js": "^3.5.1",
"chart.js": "^3.6.0",
"markdown-it": "^12.2.0",
"pell": "^1.0.6",
"prismjs": "^1.25.0",
@ -549,9 +549,9 @@
}
},
"node_modules/chart.js": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.5.1.tgz",
"integrity": "sha512-m5kzt72I1WQ9LILwQC4syla/LD/N413RYv2Dx2nnTkRS9iv/ey1xLTt0DnPc/eWV4zI+BgEgDYBIzbQhZHc/PQ=="
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.6.0.tgz",
"integrity": "sha512-iOzzDKePL+bj+ccIsVAgWQehCXv8xOKGbaU2fO/myivH736zcx535PGJzQGanvcSGVOqX6yuLZsN3ygcQ35UgQ=="
},
"node_modules/chokidar": {
"version": "2.1.8",
@ -5484,9 +5484,9 @@
"dev": true
},
"chart.js": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.5.1.tgz",
"integrity": "sha512-m5kzt72I1WQ9LILwQC4syla/LD/N413RYv2Dx2nnTkRS9iv/ey1xLTt0DnPc/eWV4zI+BgEgDYBIzbQhZHc/PQ=="
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.6.0.tgz",
"integrity": "sha512-iOzzDKePL+bj+ccIsVAgWQehCXv8xOKGbaU2fO/myivH736zcx535PGJzQGanvcSGVOqX6yuLZsN3ygcQ35UgQ=="
},
"chokidar": {
"version": "2.1.8",

View file

@ -17,7 +17,7 @@
"gulp-less": "^5.0.0"
},
"dependencies": {
"chart.js": "^3.5.1",
"chart.js": "^3.6.0",
"markdown-it": "^12.2.0",
"pell": "^1.0.6",
"prismjs": "^1.25.0",

View file

@ -199,7 +199,7 @@
*
* Use this endpoint to allow a new user to register a new account in your
* project. After the user registration completes successfully, you can use
* the [/account/verfication](/docs/client/account#accountCreateVerification)
* the [/account/verification](/docs/client/account#accountCreateVerification)
* route to start verifying the user email address. To allow the new user to
* login to their new account, you need to create a new [account
* session](/docs/client/account#accountCreateSession).
@ -3896,7 +3896,7 @@
* Update Team Membership Status
*
* Use this endpoint to allow a user to accept an invitation to join a team
* after being redirected back to your app from the invitation email recieved
* after being redirected back to your app from the invitation email received
* by the user.
*
* @param {string} teamId

View file

@ -25,7 +25,7 @@ document.addEventListener("account.create", function () {
let promise = sdk.account.createSession(form.email, form.password);
container.set("serviceForm", {}, true, true); // Remove sensetive data when not needed
container.set("serviceForm", {}, true, true); // Remove sensitive data when not needed
promise.then(function () {
var subscribe = document.getElementById('newsletter').checked;

View file

@ -160,7 +160,7 @@
search.path = path;
document.dispatchEvent(
new CustomEvent("open-file-serach", {
new CustomEvent("open-file-search", {
bubbles: false,
cancelable: true
}));

View file

@ -12,7 +12,7 @@
xhr.onload = function () {
if (this.readyState == 4 && this.status == 200) {
let data = JSON.parse(this.responseText);
let text = 'Appwrite version ' + data.version + ' is avaliable, check the';
let text = 'Appwrite version ' + data.version + ' is available, check the';
if(isNewerVersion(env.VERSION, data.version)) {
alerts.add({
@ -44,4 +44,4 @@
}
}
});
})(window);
})(window);

View file

@ -240,7 +240,7 @@ class Auth
}
/**
* Is Previligged User?
* Is Privileged User?
*
* @param array $roles
*

View file

@ -205,15 +205,15 @@ trait LocaleBase
$this->assertEquals($response['headers']['status-code'], 200);
$this->assertIsArray($response['body']);
$this->assertEquals(185, $response['body']['sum']);
$this->assertEquals(184, $response['body']['sum']);
$this->assertEquals($response['body']['languages'][0]['code'], 'aa');
$this->assertEquals($response['body']['languages'][0]['name'], 'Afar');
$this->assertEquals($response['body']['languages'][0]['nativeName'], 'Afar');
$this->assertEquals($response['body']['languages'][184]['code'], 'zu');
$this->assertEquals($response['body']['languages'][184]['name'], 'Zulu');
$this->assertEquals($response['body']['languages'][184]['nativeName'], 'isiZulu');
$this->assertEquals($response['body']['languages'][183]['code'], 'zu');
$this->assertEquals($response['body']['languages'][183]['name'], 'Zulu');
$this->assertEquals($response['body']['languages'][183]['nativeName'], 'isiZulu');
/**
* Test for FAILURE

View file

@ -26,5 +26,5 @@ echo $_ENV['APPWRITE_FUNCTION_RUNTIME_VERSION']."\n";
// echo $result['$id'];
echo $_ENV['APPWRITE_FUNCTION_EVENT']."\n";
echo $_ENV['APPWRITE_FUNCTION_EVENT_DATA']."\n";
// Test unknwon UTF-8 chars
// Test unknown UTF-8 chars
echo "\xEA\xE4\n";

View file

@ -22,13 +22,13 @@ class CollectionsTest extends TestCase
foreach ($this->collections as $key => $collection) {
if (array_key_exists('rules', $collection)) {
foreach ($collection['rules'] as $check) {
$occurences = 0;
$occurrences = 0;
foreach ($collection['rules'] as $rule) {
if ($rule['key'] == $check['key']) {
$occurences++;
$occurrences++;
}
}
$this->assertEquals(1, $occurences);
$this->assertEquals(1, $occurrences);
}
}
}