diff --git a/.github/ISSUE_TEMPLATE/---bug-report.md b/.github/ISSUE_TEMPLATE/---bug-report.md new file mode 100644 index 0000000..ce4739d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/---bug-report.md @@ -0,0 +1,38 @@ +--- +name: "\U0001F41E Bug report" +about: Report an issue +title: '' +labels: bug +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Desktop (please complete the following information):** + - OS: [e.g. iOS] + - Browser [e.g. chrome, safari] + - Version [e.g. 22] + +**Smartphone (please complete the following information):** + - Device: [e.g. iPhone6] + - OS: [e.g. iOS8.1] + - Browser [e.g. stock browser, safari] + - Version [e.g. 22] + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/---feature-request.md b/.github/ISSUE_TEMPLATE/---feature-request.md new file mode 100644 index 0000000..f22de3f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/---feature-request.md @@ -0,0 +1,20 @@ +--- +name: "\U0001F31F Feature request" +about: Suggest an idea +title: '' +labels: enhancement +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/README.md b/README.md index 34742d7..125367b 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,20 @@ -# Crabfit avatar +# Crab Fit avatar Align your schedules to find the perfect time that works for everyone. Licensed under the GNU GPLv3. Crab Fit - Use your availability to find a time that works for everyone | Product Hunt +## Contributing + +### โญ๏ธ Bugs or feature requests + +If you find any bugs or have a feature request, please create an issue by clicking here. + +### ๐ŸŒ Translations + +If you speak a language other than English and you want to help translate Crab Fit, fill out this form: https://forms.gle/azz1yGqhpLUka45S9 + ## Setup 1. Clone the repo. @@ -12,18 +22,18 @@ Licensed under the GNU GPLv3. 3. Run `node index.js` in the backend folder to start the API. 4. Run `yarn start` in the frontend folder to start the front end. -### Browser extension +### ๐Ÿ”Œ Browser extension The browser extension in `crabfit-browser-extension` can be tested by first running the frontend, and changing the iframe url in the extension's `popup.html` to match the local Crab Fit. Then it can be loaded as an unpacked extension in Chrome to test. ## Deploy -### Frontend +### ๐Ÿฆ€ Frontend 1. In the frontend folder `cd crabfit-frontend` 2. Run `./deploy.sh` to compile and deploy. -### Backend +### โš™๏ธ Backend 1. In the backend folder `cd crabfit-backend` 2. Deploy the backend `gcloud app deploy --project=crabfit --version=v1` -### Browser extension +### ๐Ÿ”Œ Browser extension Compress everything inside the `crabfit-browser-extension` folder and use that zip to deploy using Chrome web store and Mozilla Add-on store. diff --git a/crabfit-frontend/public/i18n/ja/common.json b/crabfit-frontend/public/i18n/ja/common.json index 7086ea1..f96b717 100644 --- a/crabfit-frontend/public/i18n/ja/common.json +++ b/crabfit-frontend/public/i18n/ja/common.json @@ -1,42 +1,42 @@ { - "name": "Crab Fit", - "tagline": "Create your own", - "cta": "Create your own Crab Fit!", - "created": "{{date}}ใงไฝœๆˆ", + "name": "ใ‚ฏใƒฉใƒผใƒ–ใƒ•ใ‚ฃใƒƒใƒˆ", + "tagline": "่‡ชๅˆ†ใฎใ‚’ไฝœๆˆใ—ใพใ—ใ‚‡ใ†", + "cta": "่‡ชๅˆ†ใฎใ‚ฏใƒฉใƒผใƒ–ใƒ•ใ‚ฃใƒƒใƒˆใ‚’ไฝœๆˆใ—ใพใ—ใ‚‡ใ†๏ผ", + "created": "{{date}}ใงไฝœๆˆใ—ใŸ", "donate": { - "info": "Thank you for using Crab Fit. If you like it, consider donating.", - "button": "Donate", - "title": "Every amount counts :)", + "info": "ใ‚ฏใƒฉใƒผใƒ–ใƒ•ใ‚ฃใƒƒใƒˆใ‚’ไฝฟใฃใฆใ‚ใ‚ŠใŒใจใ†ใ”ใ–ใ„ใพใ—ใŸใ€‚ๅฅฝใใ ใฃใŸใ‚‰ใ€ๅฏ„ไป˜ใ—ใฆใใ‚Œใพใ™ใ‹๏ผŸ", + "button": "ๅฏ„ไป˜ใ™ใ‚‹", + "title": "ใ„ใใ‚‰ใงใ‚‚ใ„ใ„ใงใ™ใ‚ˆ :)", "options": { - "$2": "Donate $2", - "$5": "Donate $5", - "$10": "Donate $10", - "choose": "Choose an amount" + "$2": "$๏ผ’ใ‚’ๅฏ„ไป˜ใ™ใ‚‹", + "$5": "$๏ผ•ใ‚’ๅฏ„ไป˜ใ™ใ‚‹", + "$10": "$๏ผ‘๏ผใ‚’ๅฏ„ไป˜ใ™ใ‚‹", + "choose": "่‡ชๅˆ†ใง้ธใ‚“ใ ้‡‘้ก" }, "messages": { - "about": "If it's helped you out at all, consider donating to help keep it running. ๐Ÿฆ€", - "success": "Thank you for your donation! Without you, Crab Fit wouldn't be free, so thank you and keep being super awesome!", - "error": "Cannot make donation through Google. Please try donating through the website crab.fit ๐Ÿฆ€" + "about": "ใ‚ฏใƒฉใƒ–ใƒ•ใ‚ฃใƒƒใƒˆใฏไพฟๅˆฉใ ใชใจๆ€ใ†ใชใ‚‰ใ€ๅฏ„ไป˜ใ—ใฆใใ‚Œใพใ›ใ‚“ใ‹๏ผŸ๐Ÿฆ€", + "success": "ๅฏ„ไป˜ใ‚ใ‚ŠใŒใจใ†ใ”ใ–ใ„ใพใ™๏ผใ‚ใชใŸใฎ่ฃœไฝใŒใชใ‘ใ‚Œใฐใ€็„กๆ–™ใงใ„ใ‚‰ใ‚Œใ‚‹ใ“ใจใŒใงใใพใ›ใ‚“ใฎใงใ€ๆœฌๅฝ“ใซๅŠฉใ‘ใฆใใ‚Œใพใ—ใŸใ€‚", + "error": "Googleใงๅฏ„ไป˜ใŒใงใใพใ›ใ‚“ใ€‚crab.fitใฎใ‚ตใ‚คใƒˆใง็›ดๆŽฅๅฏ„ไป˜ใ—ใฆใใ ใ•ใ„ใ€‚๐Ÿฆ€" } }, "options": { - "name": "Options", + "name": "่จญๅฎš", "weekStart": { - "label": "Week starts on", + "label": "้€ฑ้–“ใฎๅง‹ใพใ‚Š", "options": { - "Sunday": "ๆ—ฅๆ›œ", - "Monday": "ๆœˆๆ›œ" + "Sunday": "ๆ—ฅๆ›œๆ—ฅ", + "Monday": "ๆœˆๆ›œๆ—ฅ" } }, "timeFormat": { - "label": "Time format", + "label": "ๆ™‚้–“่กจ่จ˜", "options": { - "12h": "12ๆ™‚้–“", - "24h": "24ๆ™‚้–“" + "12h": "๏ผ‘๏ผ’ๆ™‚ๅˆถ", + "24h": "๏ผ’๏ผ”ๆ™‚ๅˆถ" } }, "theme": { - "label": "่‰ฒใฎใƒ†ใƒผใƒž", + "label": "ใƒ†ใƒผใƒž", "options": { "System": "ใ‚ทใ‚นใƒ†ใƒ ", "Light": "ๆ˜Ž่‰ฒ", @@ -44,11 +44,11 @@ } }, "highlight": { - "label": "Highlight highest availability", - "title": "Make the highest availability on the heatmap stand out", + "label": "ๆœ€้ซ˜t้ƒฝๅˆใŒใ„ใ„ๆ™‚ใ‚’ใƒใ‚คใƒฉใ‚คใƒˆใ™ใ‚‹", + "title": "ๆœ€้ซ˜้ƒฝๅˆใŒใ„ใ„ๆ™‚ใ‚’ใ‚‚ใฃใจ่ฆ‹ใ‚„ใ™ใใชใ‚‹", "options": { - "Off": "ใ‚ชใƒ•", - "On": "ใ‚ชใƒณ" + "Off": "ใ—ใชใ„", + "On": "ใ™ใ‚‹" } }, "language": { diff --git a/crabfit-frontend/public/i18n/ja/event.json b/crabfit-frontend/public/i18n/ja/event.json index 569723a..0ccc402 100644 --- a/crabfit-frontend/public/i18n/ja/event.json +++ b/crabfit-frontend/public/i18n/ja/event.json @@ -1,63 +1,65 @@ { - "available": "available", + "available": "้ƒฝๅˆใŒใ„ใ„", + "greyed_times": "ใ“ใฎ้ ˜ๅŸŸใฏใ‚คใƒ™ใƒณใƒˆใฎ็ฏ„ๅ›ฒใงใฏใชใ„ใฎใงใ€ใ‚ฐใƒฌใƒผใ‚ขใ‚ฆใƒˆใ—ใพใ—ใŸใ€‚ใ“ใฎใ‚คใƒ™ใƒณใƒˆใฏไฝœใฃใŸๆ™‚้–“ๅธฏใจ้•ใ†ๆ™‚้–“ๅธฏใง่ฆ‹ใ‚‹ใ‹ใ‚‚ใ—ใ‚Œใพใ›ใ‚“ใ€‚", "nav": { - "title": "Click to copy", - "copied": "Copied!", - "shareinfo": "Copy the link to this page, or share via <1>email.", - "shareinfo_alt": "Click the link above to copy it to your clipboard, or share via <1>email.", - "email_subject": "Scheduling {{event_name}}", - "email_body": "Visit this link to enter your availabilities:" + "title": "ใ‚ฏใƒชใƒƒใ‚ฏใ—ใฆใ€ใ‚ณใƒ”ใƒผใ™ใ‚‹", + "copied": "ใ‚ณใƒ”ใƒผใ—ใพใ—ใŸ๏ผ", + "shareinfo": "ใ“ใฎใƒšใƒผใ‚ธใฎใƒชใƒณใ‚ฏใ‚’ใ‚ณใƒผใƒ”ใ—ใฆใ€ใพใŸใฏ<1>ใƒกใƒผใƒซใงใ‚ทใ‚งใ‚ขใ—ใพใ™ใ€‚", + "shareinfo_alt": "ใ“ใฎไธŠใซใ‚ใ‚‹ใƒชใƒณใ‚ฏใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ—ใฆใ€ใ‚ฏใƒชใƒƒใƒ—ใƒœใƒผใƒ‰ใซใ‚ณใƒผใƒ”ใ—ใฆใ€ใพใŸใฏ<1>ใƒกใƒผใƒซใงใ‚ทใ‚งใ‚ขใƒผใ—ใพใ™ใ€‚", + "email_subject": "{{event_name}}ใ‚’ไบˆๅฎš", + "email_body": "ใ“ใฎใƒชใƒณใ‚ฏใง้ƒฝๅˆใ‚’็™ป้Œฒใงใใพใ™๏ผš" }, "form": { - "signed_out": "Sign in to add your availability", - "signed_in": "Signed in as {{name}}", + "signed_out": "้ƒฝๅˆใ‚’็™ป้Œฒใ—ใŸใ„ใชใ‚‰ใ€ๆœ€ๅˆใฏใƒญใ‚ฐใ‚คใƒณใ—ใฆใใ ใ•ใ„", + "signed_in": "{{name}}ใงใƒญใ‚ฐใ‚คใƒณใ—ใฆใ„ใพใ™", - "name": "Your name", - "password": "Password (optional)", - "button": "Login", - "info": "These details are only for this event. Use a password to prevent others from changing your availability.", + "name": "ใ‚ใชใŸใฎๅๅ‰", + "password": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰๏ผˆไปปๆ„)", + "button": "ใƒญใ‚ฐใ‚คใƒณ", + "info": "ใ“ใฎ่ฉณ็ดฐใฏใ“ใฎใ‚คใƒ™ใƒณใƒˆใ ใ‘ใซใคใ„ใฆใงใ™ใ€‚ไป–ไบบใฏใ‚ใชใŸใฎ้ƒฝๅˆใ‚’ๅค‰ๅŒ–ใ™ใ‚‹ใ“ใจใ‚’ไบˆ้˜ฒใ—ใŸใ„ใชใ‚‰ใ€ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ‚’ไฝฟใฃใฆใใ ใ•ใ„ใ€‚", - "timezone": "Your time zone", + "timezone": "ใ‚ใชใŸใฎๆ™‚้–“ๅธฏ", "errors": { - "password_incorrect": "Password is incorrect. Check your name is spelled right.", - "unknown": "Failed to login. Please try again." + "password_incorrect": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใฏๆญฃใ—ใใ‚ใ‚Šใพใ›ใ‚“ใ€‚ๅๅ‰ใฎ็ถดใ‚Šใ‹ใŸใ‚’็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚", + "unknown": "ใƒญใ‚ฐใ‚คใƒณใฏใงใใชใ‹ใฃใŸใงใ™ใ€‚ใ‚‚ใ†ไธ€ๅบฆใ‚„ใ‚Š็›ดใ—ใฆใใ ใ•ใ„ใ€‚" }, - "created_in_timezone": "This event was created in the timezone {{timezone}}. <3>Click here to use it.", - "local_timezone": "Your local timezone is detected to be {{timezone}}. <3>Click here to use it." + "created_in_timezone": "ใ“ใฎใ‚คใƒ™ใƒณใƒˆใฏ{{timezone}}ใฎๆ™‚้–“ๅธฏใงไฝœๆˆใ—ใพใ—ใŸใ€‚<3>ใ“ใ“ใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ™ใ‚‹ใจใใฎๆ™‚้–“ๅธฏใ‚’ไฝฟใ†ใ“ใจใŒใงใใพใ™ใ€‚", + "local_timezone": "ใ‚ทใ‚นใƒ†ใƒ ใซใ‚ˆใ‚‹ใจใ€ใ‚ใชใŸใฎใƒญใƒผใ‚ซใƒซๆ™‚้–“ๅธฏใฏ{{timezone}}ใงใ™ใ€‚<3>ใ“ใ“ใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ™ใ‚‹ใจใใฎๆ™‚้–“ๅธฏใ‚’ไฝฟใ†ใ“ใจใงใงใใพใ™ใ€‚" }, "offline": { - "title": "You are offline", - "body": "A Crab Fit doesn't work offline.
Make sure you're connected to the internet and try again." + "title": "ใ‚คใƒณใ‚ฟใƒผใƒใƒƒใƒˆใฏๆŽฅ็ถšใ—ใฆใ„ใพใ›ใ‚“", + "body": "ใ‚ฏใƒฉใƒ–ใƒ•ใ‚ฃใƒƒใƒˆใฏใ‚ชใƒ•ใƒฉใ‚คใƒณใงไฝฟใ‚ใ‚Œใพใ›ใ‚“ใ€‚
ใ‚คใƒณใ‚ฟใƒผใƒใƒƒใƒˆๆŽฅ็ถšใ‚’็ขบ่ชใ—ใฆใ‚‚ใ†ไธ€ๅบฆใ‚„ใ‚Š็›ดใ—ใฆใใ ใ•ใ„ใ€‚" }, "error": { - "title": "Event not found", - "body": "Check that the url you entered is correct." + "title": "ใ‚คใƒ™ใƒณใƒˆใฏ่ฆ‹ใคใ‘ใ‚‰ใ‚Œใพใ›ใ‚“ใงใ—ใŸ", + "body": "็™ป้Œฒใ—ใŸURLใ‚’็ขบ่ชใ—ใฆใใ ใ•ใ„" }, "tabs": { - "you": "Your availability", - "you_tooltip": "Login to set your availability", - "group": "Group availability" + "you": "ใ‚ใชใŸใฎ้ƒฝๅˆ", + "you_tooltip": "ใƒญใ‚ฐใ‚คใƒณใ™ใ‚‹ใจ้ƒฝๅˆใ‚’่จญๅฎšใ™ใ‚‹ใ“ใจใŒใงใใพใ™", + "group": "ใ‚ฐใƒซใƒผใƒ—ใฎ้ƒฝๅˆ" }, "group": { - "legend_tooltip": "Click to highlight highest availability", - "info1": "Hover or tap the calendar below to see who is available", - "info2": "Click the names below to view people individually" + "legend_tooltip": "ใ‚ฏใƒชใƒƒใ‚ฏใ™ใ‚‹ใจๆœ€้ซ˜ใฎ้ƒฝๅˆใ‚’ใƒใ‚คใƒฉใ‚คใƒˆใ™ใ‚‹ใ“ใจใŒใงใใพใ™", + "info1": "ไธ‹ใฎใ‚ซใƒฌใƒณใƒ€ใƒผใฎไธŠใซใƒžใ‚ฆใ‚นใ‚ซใƒผใ‚ฝใƒซใ‚’ใƒ›ใƒใƒชใƒณใ‚ฐใ—ใฆใพใŸใฏใ‚ฟใƒƒใƒ—ใ™ใ‚‹ใจ้ƒฝๅˆใŒใ„ใ„ไบบใ‚’่ฆ‹ใ‚‹ใ“ใจใŒใงใใพใ™", + "info2": "ไธ‹ใฎๅๅ‰ใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ™ใ‚‹ใจไบบใฎ้ƒฝๅˆใ‚’่ฆ‹ใ‚‹ใ“ใจใŒใงใใพใ™" }, "you": { - "info": "Click and drag the calendar below to set your availabilities", + "info": "้ƒฝๅˆใ‚’่จญๅฎšใ—ใŸใ„ใชใ‚‰ใ€ไธ‹ใฎใ‚ซใƒฌใƒณใƒ€ใƒผใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ—ใฆใƒ‰ใƒฉใƒƒใ‚ฐใ™ใ‚‹", "google_cal": { - "login": "Sync with Google Calendar", - "logout": "log out", - "select_all": "Select all", - "select_none": "Select none", - "info": "Importing will overwrite your current availability", - "button": "Import availability" - } + "login": "Googleใ‚ซใƒฌใƒณใƒ€ใƒผใ‚’ๅŒๆœŸใ™ใ‚‹", + "logout": "ใƒญใ‚ฐใ‚ขใ‚ฆใƒˆ", + "select_all": "ๅ…จ้ƒจใ‚’้ธๆŠžใ™ใ‚‹", + "select_none": "ใฉใ‚Œใ‚‚ใชใ„ใ‚’้ธๆŠžใ™ใ‚‹", + "info": "ใ‚คใƒณใƒใƒผใƒˆใ—ใŸใ‚‰ใ€ไปŠใฎ้ƒฝๅˆใŒไธŠๆ›ธใใ•ใ‚Œใ‚‹", + "button": "้ƒฝๅˆใ‚’ใ‚คใƒณใƒใƒผใƒˆใ™ใ‚‹" + }, + "outlook_cal": "Outlookใ‚ซใƒฌใƒณใƒ€ใƒผใ‚’ๅŒๆœŸใ™ใ‚‹" } }