Compare commits

..

144 Commits

Author SHA1 Message Date
beb418bd5d chore(release): 3.2.11 2022-03-28 16:43:35 +02:00
2b3d9533b0 Merge pull request #797 from chandiwalaaadhar/fix/#795-No-Scrollbar-on-overflow
Fix-#795 No Scoll Behaviour on Overflow
2022-03-28 16:42:52 +02:00
b061f139bd Fix-#795 No Scoll Behaviour on Overflow 2022-03-28 19:56:54 +05:30
5eed1186ff chore(release): 3.2.10 2022-03-24 11:59:03 +01:00
a87a9b3247 revert changes made to unreleased v3.2.10 2022-03-24 11:58:44 +01:00
7f1c82cd91 feat(i18n): add portuguese (pt) language to i18n locales 2022-03-24 11:57:16 +01:00
048c1ed3ed Merge pull request #764 from AmruthPillai/i18n_main
New Crowdin updates
2022-03-24 11:54:48 +01:00
9a2570d7e7 New translations builder.json (Portuguese) 2022-03-24 11:46:44 +01:00
00b9c2156d chore(release): 3.2.10 2022-03-24 11:33:14 +01:00
ff8b22274f ci(docker): use docker compose yaml anchor values and extension fields 2022-03-24 11:32:57 +01:00
786937f847 ci(gh): add .devcontainer for GitHub Codespaces 2022-03-24 09:16:54 +00:00
c95efee8ec perf(security): generate random salt rounds integer 2022-03-24 08:45:22 +01:00
776d2f79a6 ci(dependabot): upgrade npm dependencies manually, using local chore 2022-03-24 08:38:54 +01:00
25a6b8cce6 chore(deps): update dependencies to latest 2022-03-24 08:37:57 +01:00
f6d7cae17b Merge pull request #789 from AmruthPillai/dependabot/npm_and_yarn/typeorm-0.3.3
Bump typeorm from 0.2.45 to 0.3.3
2022-03-24 08:16:39 +01:00
944a0b5fb1 Bump typeorm from 0.2.45 to 0.3.3
Bumps [typeorm](https://github.com/typeorm/typeorm) from 0.2.45 to 0.3.3.
- [Release notes](https://github.com/typeorm/typeorm/releases)
- [Changelog](https://github.com/typeorm/typeorm/blob/master/CHANGELOG.md)
- [Commits](https://github.com/typeorm/typeorm/compare/0.2.45...0.3.3)

---
updated-dependencies:
- dependency-name: typeorm
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-24 07:15:35 +00:00
7769653224 Merge pull request #782 from AmruthPillai/dependabot/npm_and_yarn/server/nestjs/config-2.0.0
Bump @nestjs/config from 1.2.1 to 2.0.0 in /server
2022-03-24 08:15:25 +01:00
ccdc5b5fae Merge pull request #781 from AmruthPillai/dependabot/npm_and_yarn/docs/types/react-17.0.42
Bump @types/react from 17.0.40 to 17.0.42 in /docs
2022-03-24 08:15:20 +01:00
20158f573e Merge pull request #779 from AmruthPillai/dependabot/npm_and_yarn/client/types/node-17.0.23
Bump @types/node from 17.0.21 to 17.0.23 in /client
2022-03-24 08:15:10 +01:00
87c60729b5 Merge branch 'main' into dependabot/npm_and_yarn/client/types/node-17.0.23 2022-03-24 08:14:59 +01:00
a03a50b7c6 Merge pull request #777 from AmruthPillai/dependabot/npm_and_yarn/server/googleapis-98.0.0
Bump googleapis from 97.0.0 to 98.0.0 in /server
2022-03-24 08:14:35 +01:00
fb85ccf501 Merge pull request #776 from AmruthPillai/dependabot/npm_and_yarn/client/types/react-17.0.42
Bump @types/react from 17.0.40 to 17.0.42 in /client
2022-03-24 08:14:31 +01:00
3179442d8f Merge pull request #773 from AmruthPillai/dependabot/github_actions/docker/build-push-action-2.10.0
Bump docker/build-push-action from 2.9.0 to 2.10.0
2022-03-24 08:14:27 +01:00
33d3c52cd9 Merge pull request #772 from AmruthPillai/dependabot/github_actions/digitalocean/action-doctl-2.1.1
Bump digitalocean/action-doctl from 2.1.0 to 2.1.1
2022-03-24 08:14:22 +01:00
1d33e01a43 Merge pull request #771 from AmruthPillai/dependabot/docker/client/node-17-alpine
Bump node from 16-alpine to 17-alpine in /client
2022-03-24 08:14:17 +01:00
52ff221dd1 Merge pull request #770 from AmruthPillai/dependabot/docker/server/node-17-alpine
Bump node from 16-alpine to 17-alpine in /server
2022-03-24 08:13:57 +01:00
5afe178e23 Update dependabot.yml 2022-03-24 08:13:38 +01:00
9118b76084 Bump @nestjs/config from 1.2.1 to 2.0.0 in /server
Bumps [@nestjs/config](https://github.com/nestjs/config) from 1.2.1 to 2.0.0.
- [Release notes](https://github.com/nestjs/config/releases)
- [Changelog](https://github.com/nestjs/config/blob/master/.release-it.json)
- [Commits](https://github.com/nestjs/config/compare/1.2.1...2.0.0)

---
updated-dependencies:
- dependency-name: "@nestjs/config"
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-24 07:04:09 +00:00
5a62b527b9 Bump @types/react from 17.0.40 to 17.0.42 in /docs
Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 17.0.40 to 17.0.42.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-24 07:04:08 +00:00
2e9e14dc72 Bump @types/node from 17.0.21 to 17.0.23 in /client
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 17.0.21 to 17.0.23.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-24 07:03:51 +00:00
0a0b4893aa Bump googleapis from 97.0.0 to 98.0.0 in /server
Bumps [googleapis](https://github.com/googleapis/google-api-nodejs-client) from 97.0.0 to 98.0.0.
- [Release notes](https://github.com/googleapis/google-api-nodejs-client/releases)
- [Changelog](https://github.com/googleapis/google-api-nodejs-client/blob/main/CHANGELOG.md)
- [Commits](https://github.com/googleapis/google-api-nodejs-client/compare/googleapis-v97.0.0...googleapis-v98.0.0)

---
updated-dependencies:
- dependency-name: googleapis
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-24 07:03:37 +00:00
6277f81e26 Bump @types/react from 17.0.40 to 17.0.42 in /client
Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 17.0.40 to 17.0.42.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-24 07:03:35 +00:00
d550150787 Bump docker/build-push-action from 2.9.0 to 2.10.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 2.9.0 to 2.10.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v2.9.0...v2.10.0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-24 07:02:41 +00:00
7626b2153f Bump digitalocean/action-doctl from 2.1.0 to 2.1.1
Bumps [digitalocean/action-doctl](https://github.com/digitalocean/action-doctl) from 2.1.0 to 2.1.1.
- [Release notes](https://github.com/digitalocean/action-doctl/releases)
- [Commits](https://github.com/digitalocean/action-doctl/compare/v2.1.0...v2.1.1)

---
updated-dependencies:
- dependency-name: digitalocean/action-doctl
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-24 07:02:38 +00:00
6d17d1001d Bump node from 16-alpine to 17-alpine in /client
Bumps node from 16-alpine to 17-alpine.

---
updated-dependencies:
- dependency-name: node
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-24 07:02:34 +00:00
0273738d7a Bump node from 16-alpine to 17-alpine in /server
Bumps node from 16-alpine to 17-alpine.

---
updated-dependencies:
- dependency-name: node
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-24 07:02:34 +00:00
322df25ecc Merge pull request #769 from modem7/dependabot-changes
Dependabot
2022-03-24 08:02:15 +01:00
ab3867d9a8 Merge pull request #768 from modem7/DockerChanges
Docker changes
2022-03-24 08:01:07 +01:00
9bf8ec88f4 Merge pull request #767 from modem7/readme-update
Update README
2022-03-24 07:58:58 +01:00
685f4d37a6 Merge pull request #766 from modem7/image-size
Reduced image sizes
2022-03-24 07:58:19 +01:00
f3b3fe8ac9 Update dependabot.yml
added gradle
2022-03-24 00:47:21 +00:00
d5fa49172a Create dependabot.yml
This will assist with version updates and vulnerability scans.

Dependabot scans will need to be enabled in the repo itself under https://github.com/AmruthPillai/Reactive-Resume/settings/security_analysis

It would also be worthwhile pairing this with Snyk (https://app.snyk.io/) for vulnerability monitoring.
2022-03-23 23:04:47 +00:00
b8303b9977 Update .env.example
Updated env variables to be clearer about which service requires it.
2022-03-23 23:03:29 +00:00
16d06c6356 Update README.md
As the logo is already in the repo, might as well utilise it.

Added Docker build status
2022-03-23 22:54:33 +00:00
79ddd887d9 Docker changes
Added:
Healthchecks
Changed Postgres to Alpine + pinned
Pinned Traefik Version
Made Env Vars easier to see + change/reference for those using their own env file.
2022-03-23 22:52:30 +00:00
c394bc6725 Reduced image sizes
This reduces images size from a total of 9.22mb to 6.11mb.
2022-03-23 22:41:24 +00:00
9e6d7630f4 New translations landing.json (Portuguese) 2022-03-23 23:06:12 +01:00
e2fbdd3c2f New translations modals.json (Portuguese) 2022-03-23 21:57:14 +01:00
849171af8f New translations dashboard.json (Portuguese) 2022-03-23 21:01:36 +01:00
884975dda6 chore(release): 3.2.9 2022-03-21 08:58:19 +01:00
03cbf22c9b feat(i18n): add nl and ru i18n locales to app 2022-03-21 08:57:47 +01:00
a10cee2efa Merge pull request #740 from AmruthPillai/i18n_main
New Crowdin updates
2022-03-21 08:32:28 +01:00
479c94a11d Merge pull request #746 from GovindKrishnan/main
Cleaned Issue Templates Using Comments
2022-03-21 08:32:18 +01:00
c057f31e97 Merge pull request #750 from chandiwalaaadhar/fix/work-experience-website-link-redirects-404
Fixed URL 404 issue in Profile Section URL
2022-03-21 08:32:08 +01:00
d0bc9db6e5 Fixed issue in Profile Section URL 2022-03-21 06:14:22 +05:30
e2dd8dd1d7 Commenting Out Help Lines [FR Template]
To avoid clutter & increase readability of issues, I suggest commenting out the extra help tips so that they don't appear in the actual report.
2022-03-20 05:48:54 +05:30
f2ff12faa6 Commenting Out Help Lines [Bug Template]
To avoid clutter & increase readability of issues, I suggest commenting out the extra help tips so that they don't appear in the actual report.
2022-03-20 05:45:58 +05:30
50cc3d7da8 New translations modals.json (Russian) 2022-03-19 11:32:35 +01:00
60b1f7a816 New translations dashboard.json (Russian) 2022-03-19 11:32:31 +01:00
33d2bf043b New translations landing.json (Russian) 2022-03-19 10:16:47 +01:00
86b20dcae6 New translations builder.json (Russian) 2022-03-19 10:16:42 +01:00
caf4936c9b New translations dashboard.json (Russian) 2022-03-19 10:16:40 +01:00
7e864d2447 New translations common.json (Russian) 2022-03-19 10:16:38 +01:00
ff324688f6 Merge pull request #742 from GovindKrishnan/main
Linking Badges to Releases & License
2022-03-19 09:29:45 +01:00
efaeb1b341 Linking Badges to Releases & License (DOCS)
Linked the Version badge to Releases and License badge to MIT License.
2022-03-19 09:03:23 +05:30
488cb7f8a2 Linking Badges to Releases & License (README)
Linked the Version badge to Releases and License badge to MIT License.
2022-03-19 08:59:56 +05:30
974fa08651 New translations builder.json (Dutch) 2022-03-18 21:46:54 +01:00
8f3312e8a8 New translations landing.json (Dutch) 2022-03-18 20:46:24 +01:00
57d5da0490 New translations modals.json (Dutch) 2022-03-18 20:46:21 +01:00
daeb67319e New translations dashboard.json (Dutch) 2022-03-18 20:46:18 +01:00
213665bd1d New translations common.json (Dutch) 2022-03-18 20:46:16 +01:00
dfc48d6aa9 Merge pull request #738 from martadinata666/docusaurus-port-server
Update docusaurus to prevent crash with client
2022-03-18 19:38:40 +01:00
d71d40453f Update package.json 2022-03-18 23:23:30 +07:00
635afbc892 Merge pull request #737 from GovindKrishnan/main
Removed Self Referring Link in Docs
2022-03-18 16:47:30 +01:00
e90037e363 Removed Self Referring Link in Docs
Instead, linked to the GitHub Repo so that they can check out this repo.

If you got some other important link, feel free to change.
2022-03-18 20:07:57 +05:30
a730359736 chore(release): 3.2.8 2022-03-18 11:18:10 +01:00
80acfe97c7 fix(disable_user_signups): hide create account link under flag 2022-03-18 11:17:30 +01:00
b6267d07ba feat(flags): introduce flags, disable_user_signups
fix #698
2022-03-18 11:12:26 +01:00
910f764823 Merge pull request #735 from AmruthPillai/i18n_main
New Crowdin updates
2022-03-18 10:56:08 +01:00
7a8f302c21 New translations common.json (Malayalam) 2022-03-18 10:55:35 +01:00
fb0c3b55c1 New translations common.json (Hindi) 2022-03-18 10:55:15 +01:00
f9579855a9 New translations common.json (Bengali) 2022-03-18 10:55:14 +01:00
0dd1e2720a New translations common.json (Vietnamese) 2022-03-18 10:55:14 +01:00
331d2d3d26 New translations common.json (Chinese Simplified) 2022-03-18 10:55:13 +01:00
f56554c2d4 New translations common.json (Turkish) 2022-03-18 10:55:11 +01:00
98131b389c New translations common.json (Portuguese) 2022-03-18 10:55:10 +01:00
7cfe6288e1 New translations common.json (Polish) 2022-03-18 10:55:09 +01:00
84041ef2ff New translations common.json (Italian) 2022-03-18 10:55:07 +01:00
9a2af8079e New translations common.json (German) 2022-03-18 10:54:55 +01:00
633162d9af New translations common.json (Danish) 2022-03-18 10:54:54 +01:00
50baa0227d New translations common.json (Kannada) 2022-03-18 10:54:44 +01:00
18da00f2e2 New translations common.json (Tamil) 2022-03-18 10:54:41 +01:00
f4f0b2c4b5 New translations common.json (Arabic) 2022-03-18 10:54:38 +01:00
b7d3007d31 New translations common.json (Spanish) 2022-03-18 10:54:37 +01:00
67384981c1 New translations common.json (French) 2022-03-18 10:54:36 +01:00
4390bccfb9 feat(i18n): add Vietnamese language to i18n locales 2022-03-18 10:52:06 +01:00
8f5632c5ad feat(client/theme): add theme switcher to landing page 2022-03-18 10:20:39 +01:00
1facd2ad11 fix(client/create-rename-slug): fix slug accepting apostrophes and other special characters
fix #706
2022-03-18 09:37:09 +01:00
0e1e2bbe4e chore(release): 3.2.7 2022-03-18 09:29:54 +01:00
3a2e62be4c feat(i18n): add Malayalam (മലയാളം) language to i18n locales 2022-03-18 09:27:04 +01:00
697ceef8f2 Merge branch 'main' of github.com:AmruthPillai/Reactive-Resume 2022-03-18 09:25:13 +01:00
c8e81a456d Merge pull request #731 from AmruthPillai/i18n_main
New Crowdin updates
2022-03-18 09:25:09 +01:00
2b334e5c5a Merge pull request #727 from chandiwalaaadhar/fix/crash-on-pasting-hex-without-#-prefix
Fix-Crash on Entering Primary Color Hex Code without # Prefix
2022-03-18 09:24:54 +01:00
90321e1284 fix(printer/i18n): fix dates not showing up in resume language when printing
fix #729
2022-03-18 09:24:33 +01:00
9bcddb4b5c New translations modals.json (Malayalam) 2022-03-18 02:48:34 +01:00
72fdc05f69 New translations landing.json (Malayalam) 2022-03-18 02:48:33 +01:00
e1d6540500 New translations dashboard.json (Malayalam) 2022-03-18 02:48:32 +01:00
4b17719c69 New translations common.json (Malayalam) 2022-03-18 02:48:31 +01:00
da056307dd New translations builder.json (Malayalam) 2022-03-18 02:48:29 +01:00
e4950728d8 Refactored- Avoiding modifying the prop 2022-03-18 06:18:17 +05:30
dac4e862b8 Fix-Crash on Entering Primary Color Hex Code without # Prefix 2022-03-17 19:42:26 +05:30
5fa45ef5bd chore(release): 3.2.6 2022-03-17 14:05:31 +01:00
9e6dafc8ca fix(i18n): add missing languages to dayjs date wrapper locales
fix #719
2022-03-17 14:05:13 +01:00
a02b85b4bb fix(linkedin): fix skill modal crashing when importing from linkedin
fix #718
2022-03-17 13:58:49 +01:00
b3ff7805cd fix(json-export): add mimeType and charset to JSON export
fix #726
2022-03-17 13:11:18 +01:00
7f0ee40af4 feat(client/auth/google): disable google login/registration if GOOGLE_CLIENT_ID is not in ENV
fix #724
2022-03-17 12:17:41 +01:00
39fa6da5dd feat(i18n): add arabic language to i18n locale 2022-03-17 12:16:25 +01:00
7fd96a4540 Merge pull request #723 from GovindKrishnan/main
Adding Contributors Wall to README
2022-03-17 07:07:03 +01:00
8f5832b2ca Merge branch 'main' into main 2022-03-17 11:34:46 +05:30
58ce09ee06 Contributors Wall to index.mdx 2022-03-17 11:32:40 +05:30
3f5323d5a3 Update bug-report.md 2022-03-17 07:02:09 +01:00
d62482b280 Merge pull request #722 from AmruthPillai/i18n_main
New Crowdin updates
2022-03-17 06:53:14 +01:00
a609ea551a Merge pull request #720 from chandiwalaaadhar/fix/shared-resume-not-scrollable-on-phone-screen
Fix- Resume Shared is not Scrollable on Phone Screen
2022-03-17 06:52:55 +01:00
1f8e3647d3 Styling 2022-03-16 22:20:58 +05:30
76975ddc6c Adding Contributors Wall to README
Using an open-source web tool called contrib.rocks that sync daily with Contributors Club.

Sort of experimental as I came across this today. But yea, it does no harm to production to say the least. 😅
2022-03-16 22:11:33 +05:30
6ed0bb62b4 New translations modals.json (Arabic) 2022-03-16 17:34:58 +01:00
11d15d8dbb New translations builder.json (Arabic) 2022-03-16 17:34:55 +01:00
7cf92ddb81 New translations dashboard.json (Arabic) 2022-03-16 17:34:53 +01:00
d907b36d59 New translations landing.json (Arabic) 2022-03-16 16:22:21 +01:00
307b626189 Fix- Shared Resume not Scrollable on Phone Screen 2022-03-16 18:45:10 +05:30
f573e60079 Merge pull request #717 from chandiwalaaadhar/fix/integrations-empty-date-sections-not-loading
Fix-Json with Empty Date Strings in Sections doesn't get loaded in the Resume
2022-03-16 11:48:34 +01:00
d3c52476f7 Merge pull request #716 from AmruthPillai/i18n_main
New Crowdin updates
2022-03-16 11:47:00 +01:00
4f9d2ea846 New translations modals.json (Vietnamese) 2022-03-16 09:10:28 +01:00
ec617d682e Revert "Fix- Language Modal Slider Component Label Text Overlapping"
This reverts commit 5a60c99df9.
2022-03-16 13:39:27 +05:30
72d3d46e88 Fix- Integration LinkedIn Empty Date 2022-03-16 13:36:21 +05:30
110797da9d Fix - Integration JSON Resume Empty Date 2022-03-16 13:32:59 +05:30
ab90a2e1dd Fix- Reactive Resume v2 Integration Empty Date 2022-03-16 13:29:37 +05:30
1a3c950847 New translations dashboard.json (Vietnamese) 2022-03-16 08:11:13 +01:00
7fcc792255 New translations landing.json (Vietnamese) 2022-03-16 08:11:10 +01:00
97a13f9f41 New translations builder.json (Vietnamese) 2022-03-16 08:11:08 +01:00
29f1afac9a New translations common.json (Vietnamese) 2022-03-16 08:11:03 +01:00
c5d0abdc79 Merge pull request #714 from chandiwalaaadhar/fix/publication-modal-label-text
Fix- Publication Modal Label text
2022-03-16 07:24:31 +01:00
5a60c99df9 Fix- Language Modal Slider Component Label Text Overlapping 2022-03-16 11:25:48 +05:30
c46b8fc162 Fix- Publication Modal Label text 2022-03-16 11:17:33 +05:30
148 changed files with 4252 additions and 644 deletions

5
.devcontainer/Dockerfile Normal file
View File

@ -0,0 +1,5 @@
ARG VARIANT="16-bullseye"
FROM mcr.microsoft.com/vscode/devcontainers/javascript-node:0-${VARIANT}
RUN curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm

View File

@ -0,0 +1,27 @@
{
"name": "Node.js",
"build": {
"dockerfile": "Dockerfile",
"args": { "VARIANT": "16-bullseye" }
},
// Set *default* container specific settings.json values on container create.
"settings": {},
// Add the IDs of extensions you want installed when the container is created.
"extensions": ["dbaeumer.vscode-eslint", "esbenp.prettier-vscode", "lokalise.i18n-ally"],
// Use 'forwardPorts' to make a list of ports inside the container available locally.
"forwardPorts": [80, 5432],
// Use 'postCreateCommand' to run commands after the container is created.
"postCreateCommand": "pnpm install",
// Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
"remoteUser": "node",
"features": {
"docker-from-docker": "latest"
}
}

View File

@ -1,30 +1,26 @@
# App
# Shared
TZ=UTC
SECRET_KEY=change-me
PUBLIC_URL=http://localhost
PUBLIC_SERVER_URL=http://localhost/api
PUBLIC_GOOGLE_CLIENT_ID=
# URLs
PUBLIC_URL=http://<SERVER-IP>
PUBLIC_SERVER_URL=http://<SERVER-IP>/api
# Database
POSTGRES_HOST=localhost
# Server
SECRET_KEY=
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_USERNAME=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DATABASE=postgres
POSTGRES_SSL_CERT=
# Auth
JWT_SECRET=change-me
JWT_SECRET=
JWT_EXPIRY_TIME=604800
# Google
PUBLIC_GOOGLE_CLIENT_ID=change-me
GOOGLE_CLIENT_SECRET=change-me
GOOGLE_API_KEY=change-me
# SendGrid (Optional)
PUBLIC_GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GOOGLE_API_KEY=
SENDGRID_API_KEY=
SENDGRID_FORGOT_PASSWORD_TEMPLATE_ID=
SENDGRID_FROM_NAME=
SENDGRID_FROM_EMAIL=
SENDGRID_FROM_EMAIL=
# Flags
PUBLIC_FLAG_DISABLE_SIGNUPS=false

View File

@ -8,31 +8,29 @@ assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
<!-- A clear and concise description of what the bug is. -->
**Product Flavor**
- [ ] Managed (https://rxresu.me)
- [ ] Self Hosted
**To Reproduce**
Steps to reproduce the behavior:
<!-- 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.
<!-- A clear and concise description of what you expected to happen. -->
**Screenshots**
If applicable, add screenshots to help explain your problem.
<!-- 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]
- OS: <!--[e.g. iOS]-->
- Browser <!--[e.g. chrome, safari]-->
- Version <!--[e.g. 22]-->
**Additional context**
Add any other context about the problem here.
<!-- Add any other context about the problem here. -->

View File

@ -8,13 +8,13 @@ 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 [...]
<!-- 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.
<!-- 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.
<!-- 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.
<!-- Add any other context or screenshots about the feature request here. -->

22
.github/dependabot.yml vendored Normal file
View File

@ -0,0 +1,22 @@
version: 2
updates:
- package-ecosystem: 'docker'
directory: '/server'
schedule:
interval: 'weekly'
- package-ecosystem: 'docker'
directory: '/client'
schedule:
interval: 'weekly'
- package-ecosystem: 'gradle'
directory: '/app'
schedule:
interval: 'weekly'
- package-ecosystem: 'github-actions'
directory: '/'
schedule:
interval: 'weekly'

View File

@ -13,7 +13,7 @@ jobs:
steps:
- name: Install DigitalOcean CLI
uses: digitalocean/action-doctl@v2.1.0
uses: digitalocean/action-doctl@v2.1.1
with:
token: ${{ secrets.DIGITALOCEAN_TOKEN }}

View File

@ -24,7 +24,7 @@ jobs:
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and Push Client Image
uses: docker/build-push-action@v2.9.0
uses: docker/build-push-action@v2.10.0
with:
context: .
push: true
@ -52,7 +52,7 @@ jobs:
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and Push Server Image
uses: docker/build-push-action@v2.9.0
uses: docker/build-push-action@v2.10.0
with:
context: .
push: true
@ -81,7 +81,7 @@ jobs:
password: ${{ secrets.GH_TOKEN }}
- name: Build and Push Client Image
uses: docker/build-push-action@v2.9.0
uses: docker/build-push-action@v2.10.0
with:
context: .
push: true
@ -110,7 +110,7 @@ jobs:
password: ${{ secrets.GH_TOKEN }}
- name: Build and Push Server Image
uses: docker/build-push-action@v2.9.0
uses: docker/build-push-action@v2.10.0
with:
context: .
push: true

View File

@ -2,6 +2,64 @@
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
### [3.2.11](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.2.10...v3.2.11) (2022-03-28)
### [3.2.10](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.2.9...v3.2.10) (2022-03-24)
### Features
* **i18n:** add portuguese (pt) language to i18n locales ([7f1c82c](https://github.com/AmruthPillai/Reactive-Resume/commit/7f1c82cd9185ebb44486a16132eb44d5c2fb747a))
### [3.2.9](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.2.8...v3.2.9) (2022-03-21)
### Features
* **i18n:** add nl and ru i18n locales to app ([03cbf22](https://github.com/AmruthPillai/Reactive-Resume/commit/03cbf22c9bee96cac8f228830b67b44529b7ecee))
### [3.2.8](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.2.7...v3.2.8) (2022-03-18)
### Features
* **client/theme:** add theme switcher to landing page ([8f5632c](https://github.com/AmruthPillai/Reactive-Resume/commit/8f5632c5ad0bc8a4b3028c2806365717fedd78c9))
* **flags:** introduce flags, disable_user_signups ([b6267d0](https://github.com/AmruthPillai/Reactive-Resume/commit/b6267d07ba2dcaed0da3946d136a0a9a01c441d5)), closes [#698](https://github.com/AmruthPillai/Reactive-Resume/issues/698)
* **i18n:** add Vietnamese language to i18n locales ([4390bcc](https://github.com/AmruthPillai/Reactive-Resume/commit/4390bccfb9764f2d2730ec3a124b7befb6792e9a))
### Bug Fixes
* **client/create-rename-slug:** fix slug accepting apostrophes and other special characters ([1facd2a](https://github.com/AmruthPillai/Reactive-Resume/commit/1facd2ad111cd9d990c808b3956d3915e8711acd)), closes [#706](https://github.com/AmruthPillai/Reactive-Resume/issues/706)
* **disable_user_signups:** hide create account link under flag ([80acfe9](https://github.com/AmruthPillai/Reactive-Resume/commit/80acfe97c74bfa05b719285b19144144f3f7c5ba))
### [3.2.7](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.2.6...v3.2.7) (2022-03-18)
### Features
* **i18n:** add Malayalam (മലയാളം) language to i18n locales ([3a2e62b](https://github.com/AmruthPillai/Reactive-Resume/commit/3a2e62be4c9acc14f17277c060cc9ea2c417a478))
### Bug Fixes
* **printer/i18n:** fix dates not showing up in resume language when printing ([90321e1](https://github.com/AmruthPillai/Reactive-Resume/commit/90321e1284409ab9442883c04a9b4c591d36f95d)), closes [#729](https://github.com/AmruthPillai/Reactive-Resume/issues/729)
### [3.2.6](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.2.5...v3.2.6) (2022-03-17)
### Features
* **client/auth/google:** disable google login/registration if GOOGLE_CLIENT_ID is not in ENV ([7f0ee40](https://github.com/AmruthPillai/Reactive-Resume/commit/7f0ee40af4acc7eb41514406ecee3218ace9e891)), closes [#724](https://github.com/AmruthPillai/Reactive-Resume/issues/724)
* **i18n:** add arabic language to i18n locale ([39fa6da](https://github.com/AmruthPillai/Reactive-Resume/commit/39fa6da5dd77ce2e12e81530fa18c2eac722c1f2))
### Bug Fixes
* **i18n:** add missing languages to dayjs date wrapper locales ([9e6dafc](https://github.com/AmruthPillai/Reactive-Resume/commit/9e6dafc8cada5c01559894905996b81004bedaec)), closes [#719](https://github.com/AmruthPillai/Reactive-Resume/issues/719)
* **json-export:** add mimeType and charset to JSON export ([b3ff780](https://github.com/AmruthPillai/Reactive-Resume/commit/b3ff7805cd856a52900d9acef0554867d8ce0b01)), closes [#726](https://github.com/AmruthPillai/Reactive-Resume/issues/726)
* **linkedin:** fix skill modal crashing when importing from linkedin ([a02b85b](https://github.com/AmruthPillai/Reactive-Resume/commit/a02b85b4bb1c4a1499aacddeac7bc59bcb1f7adb)), closes [#718](https://github.com/AmruthPillai/Reactive-Resume/issues/718)
### [3.2.5](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.2.4...v3.2.5) (2022-03-16)

View File

@ -1,11 +1,12 @@
<img src="https://i.imgur.com/pc8Ingg.png" alt="Reactive Resume" width="256px" height="256px" />
<img src="https://github.com/AmruthPillai/Reactive-Resume/blob/main/docs/static/logo.svg" alt="Reactive Resume" width="256px" height="256px" />
# Reactive Resume
![Project Version](https://img.shields.io/github/package-json/v/AmruthPillai/Reactive-Resume?style=flat-square)
![Project License](https://img.shields.io/github/license/AmruthPillai/Reactive-Resume?style=flat-square)
[![Project Version](https://img.shields.io/github/package-json/v/AmruthPillai/Reactive-Resume?style=flat-square)](https://github.com/AmruthPillai/Reactive-Resume/releases)
[![Project License](https://img.shields.io/github/license/AmruthPillai/Reactive-Resume?style=flat-square)](https://github.com/AmruthPillai/Reactive-Resume/blob/main/LICENSE)
[![Crowdin](https://badges.crowdin.net/reactive-resume/localized.svg)](https://translate.rxresu.me)
[![Docker Pulls](https://img.shields.io/docker/pulls/amruthpillai/reactive-resume?style=flat-square)](https://hub.docker.com/r/amruthpillai/reactive-resume)
![GitHub Workflow Status](https://img.shields.io/github/workflow/status/AmruthPillai/Reactive-Resume/Build%20and%20Push%20Docker%20Image?label=docker%20build&style=flat-square)
[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FAmruthPillai%2FReactive-Resume.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2FAmruthPillai%2FReactive-Resume?ref=badge_shield)
## [Go to App](https://rxresu.me) | [Docs](https://docs.rxresu.me)
@ -36,19 +37,25 @@ You have complete control over what goes into your resume, how it looks, what co
## Languages
- Arabic (اَلْعَرَبِيَّةُ)
- Bengali (বাংলা)
- Chinese (中文)
- Danish (Dansk)
- Dutch (Nederlands)
- English
- French (Français)
- German (Deutsch)
- Hindi (हिन्दी)
- Italian (Italiano)
- Kannada (ಕನ್ನಡ)
- Malayalam (മലയാളം)
- Polish (Polski)
- Portuguese (Português)
- Russian (русский)
- Spanish (Español)
- Tamil (தமிழ்)
- Turkish (Türkçe)
- Vietnamese (Tiếng Việt)
Help by [translating Reactive Resume](https://translate.rxresu.me) to your language!
@ -96,6 +103,14 @@ Reactive Resume would be nothing without the folks who supported me and kept the
<img src="https://opensource.nyc3.cdn.digitaloceanspaces.com/attribution/assets/PoweredByDO/DO_Powered_by_Badge_blue.svg" width="200px" />
</a>
## Contributors Wall
<a href="https://github.com/AmruthPillai/Reactive-Resume/graphs/contributors">
<img src="https://contrib.rocks/image?repo=AmruthPillai/Reactive-Resume" />
</a>
_Note: It may take up to 24h for the [contrib.rocks](https://contrib.rocks/image?repo=AmruthPillai/Reactive-Resume) plugin to update because it's refreshed once a day._
## License
Reactive Resume is packaged and distributed using the [MIT License](https://choosealicense.com/licenses/mit/) which allows for commercial use, distribution, modification and private use provided that all copies of the software contain the same license and copyright.

View File

@ -1,4 +1,4 @@
FROM node:16-alpine as dependencies
FROM node:17-alpine as dependencies
RUN apk add --no-cache curl g++ make python3 \
&& curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm
@ -11,7 +11,7 @@ COPY ./client/package.json ./client/package.json
RUN pnpm install --frozen-lockfile
FROM node:16-alpine as builder
FROM node:17-alpine as builder
RUN apk add --no-cache curl g++ make python3 \
&& curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm
@ -27,7 +27,7 @@ COPY --from=dependencies /app/client/node_modules ./client/node_modules
RUN pnpm run build:schema
RUN pnpm run build:client
FROM node:16-alpine as production
FROM node:17-alpine as production
WORKDIR /app
@ -49,4 +49,7 @@ EXPOSE 3000
ENV PORT 3000
HEALTHCHECK --interval=30s --timeout=20s --retries=3 --start-period=15s \
CMD curl -fSs 127.0.0.1:3000 || exit 1
CMD [ "pnpm", "run", "start:client" ]

View File

@ -34,9 +34,10 @@ const Export = () => {
const redactedResume = pick(resume, ['basics', 'sections', 'metadata', 'public']);
const jsonString = JSON.stringify(redactedResume, null, 4);
const jsonBlob = new Blob([jsonString], { type: 'application/json;charset=utf-8' });
const filename = `RxResume_JSONExport_${nanoid()}.json`;
download(jsonString, filename, 'application/json');
download(jsonBlob, filename);
};
const handleExportPDF = async () => {

View File

@ -19,7 +19,7 @@ const Theme = () => {
const { background, text, primary } = useAppSelector<ThemeType>((state) => get(state.resume, 'metadata.theme'));
const handleChange = (property: string, color: string) => {
dispatch(setResumeState({ path: `metadata.theme.${property}`, value: color }));
dispatch(setResumeState({ path: `metadata.theme.${property}`, value: color[0] !== '#' ? `#${color}` : color }));
};
return (

View File

@ -8,14 +8,14 @@ import styles from './ArrayInput.module.scss';
type Props = {
label: string;
value: string[];
value?: string[];
className?: string;
onChange: (event: any) => void;
errors?: FieldError | FieldError[];
};
const ArrayInput: React.FC<Props> = ({ value, label, onChange, errors, className }) => {
const [items, setItems] = useState<string[]>(value);
const [items, setItems] = useState<string[]>(value || []);
const onAdd = () => setItems([...items, '']);

View File

@ -1,10 +1,16 @@
.content {
@apply rounded p-6 text-sm shadow lg:w-1/2 xl:w-2/5;
@apply rounded px-6 text-sm shadow lg:w-1/2 xl:w-2/5;
@apply absolute inset-4 sm:inset-x-4 sm:inset-y-auto lg:inset-auto;
@apply overflow-scroll bg-neutral-50 dark:bg-neutral-900 lg:overflow-auto;
@apply max-h-[90vh] min-h-fit;
&::-webkit-scrollbar {
display: none;
}
}
.header {
@apply sticky top-0 left-0 right-0 z-50 pt-6 bg-neutral-50 dark:bg-neutral-900;
@apply flex items-center justify-between;
@apply w-full border-b pb-5 dark:border-white/10;
@ -27,6 +33,7 @@
}
.footer {
@apply sticky bottom-0 left-0 right-0 z-50 pb-6 bg-neutral-50 dark:bg-neutral-900;
@apply flex items-center justify-end gap-x-4;
@apply w-full border-t pt-5 dark:border-white/10;
}

View File

@ -1,70 +1,51 @@
import { Language } from '@mui/icons-material';
import { IconButton, Popover } from '@mui/material';
import { IconButton, Menu, MenuItem } from '@mui/material';
import { useRouter } from 'next/router';
import { useTranslation } from 'next-i18next';
import { MouseEvent, useState } from 'react';
import { languages } from '@/config/languages';
import { useAppDispatch } from '@/store/hooks';
import { setResumeState } from '@/store/resume/resumeSlice';
import styles from './LanguageSwitcher.module.scss';
import { TRANSLATE_URL } from '@/constants/index';
const LanguageSwitcher = () => {
const router = useRouter();
const { t } = useTranslation();
const dispatch = useAppDispatch();
const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null);
const handleClick = (event: MouseEvent<HTMLButtonElement>) => setAnchorEl(event.currentTarget);
const handleClose = () => setAnchorEl(null);
const handleChangeLanguage = (locale: string) => {
const handleChange = (locale: string) => {
const { pathname, asPath, query } = router;
handleClose();
document.cookie = `NEXT_LOCALE=${locale}; path=/; expires=2147483647`;
dispatch(setResumeState({ path: 'metadata.locale', value: locale }));
router.push({ pathname, query }, asPath, { locale });
};
const handleAddLanguage = () => window.open(TRANSLATE_URL, '_blank');
return (
<div>
<IconButton onClick={handleClick}>
<Language />
</IconButton>
<Popover
anchorEl={anchorEl}
open={Boolean(anchorEl)}
onClose={handleClose}
anchorOrigin={{
vertical: 'top',
horizontal: 'right',
}}
transformOrigin={{
vertical: 'bottom',
horizontal: 'right',
}}
>
<div className={styles.popover}>
<div className={styles.container}>
{languages.map(({ code, name, localName }) => (
<p key={code} className={styles.language} onClick={() => handleChangeLanguage(code)}>
{name} {localName && `(${localName})`}
</p>
))}
<Menu anchorEl={anchorEl} open={Boolean(anchorEl)} onClose={handleClose}>
{languages.map(({ code, name, localName }) => (
<MenuItem key={code} onClick={() => handleChange(code)}>
{name} {localName && `(${localName})`}
</MenuItem>
))}
<a href="https://translate.rxresu.me" target="_blank" rel="noreferrer" className={styles.language}>
{t('common.footer.language.missing')}
</a>
</div>
</div>
</Popover>
<MenuItem>
<span className="font-bold" onClick={handleAddLanguage}>
Add your language
</span>
</MenuItem>
</Menu>
</div>
);
};

View File

@ -5,6 +5,7 @@ export type Language = {
};
export const languages: Language[] = [
{ code: 'ar', name: 'Arabic', localName: 'اَلْعَرَبِيَّةُ' },
{ code: 'bn', name: 'Bengali', localName: 'বাংলা' },
{ code: 'da', name: 'Danish', localName: 'Dansk' },
{ code: 'de', name: 'German', localName: 'Deutsch' },
@ -14,9 +15,14 @@ export const languages: Language[] = [
{ code: 'hi', name: 'Hindi', localName: 'हिन्दी' },
{ code: 'it', name: 'Italian', localName: 'Italiano' },
{ code: 'kn', name: 'Kannada', localName: 'ಕನ್ನಡ' },
{ code: 'ml', name: 'Malayalam', localName: 'മലയാളം' },
{ code: 'nl', name: 'Dutch', localName: 'Nederlands' },
{ code: 'pl', name: 'Polish', localName: 'Polski' },
{ code: 'pt', name: 'Portuguese', localName: 'Português' },
{ code: 'ru', name: 'Russian', localName: 'русский' },
{ code: 'ta', name: 'Tamil', localName: 'தமிழ்' },
{ code: 'tr', name: 'Turkish', localName: 'Türkçe' },
{ code: 'vi', name: 'Vietnamese', localName: 'Tiếng Việt' },
{ code: 'zh', name: 'Chinese', localName: '中文' },
].sort((a, b) => a.name.localeCompare(b.name));

View File

@ -0,0 +1,3 @@
import env from '@beam-australia/react-env';
export const FLAG_DISABLE_SIGNUPS = env('FLAG_DISABLE_SIGNUPS') === 'true';

View File

@ -10,6 +10,8 @@ export const FILENAME_TIMESTAMP = 'DDMMYYYYHHmmss';
// Links
export const DONATION_URL = 'https://paypal.me/RajaRajanA';
export const TRANSLATE_URL = 'https://translate.rxresu.me/';
export const DIGITALOCEAN_URL = 'https://pillai.xyz/digitalocean';
export const GITHUB_URL = 'https://github.com/AmruthPillai/Reactive-Resume';
export const PRODUCT_HUNT_URL = 'https://www.producthunt.com/posts/reactive-resume-v3';
export const GITHUB_ISSUES_URL = 'https://github.com/AmruthPillai/Reactive-Resume/issues/new/choose';

View File

@ -3,6 +3,7 @@ import { joiResolver } from '@hookform/resolvers/joi';
import { Google, Login, Visibility, VisibilityOff } from '@mui/icons-material';
import { Button, IconButton, InputAdornment, TextField } from '@mui/material';
import Joi from 'joi';
import { isEmpty } from 'lodash';
import { Trans, useTranslation } from 'next-i18next';
import { useMemo, useState } from 'react';
import { GoogleLoginResponse, GoogleLoginResponseOffline, useGoogleLogin } from 'react-google-login';
@ -11,6 +12,7 @@ import toast from 'react-hot-toast';
import { useIsMutating, useMutation } from 'react-query';
import BaseModal from '@/components/shared/BaseModal';
import { FLAG_DISABLE_SIGNUPS } from '@/constants/flags';
import { login, LoginParams, loginWithGoogle, LoginWithGoogleParams } from '@/services/auth';
import { ServerError } from '@/services/axios';
import { useAppDispatch, useAppSelector } from '@/store/hooks';
@ -115,15 +117,17 @@ const LoginModal: React.FC = () => {
handleClose={handleClose}
footerChildren={
<div className="flex gap-4">
<Button
type="submit"
variant="outlined"
disabled={isLoading}
startIcon={<Google />}
onClick={handleLoginWithGoogle}
>
{t('modals.auth.login.actions.google')}
</Button>
{!isEmpty(env('GOOGLE_CLIENT_ID')) && (
<Button
type="submit"
variant="outlined"
disabled={isLoading}
startIcon={<Google />}
onClick={handleLoginWithGoogle}
>
{t('modals.auth.login.actions.google')}
</Button>
)}
<Button type="submit" onClick={handleSubmit(onSubmit)} disabled={isLoading}>
{t('modals.auth.login.actions.login')}
@ -164,11 +168,13 @@ const LoginModal: React.FC = () => {
/>
</form>
<p className="text-xs">
<Trans t={t} i18nKey="modals.auth.login.register-text">
If you don&apos;t have one, you can <a onClick={handleCreateAccount}>create an account</a> here.
</Trans>
</p>
{!FLAG_DISABLE_SIGNUPS && (
<p className="text-xs">
<Trans t={t} i18nKey="modals.auth.login.register-text">
If you don&apos;t have one, you can <a onClick={handleCreateAccount}>create an account</a> here.
</Trans>
</p>
)}
<p className="text-xs">
<Trans t={t} i18nKey="modals.auth.login.recover-text">

View File

@ -3,6 +3,7 @@ import { joiResolver } from '@hookform/resolvers/joi';
import { Google, HowToReg } from '@mui/icons-material';
import { Button, TextField } from '@mui/material';
import Joi from 'joi';
import { isEmpty } from 'lodash';
import { Trans, useTranslation } from 'next-i18next';
import { GoogleLoginResponse, GoogleLoginResponseOffline, useGoogleLogin } from 'react-google-login';
import { Controller, useForm } from 'react-hook-form';
@ -97,21 +98,23 @@ const RegisterModal: React.FC = () => {
heading={t('modals.auth.register.heading')}
handleClose={handleClose}
footerChildren={
<>
<Button
type="submit"
variant="outlined"
disabled={isLoading}
startIcon={<Google />}
onClick={handleLoginWithGoogle}
>
{t('modals.auth.register.actions.google')}
</Button>
<div className="flex gap-4">
{!isEmpty(env('GOOGLE_CLIENT_ID')) && (
<Button
type="submit"
variant="outlined"
disabled={isLoading}
startIcon={<Google />}
onClick={handleLoginWithGoogle}
>
{t('modals.auth.register.actions.google')}
</Button>
)}
<Button type="submit" onClick={handleSubmit(onSubmit)} disabled={isLoading}>
{t('modals.auth.register.actions.register')}
</Button>
</>
</div>
}
>
<p>{t('modals.auth.register.body')}</p>

View File

@ -115,7 +115,7 @@ const PublicationModal: React.FC = () => {
render={({ field, fieldState }) => (
<TextField
required
label="{t('builder.leftSidebar.sections.publications.form.publisher.label')}"
label={t('builder.leftSidebar.sections.publications.form.publisher.label')}
error={!!fieldState.error}
helperText={fieldState.error?.message}
{...field}

View File

@ -159,7 +159,7 @@ const SkillModal: React.FC = () => {
render={({ field, fieldState }) => (
<ArrayInput
label={t('builder.common.form.keywords.label')}
value={field.value as string[]}
value={field.value}
onChange={field.onChange}
errors={fieldState.error}
className="col-span-2"

View File

@ -58,7 +58,7 @@ const CreateResumeModal: React.FC = () => {
const slug = name
? name
.toLowerCase()
.replace(/[`~!@#$%^&*()_|+=?;:'",.<>{}[]\\\/]/gi, '')
.replace(/[^\w\s]/gi, '')
.replace(/[ ]/gi, '-')
: '';

View File

@ -56,7 +56,7 @@ const RenameResumeModal: React.FC = () => {
const slug = name
? name
.toLowerCase()
.replace(/[`~!@#$%^&*()_|+=?;:'",.<>{}[]\\\/]/gi, '')
.replace(/[^\w\s]/gi, '')
.replace(/[ ]/gi, '-')
: '';

View File

@ -3,7 +3,27 @@ const path = require('path');
const i18nConfig = {
i18n: {
defaultLocale: 'en',
locales: ['bn', 'da', 'de', 'en', 'es', 'fr', 'hi', 'it', 'kn', 'pl', 'ta', 'tr', 'zh'],
locales: [
'ar',
'bn',
'da',
'de',
'en',
'es',
'fr',
'hi',
'it',
'kn',
'ml',
'nl',
'pl',
'pt',
'ru',
'ta',
'tr',
'vi',
'zh',
],
},
nsSeparator: '.',
localePath: path.resolve('./public/locales'),

View File

@ -15,8 +15,8 @@
"@hookform/resolvers": "2.8.8",
"@monaco-editor/react": "^4.3.1",
"@mui/icons-material": "^5.5.1",
"@mui/lab": "^5.0.0-alpha.73",
"@mui/material": "^5.5.1",
"@mui/lab": "^5.0.0-alpha.74",
"@mui/material": "^5.5.2",
"@reduxjs/toolkit": "^1.8.0",
"axios": "^0.26.1",
"clsx": "^1.1.1",
@ -36,7 +36,7 @@
"react-dnd-html5-backend": "^15.1.2",
"react-dom": ">=17",
"react-google-login": "^5.2.2",
"react-hook-form": "^7.28.0",
"react-hook-form": "^7.28.1",
"react-hot-toast": "2.2.0",
"react-hotkeys-hook": "^3.4.4",
"react-icons": "^4.3.1",
@ -53,23 +53,23 @@
"webfontloader": "^1.6.28"
},
"devDependencies": {
"@babel/core": "^7.17.7",
"@babel/core": "^7.17.8",
"@reactive-resume/schema": "workspace:*",
"@tailwindcss/typography": "^0.5.2",
"@types/downloadjs": "^1.4.3",
"@types/lodash": "^4.14.180",
"@types/node": "17.0.21",
"@types/react": "17.0.40",
"@types/node": "17.0.23",
"@types/react": "17.0.42",
"@types/react-beautiful-dnd": "^13.1.2",
"@types/react-redux": "^7.1.23",
"@types/tailwindcss": "^3.0.9",
"@types/uuid": "^8.3.4",
"@types/webfontloader": "^1.6.34",
"autoprefixer": "^10.4.3",
"autoprefixer": "^10.4.4",
"eslint": "^8.11.0",
"eslint-config-next": "12.1.0",
"next-sitemap": "^2.5.10",
"postcss": "^8.4.11",
"next-sitemap": "^2.5.13",
"postcss": "^8.4.12",
"prettier": "^2.6.0",
"sass": "^1.49.9",
"tailwindcss": "^3.0.23",

View File

@ -3,6 +3,7 @@ import clsx from 'clsx';
import get from 'lodash/get';
import isEmpty from 'lodash/isEmpty';
import { GetServerSideProps, NextPage } from 'next';
import { useRouter } from 'next/router';
import { serverSideTranslations } from 'next-i18next/serverSideTranslations';
import { useEffect } from 'react';
@ -20,6 +21,7 @@ type QueryParams = {
type Props = {
resume?: Resume;
locale: string;
redirect?: any;
};
@ -35,7 +37,13 @@ export const getServerSideProps: GetServerSideProps<Props | Promise<Props>, Quer
const resume = await fetchResumeByIdentifier({ username, slug, options: { secretKey } });
const displayLocale = resume.metadata.locale || locale || 'en';
return { props: { resume, ...(await serverSideTranslations(displayLocale, ['common'])) } };
return {
props: {
resume,
locale: displayLocale,
...(await serverSideTranslations(displayLocale, ['common'])),
},
};
} catch (error) {
return {
redirect: {
@ -46,7 +54,9 @@ export const getServerSideProps: GetServerSideProps<Props | Promise<Props>, Quer
}
};
const Printer: NextPage<Props> = ({ resume: initialData }) => {
const Printer: NextPage<Props> = ({ resume: initialData, locale }) => {
const router = useRouter();
const dispatch = useAppDispatch();
const resume = useAppSelector((state) => state.resume);
@ -55,6 +65,12 @@ const Printer: NextPage<Props> = ({ resume: initialData }) => {
if (initialData) dispatch(setResume(initialData));
}, [dispatch, initialData]);
useEffect(() => {
const { pathname, asPath, query } = router;
router.push({ pathname, query }, asPath, { locale });
}, [router, locale]);
if (!resume || isEmpty(resume)) return null;
const layout: string[][][] = get(resume, 'metadata.layout', []);

View File

@ -4,6 +4,7 @@ import NextDocument, { DocumentContext, Head, Html, Main, NextScript } from 'nex
const Document: NextPage = () => (
<Html>
<Head />
<body>
<Main />
<NextScript />

View File

@ -1,6 +1,6 @@
import { Link as LinkIcon } from '@mui/icons-material';
import { DarkMode, LightMode, Link as LinkIcon } from '@mui/icons-material';
import { Masonry } from '@mui/lab';
import { Button } from '@mui/material';
import { Button, IconButton } from '@mui/material';
import type { GetStaticProps, NextPage } from 'next';
import Image from 'next/image';
import Link from 'next/link';
@ -13,13 +13,15 @@ import LanguageSwitcher from '@/components/shared/LanguageSwitcher';
import Logo from '@/components/shared/Logo';
import NoSSR from '@/components/shared/NoSSR';
import { screenshots } from '@/config/screenshots';
import { FLAG_DISABLE_SIGNUPS } from '@/constants/flags';
import testimonials from '@/data/testimonials';
import { logout } from '@/store/auth/authSlice';
import { setTheme } from '@/store/build/buildSlice';
import { useAppDispatch, useAppSelector } from '@/store/hooks';
import { setModalState } from '@/store/modal/modalSlice';
import styles from '@/styles/pages/Home.module.scss';
import { DONATION_URL, GITHUB_URL } from '../constants';
import { DIGITALOCEAN_URL, DONATION_URL, GITHUB_URL } from '../constants';
export const getStaticProps: GetStaticProps = async ({ locale = 'en' }) => {
return {
@ -34,12 +36,15 @@ const Home: NextPage = () => {
const dispatch = useAppDispatch();
const theme = useAppSelector((state) => state.build.theme);
const isLoggedIn = useAppSelector((state) => state.auth.isLoggedIn);
const handleLogin = () => dispatch(setModalState({ modal: 'auth.login', state: { open: true } }));
const handleRegister = () => dispatch(setModalState({ modal: 'auth.register', state: { open: true } }));
const handleToggle = () => dispatch(setTheme({ theme: theme === 'light' ? 'dark' : 'light' }));
const handleLogout = () => dispatch(logout());
return (
@ -70,7 +75,7 @@ const Home: NextPage = () => {
<>
<Button onClick={handleLogin}>{t('landing.actions.login')}</Button>
<Button variant="outlined" onClick={handleRegister}>
<Button variant="outlined" onClick={handleRegister} disabled={FLAG_DISABLE_SIGNUPS}>
{t('landing.actions.register')}
</Button>
</>
@ -175,7 +180,7 @@ const Home: NextPage = () => {
</section>
<section className={styles.section}>
<a href="https://pillai.xyz/digitalocean" target="_blank" rel="noreferrer">
<a href={DIGITALOCEAN_URL} target="_blank" rel="noreferrer">
<Image src="/images/sponsors/digitalocean.svg" alt="Powered By DigitalOcean" width={200} height={40} />
</a>
</section>
@ -187,7 +192,11 @@ const Home: NextPage = () => {
<div>v{process.env.appVersion}</div>
</div>
<LanguageSwitcher />
<div className={styles.actions}>
<IconButton onClick={handleToggle}>{theme === 'dark' ? <DarkMode /> : <LightMode />}</IconButton>
<LanguageSwitcher />
</div>
</footer>
</main>
);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 KiB

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 265 KiB

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 215 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 174 KiB

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 216 KiB

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 181 KiB

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 274 KiB

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 139 KiB

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 148 KiB

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 224 KiB

After

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 314 KiB

After

Width:  |  Height:  |  Size: 189 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 111 KiB

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 254 KiB

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 168 KiB

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 319 KiB

After

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 329 KiB

After

Width:  |  Height:  |  Size: 202 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 217 KiB

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 323 KiB

After

Width:  |  Height:  |  Size: 201 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 267 KiB

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 253 KiB

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 255 KiB

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 272 KiB

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 KiB

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 KiB

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 279 KiB

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 165 KiB

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 382 KiB

After

Width:  |  Height:  |  Size: 240 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 205 KiB

After

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 163 KiB

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 311 KiB

After

Width:  |  Height:  |  Size: 231 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 148 KiB

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 144 KiB

After

Width:  |  Height:  |  Size: 103 KiB

View File

@ -0,0 +1,358 @@
{
"common": {
"actions": {
"add": "إضافة {{فقرة}} جديدة",
"delete": "حذة {{الفقرة}}",
"edit": "تحرير {{الفقرة}}"
},
"columns": {
"heading": "الأعمدة",
"tooltip": "تغيير عدد الأعمدة"
},
"form": {
"date": {
"label": "التاريخ"
},
"description": {
"label": "التفاصيل"
},
"email": {
"label": "البريد الإلكتروني"
},
"end-date": {
"help-text": "اترك هذا الحقل فارغًا ، إذا كان لا يزال موجودًا",
"label": "تاريخ الانتهاء"
},
"keywords": {
"label": "الكلمات الرئيسية"
},
"level": {
"label": "مستوى"
},
"levelNum": {
"label": "المستوى (Number)"
},
"name": {
"label": "الاسم"
},
"phone": {
"label": "رقم الهاتف"
},
"position": {
"label": "المنصب"
},
"start-date": {
"label": "تاريخ البداية"
},
"subtitle": {
"label": "العنوان الفرعي"
},
"summary": {
"label": "الملخص"
},
"title": {
"label": "العنوان"
},
"url": {
"label": "موقع الويب"
}
},
"glossary": {
"page": "الصفحة"
},
"list": {
"actions": {
"delete": "حذف",
"duplicate": "نسخه مطابقه",
"edit": "تعديل"
},
"empty-text": "هذه القائمة فارغة."
},
"tooltip": {
"delete-item": "هل أنت متأكد أنك تريد حذف هذا العنصر؟ لا يمكن التراجع عن هذا الإجراء.",
"delete-section": "حذف القسم",
"rename-section": "إعادة تسمية القسم",
"toggle-visibility": "تبديل الرؤية"
}
},
"controller": {
"tooltip": {
"center-artboard": "لوحة الوسط",
"copy-link": "انسخ الرابط للسيرة الذاتية",
"export-pdf": "تصدير PDF",
"toggle-orientation": "تبديل اتجاه الصفحة",
"toggle-page-break-line": "تبديل سطر الصفحة",
"toggle-sidebars": "تبديل الشريط الجانبي",
"zoom-in": "تكبير",
"zoom-out": "تصغير"
}
},
"header": {
"menu": {
"delete": "حذف",
"duplicate": "تكرار",
"rename": "إعادة تسمية",
"share-link": "مشاركة الرّابط",
"tooltips": {
"delete": "هل أنت متأكد أنك تريد حذف هذا العنصر؟ لا يمكن التراجع عن هذا الإجراء.",
"share-link": "أنت بحاجة إلى تغيير رؤية سيرتك الذاتية للعامة لجعلها مرئية للآخرين."
}
}
},
"leftSidebar": {
"sections": {
"awards": {
"form": {
"awarder": {
"label": "جائزة"
}
}
},
"basics": {
"actions": {
"photo-filters": "فلاتر الصور"
},
"heading": "الأساسيات",
"headline": {
"label": "العنوان الرئيسي"
},
"name": {
"label": "الاسم الكامل"
},
"photo-filters": {
"effects": {
"border": {
"label": "الحدود"
},
"grayscale": {
"label": "رمادي"
},
"heading": "مؤثرات"
},
"shape": {
"heading": "الشكل"
},
"size": {
"heading": "الحجم (بالبكسل)"
}
},
"photo-upload": {
"tooltip": {
"remove": "إزالة صورة",
"upload": "رفع صورة"
}
}
},
"certifications": {
"form": {
"issuer": {
"label": "جهة الإصدار"
}
}
},
"education": {
"form": {
"area-study": {
"label": "مجال الدراسة"
},
"courses": {
"label": "دورات"
},
"degree": {
"label": "الدرجة العلمية"
},
"grade": {
"label": "الدرجة / التقييم"
},
"institution": {
"label": "المؤسسة/الجامعة/المعهد"
}
}
},
"location": {
"address": {
"label": "العنوان"
},
"city": {
"label": "المدينة"
},
"country": {
"label": "البلد/الدولة"
},
"heading": "المكان",
"postal-code": {
"label": "الرمز البريدي"
},
"region": {
"label": "المنطقة"
}
},
"profiles": {
"form": {
"network": {
"label": "الشبكة"
},
"username": {
"label": "اسم المستخدم"
}
},
"heading": "الملفات الشخصية",
"heading_one": "الملف الشخصي"
},
"publications": {
"form": {
"publisher": {
"label": "الناشر"
}
}
},
"references": {
"form": {
"relationship": {
"label": "العلاقة"
}
}
},
"section": {
"heading": "القسم"
},
"volunteer": {
"form": {
"organization": {
"label": "المنظمة/المؤسسة"
}
}
}
}
},
"rightSidebar": {
"sections": {
"css": {
"heading": "تنسيقات CSS مخصصة"
},
"export": {
"heading": "تصدير",
"json": {
"primary": "JSON",
"secondary": "قم بتنزيل نسخة بصيغة JSON من سيرتك الذاتية والتي يمكن استيرادها مرة أخرى إلى Reactive Resume."
},
"pdf": {
"loading": {
"primary": "توليد ملف PDF",
"secondary": "يرجى الانتظار حتى يتم إنشاء ملف PDF الخاص بك ، فقد يستغرق هذا ما يصل إلى 15 ثانية."
},
"normal": {
"primary": "ملف - PDF",
"secondary": "قم بتنزيل ملف PDF لسيرتك الذاتية بحيث يمكنك طباعته وإرساله إلى وظيفة أحلامك. لا يمكن استيراد هذا الملف مرة أخرى لمزيد من التحرير."
}
}
},
"layout": {
"heading": "تخطيط",
"tooltip": {
"reset-layout": "إعادة تعيين التخطيط"
}
},
"links": {
"bugs-features": {
"body": "شيء يمنعك من عمل سيرة ذاتية؟ أو هل لديك فكرة رائعة لتضيفها؟ إطرح المشكلة على GitHub للبدء.",
"button": "صفحة المشاكل على \"GitHub\"",
"heading": "خلل برمجي؟ طلب وظائف ومميزات مخصصة؟"
},
"donate": {
"body": "إذا أعجبك استخدام Resctive Resume ، فالرجاء التفكير في التبرع بأكبر قدر ممكن من أجل الحفاظ على استمرار التطبيق وتشغيله ، بدون إعلانات وبشكل مجاني إلى الأبد.",
"button": "إشتر لي قهوة",
"heading": "تبرع الى Reactive Resume"
},
"github": "الشفرة المصدرية",
"heading": "الروابط"
},
"settings": {
"global": {
"date": {
"primary": "التاريخ",
"secondary": "صيغة التاريخ لاستخدامه عبر التطبيق"
},
"heading": "عام",
"language": {
"primary": "اللغة",
"secondary": "اعرض اللغة لاستخدامها عبر التطبيق"
},
"theme": {
"primary": "التصميم"
}
},
"heading": "الإعدادات",
"page": {
"break-line": {
"primary": "خط فاصل",
"secondary": "اعرض خط في كل الصفحات لتحديد ارتفاع صفحة A4"
},
"heading": "صفحة",
"orientation": {
"disabled": "ليس له تأثير عندما تكون هناك صفحة واحدة فقط",
"primary": "الإتجاة",
"secondary": "ما إذا كان سيتم عرض الصفحات أفقيًا أو رأسيًا"
}
},
"resume": {
"heading": "سيرة ذاتية",
"reset": {
"primary": "إعادة تعيين كل شيء",
"secondary": "أرتكبت الكثير من الأخطاء؟ انقر هنا لإعادة تعيين جميع التغييرات والبدء من نقطة الصفر. كن حذرا ، هذا الإجراء لا يمكن عكسه."
},
"sample": {
"primary": "تحميل نموذج البيانات",
"secondary": "لست متأكدا من أين تبدأ؟ انقر هنا لتحميل بعض عينات البيانات لترى كيف تبدو سيرة ذاتية كاملة."
}
}
},
"sharing": {
"heading": "جاري المشاركة",
"short-url": {
"label": "تفضل عنوان URL قصير"
},
"visibility": {
"subtitle": "اسمح لأي شخص لديه الرابط لعرض سيرتك الذاتية",
"title": "عام"
}
},
"templates": {
"heading": "قوالب"
},
"theme": {
"form": {
"background": {
"label": "الخلفية"
},
"primary": {
"label": "اساسي"
},
"text": {
"label": "نص"
}
},
"heading": "السمة"
},
"typography": {
"form": {
"font-family": {
"label": "اسم الخط"
},
"font-size": {
"label": "حجم الخط"
}
},
"heading": "الطباعة والخطوط",
"widgets": {
"body": {
"label": "المتن"
},
"headings": {
"label": "العناوين"
}
}
}
}
}
}

View File

@ -7,9 +7,6 @@
},
"footer": {
"credit": "مشروع عاطفي من تأليف <1> أمروث بيلاي</1>",
"language": {
"missing": "هل تفتقد لغتك؟"
},
"license": "من قبل المجتمع للمجتمع."
},
"markdown": {

View File

@ -0,0 +1,25 @@
{
"create-resume": {
"subtitle": "البدء من الصفر",
"title": "إنشاء سيرة ذاتية جديدة"
},
"import-external": {
"subtitle": "LinkedIn ، سيرة ذاتية من ملف JSON ،سيرة ذاتية من Reactive Resume",
"title": "استيراد من مصادر خارجية"
},
"resume": {
"menu": {
"delete": "حذف",
"duplicate": "إنشاء نسخة مطابقة",
"open": "فتح",
"rename": "إعادة تسمية",
"share-link": "مشاركة الرّابط",
"tooltips": {
"delete": "هل أنت متأكد أنك تريد حذف ملف السيرة الذاتية هذا؟ لا يمكن التراجع عن هذا الإجراء.",
"share-link": "أنت بحاجة إلى تغيير خصوصية سيرتك الذاتية إلى عامة لجعلها مرئية للآخرين."
}
},
"timestamp": "آخر تحديث تم في {{timestamp}}"
},
"title": "لوحة التحكم"
}

View File

@ -0,0 +1,41 @@
{
"actions": {
"app": "انتقل إلى التطبيق",
"login": "تسجيل الدخول",
"logout": "تسجيل الخروج",
"register": "التسجيل"
},
"features": {
"heading": "الخصائص",
"list": {
"ads": "بدون اعلانات",
"export": "قم بتصدير سيرتك الذاتية إلى تنسيق JSON أو PDF",
"free": "مجاني، إلى الأبد",
"import": "استيراد البيانات من LinkedIn أو ملف JSON",
"languages": "متعدد اللغات",
"more": "ومميزات مثيرة أكثر، <1>للمزيد إقرأ هنا</1>",
"tracking": "لا يوجد تتبع للمستخدم"
}
},
"links": {
"heading": "الروابط",
"links": {
"donate": "تبرّع",
"github": "الشفرة المصدرية",
"privacy": "سياسة الخصوصية",
"service": "شروط الإستخدام"
}
},
"screenshots": {
"heading": "لقطات الشاشة"
},
"testimonials": {
"heading": "الآراء والتقييمات",
"body": "سواء أكان ذلك جيدًا أم سيئًا ، أود أن أسمع رأيك في \"السيرة الذاتية التفاعلية\" وكيف كانت التجربة بالنسبة لك.<br/>فيما يلي بعض الرسائل المرسلة بواسطة مستخدمين من جميع أنحاء العالم.",
"contact": "يمكنك التواصل معي من خلال <1> بريدي الإلكتروني</1> أو من خلال نموذج الاتصال الموجود على <3> موقع الويب الخاص بي</3>."
},
"summary": {
"body": "Reactive Resume هو منشئ سيرة ذاتية مجاني ومفتوح المصدر تم إنشاؤه لجعل المهام الروتينية لإنشاء وتحديث ومشاركة سيرتك الذاتية سهلة مثل 1 و 2 و 3. باستخدام هذا التطبيق ، يمكنك إنشاء سيرة ذاتية متعددة ومشاركتها مع جهات التوظيف أو الأصدقاء من خلال رابط فريد وطباعته كملف PDF ، كل ذلك مجانًا ، بدون إعلانات ، بدون تتبع ، دون فقدان سلامة وخصوصية بياناتك.",
"heading": "الملخص"
}
}

View File

@ -0,0 +1,136 @@
{
"auth": {
"forgot-password": {
"actions": {
"send-email": "إرسال بريد لإعادة تعيين كلمة المرور"
},
"body": "يرجى أدخال عنوان البريد الإلكتروني المرتبط بالحساب الذي ترغب في استعادته.",
"form": {
"email": {
"label": "البريد الإلكتروني"
}
},
"heading": "نسيت كلمة المرور؟",
"help-text": "إذا كان حسابك موجود، سوف يصلك بريد يحتوي على رابط إستعادة كلمة المرور."
},
"login": {
"actions": {
"login": "تسجيل الدخول",
"google": "تسجيل الدخول باستخدام حساب جوجل"
},
"body": "يرجى إدخال اسم المستخدم وكلمة المرور المرتبطين بحسابك لتسجيل الدخول والوصول إلى السير الذاتية وإدارتها ومشاركتها.",
"form": {
"password": {
"label": "كلمة المرور"
},
"username": {
"help-text": "يمكنك أيضا إدخال عنوان بريدك الألكتروني",
"label": "اسم المستخدم"
}
},
"heading": "تسجيل الدخول إلى حسابك",
"recover-text": "في حالة نسيت كلمة المرور الخاصة بك ، يمكنك <1> استعادة حسابك</1> من هنا.",
"register-text": "إذا لم يكن لديك حساب ، يمكنك <1> إنشاء حساب</1> من هنا."
},
"register": {
"actions": {
"register": "التسجيل",
"google": "التسجيل بإستخدام حساب جوجل"
},
"body": "الرجاء إدخال معلوماتك الشخصية لإنشاء حساب.",
"form": {
"confirm-password": {
"label": "تأكيد كلمة المرور"
},
"email": {
"label": "عنوان البريد الالكترونى"
},
"name": {
"label": "الاسم الكامل"
},
"password": {
"label": "كلمة المرور"
},
"username": {
"label": "اسم المستخدم"
}
},
"heading": "انشئ حساب",
"loginText": "إذا كان لديك حساب بالفعل ، يمكنك <1> تسجيل الدخول من هنا</1>."
},
"reset-password": {
"actions": {
"set-password": "تعيين كلمة سر جديدة"
},
"body": "أدخل كلمة مرور جديدة لحسابك.",
"form": {
"confirm-password": {
"label": "تأكيد كلمة المرور"
},
"password": {
"label": "كلمة المرور"
}
},
"heading": "إعادة تعيين كلمة المرور الخاصة بك"
}
},
"dashboard": {
"create-resume": {
"actions": {
"create-resume": "إنشاء سيرة ذاتية"
},
"body": "ابدأ في بناء سيرتك الذاتية بإعطائها اسمًا. يمكن أن يكون إشارة إلى الوظيفة الذي تتقدم إليها ، أو اسم وجبتك الخفيفة المفضلة.",
"form": {
"name": {
"label": "الاسم"
},
"public": {
"label": "هل يمكن لأي احد الوصول إليها؟"
},
"slug": {
"label": "الاسم اللطيف"
}
},
"heading": "أنشئ سيرة ذاتية جديدة"
},
"import-external": {
"heading": "استيراد من مصادر خارجية",
"json-resume": {
"actions": {
"upload-json": "تحميل JSON"
},
"body": "إذا كان لديك ملف سيرة ذاتية بصيغة JSON تم التحقق من صحته <1></1> جاهز للعمل ، يمكنك استخدامه لتسريع عملية الإنشاء على Resctive Resume. انقر فوق الزر أدناه وقم بتحميل ملف JSON صالح للبدء.",
"heading": "استيراد من ملف JSON"
},
"linkedin": {
"actions": {
"upload-archive": "تحميل ملف zip مضغوط"
},
"body": "يمكنك توفير الوقت عن طريق تصدير بياناتك من LinkedIn واستخدامها لملء الحقول تلقائيًا في Reactive Resume. توجه إلى <1> خصوصية البيانات</1> على LinkedIn واطلب تحميل بياناتك بشكل مضغوط ZIP. بمجرد توفره ، قم برفع ملف ZIP أدناه.",
"heading": "استيراد من LinkedIn"
},
"reactive-resume": {
"actions": {
"upload-json": "رفع JSON",
"upload-json-v2": "رفع JSON من v2"
},
"body": "إذا كان لديك JSON تم تصديره بالإصدار الحالي من Reactive Resume ، فيمكنك استيراده مرة أخرى هنا للحصول على نسخة قابلة للتحرير مرة أخرى.",
"heading": "استيراد من Reactive Resume"
}
},
"rename-resume": {
"actions": {
"rename-resume": "إعادة تسمية السيرة الذاتية"
},
"form": {
"name": {
"label": "الاسم"
},
"slug": {
"label": "الاسم اللطيف"
}
},
"heading": "أعد تسمية سيرتك الذاتية"
}
}
}

View File

@ -7,9 +7,6 @@
},
"footer": {
"credit": "<1>অমরুথ পিল্লাই</1>-এর একটি প্যাশন প্রোজেক্ট",
"language": {
"missing": "আপনার ভাষা অনুপস্থিত?"
},
"license": "সম্প্রদায়ের দ্বারা, সম্প্রদায়ের জন্য।"
},
"markdown": {

View File

@ -7,9 +7,6 @@
},
"footer": {
"credit": "Et passionsprojekt af <1>Amruth Pillai</1>",
"language": {
"missing": "Mangler du dit sprog?"
},
"license": "Af fællesskabet, for fællesskabet."
},
"markdown": {

View File

@ -7,9 +7,6 @@
},
"footer": {
"credit": "Ein Herzensprojekt von <1>Amruth Pillai</1>",
"language": {
"missing": "Ihre Sprache fehlt?"
},
"license": "Von der Gemeinschaft, für die Gemeinschaft."
},
"markdown": {

View File

@ -7,9 +7,6 @@
},
"footer": {
"credit": "A passion project by <1>Amruth Pillai</1>",
"language": {
"missing": "Missing your language?"
},
"license": "By the community, for the community."
},
"markdown": {

View File

@ -7,9 +7,6 @@
},
"footer": {
"credit": "Un proyecto apasionante de <1>Amruth Pillai</1>",
"language": {
"missing": "Idioma ausente?"
},
"license": "Por la comunidad, para la comunidad."
},
"markdown": {

View File

@ -7,9 +7,6 @@
},
"footer": {
"credit": "Un projet passionné de <1>Amruth Pillai</1>",
"language": {
"missing": "Il manque votre langue ?"
},
"license": "Par la communauté, pour la communauté."
},
"markdown": {

View File

@ -7,9 +7,6 @@
},
"footer": {
"credit": "<1>अमृत पिल्लै</1> . का एक जुनूनी प्रोजेक्ट",
"language": {
"missing": "आपकी भाषा याद आ रही है?"
},
"license": "समाज के लिए, समाज के लिए।"
},
"markdown": {

View File

@ -7,9 +7,6 @@
},
"footer": {
"credit": "Un progetto nato dalla passione di <1>Amruth Pillai</1>",
"language": {
"missing": "Non trovi la tua lingua?"
},
"license": "Dalla community, per la community."
},
"markdown": {

View File

@ -7,9 +7,6 @@
},
"footer": {
"credit": "<1>ಅಮೃತ್ ಪಿಳ್ಳೈ</1> ಅವರು ಉತ್ಸಾಹದಿಂದ ಮಾಡಿರುವ ಪ್ರಾಜೆಕ್ಟ್",
"language": {
"missing": "ನಿಮ್ಮ ಭಾಷೆ ಕಾಣೆಯಾಗಿದೆಯೇ?"
},
"license": "ಸಮುದಾಯದಿಂದ, ಸಮುದಾಯಕ್ಕಾಗಿ."
},
"markdown": {

View File

@ -0,0 +1,358 @@
{
"common": {
"actions": {
"add": "പുതിയ {{token}} ചേർക്കുക",
"delete": "{{token}} ഇല്ലാതാക്കുക",
"edit": "{{token}} എഡിറ്റ് ചെയ്യുക"
},
"columns": {
"heading": "നിരകൾ",
"tooltip": "നിരകളുടെ എണ്ണം മാറ്റുക"
},
"form": {
"date": {
"label": "തിയതി"
},
"description": {
"label": "വിവരണം"
},
"email": {
"label": "ഇമെയിൽ വിലാസം"
},
"end-date": {
"help-text": "നിലവിലുണ്ടെങ്കിൽ ഈ ഫീൽഡ് ശൂന്യമായി വിടുക",
"label": "അവസാന തീയതി"
},
"keywords": {
"label": "കീവേഡുകൾ"
},
"level": {
"label": "ലെവൽ"
},
"levelNum": {
"label": "ലെവൽ (നമ്പർ)"
},
"name": {
"label": "പേര്"
},
"phone": {
"label": "ഫോണ്‍ നമ്പര്‍"
},
"position": {
"label": "സ്ഥാനം"
},
"start-date": {
"label": "ആരംഭിക്കുന്ന തീയതി"
},
"subtitle": {
"label": "ഉപശീർഷകം"
},
"summary": {
"label": "സംഗ്രഹം"
},
"title": {
"label": "തലക്കെട്ട്"
},
"url": {
"label": "വെബ്സൈറ്റ്"
}
},
"glossary": {
"page": "പേജ്"
},
"list": {
"actions": {
"delete": "ഡിലീറ്റ്",
"duplicate": "ഡ്യൂപ്ലിക്കേറ്റ്",
"edit": "എഡിറ്റ് ചെയ്യുക"
},
"empty-text": "ഈ ലിസ്റ്റ് ശൂന്യമാണ്."
},
"tooltip": {
"delete-item": "ഈ ഇനം ഇല്ലാതാക്കണമെന്ന് തീർച്ചയാണോ? ഇത് മാറ്റാനാവാത്ത നടപടിയാണ്.",
"delete-section": "വിഭാഗം ഇല്ലാതാക്കുക",
"rename-section": "വിഭാഗത്തിന്റെ പേര് മാറ്റുക",
"toggle-visibility": "ദൃശ്യപരത ടോഗിൾ ചെയ്യുക"
}
},
"controller": {
"tooltip": {
"center-artboard": "കേന്ദ്ര ആർട്ട്ബോർഡ്",
"copy-link": "റെസ്യൂമെയിലേക്ക് ലിങ്ക് പകർത്തുക",
"export-pdf": "PDF കയറ്റുമതി ചെയ്യുക",
"toggle-orientation": "പേജ് ഓറിയന്റേഷൻ ടോഗിൾ ചെയ്യുക",
"toggle-page-break-line": "പേജ് ബ്രേക്ക് ലൈൻ ടോഗിൾ ചെയ്യുക",
"toggle-sidebars": "സൈഡ്‌ബാറുകൾ ടോഗിൾ ചെയ്യുക",
"zoom-in": "വലുതാക്കുക",
"zoom-out": "ചെറുതാക്കുക"
}
},
"header": {
"menu": {
"delete": "ഡിലീറ്റ്",
"duplicate": "ഡ്യൂപ്ലിക്കേറ്റ്",
"rename": "പേര് മാറ്റുക",
"share-link": "ലിങ്ക് ഷെയർ ചെയ്യൂ",
"tooltips": {
"delete": "ഈ റെസ്യൂമെ ഇല്ലാതാക്കണമെന്ന് തീർച്ചയാണോ? ഇത് മാറ്റാനാവാത്ത നടപടിയാണ്.",
"share-link": "മറ്റുള്ളവർക്ക് ദൃശ്യമാക്കാൻ നിങ്ങളുടെ റെസ്യൂമെയുടെ ദൃശ്യപരത പൊതുവായി മാറ്റേണ്ടതുണ്ട്."
}
}
},
"leftSidebar": {
"sections": {
"awards": {
"form": {
"awarder": {
"label": "പുരസ്കാരദാതാവ്"
}
}
},
"basics": {
"actions": {
"photo-filters": "ഫോട്ടോ ഫിൽട്ടറുകൾ"
},
"heading": "അടിസ്ഥാനകാര്യങ്ങൾ",
"headline": {
"label": "തലക്കെട്ട്"
},
"name": {
"label": "പൂർണ്ണമായ പേര്"
},
"photo-filters": {
"effects": {
"border": {
"label": "ബോർഡർ"
},
"grayscale": {
"label": "ഗ്രേസ്കെയിൽ"
},
"heading": "ഇഫക്റ്റുകൾ"
},
"shape": {
"heading": "ആകൃതി"
},
"size": {
"heading": "വലിപ്പം (പിക്സലിൽ)"
}
},
"photo-upload": {
"tooltip": {
"remove": "ഫോട്ടോ നീക്കം ചെയ്യുക",
"upload": "ഫോട്ടോ അപ്‌ലോഡ് ചെയ്യുക"
}
}
},
"certifications": {
"form": {
"issuer": {
"label": "ഇഷ്യു ചെയ്യുന്നയാൾ"
}
}
},
"education": {
"form": {
"area-study": {
"label": "പഠന മേഖല"
},
"courses": {
"label": "കോഴ്സുകൾ"
},
"degree": {
"label": "ഡിഗ്രി"
},
"grade": {
"label": "ഗ്രേഡ്"
},
"institution": {
"label": "സ്ഥാപനം"
}
}
},
"location": {
"address": {
"label": "വിലാസം"
},
"city": {
"label": "നഗരം"
},
"country": {
"label": "രാജ്യം"
},
"heading": "സ്ഥലം",
"postal-code": {
"label": "തപാൽ കോഡ്"
},
"region": {
"label": "പ്രദേശം"
}
},
"profiles": {
"form": {
"network": {
"label": "നെറ്റ്‌വർക്ക്"
},
"username": {
"label": "ഉപയോക്തൃനാമം"
}
},
"heading": "പ്രൊഫൈലുകൾ",
"heading_one": "പ്രൊഫൈൽ"
},
"publications": {
"form": {
"publisher": {
"label": "പ്രസാധകൻ"
}
}
},
"references": {
"form": {
"relationship": {
"label": "ബന്ധം"
}
}
},
"section": {
"heading": "വിഭാഗം"
},
"volunteer": {
"form": {
"organization": {
"label": "സംഘടന"
}
}
}
}
},
"rightSidebar": {
"sections": {
"css": {
"heading": "ഇഷ്ടാനുസൃത CSS"
},
"export": {
"heading": "എക്സ്പോർട്ട്",
"json": {
"primary": "JSON",
"secondary": "റിയാക്ടീവ് റെസ്യൂമിലേക്ക് തിരികെ ഇറക്കുമതി ചെയ്യാൻ കഴിയുന്ന നിങ്ങളുടെ റെസ്യൂമെയുടെ JSON പതിപ്പ് ഡൗൺലോഡ് ചെയ്യുക."
},
"pdf": {
"loading": {
"primary": "PDF സൃഷ്ടിക്കുന്നു",
"secondary": "നിങ്ങളുടെ PDF ജനറേറ്റുചെയ്യുന്നത് പോലെ കാത്തിരിക്കുക, ഇതിന് 15 സെക്കൻഡ് വരെ എടുത്തേക്കാം."
},
"normal": {
"primary": "PDF",
"secondary": "നിങ്ങളുടെ സ്വപ്‌ന ജോലിയിലേക്ക് പ്രിന്റ് ചെയ്‌ത് അയയ്‌ക്കാൻ കഴിയുന്ന നിങ്ങളുടെ റെസ്യൂമെയുടെ PDF ഡൗൺലോഡ് ചെയ്യുക. കൂടുതൽ എഡിറ്റിംഗിനായി ഈ ഫയൽ തിരികെ ഇറക്കുമതി ചെയ്യാൻ കഴിയില്ല."
}
}
},
"layout": {
"heading": "ലേഔട്ട്",
"tooltip": {
"reset-layout": "ലേഔട്ട് പുനഃസജ്ജമാക്കുക"
}
},
"links": {
"bugs-features": {
"body": "ഒരു റെസ്യൂമെ ഉണ്ടാക്കുന്നതിൽ നിന്ന് നിങ്ങളെ എന്തെങ്കിലും തടസ്സപ്പെടുത്തുന്നുണ്ടോ? അല്ലെങ്കിൽ നിങ്ങൾക്ക് ചേർക്കാൻ അതിശയകരമായ ഒരു ആശയമുണ്ടോ? ആരംഭിക്കുന്നതിന് ഒരു ഗിറ്റ്ഹബ് ഇസ്സു ഉന്നയിക്കുക.",
"button": "ഗിറ്റ്ഹബ് ഇസ്സുസ്",
"heading": "ബഗുകൾ? ഫീച്ചർ അഭ്യർത്ഥനകൾ?"
},
"donate": {
"body": "റിയാക്ടീവ് റെസ്യൂമെ ഉപയോഗിക്കുന്നത് നിങ്ങൾക്ക് ഇഷ്‌ടമാണെങ്കിൽ, പരസ്യങ്ങളില്ലാതെ എക്കാലവും സൗജന്യമായി ആപ്പ് പ്രവർത്തനക്ഷമമാക്കി നിലനിർത്തുന്നതിന് നിങ്ങളാൽ കഴിയുന്നത്ര സംഭാവന ചെയ്യുന്നത് പരിഗണിക്കുക.",
"button": "എനിക്കൊരു കാപ്പി വാങ്ങിത്തരൂ",
"heading": "റിയാക്ടീവ് റെസ്യൂമെയിലേക്ക് സംഭാവന നൽകുക"
},
"github": "സോഴ്സ് കോഡ്",
"heading": "ലിങ്കുകൾ"
},
"settings": {
"global": {
"date": {
"primary": "തിയതി",
"secondary": "ആപ്പിലുടനീളം ഉപയോഗിക്കാനുള്ള തീയതി ഫോർമാറ്റ്"
},
"heading": "ആഗോള",
"language": {
"primary": "ഭാഷ",
"secondary": "ആപ്പിലുടനീളം ഉപയോഗിക്കാനുള്ള ഭാഷ"
},
"theme": {
"primary": "തീം"
}
},
"heading": "ക്രമീകരണങ്ങള്‍",
"page": {
"break-line": {
"primary": "ബ്രേക്ക് ലൈൻ",
"secondary": "A4 പേജിന്റെ ഉയരം അടയാളപ്പെടുത്താൻ എല്ലാ പേജുകളിലും ഒരു വരി കാണിക്കുക"
},
"heading": "പേജ്",
"orientation": {
"disabled": "ഒരു പേജ് മാത്രമുള്ളപ്പോൾ ഫലമുണ്ടാകില്ല",
"primary": "ഓറിയന്റേഷൻ",
"secondary": "പേജുകൾ തിരശ്ചീനമായോ ലംബമായോ പ്രദർശിപ്പിക്കണമോ എന്ന്"
}
},
"resume": {
"heading": "റെസ്യൂമെ",
"reset": {
"primary": "എല്ലാം പുനഃസജ്ജമാക്കുക",
"secondary": "വളരെയധികം തെറ്റുകൾ ചെയ്തോ? എല്ലാ മാറ്റങ്ങളും പുനഃസജ്ജമാക്കാനും ആദ്യം മുതൽ ആരംഭിക്കാനും ഇവിടെ ക്ലിക്ക് ചെയ്യുക. ശ്രദ്ധിക്കുക, ഈ പ്രവർത്തനം പഴയപടിയാക്കാനാകില്ല."
},
"sample": {
"primary": "സാമ്പിൾ ഡാറ്റ ലോഡ് ചെയ്യുക",
"secondary": "എവിടെ തുടങ്ങണമെന്ന് ഉറപ്പില്ലേ? ഒരു സമ്പൂർണ്ണ റെസ്യൂമെ എങ്ങനെയുണ്ടെന്ന് കാണുന്നതിന് കുറച്ച് സാമ്പിൾ ഡാറ്റ ലോഡ് ചെയ്യാൻ ഇവിടെ ക്ലിക്ക് ചെയ്യുക."
}
}
},
"sharing": {
"heading": "ഷെയർ",
"short-url": {
"label": "ഹ്രസ്വ URL തിരഞ്ഞെടുക്കുക"
},
"visibility": {
"subtitle": "നിങ്ങളുടെ റെസ്യൂമെ കാണാൻ ലിങ്കുള്ള ആരെയും അനുവദിക്കുക",
"title": "പൊതുവായത്"
}
},
"templates": {
"heading": "ടെംപ്ലേറ്റുകൾ"
},
"theme": {
"form": {
"background": {
"label": "പശ്ചാത്തലം"
},
"primary": {
"label": "പ്രാഥമികം"
},
"text": {
"label": "ടെക്സ്റ്റ്"
}
},
"heading": "തീം"
},
"typography": {
"form": {
"font-family": {
"label": "ഫോണ്ട് ഫാമിലി"
},
"font-size": {
"label": "അക്ഷര വലിപ്പം"
}
},
"heading": "ടൈപ്പോഗ്രാഫി",
"widgets": {
"body": {
"label": "ബോഡി"
},
"headings": {
"label": "തലക്കെട്ടുകൾ"
}
}
}
}
}
}

View File

@ -0,0 +1,29 @@
{
"avatar": {
"menu": {
"greeting": "ഹലോ",
"logout": "പുറത്തുകടക്കുക"
}
},
"footer": {
"credit": "<1>അമൃത് പിള്ളയുടെ</1> ഒരു പാഷൻ പ്രോജക്റ്റ്",
"license": "സമൂഹത്താൽ, സമൂഹത്തിന് വേണ്ടി."
},
"markdown": {
"help-text": "ഈ വിഭാഗം <1>മാർക്ക്ഡൗൺ</1> ഫോർമാറ്റിംഗ് പിന്തുണയ്ക്കുന്നു."
},
"date": {
"present": "ഇപ്പോൾ"
},
"subtitle": "ഒരു സൗജന്യ ഓപ്പൺ സോഴ്സ് റെസ്യൂം ബിൽഡർ.",
"title": "റിയാക്ടീവ് റെസ്യുമെ",
"toast": {
"error": {
"upload-file-size": "2 മെഗാബൈറ്റിൽ താഴെയുള്ള ഫയലുകൾ മാത്രം അപ്‌ലോഡ് ചെയ്യുക.",
"upload-photo-size": "2 മെഗാബൈറ്റിൽ താഴെയുള്ള ഫോട്ടോകൾ മാത്രം അപ്‌ലോഡ് ചെയ്യുക."
},
"success": {
"resume-link-copied": "നിങ്ങളുടെ റെസ്യൂമെയിലേക്കുള്ള ഒരു ലിങ്ക് നിങ്ങളുടെ ക്ലിപ്പ്ബോർഡിലേക്ക് പകർത്തി."
}
}
}

View File

@ -0,0 +1,25 @@
{
"create-resume": {
"subtitle": "ആദ്യം മുതൽ ആരംഭിക്കുക",
"title": "പുതിയ റെസ്യുമെ ഉണ്ടാക്കുക"
},
"import-external": {
"subtitle": "LinkedIn, JSON റെസ്യൂമെ, റിയാക്ടീവ് റെസ്യൂമെ",
"title": "ബാഹ്യ ഉറവിടങ്ങളിൽ നിന്ന് ഇറക്കുമതി ചെയ്യുക"
},
"resume": {
"menu": {
"delete": "ഡിലീറ്റ്",
"duplicate": "ഡ്യൂപ്ലിക്കേറ്റ്",
"open": "തുറക്കുക",
"rename": "പേര് മാറ്റുക",
"share-link": "ലിങ്ക് ഷെയർ ചെയ്യൂ",
"tooltips": {
"delete": "ഈ റെസ്യൂമെ ഇല്ലാതാക്കണമെന്ന് തീർച്ചയാണോ? ഇത് മാറ്റാനാവാത്ത നടപടിയാണ്.",
"share-link": "മറ്റുള്ളവർക്ക് ദൃശ്യമാക്കാൻ നിങ്ങളുടെ റെസ്യൂമെയുടെ ദൃശ്യപരത പൊതുവായി മാറ്റേണ്ടതുണ്ട്."
}
},
"timestamp": "അവസാനം അപ്ഡേറ്റ് ചെയ്തത് {{timestamp}} മുമ്പ്"
},
"title": "ഡാഷ്ബോർഡ്"
}

Some files were not shown because too many files have changed in this diff Show More