From 018e4fe54b4f28d124658d197008a3a0c2f022e6 Mon Sep 17 00:00:00 2001 From: vrabe Date: Tue, 4 Oct 2022 20:25:40 +0800 Subject: [PATCH 01/32] update zh-tw translation --- app/config/locale/translations/zh-tw.json | 192 +++++++++++----------- 1 file changed, 99 insertions(+), 93 deletions(-) diff --git a/app/config/locale/translations/zh-tw.json b/app/config/locale/translations/zh-tw.json index 2edba9f49d..3944287c0e 100644 --- a/app/config/locale/translations/zh-tw.json +++ b/app/config/locale/translations/zh-tw.json @@ -5,57 +5,63 @@ "emails.sender": "%s 小組", "emails.verification.subject": "帳戶驗證", "emails.verification.hello": "嗨 {{name}}", - "emails.verification.body": "按照此鏈接驗證您的電子郵件地址。", + "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.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.body": "按照此連結重置您的 {{project}} 密碼。", "emails.recovery.footer": "如果您沒有要求重置密碼,則可以忽略此消息。", "emails.recovery.thanks": "謝謝", "emails.recovery.signature": "{{project}} 團隊", "emails.invitation.subject": "邀請 %s 團隊在 %s", "emails.invitation.hello": "你好", - "emails.invitation.body": "這封郵件發送給您是因為 {{owner}} 想邀請您成為 {{team}} 團隊在 {{project}}.", + "emails.invitation.body": "發送這封郵件給您是因為 {{owner}} 想邀請您成為 {{team}} 團隊在 {{project}}。", "emails.invitation.footer": "如果您不感興趣,可以忽略此消息。", "emails.invitation.thanks": "謝謝", "emails.invitation.signature": "{{project}} 團隊", + "emails.certificate.subject": "%s 的憑證更新失敗", + "emails.certificate.hello": "你好", + "emails.certificate.body": "無法產生你的域名 '{{domain}}' 的憑證。這是第 {{attempt}} 次嘗試,失敗原因是:{{error}}", + "emails.certificate.footer": "你的上一個憑證將會在第一次失敗的 30 天後失效。我們強烈建議你調查這件事情,否則你的域名將會無法進行有效的 SSL 通訊。", + "emails.certificate.thanks": "謝謝", + "emails.certificate.signature": "{{project}} 團隊", "locale.country.unknown": "未知", "countries.af": "阿富汗", "countries.ao": "安哥拉", "countries.al": "阿爾巴尼亞", "countries.ad": "安道爾", - "countries.ae": "阿拉伯聯合酋長國", + "countries.ae": "阿拉伯聯合大公國", "countries.ar": "阿根廷", "countries.am": "亞美尼亞", - "countries.ag": "安提瓜和巴布達", - "countries.au": "澳大利亞", + "countries.ag": "安地卡及巴布達", + "countries.au": "澳洲", "countries.at": "奧地利", - "countries.az": "阿塞拜疆", - "countries.bi": "布隆迪", + "countries.az": "亞塞拜然", + "countries.bi": "蒲隆地", "countries.be": "比利時", - "countries.bj": "貝甯", - "countries.bf": "布基納法索", - "countries.bd": "孟加拉國", + "countries.bj": "貝南", + "countries.bf": "布吉納法索", + "countries.bd": "孟加拉", "countries.bg": "保加利亞", "countries.bh": "巴林", "countries.bs": "巴哈馬", - "countries.ba": "波黑", - "countries.by": "白羅斯", - "countries.bz": "伯利茲", + "countries.ba": "波士尼亞與赫塞哥維納", + "countries.by": "白俄羅斯", + "countries.bz": "貝里斯", "countries.bo": "玻利維亞", "countries.br": "巴西", - "countries.bb": "巴巴多斯", - "countries.bn": "文萊", + "countries.bb": "巴貝多", + "countries.bn": "汶萊", "countries.bt": "不丹", - "countries.bw": "博茨瓦納", + "countries.bw": "波札那", "countries.cf": "中非共和國", "countries.ca": "加拿大", "countries.ch": "瑞士", @@ -66,42 +72,42 @@ "countries.cd": "剛果民主共和國", "countries.cg": "剛果共和國", "countries.co": "哥倫比亞", - "countries.km": "科摩", - "countries.cv": "佛得角", - "countries.cr": "哥斯達黎加", + "countries.km": "葛摩", + "countries.cv": "維德角", + "countries.cr": "哥斯大黎加", "countries.cu": "古巴", - "countries.cy": "塞浦路斯", + "countries.cy": "賽普勒斯", "countries.cz": "捷克", "countries.de": "德國", - "countries.dj": "吉布提", + "countries.dj": "吉布地", "countries.dm": "多米尼克", "countries.dk": "丹麥", "countries.do": "多明尼加共和國", "countries.dz": "阿爾及利亞", - "countries.ec": "厄瓜多爾", + "countries.ec": "厄瓜多", "countries.eg": "埃及", - "countries.er": "厄立特裏亞", + "countries.er": "厄利垂亞", "countries.es": "西班牙", "countries.ee": "愛沙尼亞", - "countries.et": "埃塞俄比亞", + "countries.et": "衣索比亞", "countries.fi": "芬蘭", "countries.fj": "斐濟", "countries.fr": "法國", "countries.fm": "密克羅尼西亞", - "countries.ga": "加蓬", + "countries.ga": "加彭", "countries.gb": "英國", - "countries.ge": "格魯吉亞", - "countries.gh": "加納", + "countries.ge": "喬治亞", + "countries.gh": "迦納", "countries.gn": "幾內亞", - "countries.gm": "岡比亞", - "countries.gw": "幾內亞比紹", + "countries.gm": "甘比亞", + "countries.gw": "幾內亞比索", "countries.gq": "赤道幾內亞", "countries.gr": "希臘", - "countries.gd": "格林納達", - "countries.gt": "危地馬拉", - "countries.gy": "圭亞那", - "countries.hn": "洪都拉斯", - "countries.hr": "克羅地亞", + "countries.gd": "格瑞那達", + "countries.gt": "瓜地馬拉", + "countries.gy": "蓋亞那", + "countries.hn": "宏都拉斯", + "countries.hr": "克羅埃西亞", "countries.ht": "海地", "countries.hu": "匈牙利", "countries.id": "印度尼西亞", @@ -111,26 +117,26 @@ "countries.iq": "伊拉克", "countries.is": "冰島", "countries.il": "以色列", - "countries.it": "意大利", + "countries.it": "義大利", "countries.jm": "牙買加", "countries.jo": "約旦", "countries.jp": "日本", - "countries.kz": "哈薩克斯坦", - "countries.ke": "肯尼亞", - "countries.kg": "吉爾吉斯斯坦", + "countries.kz": "哈薩克", + "countries.ke": "肯亞", + "countries.kg": "吉爾吉斯", "countries.kh": "柬埔寨", - "countries.ki": "基裏巴斯", - "countries.kn": "聖基茨和尼維斯", + "countries.ki": "吉里巴斯", + "countries.kn": "聖克里斯多福及尼維斯", "countries.kr": "韓國", "countries.kw": "科威特", - "countries.la": "老撾", + "countries.la": "寮國", "countries.lb": "黎巴嫩", - "countries.lr": "利比裏亞", + "countries.lr": "賴比瑞亞", "countries.ly": "利比亞", - "countries.lc": "聖盧西亞", - "countries.li": "列支敦士登", - "countries.lk": "斯裏蘭卡", - "countries.ls": "萊索托", + "countries.lc": "聖露西亞", + "countries.li": "列支敦斯登", + "countries.lk": "斯里蘭卡", + "countries.ls": "賴索托", "countries.lt": "立陶宛", "countries.lu": "盧森堡", "countries.lv": "拉脫維亞", @@ -138,90 +144,90 @@ "countries.mc": "摩納哥", "countries.md": "摩爾多瓦", "countries.mg": "馬達加斯加", - "countries.mv": "馬爾代夫", + "countries.mv": "馬爾地夫", "countries.mx": "墨西哥", "countries.mh": "馬紹爾群島", "countries.mk": "馬其頓共和國", - "countries.ml": "馬裏", - "countries.mt": "馬耳他", + "countries.ml": "馬利", + "countries.mt": "馬爾他", "countries.mm": "緬甸", - "countries.me": "黑山", + "countries.me": "蒙特內哥羅", "countries.mn": "蒙古", - "countries.mz": "莫桑比克", - "countries.mr": "毛裏塔尼亞", - "countries.mu": "毛裏求斯", - "countries.mw": "馬拉維", + "countries.mz": "莫三比克", + "countries.mr": "茅利塔尼亞", + "countries.mu": "模里西斯", + "countries.mw": "馬拉威", "countries.my": "馬來西亞", "countries.na": "納米比亞", - "countries.ne": "尼日爾", - "countries.ng": "尼日利亞", + "countries.ne": "尼日", + "countries.ng": "奈及利亞", "countries.ni": "尼加拉瓜", "countries.nl": "荷蘭", "countries.no": "挪威", "countries.np": "尼泊爾", - "countries.nr": "瑙魯", - "countries.nz": "新西蘭", + "countries.nr": "諾魯", + "countries.nz": "紐西蘭", "countries.om": "阿曼", "countries.pk": "巴基斯坦", "countries.pa": "巴拿馬", "countries.pe": "秘魯", "countries.ph": "菲律賓", - "countries.pw": "帕勞", - "countries.pg": "巴布亞新幾內亞", + "countries.pw": "帛琉", + "countries.pg": "巴布亞紐幾內亞", "countries.pl": "波蘭", - "countries.kp": "北朝鮮", + "countries.kp": "北韓", "countries.pt": "葡萄牙", "countries.py": "巴拉圭", - "countries.qa": "卡塔爾", + "countries.qa": "卡達", "countries.ro": "羅馬尼亞", "countries.ru": "俄羅斯", - "countries.rw": "盧旺達", - "countries.sa": "沙特阿拉伯", + "countries.rw": "盧安達", + "countries.sa": "沙烏地阿拉伯", "countries.sd": "蘇丹", "countries.sn": "塞內加爾", "countries.sg": "新加坡", - "countries.sb": "所羅門群島", - "countries.sl": "塞拉利昂", + "countries.sb": "索羅門群島", + "countries.sl": "獅子山", "countries.sv": "薩爾瓦多", - "countries.sm": "聖馬力諾", - "countries.so": "索馬裏", + "countries.sm": "聖馬利諾", + "countries.so": "索馬利亞", "countries.rs": "塞爾維亞", "countries.ss": "南蘇丹", - "countries.st": "聖多美和普林西比", - "countries.sr": "蘇裏南", + "countries.st": "聖多美普林西比", + "countries.sr": "蘇利南", "countries.sk": "斯洛伐克", - "countries.si": "斯洛文尼亞", + "countries.si": "斯洛維尼亞", "countries.se": "瑞典", - "countries.sz": "斯威士蘭", - "countries.sc": "塞舌爾", + "countries.sz": "史瓦濟蘭", + "countries.sc": "塞席爾", "countries.sy": "敘利亞", - "countries.td": "乍得", + "countries.td": "查德", "countries.tg": "多哥", "countries.th": "泰國", - "countries.tj": "塔吉克斯坦", - "countries.tm": "土庫曼斯坦", + "countries.tj": "塔吉克", + "countries.tm": "土庫曼", "countries.tl": "東帝汶", - "countries.to": "湯加", - "countries.tt": "特立尼達和多巴哥", - "countries.tn": "突尼斯", + "countries.to": "東加", + "countries.tt": "千里達及托巴哥", + "countries.tn": "突尼西亞", "countries.tr": "土耳其", - "countries.tv": "圖瓦盧", - "countries.tz": "坦桑尼亞", - "countries.ug": "烏幹達", + "countries.tv": "吐瓦魯", + "countries.tz": "坦尚尼亞", + "countries.ug": "烏干達", "countries.ua": "烏克蘭", "countries.uy": "烏拉圭", "countries.us": "美國", - "countries.uz": "烏茲別克斯", + "countries.uz": "烏茲別克", "countries.va": "梵蒂岡", - "countries.vc": "聖文森特和格林納丁斯", + "countries.vc": "聖文森及格瑞那丁", "countries.ve": "委內瑞拉", "countries.vn": "越南", - "countries.vu": "瓦努阿圖", + "countries.vu": "萬那杜", "countries.ws": "薩摩亞", - "countries.ye": "也門", + "countries.ye": "葉門", "countries.za": "南非", - "countries.zm": "贊比亞", - "countries.zw": "津巴布韋", + "countries.zm": "尚比亞", + "countries.zw": "辛巴威", "continents.af": "非洲", "continents.an": "南極洲", "continents.as": "亞洲", From 5236b48f34a427ee139e7d205c089903b1ddfc6d Mon Sep 17 00:00:00 2001 From: vrabe Date: Tue, 4 Oct 2022 20:41:46 +0800 Subject: [PATCH 02/32] =?UTF-8?q?=E4=BD=A0=20to=20=E6=82=A8,=20for=20consi?= =?UTF-8?q?stency?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/config/locale/translations/zh-tw.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/config/locale/translations/zh-tw.json b/app/config/locale/translations/zh-tw.json index 3944287c0e..11cfd9708a 100644 --- a/app/config/locale/translations/zh-tw.json +++ b/app/config/locale/translations/zh-tw.json @@ -16,21 +16,21 @@ "emails.magicSession.thanks": "謝謝", "emails.magicSession.signature": "{{project}} 團隊", "emails.recovery.subject": "重設密碼", - "emails.recovery.hello": "你好 {{name}}", + "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.hello": "您好", "emails.invitation.body": "發送這封郵件給您是因為 {{owner}} 想邀請您成為 {{team}} 團隊在 {{project}}。", "emails.invitation.footer": "如果您不感興趣,可以忽略此消息。", "emails.invitation.thanks": "謝謝", "emails.invitation.signature": "{{project}} 團隊", "emails.certificate.subject": "%s 的憑證更新失敗", - "emails.certificate.hello": "你好", - "emails.certificate.body": "無法產生你的域名 '{{domain}}' 的憑證。這是第 {{attempt}} 次嘗試,失敗原因是:{{error}}", - "emails.certificate.footer": "你的上一個憑證將會在第一次失敗的 30 天後失效。我們強烈建議你調查這件事情,否則你的域名將會無法進行有效的 SSL 通訊。", + "emails.certificate.hello": "您好", + "emails.certificate.body": "無法產生您的域名 '{{domain}}' 的憑證。這是第 {{attempt}} 次嘗試,失敗原因是:{{error}}", + "emails.certificate.footer": "您的上一個憑證將會在第一次失敗的 30 天後失效。我們強烈建議您調查這件事情,否則您的域名將會無法進行有效的 SSL 通訊。", "emails.certificate.thanks": "謝謝", "emails.certificate.signature": "{{project}} 團隊", "locale.country.unknown": "未知", From 7b38e8cdf61034c6843d751320b393ab5a75ce3c Mon Sep 17 00:00:00 2001 From: kalpesh Date: Wed, 5 Oct 2022 19:20:25 +0530 Subject: [PATCH 03/32] remove dead link --- README-CN.md | 75 ++++++++++++++++++++++++++-------------------------- 1 file changed, 38 insertions(+), 37 deletions(-) diff --git a/README-CN.md b/README-CN.md index 4258552da7..d8c13dff0e 100644 --- a/README-CN.md +++ b/README-CN.md @@ -21,7 +21,7 @@ [English](README.md) | 简体中文 -Appwrite是一个基于Docker的端到端开发者平台,其容器化的微服务库可应用于网页端,移动端,以及后端。Appwrite 通过视觉化界面极简了从零编写 API 的繁琐过程,在保证软件安全的前提下为开发者创造了一个高效的开发环境。 +Appwrite 是一个基于 Docker 的端到端开发者平台,其容器化的微服务库可应用于网页端,移动端,以及后端。Appwrite 通过视觉化界面极简了从零编写 API 的繁琐过程,在保证软件安全的前提下为开发者创造了一个高效的开发环境。 Appwrite 可以提供给开发者用户验证,外部授权,用户数据读写检索,文件储存,图像处理,云函数计算,[等多种服务](https://appwrite.io/docs). @@ -89,7 +89,6 @@ docker run -it --rm , 运行后,可以在浏览器上访问 http://localhost 找到 Appwrite 控制台。在非 Linux 的本机主机上完成安装后,服务器可能需要几分钟才能启动。 - 需要自定义容器构架,请查看我们的 Docker [环境变量](https://appwrite.io/docs/environment-variables) 文档。您还可以参考我们的 [docker-compose.yml](https://appwrite.io/install/compose) 和 [.env](https://appwrite.io/install/env) 文件手动设置环境。 ### 从旧版本升级 @@ -100,52 +99,54 @@ docker run -it --rm , 开始使用 Appwrite 只需要在控制台创建一个新项目,选择开发平台,然后抓取我们的开发套件。您可以从以下的教程中找到你喜欢的平台开始使用 Appwrite。 -* [开始使用 Web](https://appwrite.io/docs/getting-started-for-web) -* [开始使用 Flutter](https://appwrite.io/docs/getting-started-for-flutter) -* [开始使用 Apple](https://appwrite.io/docs/getting-started-for-apple) -* [开始使用 Android](https://appwrite.io/docs/getting-started-for-android) -* [开始使用 Server](https://appwrite.io/docs/getting-started-for-server) -* [开始使用 CLI](https://appwrite.io/docs/command-line) +- [开始使用 Web](https://appwrite.io/docs/getting-started-for-web) +- [开始使用 Flutter](https://appwrite.io/docs/getting-started-for-flutter) +- [开始使用 Apple](https://appwrite.io/docs/getting-started-for-apple) +- [开始使用 Android](https://appwrite.io/docs/getting-started-for-android) +- [开始使用 Server](https://appwrite.io/docs/getting-started-for-server) +- [开始使用 CLI](https://appwrite.io/docs/command-line) ### 软件服务 -* [**帐户**](https://appwrite.io/docs/client/account) -管理当前用户的帐户和登录方式。跟踪和管理用户 Session,登录设备,登录方法和查看相关记录。 -* [**用户**](https://appwrite.io/docs/server/users) - 在以管理员模式登录时管理和列出所有用户。 -* [**团队**](https://appwrite.io/docs/client/teams) - 管理用户分组。邀请成员,管理团队中的用户权限和用户角色。 -* [**数据库**](https://appwrite.io/docs/client/databases) - 管理数据库文档和文档集。用检索界面来对文档和文档集进行读取,创建,更新,和删除。 -* [**贮存**](https://appwrite.io/docs/client/storage) - 管理文件的阅读、创建、删除和预览。设置文件的预览来满足程序的个性化需求。所有文件都由 ClamAV 扫描并安全存储和加密。 -* [**云函数**](https://appwrite.io/docs/server/functions) - 在安全,隔离的环境中运行自定义代码。这些代码可以被事件,CRON,或者手动操作触发。 -* [**语言适配**](https://appwrite.io/docs/client/locale) - 根据用户所在的的国家和地区做出合适的语言适配。 -* [**头像**](https://appwrite.io/docs/client/avatars) -管理用户头像、国家旗帜、浏览器图标、信用卡符号,和生成二维码。 -如需完整的 API 界面文档,请访问 [https://appwrite.io/docs](https://appwrite.io/docs)。如需更多教程、新闻和公告,请订阅我们的 [博客](https://medium.com/appwrite-io) 和 加入我们的[Discord 社区](https://discord.gg/GSeTUeA)。 +- [**帐户**](https://appwrite.io/docs/client/account) -管理当前用户的帐户和登录方式。跟踪和管理用户 Session,登录设备,登录方法和查看相关记录。 +- [**用户**](https://appwrite.io/docs/server/users) - 在以管理员模式登录时管理和列出所有用户。 +- [**团队**](https://appwrite.io/docs/client/teams) - 管理用户分组。邀请成员,管理团队中的用户权限和用户角色。 +- [**数据库**](https://appwrite.io/docs/client/databases) - 管理数据库文档和文档集。用检索界面来对文档和文档集进行读取,创建,更新,和删除。 +- [**贮存**](https://appwrite.io/docs/client/storage) - 管理文件的阅读、创建、删除和预览。设置文件的预览来满足程序的个性化需求。所有文件都由 ClamAV 扫描并安全存储和加密。 +- [**云函数**](https://appwrite.io/docs/server/functions) - 在安全,隔离的环境中运行自定义代码。这些代码可以被事件,CRON,或者手动操作触发。 +- [**语言适配**](https://appwrite.io/docs/client/locale) - 根据用户所在的的国家和地区做出合适的语言适配。 +- [**头像**](https://appwrite.io/docs/client/avatars) -管理用户头像、国家旗帜、浏览器图标、信用卡符号,和生成二维码。 + 如需完整的 API 界面文档,请访问 [https://appwrite.io/docs](https://appwrite.io/docs)。如需更多教程、新闻和公告,请订阅我们的 [博客](https://medium.com/appwrite-io) 和 加入我们的[Discord 社区](https://discord.gg/GSeTUeA)。 ### 开发套件 以下是当前支持的平台和语言列表。如果您想帮助我们为您选择的平台添加支持,您可以访问我们的 [SDK 生成器](https://github.com/appwrite/sdk-generator) 项目并查看我们的 [贡献指南](https://github.com/appwrite/sdk-generator/blob/master/CONTRIBUTING.md)。 #### 客户端 -* ✅   [Web](https://github.com/appwrite/sdk-for-web) (由 Appwrite 团队维护) -* ✅   [Flutter](https://github.com/appwrite/sdk-for-flutter) (由 Appwrite 团队维护) -* ✅   [Apple](https://github.com/appwrite/sdk-for-apple) - **公测** (由 Appwrite 团队维护) -* ✅   [Android](https://github.com/appwrite/sdk-for-android) (由 Appwrite 团队维护) + +- ✅   [Web](https://github.com/appwrite/sdk-for-web) (由 Appwrite 团队维护) +- ✅   [Flutter](https://github.com/appwrite/sdk-for-flutter) (由 Appwrite 团队维护) +- ✅   [Apple](https://github.com/appwrite/sdk-for-apple) - **公测** (由 Appwrite 团队维护) +- ✅   [Android](https://github.com/appwrite/sdk-for-android) (由 Appwrite 团队维护) #### 服务器 -* ✅   [NodeJS](https://github.com/appwrite/sdk-for-node) (由 Appwrite 团队维护) -* ✅   [PHP](https://github.com/appwrite/sdk-for-php) (由 Appwrite 团队维护) -* ✅   [Dart](https://github.com/appwrite/sdk-for-dart) - (由 Appwrite 团队维护) -* ✅   [Deno](https://github.com/appwrite/sdk-for-deno) - **公测** (由 Appwrite 团队维护) -* ✅   [Ruby](https://github.com/appwrite/sdk-for-ruby) (由 Appwrite 团队维护) -* ✅   [Python](https://github.com/appwrite/sdk-for-python) (由 Appwrite 团队维护) -* ✅   [Kotlin](https://github.com/appwrite/sdk-for-kotlin) - **公测** (由 Appwrite 团队维护) -* ✅   [Apple](https://github.com/appwrite/sdk-for-apple) - **公测** (由 Appwrite 团队维护) -* ✅   [.NET](https://github.com/appwrite/sdk-for-dotnet) - **公测** (由 Appwrite 团队维护) + +- ✅   [NodeJS](https://github.com/appwrite/sdk-for-node) (由 Appwrite 团队维护) +- ✅   [PHP](https://github.com/appwrite/sdk-for-php) (由 Appwrite 团队维护) +- ✅   [Dart](https://github.com/appwrite/sdk-for-dart) - (由 Appwrite 团队维护) +- ✅   [Deno](https://github.com/appwrite/sdk-for-deno) - **公测** (由 Appwrite 团队维护) +- ✅   [Ruby](https://github.com/appwrite/sdk-for-ruby) (由 Appwrite 团队维护) +- ✅   [Python](https://github.com/appwrite/sdk-for-python) (由 Appwrite 团队维护) +- ✅   [Kotlin](https://github.com/appwrite/sdk-for-kotlin) - **公测** (由 Appwrite 团队维护) +- ✅   [Apple](https://github.com/appwrite/sdk-for-apple) - **公测** (由 Appwrite 团队维护) +- ✅   [.NET](https://github.com/appwrite/sdk-for-dotnet) - **公测** (由 Appwrite 团队维护) #### 开发者社区 -* ✅   [Appcelerator Titanium](https://github.com/m1ga/ti.appwrite) (维护者 [Michael Gangolf](https://github.com/m1ga/)) -* ✅   [Godot Engine](https://github.com/GodotNuts/appwrite-sdk) (维护者 [fenix-hub @GodotNuts](https://github.com/fenix-hub)) -找不到需要的的 SDK? - 欢迎通过发起PR来帮助我们完善Appwrite的软件生态环境 [SDK 生成器](https://github.com/appwrite/sdk-generator)! +- ✅   [Appcelerator Titanium](https://github.com/m1ga/ti.appwrite) (维护者 [Michael Gangolf](https://github.com/m1ga/)) +- ✅   [Godot Engine](https://github.com/GodotNuts/appwrite-sdk) (维护者 [fenix-hub @GodotNuts](https://github.com/fenix-hub)) +找不到需要的的 SDK? - 欢迎通过发起 PR 来帮助我们完善 Appwrite 的软件生态环境 [SDK 生成器](https://github.com/appwrite/sdk-generator)! ## 软件架构 @@ -157,17 +158,17 @@ Appwrite API 界面层利用后台缓存和任务委派来提供极速的响应 ## 贡献代码 -所有代码贡献 - 包括来自具有直接提交更改权限的贡献者 - 都必须提交PR请求并在合并分支之前得到核心开发人员的批准。这是为了确保正确审查所有代码。 +所有代码贡献 - 包括来自具有直接提交更改权限的贡献者 - 都必须提交 PR 请求并在合并分支之前得到核心开发人员的批准。这是为了确保正确审查所有代码。 -我们欢迎所有人提交PR!如果您愿意提供帮助,可以在 [贡献指南](CONTRIBUTING.md) 中了解有关如何为项目做出贡献的更多信息。 +我们欢迎所有人提交 PR!如果您愿意提供帮助,可以在 [贡献指南](CONTRIBUTING.md) 中了解有关如何为项目做出贡献的更多信息。 ## 安全 -为了保护您的隐私,请避免在GitHub 上发布安全问题。发送问题至 security@appwrite.io,我们将为您做更细致的解答。 +为了保护您的隐私,请避免在 GitHub 上发布安全问题。发送问题至 security@appwrite.io,我们将为您做更细致的解答。 ## 订阅我们 -加入我们在世界各地不断发展的社区!请参阅我们的官方 [博客](https://medium.com/appwrite-io)。在 [Twitter](https://twitter.com/appwrite)、[Facebook 页面](https://www.facebook.com/appwrite.io)、[Facebook 群组](https://www.facebook)、[开发者社区](https://dev.to/appwrite) 等平台订阅我们或加入我们的 [Discord 社区](https://discord.gg/GSeTUeA) 以获得更多帮助,想法和讨论。 +加入我们在世界各地不断发展的社区!请参阅我们的官方 [博客](https://medium.com/appwrite-io)。在 [Twitter](https://twitter.com/appwrite)、[Facebook 页面](https://www.facebook.com/appwrite.io)、[开发者社区](https://dev.to/appwrite) 等平台订阅我们或加入我们的 [Discord 社区](https://discord.gg/GSeTUeA) 以获得更多帮助,想法和讨论。 ## 版权说明 From 00f3902cc4097845a579ce57d08b29f9915bd20a Mon Sep 17 00:00:00 2001 From: kalpesh Date: Wed, 5 Oct 2022 19:30:22 +0530 Subject: [PATCH 04/32] Revert "remove dead link" This reverts commit 7b38e8cdf61034c6843d751320b393ab5a75ce3c. --- README-CN.md | 75 ++++++++++++++++++++++++++-------------------------- 1 file changed, 37 insertions(+), 38 deletions(-) diff --git a/README-CN.md b/README-CN.md index d8c13dff0e..4258552da7 100644 --- a/README-CN.md +++ b/README-CN.md @@ -21,7 +21,7 @@ [English](README.md) | 简体中文 -Appwrite 是一个基于 Docker 的端到端开发者平台,其容器化的微服务库可应用于网页端,移动端,以及后端。Appwrite 通过视觉化界面极简了从零编写 API 的繁琐过程,在保证软件安全的前提下为开发者创造了一个高效的开发环境。 +Appwrite是一个基于Docker的端到端开发者平台,其容器化的微服务库可应用于网页端,移动端,以及后端。Appwrite 通过视觉化界面极简了从零编写 API 的繁琐过程,在保证软件安全的前提下为开发者创造了一个高效的开发环境。 Appwrite 可以提供给开发者用户验证,外部授权,用户数据读写检索,文件储存,图像处理,云函数计算,[等多种服务](https://appwrite.io/docs). @@ -89,6 +89,7 @@ docker run -it --rm , 运行后,可以在浏览器上访问 http://localhost 找到 Appwrite 控制台。在非 Linux 的本机主机上完成安装后,服务器可能需要几分钟才能启动。 + 需要自定义容器构架,请查看我们的 Docker [环境变量](https://appwrite.io/docs/environment-variables) 文档。您还可以参考我们的 [docker-compose.yml](https://appwrite.io/install/compose) 和 [.env](https://appwrite.io/install/env) 文件手动设置环境。 ### 从旧版本升级 @@ -99,54 +100,52 @@ docker run -it --rm , 开始使用 Appwrite 只需要在控制台创建一个新项目,选择开发平台,然后抓取我们的开发套件。您可以从以下的教程中找到你喜欢的平台开始使用 Appwrite。 -- [开始使用 Web](https://appwrite.io/docs/getting-started-for-web) -- [开始使用 Flutter](https://appwrite.io/docs/getting-started-for-flutter) -- [开始使用 Apple](https://appwrite.io/docs/getting-started-for-apple) -- [开始使用 Android](https://appwrite.io/docs/getting-started-for-android) -- [开始使用 Server](https://appwrite.io/docs/getting-started-for-server) -- [开始使用 CLI](https://appwrite.io/docs/command-line) +* [开始使用 Web](https://appwrite.io/docs/getting-started-for-web) +* [开始使用 Flutter](https://appwrite.io/docs/getting-started-for-flutter) +* [开始使用 Apple](https://appwrite.io/docs/getting-started-for-apple) +* [开始使用 Android](https://appwrite.io/docs/getting-started-for-android) +* [开始使用 Server](https://appwrite.io/docs/getting-started-for-server) +* [开始使用 CLI](https://appwrite.io/docs/command-line) ### 软件服务 -- [**帐户**](https://appwrite.io/docs/client/account) -管理当前用户的帐户和登录方式。跟踪和管理用户 Session,登录设备,登录方法和查看相关记录。 -- [**用户**](https://appwrite.io/docs/server/users) - 在以管理员模式登录时管理和列出所有用户。 -- [**团队**](https://appwrite.io/docs/client/teams) - 管理用户分组。邀请成员,管理团队中的用户权限和用户角色。 -- [**数据库**](https://appwrite.io/docs/client/databases) - 管理数据库文档和文档集。用检索界面来对文档和文档集进行读取,创建,更新,和删除。 -- [**贮存**](https://appwrite.io/docs/client/storage) - 管理文件的阅读、创建、删除和预览。设置文件的预览来满足程序的个性化需求。所有文件都由 ClamAV 扫描并安全存储和加密。 -- [**云函数**](https://appwrite.io/docs/server/functions) - 在安全,隔离的环境中运行自定义代码。这些代码可以被事件,CRON,或者手动操作触发。 -- [**语言适配**](https://appwrite.io/docs/client/locale) - 根据用户所在的的国家和地区做出合适的语言适配。 -- [**头像**](https://appwrite.io/docs/client/avatars) -管理用户头像、国家旗帜、浏览器图标、信用卡符号,和生成二维码。 - 如需完整的 API 界面文档,请访问 [https://appwrite.io/docs](https://appwrite.io/docs)。如需更多教程、新闻和公告,请订阅我们的 [博客](https://medium.com/appwrite-io) 和 加入我们的[Discord 社区](https://discord.gg/GSeTUeA)。 +* [**帐户**](https://appwrite.io/docs/client/account) -管理当前用户的帐户和登录方式。跟踪和管理用户 Session,登录设备,登录方法和查看相关记录。 +* [**用户**](https://appwrite.io/docs/server/users) - 在以管理员模式登录时管理和列出所有用户。 +* [**团队**](https://appwrite.io/docs/client/teams) - 管理用户分组。邀请成员,管理团队中的用户权限和用户角色。 +* [**数据库**](https://appwrite.io/docs/client/databases) - 管理数据库文档和文档集。用检索界面来对文档和文档集进行读取,创建,更新,和删除。 +* [**贮存**](https://appwrite.io/docs/client/storage) - 管理文件的阅读、创建、删除和预览。设置文件的预览来满足程序的个性化需求。所有文件都由 ClamAV 扫描并安全存储和加密。 +* [**云函数**](https://appwrite.io/docs/server/functions) - 在安全,隔离的环境中运行自定义代码。这些代码可以被事件,CRON,或者手动操作触发。 +* [**语言适配**](https://appwrite.io/docs/client/locale) - 根据用户所在的的国家和地区做出合适的语言适配。 +* [**头像**](https://appwrite.io/docs/client/avatars) -管理用户头像、国家旗帜、浏览器图标、信用卡符号,和生成二维码。 +如需完整的 API 界面文档,请访问 [https://appwrite.io/docs](https://appwrite.io/docs)。如需更多教程、新闻和公告,请订阅我们的 [博客](https://medium.com/appwrite-io) 和 加入我们的[Discord 社区](https://discord.gg/GSeTUeA)。 ### 开发套件 以下是当前支持的平台和语言列表。如果您想帮助我们为您选择的平台添加支持,您可以访问我们的 [SDK 生成器](https://github.com/appwrite/sdk-generator) 项目并查看我们的 [贡献指南](https://github.com/appwrite/sdk-generator/blob/master/CONTRIBUTING.md)。 #### 客户端 - -- ✅   [Web](https://github.com/appwrite/sdk-for-web) (由 Appwrite 团队维护) -- ✅   [Flutter](https://github.com/appwrite/sdk-for-flutter) (由 Appwrite 团队维护) -- ✅   [Apple](https://github.com/appwrite/sdk-for-apple) - **公测** (由 Appwrite 团队维护) -- ✅   [Android](https://github.com/appwrite/sdk-for-android) (由 Appwrite 团队维护) +* ✅   [Web](https://github.com/appwrite/sdk-for-web) (由 Appwrite 团队维护) +* ✅   [Flutter](https://github.com/appwrite/sdk-for-flutter) (由 Appwrite 团队维护) +* ✅   [Apple](https://github.com/appwrite/sdk-for-apple) - **公测** (由 Appwrite 团队维护) +* ✅   [Android](https://github.com/appwrite/sdk-for-android) (由 Appwrite 团队维护) #### 服务器 - -- ✅   [NodeJS](https://github.com/appwrite/sdk-for-node) (由 Appwrite 团队维护) -- ✅   [PHP](https://github.com/appwrite/sdk-for-php) (由 Appwrite 团队维护) -- ✅   [Dart](https://github.com/appwrite/sdk-for-dart) - (由 Appwrite 团队维护) -- ✅   [Deno](https://github.com/appwrite/sdk-for-deno) - **公测** (由 Appwrite 团队维护) -- ✅   [Ruby](https://github.com/appwrite/sdk-for-ruby) (由 Appwrite 团队维护) -- ✅   [Python](https://github.com/appwrite/sdk-for-python) (由 Appwrite 团队维护) -- ✅   [Kotlin](https://github.com/appwrite/sdk-for-kotlin) - **公测** (由 Appwrite 团队维护) -- ✅   [Apple](https://github.com/appwrite/sdk-for-apple) - **公测** (由 Appwrite 团队维护) -- ✅   [.NET](https://github.com/appwrite/sdk-for-dotnet) - **公测** (由 Appwrite 团队维护) +* ✅   [NodeJS](https://github.com/appwrite/sdk-for-node) (由 Appwrite 团队维护) +* ✅   [PHP](https://github.com/appwrite/sdk-for-php) (由 Appwrite 团队维护) +* ✅   [Dart](https://github.com/appwrite/sdk-for-dart) - (由 Appwrite 团队维护) +* ✅   [Deno](https://github.com/appwrite/sdk-for-deno) - **公测** (由 Appwrite 团队维护) +* ✅   [Ruby](https://github.com/appwrite/sdk-for-ruby) (由 Appwrite 团队维护) +* ✅   [Python](https://github.com/appwrite/sdk-for-python) (由 Appwrite 团队维护) +* ✅   [Kotlin](https://github.com/appwrite/sdk-for-kotlin) - **公测** (由 Appwrite 团队维护) +* ✅   [Apple](https://github.com/appwrite/sdk-for-apple) - **公测** (由 Appwrite 团队维护) +* ✅   [.NET](https://github.com/appwrite/sdk-for-dotnet) - **公测** (由 Appwrite 团队维护) #### 开发者社区 +* ✅   [Appcelerator Titanium](https://github.com/m1ga/ti.appwrite) (维护者 [Michael Gangolf](https://github.com/m1ga/)) +* ✅   [Godot Engine](https://github.com/GodotNuts/appwrite-sdk) (维护者 [fenix-hub @GodotNuts](https://github.com/fenix-hub)) -- ✅   [Appcelerator Titanium](https://github.com/m1ga/ti.appwrite) (维护者 [Michael Gangolf](https://github.com/m1ga/)) -- ✅   [Godot Engine](https://github.com/GodotNuts/appwrite-sdk) (维护者 [fenix-hub @GodotNuts](https://github.com/fenix-hub)) +找不到需要的的 SDK? - 欢迎通过发起PR来帮助我们完善Appwrite的软件生态环境 [SDK 生成器](https://github.com/appwrite/sdk-generator)! -找不到需要的的 SDK? - 欢迎通过发起 PR 来帮助我们完善 Appwrite 的软件生态环境 [SDK 生成器](https://github.com/appwrite/sdk-generator)! ## 软件架构 @@ -158,17 +157,17 @@ Appwrite API 界面层利用后台缓存和任务委派来提供极速的响应 ## 贡献代码 -所有代码贡献 - 包括来自具有直接提交更改权限的贡献者 - 都必须提交 PR 请求并在合并分支之前得到核心开发人员的批准。这是为了确保正确审查所有代码。 +所有代码贡献 - 包括来自具有直接提交更改权限的贡献者 - 都必须提交PR请求并在合并分支之前得到核心开发人员的批准。这是为了确保正确审查所有代码。 -我们欢迎所有人提交 PR!如果您愿意提供帮助,可以在 [贡献指南](CONTRIBUTING.md) 中了解有关如何为项目做出贡献的更多信息。 +我们欢迎所有人提交PR!如果您愿意提供帮助,可以在 [贡献指南](CONTRIBUTING.md) 中了解有关如何为项目做出贡献的更多信息。 ## 安全 -为了保护您的隐私,请避免在 GitHub 上发布安全问题。发送问题至 security@appwrite.io,我们将为您做更细致的解答。 +为了保护您的隐私,请避免在GitHub 上发布安全问题。发送问题至 security@appwrite.io,我们将为您做更细致的解答。 ## 订阅我们 -加入我们在世界各地不断发展的社区!请参阅我们的官方 [博客](https://medium.com/appwrite-io)。在 [Twitter](https://twitter.com/appwrite)、[Facebook 页面](https://www.facebook.com/appwrite.io)、[开发者社区](https://dev.to/appwrite) 等平台订阅我们或加入我们的 [Discord 社区](https://discord.gg/GSeTUeA) 以获得更多帮助,想法和讨论。 +加入我们在世界各地不断发展的社区!请参阅我们的官方 [博客](https://medium.com/appwrite-io)。在 [Twitter](https://twitter.com/appwrite)、[Facebook 页面](https://www.facebook.com/appwrite.io)、[Facebook 群组](https://www.facebook)、[开发者社区](https://dev.to/appwrite) 等平台订阅我们或加入我们的 [Discord 社区](https://discord.gg/GSeTUeA) 以获得更多帮助,想法和讨论。 ## 版权说明 From 01f4805befe3f463c56af43db6248d2e37d4c9c2 Mon Sep 17 00:00:00 2001 From: kalpesh Date: Wed, 5 Oct 2022 19:32:34 +0530 Subject: [PATCH 05/32] Update README-CN.md --- README-CN.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-CN.md b/README-CN.md index 4258552da7..58ea60444c 100644 --- a/README-CN.md +++ b/README-CN.md @@ -167,7 +167,7 @@ Appwrite API 界面层利用后台缓存和任务委派来提供极速的响应 ## 订阅我们 -加入我们在世界各地不断发展的社区!请参阅我们的官方 [博客](https://medium.com/appwrite-io)。在 [Twitter](https://twitter.com/appwrite)、[Facebook 页面](https://www.facebook.com/appwrite.io)、[Facebook 群组](https://www.facebook)、[开发者社区](https://dev.to/appwrite) 等平台订阅我们或加入我们的 [Discord 社区](https://discord.gg/GSeTUeA) 以获得更多帮助,想法和讨论。 +加入我们在世界各地不断发展的社区!请参阅我们的官方 [博客](https://medium.com/appwrite-io)。在 [Twitter](https://twitter.com/appwrite)、[Facebook 页面](https://www.facebook.com/appwrite.io)、[开发者社区](https://dev.to/appwrite) 等平台订阅我们或加入我们的 [Discord 社区](https://discord.gg/GSeTUeA) 以获得更多帮助,想法和讨论。 ## 版权说明 From b4e0fe073535a2bc01928945a1093158cba99dc9 Mon Sep 17 00:00:00 2001 From: Tushar Dahiya Date: Fri, 7 Oct 2022 09:47:04 +0530 Subject: [PATCH 06/32] Update add-translations.md --- docs/tutorials/add-translations.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/tutorials/add-translations.md b/docs/tutorials/add-translations.md index a1d34cba2c..799c7d55d4 100644 --- a/docs/tutorials/add-translations.md +++ b/docs/tutorials/add-translations.md @@ -44,7 +44,7 @@ You can choose to contribute either directly on [**GitHub**](#21-manually-using- > Proceed to [Visually using PO Editor](#22-visually-using-po-editor) if you want to use graphical interface instead. -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. +We maintain a [`local 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. 1. **terms.json** @@ -125,7 +125,7 @@ Once you're happy with your translations, you can export them. Head over to the > **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`. +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 a file called `es.json`. ## 3. Add the translations to the project @@ -151,7 +151,7 @@ First of all, we need to start a local instance of Appwrite. Thanks to Docker, t 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 this is your first time running Appwrite, it may take up to a 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). @@ -172,7 +172,7 @@ Once we add `X-Appwrite-Locale` header and send the request again, we will get t > 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. 😊 +If you can see countries' names translated, everything works, and you are ready for the last step. 😊 ## 5. Raise a pull request From 8209615609d343e9f03b589072a451ae537f4ed2 Mon Sep 17 00:00:00 2001 From: kalpesh Date: Sat, 8 Oct 2022 12:19:41 +0530 Subject: [PATCH 07/32] Update README-CN.md --- README-CN.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-CN.md b/README-CN.md index 58ea60444c..a65dcfbf1c 100644 --- a/README-CN.md +++ b/README-CN.md @@ -167,7 +167,7 @@ Appwrite API 界面层利用后台缓存和任务委派来提供极速的响应 ## 订阅我们 -加入我们在世界各地不断发展的社区!请参阅我们的官方 [博客](https://medium.com/appwrite-io)。在 [Twitter](https://twitter.com/appwrite)、[Facebook 页面](https://www.facebook.com/appwrite.io)、[开发者社区](https://dev.to/appwrite) 等平台订阅我们或加入我们的 [Discord 社区](https://discord.gg/GSeTUeA) 以获得更多帮助,想法和讨论。 +加入我们在世界各地不断发展的社区!请参阅我们的官方 [博客](https://medium.com/appwrite-io)。在 [Twitter](https://twitter.com/appwrite)、[Facebook 页面](https://www.facebook.com/appwrite.io)、[Facebook 群组](https://m.facebook.com/appwrite.io/groups/), [开发者社区](https://dev.to/appwrite) 等平台订阅我们或加入我们的 [Discord 社区](https://discord.gg/GSeTUeA) 以获得更多帮助,想法和讨论。 ## 版权说明 From 6d82f0449342a934308675f5b9553eaa07d88955 Mon Sep 17 00:00:00 2001 From: kalpesh Date: Sat, 8 Oct 2022 12:20:46 +0530 Subject: [PATCH 08/32] Update README-CN.md --- README-CN.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-CN.md b/README-CN.md index a65dcfbf1c..924a424ffb 100644 --- a/README-CN.md +++ b/README-CN.md @@ -167,7 +167,7 @@ Appwrite API 界面层利用后台缓存和任务委派来提供极速的响应 ## 订阅我们 -加入我们在世界各地不断发展的社区!请参阅我们的官方 [博客](https://medium.com/appwrite-io)。在 [Twitter](https://twitter.com/appwrite)、[Facebook 页面](https://www.facebook.com/appwrite.io)、[Facebook 群组](https://m.facebook.com/appwrite.io/groups/), [开发者社区](https://dev.to/appwrite) 等平台订阅我们或加入我们的 [Discord 社区](https://discord.gg/GSeTUeA) 以获得更多帮助,想法和讨论。 +加入我们在世界各地不断发展的社区!请参阅我们的官方 [博客](https://medium.com/appwrite-io)。在 [Twitter](https://twitter.com/appwrite)、[Facebook 页面](https://www.facebook.com/appwrite.io)、[Facebook 群组](https://www.facebook.com/appwrite.io/groups/), [开发者社区](https://dev.to/appwrite) 等平台订阅我们或加入我们的 [Discord 社区](https://discord.gg/GSeTUeA) 以获得更多帮助,想法和讨论。 ## 版权说明 From a0d1a12f1e7a287c2f1e131c86a371b40d96ca19 Mon Sep 17 00:00:00 2001 From: Sushrut1101 Date: Sat, 8 Oct 2022 12:32:58 +0530 Subject: [PATCH 09/32] workflows: Update actions/checkout to v3 --- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/tests.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index a0b044ecf2..f958673b9c 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -25,7 +25,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: # We must fetch at least the immediate parents so that if this is # a pull request then we can checkout the head. diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index d99c29999a..957a08544e 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -8,7 +8,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: # We must fetch at least the immediate parents so that if this is # a pull request then we can checkout the head. From d898ccd8e014a23d5a67c3dd610ecf23f2b4515f Mon Sep 17 00:00:00 2001 From: megatank58 Date: Sun, 9 Oct 2022 11:29:00 +0530 Subject: [PATCH 10/32] fix: correctly handle `=` in .env --- src/Appwrite/Docker/Env.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Appwrite/Docker/Env.php b/src/Appwrite/Docker/Env.php index 19979eb0ce..bce12a95e6 100644 --- a/src/Appwrite/Docker/Env.php +++ b/src/Appwrite/Docker/Env.php @@ -19,7 +19,7 @@ class Env $data = explode("\n", $data); foreach ($data as &$row) { - $row = explode('=', $row); + $row = explode('=', $row, 2); $key = (isset($row[0])) ? trim($row[0]) : null; $value = (isset($row[1])) ? trim($row[1]) : null; From b085b78d69d0c6f5aa2a866b63797d7bec4a4bc3 Mon Sep 17 00:00:00 2001 From: Tushar Dahiya Date: Sun, 9 Oct 2022 16:48:29 +0530 Subject: [PATCH 11/32] Update add-translations.md --- docs/tutorials/add-translations.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorials/add-translations.md b/docs/tutorials/add-translations.md index 799c7d55d4..646833044a 100644 --- a/docs/tutorials/add-translations.md +++ b/docs/tutorials/add-translations.md @@ -44,7 +44,7 @@ You can choose to contribute either directly on [**GitHub**](#21-manually-using- > Proceed to [Visually using PO Editor](#22-visually-using-po-editor) if you want to use graphical interface instead. -We maintain a [`local 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. +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. 1. **terms.json** From 833e3f8ce1c652a182a3fcb7d95098c9ac702d3c Mon Sep 17 00:00:00 2001 From: Piotr Rogowski Date: Fri, 14 Oct 2022 18:17:00 +0200 Subject: [PATCH 12/32] Fix User not found exception --- app/controllers/api/users.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/api/users.php b/app/controllers/api/users.php index c95105b775..396b1b5e2d 100644 --- a/app/controllers/api/users.php +++ b/app/controllers/api/users.php @@ -414,7 +414,7 @@ App::get('/v1/users/:userId') $user = $dbForProject->getDocument('users', $userId); if ($user->isEmpty()) { - throw new Exception('User not found', 404, Exception::USER_NOT_FOUND); + throw new Exception(Exception::USER_NOT_FOUND); } $response->dynamic($user, Response::MODEL_USER); From f2608361008320534b843ed9125eb7c99a1fada4 Mon Sep 17 00:00:00 2001 From: vrabe Date: Sat, 15 Oct 2022 19:14:20 +0800 Subject: [PATCH 13/32] Update the name of Eswatini (Swaziland) --- app/config/locale/translations/zh-tw.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/config/locale/translations/zh-tw.json b/app/config/locale/translations/zh-tw.json index 11cfd9708a..5d3e7141fb 100644 --- a/app/config/locale/translations/zh-tw.json +++ b/app/config/locale/translations/zh-tw.json @@ -198,7 +198,7 @@ "countries.sk": "斯洛伐克", "countries.si": "斯洛維尼亞", "countries.se": "瑞典", - "countries.sz": "史瓦濟蘭", + "countries.sz": "史瓦帝尼", "countries.sc": "塞席爾", "countries.sy": "敘利亞", "countries.td": "查德", @@ -235,4 +235,4 @@ "continents.na": "北美洲", "continents.oc": "大洋洲", "continents.sa": "南美洲" -} \ No newline at end of file +} From b65a8c86c511612975878486ecf0baf88a4d4b8d Mon Sep 17 00:00:00 2001 From: Piotr Rogowski Date: Sat, 15 Oct 2022 16:40:07 +0200 Subject: [PATCH 14/32] Add tests --- tests/e2e/Services/Users/UsersBase.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tests/e2e/Services/Users/UsersBase.php b/tests/e2e/Services/Users/UsersBase.php index ac3b116b32..f5e364cb68 100644 --- a/tests/e2e/Services/Users/UsersBase.php +++ b/tests/e2e/Services/Users/UsersBase.php @@ -644,6 +644,19 @@ trait UsersBase $this->assertIsInt($users['body']['total']); $this->assertGreaterThan(0, $users['body']['total']); + /** + * Test for FAILURE + */ + $user = $this->client->call(Client::METHOD_GET, '/users/non_existent', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders())); + + $this->assertEquals($user['headers']['status-code'], 404); + $this->assertEquals($user['body']['code'], 404); + $this->assertEquals($user['body']['message'], 'User with the requested ID could not be found.'); + $this->assertEquals($user['body']['type'], 'user_not_found'); + return $data; } From d1e9e7b3969d981188d481d0a8e74c0024590438 Mon Sep 17 00:00:00 2001 From: megatank58 Date: Mon, 17 Oct 2022 16:01:28 +0530 Subject: [PATCH 15/32] chore(tests): update .env --- tests/resources/docker/.env | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/resources/docker/.env b/tests/resources/docker/.env index 1c1359f0fe..b619ab8915 100644 --- a/tests/resources/docker/.env +++ b/tests/resources/docker/.env @@ -1,3 +1,4 @@ _APP_X=value1 _APP_Y=value2 -_APP_Z = value3 \ No newline at end of file +_APP_Z = value3 +_APP_W = value5= From 819ba458366489fea897b6a915796e6a70fd9d01 Mon Sep 17 00:00:00 2001 From: megatank58 Date: Mon, 17 Oct 2022 16:02:24 +0530 Subject: [PATCH 16/32] chore(tests): add test case for value ending in = --- tests/unit/Docker/EnvTest.php | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/unit/Docker/EnvTest.php b/tests/unit/Docker/EnvTest.php index f085d62e56..6730491438 100644 --- a/tests/unit/Docker/EnvTest.php +++ b/tests/unit/Docker/EnvTest.php @@ -28,6 +28,7 @@ class EnvTest extends TestCase $this->assertEquals('value1', $this->object->getVar('_APP_X')); $this->assertEquals('value2', $this->object->getVar('_APP_Y')); $this->assertEquals('value3', $this->object->getVar('_APP_Z')); + $this->assertEquals('value5=', $this->object->getVar('_APP_W')); $this->assertEquals('value4', $this->object->getVar('_APP_TEST')); } From c772844bcb9c153e9565ab5ad03f655106341dbe Mon Sep 17 00:00:00 2001 From: vimo Date: Wed, 19 Oct 2022 16:37:46 +0530 Subject: [PATCH 17/32] docs: update windows powershell commands --- README-CN.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README-CN.md b/README-CN.md index eaada5a34b..56acbc073e 100644 --- a/README-CN.md +++ b/README-CN.md @@ -80,10 +80,10 @@ docker run -it --rm ^ #### PowerShell ```powershell -docker run -it --rm , - --volume /var/run/docker.sock:/var/run/docker.sock , - --volume ${pwd}/appwrite:/usr/src/code/appwrite:rw , - --entrypoint="install" , +docker run -it --rm ` + --volume /var/run/docker.sock:/var/run/docker.sock ` + --volume ${pwd}/appwrite:/usr/src/code/appwrite:rw ` + --entrypoint="install" ` appwrite/appwrite:1.0.3 ``` From c57da64feb40affd3db14840ee93f8e9d2f1b82a Mon Sep 17 00:00:00 2001 From: Sarthak Roy Date: Wed, 19 Oct 2022 21:59:12 +0530 Subject: [PATCH 18/32] workflows: Update codeql-action to v3 --- .github/workflows/codeql-analysis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index a0b044ecf2..5c09a07edf 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -38,14 +38,14 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v1 + uses: github/codeql-action/init@v2 with: languages: ${{ matrix.language }} # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@v1 + uses: github/codeql-action/autobuild@v2 # ℹ️ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -59,4 +59,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 + uses: github/codeql-action/analyze@v2 From a174c6aca669b9dc8b0f41daca043e6c5cf73d55 Mon Sep 17 00:00:00 2001 From: Luca Fabbri Date: Thu, 20 Oct 2022 10:17:54 +0200 Subject: [PATCH 19/32] Fixed README documentatio See https://github.com/appwrite/sdk-for-node/pull/43 --- docs/sdks/nodejs/GETTING_STARTED.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/sdks/nodejs/GETTING_STARTED.md b/docs/sdks/nodejs/GETTING_STARTED.md index 70767e159b..985648d3fd 100644 --- a/docs/sdks/nodejs/GETTING_STARTED.md +++ b/docs/sdks/nodejs/GETTING_STARTED.md @@ -22,7 +22,7 @@ Once your SDK object is set, create any of the Appwrite service objects and choo ```js let users = new sdk.Users(client); -let promise = users.create(ID.unique(), 'email@example.com', 'password'); +let promise = users.create(sdk.ID.unique(), 'email@example.com', undefined, 'password', 'Jane Doe'); promise.then(function (response) { console.log(response); @@ -45,7 +45,7 @@ client ; let users = new sdk.Users(client); -let promise = users.create(ID.unique(), 'email@example.com', 'password'); +let promise = users.create(sdk.ID.unique(), 'email@example.com', undefined, 'password', 'Jane Doe'); promise.then(function (response) { console.log(response); @@ -61,7 +61,7 @@ The Appwrite Node SDK raises `AppwriteException` object with `message`, `code` a let users = new sdk.Users(client); try { - let res = await users.create(ID.unique(), 'email@example.com', 'password'); + let res = await users.create(sdk.ID.unique(), 'email@example.com', 'password'); } catch(e) { console.log(e.message); } From e891424c17a5d7ab618b3a9c1c85f1303266af9a Mon Sep 17 00:00:00 2001 From: geisterfurz007 Date: Thu, 27 Oct 2022 19:32:49 +0200 Subject: [PATCH 20/32] fix: empty payload deleting single user session --- app/controllers/api/users.php | 3 +- .../Realtime/RealtimeCustomClientTest.php | 67 ++++++++++++++++--- 2 files changed, 58 insertions(+), 12 deletions(-) diff --git a/app/controllers/api/users.php b/app/controllers/api/users.php index c95105b775..0d40d532dd 100644 --- a/app/controllers/api/users.php +++ b/app/controllers/api/users.php @@ -1004,7 +1004,8 @@ App::delete('/v1/users/:userId/sessions/:sessionId') $events ->setParam('userId', $user->getId()) - ->setParam('sessionId', $sessionId); + ->setParam('sessionId', $sessionId) + ->setPayload($response->output($session, Response::MODEL_SESSION)); $response->noContent(); }); diff --git a/tests/e2e/Services/Realtime/RealtimeCustomClientTest.php b/tests/e2e/Services/Realtime/RealtimeCustomClientTest.php index 7f09cb5703..71c37678ed 100644 --- a/tests/e2e/Services/Realtime/RealtimeCustomClientTest.php +++ b/tests/e2e/Services/Realtime/RealtimeCustomClientTest.php @@ -458,21 +458,29 @@ class RealtimeCustomClientTest extends Scope $this->assertContains("users.*", $response['data']['events']); $this->assertNotEmpty($response['data']['payload']); + $createSession = function () use ($projectId): array { + $response = $this->client->call(Client::METHOD_POST, '/account/sessions/email', array_merge([ + 'origin' => 'http://localhost', + 'content-type' => 'application/json', + 'x-appwrite-project' => $projectId, + ]), [ + 'email' => 'torsten@appwrite.io', + 'password' => 'new-password', + ]); + + $sessionNew = $this->client->parseCookie((string)$response['headers']['set-cookie'])['a_session_' . $projectId]; + $sessionNewId = $response['body']['$id']; + + return array("session" => $sessionNew, "sessionId" => $sessionNewId); + }; + /** * Test Account Session Create */ - $response = $this->client->call(Client::METHOD_POST, '/account/sessions/email', array_merge([ - 'origin' => 'http://localhost', - 'content-type' => 'application/json', - 'x-appwrite-project' => $projectId, - ]), [ - 'email' => 'torsten@appwrite.io', - 'password' => 'new-password', - ]); - - $sessionNew = $this->client->parseCookie((string)$response['headers']['set-cookie'])['a_session_' . $projectId]; - $sessionNewId = $response['body']['$id']; + $sessionData = $createSession(); + $sessionNew = $sessionData['session']; + $sessionNewId = $sessionData['sessionId']; $response = json_decode($client->receive(), true); $this->assertArrayHasKey('type', $response); @@ -527,6 +535,43 @@ class RealtimeCustomClientTest extends Scope $this->assertContains("users.*", $response['data']['events']); $this->assertNotEmpty($response['data']['payload']); + /** + * Test User Account Session Delete + */ + + $sessionData = $createSession(); + $sessionNew = $sessionData['session']; + $sessionNewId = $sessionData['sessionId']; + $client->receive(); // Receive the creation message and drop; this was tested earlier already + + $this->client->call(Client::METHOD_DELETE, '/users/' . $userId . '/sessions/' . $sessionNewId, array_merge([ + 'origin' => 'http://localhost', + 'content-type' => 'application/json', + 'x-appwrite-project' => $projectId, + 'x-appwrite-key' => $this->getProject()['apiKey'], + ])); + + $response = json_decode($client->receive(), true); + $this->assertArrayHasKey('type', $response); + $this->assertArrayHasKey('data', $response); + $this->assertEquals('event', $response['type']); + $this->assertNotEmpty($response['data']); + $this->assertCount(2, $response['data']['channels']); + $this->assertArrayHasKey('timestamp', $response['data']); + $this->assertContains('account', $response['data']['channels']); + $this->assertContains('account.' . $userId, $response['data']['channels']); + $this->assertContains("users.{$userId}.sessions.{$sessionNewId}.delete", $response['data']['events']); + $this->assertContains("users.{$userId}.sessions.{$sessionNewId}", $response['data']['events']); + $this->assertContains("users.{$userId}.sessions.*.delete", $response['data']['events']); + $this->assertContains("users.{$userId}.sessions.*", $response['data']['events']); + $this->assertContains("users.{$userId}", $response['data']['events']); + $this->assertContains("users.*.sessions.{$sessionNewId}.delete", $response['data']['events']); + $this->assertContains("users.*.sessions.{$sessionNewId}", $response['data']['events']); + $this->assertContains("users.*.sessions.*.delete", $response['data']['events']); + $this->assertContains("users.*.sessions.*", $response['data']['events']); + $this->assertContains("users.*", $response['data']['events']); + $this->assertNotEmpty($response['data']['payload']); + /** * Test Account Create Recovery */ From cbe7b35436982788946fbd63b361a8f267722e83 Mon Sep 17 00:00:00 2001 From: Kalpesh Date: Tue, 1 Nov 2022 16:20:29 +0530 Subject: [PATCH 21/32] Update README-CN.md --- README-CN.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-CN.md b/README-CN.md index 924a424ffb..202f7b96d3 100644 --- a/README-CN.md +++ b/README-CN.md @@ -167,7 +167,7 @@ Appwrite API 界面层利用后台缓存和任务委派来提供极速的响应 ## 订阅我们 -加入我们在世界各地不断发展的社区!请参阅我们的官方 [博客](https://medium.com/appwrite-io)。在 [Twitter](https://twitter.com/appwrite)、[Facebook 页面](https://www.facebook.com/appwrite.io)、[Facebook 群组](https://www.facebook.com/appwrite.io/groups/), [开发者社区](https://dev.to/appwrite) 等平台订阅我们或加入我们的 [Discord 社区](https://discord.gg/GSeTUeA) 以获得更多帮助,想法和讨论。 +加入我们在世界各地不断发展的社区!请参阅我们的官方 [博客](https://medium.com/appwrite-io)。在 [Twitter](https://twitter.com/appwrite)、[Facebook 页面](https://www.facebook.com/appwrite.io)、[Facebook 群组](https://www.facebook.com/appwrite.io/groups/)、[开发者社区](https://dev.to/appwrite) 等平台订阅我们或加入我们的 [Discord 社区](https://discord.gg/GSeTUeA) 以获得更多帮助,想法和讨论。 ## 版权说明 From 0cd67229a1ace2bc620d78f82b92376a9ff9dc9a Mon Sep 17 00:00:00 2001 From: "P.O.M" Date: Fri, 25 Nov 2022 10:16:45 +0100 Subject: [PATCH 22/32] Fix : translation french "emails.recovery.body" Wrong reference to project variable --- CHANGES.md | 1 + app/config/locale/translations/fr.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 0ba56af243..0fef29f3a3 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,6 @@ - Fix invited account verified status [#4776](https://github.com/appwrite/appwrite/pull/4776) - Get default region from environment on project create [#4780](https://github.com/appwrite/appwrite/pull/4780) +- Fix french translation [#4782](https://github.com/appwrite/appwrite/pull/4782) # Version 1.1.2 ## Changes diff --git a/app/config/locale/translations/fr.json b/app/config/locale/translations/fr.json index f5cc15a83a..35257ba6fa 100644 --- a/app/config/locale/translations/fr.json +++ b/app/config/locale/translations/fr.json @@ -17,7 +17,7 @@ "emails.magicSession.signature": "L'équipe {{project}}", "emails.recovery.subject": "Réinitialisation du mot de passe", "emails.recovery.hello": "Bonjour {{name}}", - "emails.recovery.body": "Suivez ce lien pour réinitialiser votre mot de passe pour {{projet}}.", + "emails.recovery.body": "Suivez ce lien pour réinitialiser votre mot de passe pour {{project}}.", "emails.recovery.footer": "Si vous n'avez pas demandé à réinitialiser votre mot de passe, vous pouvez ignorer ce message.", "emails.recovery.thanks": "Merci", "emails.recovery.signature": "L'équipe {{project}}", From 31089b76fb5d3d90af4602cadcc8d77aeb5bd0a4 Mon Sep 17 00:00:00 2001 From: "P.O Marec" Date: Sat, 26 Nov 2022 13:02:20 +0100 Subject: [PATCH 23/32] Fix : translation french "emails.certificate.body" --- app/config/locale/translations/fr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/config/locale/translations/fr.json b/app/config/locale/translations/fr.json index 35257ba6fa..362d04c93a 100644 --- a/app/config/locale/translations/fr.json +++ b/app/config/locale/translations/fr.json @@ -29,7 +29,7 @@ "emails.invitation.signature": "L'équipe {{project}}", "emails.certificate.subject": "Échec du certificat pour %s", "emails.certificate.hello": "Bonjour", - "emails.certificate.body": "Le certificate pour votre domaine '{{domain}}' n'a pas pu être généré. Ceci est la tentative {{tentative}} et l'échec a été causé par : {{erreur}}", + "emails.certificate.body": "Le certificate pour votre domaine '{{domain}}' n'a pas pu être généré. Ceci est la tentative {{attempt}} et l'échec a été causé par : {{error}}", "emails.certificate.footer": "Votre certificat précédent sera valide pendant 30 jours à compter de la première défaillance. Nous vous recommandons fortement d'enquêter sur ce cas, sinon votre domaine se retrouvera sans communication SSL valide.", "emails.certificate.thanks": "Merci", "emails.certificate.signature": "L'équipe {{project}}", From 4dfaa5e69ace071f2917a8417103ac8ddcd496b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Mon, 5 Dec 2022 14:54:13 +0000 Subject: [PATCH 24/32] Fix mimetype size --- app/config/collections.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/config/collections.php b/app/config/collections.php index bdc14d9105..e872953568 100644 --- a/app/config/collections.php +++ b/app/config/collections.php @@ -3256,7 +3256,7 @@ $collections = [ '$id' => ID::custom('mimeType'), 'type' => Database::VAR_STRING, 'format' => '', - 'size' => 127, // https://tools.ietf.org/html/rfc4288#section-4.2 + 'size' => 255, // https://tools.ietf.org/html/rfc4288#section-4.2 'signed' => true, 'required' => false, 'default' => null, From ea58cb4aff4dab9936042ab1d79ac88de8c4cbff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Mon, 5 Dec 2022 14:57:24 +0000 Subject: [PATCH 25/32] Update changelog --- CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.md b/CHANGES.md index 0ba56af243..e9b8ed761f 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,6 @@ - Fix invited account verified status [#4776](https://github.com/appwrite/appwrite/pull/4776) - Get default region from environment on project create [#4780](https://github.com/appwrite/appwrite/pull/4780) +- Fix max mimetype size [#4814](https://github.com/appwrite/appwrite/pull/4814) # Version 1.1.2 ## Changes From 0a177713f06c54a4107f0b90ac3a1ce5d6de4485 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Wed, 7 Dec 2022 11:01:58 +0000 Subject: [PATCH 26/32] Implement migration for mimeType --- src/Appwrite/Migration/Migration.php | 1 + src/Appwrite/Migration/Version/V17.php | 79 ++++++++++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 src/Appwrite/Migration/Version/V17.php diff --git a/src/Appwrite/Migration/Migration.php b/src/Appwrite/Migration/Migration.php index bef6e5e603..b764641279 100644 --- a/src/Appwrite/Migration/Migration.php +++ b/src/Appwrite/Migration/Migration.php @@ -48,6 +48,7 @@ abstract class Migration '1.1.0' => 'V16', '1.1.1' => 'V16', '1.1.2' => 'V16', + '1.2.0' => 'V17', ]; /** diff --git a/src/Appwrite/Migration/Version/V17.php b/src/Appwrite/Migration/Version/V17.php new file mode 100644 index 0000000000..b04aa2a7c3 --- /dev/null +++ b/src/Appwrite/Migration/Version/V17.php @@ -0,0 +1,79 @@ + null, + fn () => [] + ); + } + + Console::log('Migrating Project: ' . $this->project->getAttribute('name') . ' (' . $this->project->getId() . ')'); + + Console::info('Migrating Collections'); + $this->migrateCollections(); + + // Console::info('Migrating Documents'); + // $this->forEachDocument([$this, 'fixDocument']); + } + + /** + * Migrate all Collections. + * + * @return void + */ + protected function migrateCollections(): void + { + foreach ($this->collections as $collection) { + $id = $collection['$id']; + + Console::log("Migrating Collection \"{$id}\""); + + $this->projectDB->setNamespace("_{$this->project->getInternalId()}"); + + switch ($id) { + case 'files': + try { + /** + * Update 'mimeType' attribute size (127->255) + */ + $this->projectDB->updateAttribute($id, 'mimeType', Database::VAR_STRING, 255, true, false); + } catch (\Throwable $th) { + Console::warning("'mimeType' from {$id}: {$th->getMessage()}"); + } + + break; + + default: + break; + } + + usleep(50000); + } + } + + /** + * Fix run on each document + * + * @param \Utopia\Database\Document $document + * @return \Utopia\Database\Document + */ + protected function fixDocument(Document $document) + { + return $document; + } +} From 4ee8fd5629e01547e042cc449cde130860bbd30a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Fri, 16 Dec 2022 10:39:53 +0100 Subject: [PATCH 27/32] Add cache clean --- src/Appwrite/Migration/Version/V17.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Appwrite/Migration/Version/V17.php b/src/Appwrite/Migration/Version/V17.php index b04aa2a7c3..66a02662d1 100644 --- a/src/Appwrite/Migration/Version/V17.php +++ b/src/Appwrite/Migration/Version/V17.php @@ -52,6 +52,7 @@ class V17 extends Migration * Update 'mimeType' attribute size (127->255) */ $this->projectDB->updateAttribute($id, 'mimeType', Database::VAR_STRING, 255, true, false); + $this->projectDB->deleteCachedCollection($id); } catch (\Throwable $th) { Console::warning("'mimeType' from {$id}: {$th->getMessage()}"); } From 804dbb867c3f8d0f6d9cf748e620ec9cab367d85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Tue, 27 Dec 2022 08:24:34 +0100 Subject: [PATCH 28/32] Re-add migration, add missing env vars --- app/views/install/compose.phtml | 3 +++ src/Appwrite/Migration/Version/V17.php | 24 +++++++++++++++--------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/app/views/install/compose.phtml b/app/views/install/compose.phtml index e14e434a84..2070043399 100644 --- a/app/views/install/compose.phtml +++ b/app/views/install/compose.phtml @@ -153,6 +153,9 @@ services: - _APP_MAINTENANCE_RETENTION_USAGE_HOURLY - _APP_SMS_PROVIDER - _APP_SMS_FROM + - _APP_GRAPHQL_MAX_BATCH_SIZE + - _APP_GRAPHQL_MAX_COMPLEXITY + - _APP_GRAPHQL_MAX_DEPTH appwrite-realtime: image: /: diff --git a/src/Appwrite/Migration/Version/V17.php b/src/Appwrite/Migration/Version/V17.php index 3c17c2f0e9..66a02662d1 100644 --- a/src/Appwrite/Migration/Version/V17.php +++ b/src/Appwrite/Migration/Version/V17.php @@ -2,10 +2,8 @@ namespace Appwrite\Migration\Version; -use Appwrite\Auth\Auth; use Appwrite\Migration\Migration; use Utopia\CLI\Console; -use Utopia\Config\Config; use Utopia\Database\Database; use Utopia\Database\Document; @@ -29,8 +27,8 @@ class V17 extends Migration Console::info('Migrating Collections'); $this->migrateCollections(); - Console::info('Migrating Documents'); - $this->forEachDocument([$this, 'fixDocument']); + // Console::info('Migrating Documents'); + // $this->forEachDocument([$this, 'fixDocument']); } /** @@ -48,6 +46,19 @@ class V17 extends Migration $this->projectDB->setNamespace("_{$this->project->getInternalId()}"); switch ($id) { + case 'files': + try { + /** + * Update 'mimeType' attribute size (127->255) + */ + $this->projectDB->updateAttribute($id, 'mimeType', Database::VAR_STRING, 255, true, false); + $this->projectDB->deleteCachedCollection($id); + } catch (\Throwable $th) { + Console::warning("'mimeType' from {$id}: {$th->getMessage()}"); + } + + break; + default: break; } @@ -64,11 +75,6 @@ class V17 extends Migration */ protected function fixDocument(Document $document) { - switch ($document->getCollection()) { - default: - break; - } - return $document; } } From d63c429d3e3bd9e159d7f6665a70ed9314a5751a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Tue, 27 Dec 2022 08:35:55 +0100 Subject: [PATCH 29/32] Implement 1.2 migration --- src/Appwrite/Migration/Version/V17.php | 29 ++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/src/Appwrite/Migration/Version/V17.php b/src/Appwrite/Migration/Version/V17.php index 66a02662d1..5b49b961eb 100644 --- a/src/Appwrite/Migration/Version/V17.php +++ b/src/Appwrite/Migration/Version/V17.php @@ -2,6 +2,7 @@ namespace Appwrite\Migration\Version; +use Appwrite\Auth\Auth; use Appwrite\Migration\Migration; use Utopia\CLI\Console; use Utopia\Database\Database; @@ -27,8 +28,8 @@ class V17 extends Migration Console::info('Migrating Collections'); $this->migrateCollections(); - // Console::info('Migrating Documents'); - // $this->forEachDocument([$this, 'fixDocument']); + Console::info('Migrating Documents'); + $this->forEachDocument([$this, 'fixDocument']); } /** @@ -75,6 +76,30 @@ class V17 extends Migration */ protected function fixDocument(Document $document) { + switch ($document->getCollection()) { + case 'projects': + /** + * Bump version number. + */ + $document->setAttribute('version', '1.1.0'); + + /** + * Set default maxSessions + */ + $document->setAttribute('auths', array_merge($document->getAttribute('auths', []), [ + 'maxSessions' => APP_LIMIT_USER_SESSIONS_DEFAULT + ])); + break; + case 'users': + /** + * Set hashOptions type + */ + $document->setAttribute('hashOptions', array_merge($document->getAttribute('hashOptions', []), [ + 'type' => $document->getAttribute('hash', Auth::DEFAULT_ALGO) + ])); + break; + } + return $document; } } From 39cb846ae0de54d96770ed797e19de7a2f6bc041 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Tue, 27 Dec 2022 09:09:47 +0100 Subject: [PATCH 30/32] Fix failing test --- tests/unit/Docker/EnvTest.php | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/unit/Docker/EnvTest.php b/tests/unit/Docker/EnvTest.php index 6730491438..e6c9b8cadf 100644 --- a/tests/unit/Docker/EnvTest.php +++ b/tests/unit/Docker/EnvTest.php @@ -37,6 +37,7 @@ class EnvTest extends TestCase $this->assertEquals("_APP_X=value1 _APP_Y=value2 _APP_Z=value3 +_APP_W=value5= ", $this->object->export()); } } From a922f7f0e1a58272238bb478f5d7d3481746f160 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Tue, 27 Dec 2022 09:15:05 +0100 Subject: [PATCH 31/32] Fix test --- tests/unit/Docker/EnvTest.php | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/unit/Docker/EnvTest.php b/tests/unit/Docker/EnvTest.php index 6730491438..e6c9b8cadf 100644 --- a/tests/unit/Docker/EnvTest.php +++ b/tests/unit/Docker/EnvTest.php @@ -37,6 +37,7 @@ class EnvTest extends TestCase $this->assertEquals("_APP_X=value1 _APP_Y=value2 _APP_Z=value3 +_APP_W=value5= ", $this->object->export()); } } From 7532309bbb09ba43fb757649a7aa039c8fa90404 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Tue, 27 Dec 2022 10:31:49 +0100 Subject: [PATCH 32/32] Apply suggestions from code review --- src/Appwrite/Migration/Version/V17.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Appwrite/Migration/Version/V17.php b/src/Appwrite/Migration/Version/V17.php index 5b49b961eb..27ece55107 100644 --- a/src/Appwrite/Migration/Version/V17.php +++ b/src/Appwrite/Migration/Version/V17.php @@ -81,7 +81,7 @@ class V17 extends Migration /** * Bump version number. */ - $document->setAttribute('version', '1.1.0'); + $document->setAttribute('version', '1.2.0'); /** * Set default maxSessions