Compare commits

...

210 Commits

Author SHA1 Message Date
7d188622a8 chore(release): 3.2.5 2022-03-16 06:50:18 +01:00
97e9432d6b feat(i18n): add danish, polish and turkish locales to i18n 2022-03-16 06:48:33 +01:00
b2f1fb3a55 fix(client/templates): fix text veering off of artboard in most templates
fix #702
2022-03-16 06:41:48 +01:00
4743828e6b chore(deps): update dependencies to match latest patch fixes 2022-03-16 06:40:49 +01:00
519fbbd1b2 Merge pull request #689 from AmruthPillai/i18n_main
New Crowdin updates
2022-03-16 06:21:54 +01:00
ebc084ad52 Create FUNDING.yml 2022-03-16 06:09:50 +01:00
26fdd72610 New translations modals.json (Italian) 2022-03-15 16:28:53 +01:00
ea704c6d99 New translations modals.json (Chinese Simplified) 2022-03-15 16:28:52 +01:00
ea88044d25 New translations modals.json (Bengali) 2022-03-15 16:28:51 +01:00
a461cc147b New translations modals.json (Hindi) 2022-03-15 16:28:50 +01:00
5aefcae2ac New translations modals.json (German) 2022-03-15 16:28:40 +01:00
ba1e968510 New translations modals.json (Spanish) 2022-03-15 16:28:38 +01:00
ba12abe506 New translations modals.json (French) 2022-03-15 16:28:37 +01:00
29fb1dcca3 New translations modals.json (Kannada) 2022-03-15 16:28:14 +01:00
4be6c48aab New translations modals.json (Tamil) 2022-03-15 16:28:13 +01:00
ee1017aa25 Merge pull request #699 from chandiwalaaadhar/fix/pikachu-profile-image-uncontrolled-size
Fix - Pikachu User Image upload, uncontrolled Image Size
2022-03-15 16:25:19 +01:00
bf806c5ecf New translations dashboard.json (Italian) 2022-03-15 15:52:23 +01:00
bf9709ed8e New translations landing.json (Italian) 2022-03-15 15:52:21 +01:00
6c74ecfef7 New translations builder.json (Italian) 2022-03-15 15:52:17 +01:00
fb8c925037 New translations common.json (Italian) 2022-03-15 15:52:13 +01:00
c8c154c2f4 Merge pull request #701 from GovindKrishnan/main
Fixed a Typo in README
2022-03-15 15:15:39 +01:00
92b2c4b757 New translations modals.json (Polish) 2022-03-15 14:41:14 +01:00
260a354c22 New translations dashboard.json (Polish) 2022-03-15 14:41:11 +01:00
c67a969353 New translations landing.json (Polish) 2022-03-15 14:41:09 +01:00
8d61703250 New translations builder.json (Polish) 2022-03-15 14:41:04 +01:00
28df783bba New translations common.json (Polish) 2022-03-15 14:41:03 +01:00
51575a340b New translations modals.json (Danish) 2022-03-15 13:44:39 +01:00
8068d34bf3 New translations dashboard.json (Danish) 2022-03-15 13:44:35 +01:00
b154fae0fa New translations landing.json (Danish) 2022-03-15 13:44:34 +01:00
c5ba1730c3 New translations builder.json (Danish) 2022-03-15 13:44:29 +01:00
a7d90da30e New translations common.json (Danish) 2022-03-15 13:44:26 +01:00
0bbc54a97f Merge pull request #1 from GovindKrishnan/patch-1
Fixed Same Typos in index.mdx
2022-03-15 17:07:47 +05:30
2081f1344f Fixed Same Typos in index.mdx 2022-03-15 17:05:46 +05:30
d029607e16 Fixing Typos in README 2022-03-15 16:46:58 +05:30
5fe0c02cec Fixed a Typo in README
Very trivial. But still, here's my contribution! 😄 

After all, grammar is very important in resumes. 😉
2022-03-15 16:41:10 +05:30
70b45b3686 New translations modals.json (Turkish) 2022-03-15 11:49:35 +01:00
ff098d5df1 New translations landing.json (Turkish) 2022-03-15 11:49:30 +01:00
95d7d70caa New translations builder.json (Turkish) 2022-03-15 10:34:48 +01:00
107ba6e525 New translations common.json (Turkish) 2022-03-15 10:34:45 +01:00
f72e0556e5 Fix - Pikachu User Image after upload covers the center content 2022-03-15 05:57:50 +05:30
0ef975a177 chore(release): 3.2.4 2022-03-14 22:08:16 +01:00
eb9f5450df chore(donation): replace buymeacoffee links with paypal.me links 2022-03-14 22:08:04 +01:00
c7fffff495 chore(release): 3.2.3 2022-03-14 21:50:20 +01:00
42408ce8c5 feat(client/import): implement import json from reactive resume v2 2022-03-14 21:50:04 +01:00
7c49b50979 New translations builder.json (Czech) 2022-03-14 21:27:52 +01:00
59b2fc9fd6 New translations common.json (Portuguese) 2022-03-14 18:58:46 +01:00
f93ac987ac New translations dashboard.json (Turkish) 2022-03-14 16:52:59 +01:00
fb32f9b523 New translations common.json (Arabic) 2022-03-14 16:52:52 +01:00
ed78f8fc4e Merge pull request #687 from chandiwalaaadhar/fix/pikachu-masthead-asymmetric-basic-details
Fix-Pikachu Masthead Basic Details looks asymmetric Due to Centred Alignment
2022-03-14 15:51:16 +01:00
318145f007 Create CODE_OF_CONDUCT.md 2022-03-14 15:09:47 +01:00
c2a35a1066 Merge pull request #685 from chandiwalaaadhar/fix/work-experience-website-link-redirects-404
Fix - Work Experience Website Link Redirects to 404 if manually entered without http/https
2022-03-14 15:08:54 +01:00
541cfa784d Fix-Pikachu Masthead Asymmetric Basic Details 2022-03-14 19:38:49 +05:30
de53d8dfe7 Removed url && in the link prop 2022-03-14 19:32:12 +05:30
c28afbc75d Fix Work Experience Website Link redirects to 404 if entered without http or https 2022-03-14 19:12:36 +05:30
40e6227aa9 chore(release): 3.2.2 2022-03-14 10:28:29 +01:00
02e396bfdb fix(client/skills): make skill level optional 2022-03-14 10:26:57 +01:00
4dc83c1d7f docs(docker): update docs to add docker deployment example to droplet 2022-03-14 10:18:04 +01:00
143a123212 Create docker.mdx 2022-03-14 10:11:52 +01:00
c64b96619f docs(source-code): fix links to docker, local-build on source-code index page 2022-03-14 09:26:15 +01:00
ff35a2a95c chore(release): 3.2.1 2022-03-14 09:23:16 +01:00
549363bbe5 feat(i18n): add Chinese (Simplified) language to locales 2022-03-14 09:23:01 +01:00
e6bda688ac fix(client/basics): fix issue with overlapping photo filters on safari/webkit/iOS 2022-03-14 09:19:22 +01:00
64b0c5e7cf Merge pull request #681 from AmruthPillai/i18n_main
New Crowdin updates
2022-03-14 09:09:26 +01:00
57f7edc134 fix(docker): fix docker-compose for production grade deployments 2022-03-14 09:03:47 +01:00
c62a3c2dfd New translations modals.json (Chinese Simplified) 2022-03-14 07:38:30 +01:00
b7f024913c New translations dashboard.json (Chinese Simplified) 2022-03-14 07:38:28 +01:00
488631e6b0 New translations landing.json (Chinese Simplified) 2022-03-14 07:38:25 +01:00
ca5a866249 New translations builder.json (Chinese Simplified) 2022-03-14 07:38:23 +01:00
3a0cd4e150 New translations common.json (Chinese Simplified) 2022-03-14 07:38:19 +01:00
e82e714e41 chore(release): 3.2.0 2022-03-14 06:40:41 +01:00
21931bc324 feat(i18n): add Bengali, Italian and other languages 2022-03-14 06:40:16 +01:00
ed75a85827 fix(client): fix issue with react-query cache 2022-03-14 06:33:14 +01:00
fbb0285d0d Merge pull request #678 from AmruthPillai/i18n_main
New Crowdin updates
2022-03-14 06:10:51 +01:00
b056b002b7 New translations builder.json (Italian) 2022-03-14 02:04:09 +01:00
8b32bfb9f4 New translations modals.json (Italian) 2022-03-13 22:03:59 +01:00
cf3696c976 New translations dashboard.json (Italian) 2022-03-13 22:03:56 +01:00
aa0dc1d7fb New translations landing.json (Italian) 2022-03-13 22:03:54 +01:00
f5bf77cfd0 New translations builder.json (Italian) 2022-03-13 22:03:51 +01:00
9ddbc7cab2 New translations common.json (Italian) 2022-03-13 22:03:49 +01:00
f7d11c5fd2 New translations landing.json (Bengali) 2022-03-13 21:03:51 +01:00
bede07656b New translations dashboard.json (Bengali) 2022-03-13 21:03:48 +01:00
49b56f7a76 New translations modals.json (Bengali) 2022-03-13 20:08:25 +01:00
1421fc5183 New translations common.json (Bengali) 2022-03-13 20:08:20 +01:00
b3da226d24 New translations builder.json (Bengali) 2022-03-13 20:08:19 +01:00
3d7a5b9313 Merge pull request #675 from AmruthPillai/i18n_main
New Crowdin updates
2022-03-13 19:02:01 +01:00
86ca4602fd Merge pull request #667 from chandiwalaaadhar/fix/skillModal-disable-and-beginner-text-clashing
Fixed Near Overlapping of "Disable" & "Beginner" Label Text in Skills Modal for Desktop Screen
2022-03-13 19:01:52 +01:00
3dde7e5772 Merge pull request #669 from chandiwalaaadhar/fix/gengar-theme-masthead-icons-disapper
Fix-Gengar Theme MastHead Icons Disappear on Theme/Primary Color Change
2022-03-13 19:01:45 +01:00
0782c616ea Merge branch 'main' into fix/gengar-theme-masthead-icons-disapper 2022-03-13 18:56:14 +01:00
d1d3f240b4 Merge branch 'main' of github.com:AmruthPillai/Reactive-Resume 2022-03-13 18:54:03 +01:00
b18120b3f7 fix(app): fix issue with external link redirection in android app 2022-03-13 18:53:48 +01:00
b5809ea449 New translations common.json (Vietnamese) 2022-03-13 17:52:24 +01:00
01acec4a51 New translations common.json (Spanish) 2022-03-13 17:52:21 +01:00
9d076d384c Merge branch 'main' into fix/gengar-theme-masthead-icons-disapper 2022-03-13 21:35:16 +05:30
e7a8596456 Fix-Gengar Theme MastHead Icons Disappear on Theme Change 2022-03-13 12:47:57 +05:30
ab4df6193c Fixed Near Overlapping of Disable & Beginner Text in Skills Modal for Desktop 2022-03-13 12:00:25 +05:30
e4a9f269d2 Merge pull request #662 from AmruthPillai/i18n_main
New Crowdin updates
2022-03-13 07:24:36 +01:00
189cc702c2 New translations modals.json (Italian) 2022-03-13 07:13:32 +01:00
c348b6449b New translations landing.json (Italian) 2022-03-13 07:13:29 +01:00
708920df44 New translations landing.json (German) 2022-03-13 07:13:28 +01:00
81733e5855 New translations landing.json (Spanish) 2022-03-13 07:13:27 +01:00
794c7df374 New translations modals.json (German) 2022-03-13 07:13:24 +01:00
267f593ec2 New translations modals.json (Spanish) 2022-03-13 07:13:23 +01:00
048927a163 New translations dashboard.json (Spanish) 2022-03-13 07:13:16 +01:00
f4a65122c6 New translations dashboard.json (German) 2022-03-13 07:13:15 +01:00
6587c76397 New translations dashboard.json (Italian) 2022-03-13 07:13:14 +01:00
80223a240c New translations builder.json (Italian) 2022-03-13 07:13:12 +01:00
50faa5dff3 New translations modals.json (French) 2022-03-12 20:25:37 +01:00
6a4521b057 New translations landing.json (French) 2022-03-12 20:25:33 +01:00
81a4d7291a New translations dashboard.json (French) 2022-03-12 20:25:32 +01:00
381cfcc220 New translations builder.json (French) 2022-03-12 20:25:28 +01:00
0f555e4f88 New translations common.json (French) 2022-03-12 20:25:27 +01:00
ebd9253038 chore(release): 3.1.4 2022-03-12 19:46:45 +01:00
cf670af403 fix(client): exported pdf did not contain "Present" keyword with translations 2022-03-12 19:46:30 +01:00
dfccb3130f fix(client): fix issues raised through lgtm alerts 2022-03-12 18:56:00 +01:00
ef06240935 docs(readme): add localization percentage badge 2022-03-12 18:47:34 +01:00
55e57353a4 New translations modals.json (Italian) 2022-03-12 18:23:47 +01:00
f0144cc6e7 New translations landing.json (Italian) 2022-03-12 18:23:44 +01:00
e5150ab128 New translations common.json (Italian) 2022-03-12 18:23:40 +01:00
d61905db10 chore(release): 3.1.3 2022-03-12 17:41:29 +01:00
6d55f917ea fix(server): reform url for pdf generation and download
fix #661
2022-03-12 17:41:16 +01:00
4371f3b693 New translations dashboard.json (Italian) 2022-03-12 17:28:42 +01:00
c8c5916d02 Update local-build.mdx 2022-03-12 16:09:08 +01:00
3ca27f2326 docs(style): update CHANGELOG.md 2022-03-12 15:59:34 +01:00
f78f24c972 chore(release): 3.1.2 2022-03-12 15:57:28 +01:00
11cb066573 ci(docker): include traefik routing and proxy to ensure server connections pass in local 2022-03-12 15:55:04 +01:00
528ac84d3b chore(release): 3.1.1 2022-03-12 15:20:01 +01:00
b515fc36e7 feat(client): add product hunt announcement banner 2022-03-12 15:19:19 +01:00
d7268423df chore(release): 3.1.0 2022-03-12 13:01:40 +01:00
bf167f81a3 feat(client): add "spanish (es)" language to i18n locales 2022-03-12 13:01:16 +01:00
9e2f22d878 Merge pull request #654 from AmruthPillai/i18n_main
New Crowdin updates
2022-03-12 12:58:17 +01:00
084b909152 New translations common.json (Hindi) 2022-03-12 12:57:47 +01:00
3955afee8d New translations common.json (German) 2022-03-12 12:57:42 +01:00
f2dd2b5fcf New translations common.json (Kannada) 2022-03-12 12:57:37 +01:00
305561955a New translations common.json (Tamil) 2022-03-12 12:57:36 +01:00
cadbd3dfe8 New translations common.json (Spanish) 2022-03-12 12:57:34 +01:00
b5cd6c412b fix(client): show "present" string if end date is not entered, also add to i18n locales
fix #653
2022-03-12 12:49:11 +01:00
799f20823e fix(server): photo uploads not working, fix save location and returned url
fix #658
2022-03-12 12:37:04 +01:00
dda42b4c6b fix(client): remove hard-coded "keywords:" in certain templates
fix #650
2022-03-12 12:32:35 +01:00
f1c260736a New translations builder.json (Spanish) 2022-03-12 12:16:43 +01:00
b5a9b26f34 New translations builder.json (German) 2022-03-12 12:06:43 +01:00
918bd555c1 New translations builder.json (Spanish) 2022-03-12 12:06:42 +01:00
9ea2775790 New translations builder.json (Kannada) 2022-03-12 12:06:38 +01:00
9d83b997f5 New translations builder.json (Hindi) 2022-03-12 12:06:36 +01:00
228fb42ba5 New translations builder.json (Tamil) 2022-03-12 12:06:35 +01:00
01da1a06b8 feat(client): disable "Toggle Page Orientation" when there's only one page on the artboard
fix #655
2022-03-12 11:59:14 +01:00
82bf44daa2 feat(client): add mm/yyyy date option to date format options
fixes #656
2022-03-12 11:48:07 +01:00
2cbc582a12 feat(client): add sitemap generation to next app 2022-03-12 11:44:51 +01:00
2b9f016b95 New translations modals.json (Spanish) 2022-03-12 09:55:25 +01:00
358c97eb71 New translations dashboard.json (Spanish) 2022-03-12 09:55:19 +01:00
76ef513b46 New translations landing.json (Spanish) 2022-03-12 09:55:18 +01:00
497c6e01f1 New translations builder.json (Spanish) 2022-03-12 09:55:14 +01:00
e78c4a9adb New translations common.json (Spanish) 2022-03-12 09:55:12 +01:00
30d0151bdb Merge pull request #646 from AmruthPillai/i18n_main
New Crowdin updates
2022-03-11 20:28:50 +01:00
4dd94c3363 Update CHANGELOG.md 2022-03-11 20:27:25 +01:00
f711b089bc New translations landing.json (German) 2022-03-11 20:25:38 +01:00
01c1125153 New translations modals.json (German) 2022-03-11 20:25:37 +01:00
fa42d82416 New translations dashboard.json (German) 2022-03-11 20:25:32 +01:00
6322d4d105 New translations builder.json (German) 2022-03-11 20:25:28 +01:00
77467929c7 New translations common.json (German) 2022-03-11 20:25:27 +01:00
3a524f9c9c fix(lang): add hi, de to next-i18next 2022-03-11 20:21:35 +01:00
63f900870b chore(release): 3.0.0 2022-03-11 20:03:50 +01:00
32f78e85f7 Merge pull request #645 from AmruthPillai/feat/add-docs-workspace
Add docs powered by Docusaurus v2
2022-03-11 20:03:29 +01:00
1cc2232730 docs(docusaurus): update docs, add languages, ready to build 2022-03-11 20:02:16 +01:00
2ff6761630 Merge branch 'main' into feat/add-docs-workspace 2022-03-11 19:48:35 +01:00
5836e55a36 docs(readme): update readme with languages section, add license badge 2022-03-11 19:42:07 +01:00
ec98c14fbd Create LICENSE 2022-03-11 19:40:38 +01:00
78c1f5a380 Delete feature_request.md 2022-03-11 19:29:10 +01:00
808fa45124 Delete bug_report.md 2022-03-11 19:29:04 +01:00
2625ed4f3d Merge pull request #644 from AmruthPillai/i18n_main
New Crowdin updates
2022-03-11 19:27:42 +01:00
40085f8d78 New translations modals.json (Hindi) 2022-03-11 19:26:50 +01:00
f4e3be178c New translations landing.json (German) 2022-03-11 19:26:48 +01:00
601f61c59a New translations dashboard.json (Hindi) 2022-03-11 19:26:47 +01:00
59049e8f77 New translations modals.json (German) 2022-03-11 19:26:45 +01:00
798e77f693 New translations landing.json (Hindi) 2022-03-11 19:26:44 +01:00
78565079e7 New translations common.json (Hindi) 2022-03-11 19:26:42 +01:00
0bec4cff05 New translations dashboard.json (German) 2022-03-11 19:26:38 +01:00
26dc0069f9 New translations common.json (German) 2022-03-11 19:26:36 +01:00
90bb80b1e2 New translations builder.json (German) 2022-03-11 19:26:35 +01:00
61ed3ff018 New translations modals.json (Kannada) 2022-03-11 19:26:34 +01:00
36a12e82a2 New translations builder.json (Hindi) 2022-03-11 19:26:26 +01:00
a3cf1752cc Merge pull request #643 from AmruthPillai/i18n_main
New Crowdin updates
2022-03-11 19:06:12 +01:00
5b79e23564 Merge branch 'main' into i18n_main 2022-03-11 19:06:05 +01:00
300e4a790d New translations modals.json (Kannada) 2022-03-11 19:04:32 +01:00
ba4666b767 New translations modals.json (Tamil) 2022-03-11 19:04:31 +01:00
b283c6ee8f New translations landing.json (Tamil) 2022-03-11 19:04:29 +01:00
316eca35ef New translations common.json (Kannada) 2022-03-11 19:04:27 +01:00
16c18de964 New translations common.json (Tamil) 2022-03-11 19:04:26 +01:00
0c23af4be8 New translations builder.json (Kannada) 2022-03-11 19:04:25 +01:00
fe1b325fdf New translations builder.json (Tamil) 2022-03-11 19:04:24 +01:00
9395a4d578 docs(style): update CHANGELOG.md 2022-03-11 15:46:49 +01:00
c11f92841b chore(release): 3.0.0-beta.6 2022-03-11 15:44:42 +01:00
2654cba039 fix(webkit): fix issue with webkit not supporting .at() 2022-03-11 15:40:25 +01:00
7d8828a358 fix(i18n): add missing translation keys, update lang/locale logic 2022-03-11 08:43:20 +01:00
8bc7d2599e feat(lang): add language switcher on the landing page, in the footer 2022-03-10 21:59:16 +01:00
036adbfc96 Delete .DS_Store 2022-03-10 15:34:02 +01:00
4b7e43424c style(changelog): add standard-version to automate releases and tags 2022-03-10 15:32:46 +01:00
0f1c3a8142 chore(release): 3.0.0 2022-03-10 15:29:49 +01:00
8dc27ecf07 Merge pull request #641 from AmruthPillai/i18n_main
New Crowdin updates
2022-03-10 14:58:45 +01:00
a05917b00d New translations modals.json (Kannada) 2022-03-10 14:58:17 +01:00
d5f2eea34c New translations landing.json (Kannada) 2022-03-10 14:58:16 +01:00
29bc3f33a6 New translations dashboard.json (Kannada) 2022-03-10 14:58:15 +01:00
b332b77eff New translations dashboard.json (Tamil) 2022-03-10 14:58:14 +01:00
8e09db276e New translations builder.json (Kannada) 2022-03-10 14:58:12 +01:00
2f7cfd2add New translations builder.json (Tamil) 2022-03-10 14:58:11 +01:00
6a4464b239 New translations common.json (Kannada) 2022-03-10 14:29:16 +01:00
972e8b1bcf fix(app): fix issue with using swipelayout 2022-03-10 14:13:54 +01:00
ad916c5b07 Create close-stale.yml 2022-03-10 09:37:47 +01:00
ef3b2c5638 docs(source-code): add docs to build project from source, docker + local build 2022-03-09 14:05:40 +01:00
6c671f2dba Merge branch 'main' into feat/add-docs-workspace 2022-03-09 11:08:17 +01:00
dc4aa0b496 feat(docs): add docusaurus workspace, initial setup of docs 2022-03-08 23:54:00 +01:00
199 changed files with 16637 additions and 1083 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@ -3,15 +3,15 @@ TZ=UTC
SECRET_KEY=change-me
# URLs
PUBLIC_URL=http://localhost:3000
PUBLIC_SERVER_URL=http://localhost:3100
PUBLIC_URL=http://<SERVER-IP>
PUBLIC_SERVER_URL=http://<SERVER-IP>/api
# Database
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_USERNAME=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DATABASE=reactive_resume
POSTGRES_DATABASE=postgres
POSTGRES_SSL_CERT=
# Auth

1
.github/FUNDING.yml vendored Normal file
View File

@ -0,0 +1 @@
custom: https://paypal.me/RajaRajanA

View File

@ -1,38 +0,0 @@
---
name: Bug report
about: Create a report to help improve
title: "[BUG] "
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.

View File

@ -1,20 +0,0 @@
---
name: Feature request
about: Suggest an idea for this project
title: "[FEATURE] "
labels: enhancement
assignees: AmruthPillai
---
**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.

16
.github/workflows/close-stale.yml vendored Normal file
View File

@ -0,0 +1,16 @@
name: 'Close stale issues and PRs'
on:
schedule:
- cron: '0 0 * * *'
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v5.0.0
with:
stale-pr-message: 'This PR is stale because it has been open for 30 days with no activity. Remove the stale label or comment on this PR, otherwise it would be closed in 5 days.'
stale-issue-message: 'This issue is stale because it has been open for 30 days with no activity. Remove the stale label or comment on this issue, otherwise it would be closed in 5 days.'
days-before-stale: 30
days-before-close: 5

View File

@ -1,11 +1,18 @@
# Build Artifacts
dist
.next
# Schema
schema/dist
# Server
server/dist
# Client
client/.next
client/public/__ENV.js
# IDEs
.vscode
# Project Metadata
LICENSE
README.md
CHANGELOG.md
@ -18,4 +25,8 @@ Dockerfile
docker-compose.yml
# Android App
/app
/app
# Docs
docs/build
docs/.docusaurus

24
.vscode/settings.json vendored
View File

@ -1,15 +1,25 @@
{
"css.validate": false,
"scss.validate": false,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
},
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"editor.wordWrap": "on",
"eslint.workingDirectories": ["schema", "client", "server"],
"i18n-ally.enabledFrameworks": ["i18next"],
"i18n-ally.localesPaths": ["client/public/locales"],
"i18n-ally.sourceLanguage": "en",
"i18n-ally.keystyle": "nested"
}
"eslint.workingDirectories": [
"schema",
"client",
"server"
],
"i18n-ally.enabledFrameworks": [
"react"
],
"i18n-ally.keystyle": "nested",
"i18n-ally.localesPaths": [
"client/public/locales"
],
"i18n-ally.namespace": true,
"i18n-ally.pathMatcher": "{locale}/{namespaces}.{ext}",
"i18n-ally.sortKeys": true,
"scss.validate": false
}

128
CHANGELOG.md Normal file
View File

@ -0,0 +1,128 @@
# Changelog
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.5](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.2.4...v3.2.5) (2022-03-16)
### Features
* **i18n:** add danish, polish and turkish locales to i18n ([97e9432](https://github.com/AmruthPillai/Reactive-Resume/commit/97e9432d6bd887e666a3443fbfde9a92cef53965))
### Bug Fixes
* **client/templates:** fix text veering off of artboard in most templates ([b2f1fb3](https://github.com/AmruthPillai/Reactive-Resume/commit/b2f1fb3a5502988a49c5cd3e496d9d165f5c1792)), closes [#702](https://github.com/AmruthPillai/Reactive-Resume/issues/702)
### [3.2.4](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.2.3...v3.2.4) (2022-03-14)
### [3.2.3](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.2.2...v3.2.3) (2022-03-14)
### Features
* **client/import:** implement import json from reactive resume v2 ([42408ce](https://github.com/AmruthPillai/Reactive-Resume/commit/42408ce8c5ce55904854f9f6e0481889a01edfb8))
### [3.2.2](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.2.1...v3.2.2) (2022-03-14)
### Bug Fixes
* **client/skills:** make skill level optional ([02e396b](https://github.com/AmruthPillai/Reactive-Resume/commit/02e396bfdbf07ae75661f1e7e4e55060cacee7d0))
### [3.2.1](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.2.0...v3.2.1) (2022-03-14)
### Features
* **i18n:** add Chinese (Simplified) language to locales ([549363b](https://github.com/AmruthPillai/Reactive-Resume/commit/549363bbe5bdd781699dea9506bd4baedf5740d1))
### Bug Fixes
* **client/basics:** fix issue with overlapping photo filters on safari/webkit/iOS ([e6bda68](https://github.com/AmruthPillai/Reactive-Resume/commit/e6bda688ac3ba1c04e82721add92e755ea5386c3))
* **docker:** fix docker-compose for production grade deployments ([57f7edc](https://github.com/AmruthPillai/Reactive-Resume/commit/57f7edc13432a038c907afc6cb74b5182a9b2333))
## [3.2.0](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.1.4...v3.2.0) (2022-03-14)
### Features
* **i18n:** add Bengali, Italian and other languages ([21931bc](https://github.com/AmruthPillai/Reactive-Resume/commit/21931bc324b5e2440baaaaa2e52a93b4f2c766f8))
### Bug Fixes
* **app:** fix issue with external link redirection in android app ([b18120b](https://github.com/AmruthPillai/Reactive-Resume/commit/b18120b3f7223981e28c0441a6b7725787186edb))
* **client:** fix issue with react-query cache ([ed75a85](https://github.com/AmruthPillai/Reactive-Resume/commit/ed75a858279047dfd43152e041c1a09a625417f5))
### [3.1.4](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.1.3...v3.1.4) (2022-03-12)
### Bug Fixes
* **client:** exported pdf did not contain "Present" keyword with translations ([cf670af](https://github.com/AmruthPillai/Reactive-Resume/commit/cf670af4035dc9b462cf5b1aad06ca089cf1d40c))
* **client:** fix issues raised through lgtm alerts ([dfccb31](https://github.com/AmruthPillai/Reactive-Resume/commit/dfccb3130f889934d31196226be3d33e772f323b))
### [3.1.3](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.1.2...v3.1.3) (2022-03-12)
### Bug Fixes
* **server:** reform url for pdf generation and download ([6d55f91](https://github.com/AmruthPillai/Reactive-Resume/commit/6d55f917eab3cb2f5f3a90c5a18f03b625d60021)), closes [#661](https://github.com/AmruthPillai/Reactive-Resume/issues/661)
### [3.1.2](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.1.1...v3.1.2) (2022-03-12)
### CI
* **docker:**: include traefik routing and proxy to ensure server connections pass in local ([11cb066](https://github.com/AmruthPillai/Reactive-Resume/commit/11cb066573c6917857b79c028b97fcda1acaf90a))
### [3.1.1](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.1.0...v3.1.1) (2022-03-12)
### Features
* **client:** add product hunt announcement banner ([b515fc3](https://github.com/AmruthPillai/Reactive-Resume/commit/b515fc36e7f282db92e8eb509b6c5004a944fa95))
## [3.1.0](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.0.0...v3.1.0) (2022-03-12)
### Features
* **client:** add "spanish (es)" language to i18n locales ([bf167f8](https://github.com/AmruthPillai/Reactive-Resume/commit/bf167f81a3659677dada55856f5eaf0fc469e697))
* **client:** add mm/yyyy date option to date format options ([82bf44d](https://github.com/AmruthPillai/Reactive-Resume/commit/82bf44daa24422156779e9b38d3dc695176eaa09)), closes [#656](https://github.com/AmruthPillai/Reactive-Resume/issues/656)
* **client:** add sitemap generation to next app ([2cbc582](https://github.com/AmruthPillai/Reactive-Resume/commit/2cbc582a12b72b3012246022d4b518ed657d4c08))
* **client:** disable "Toggle Page Orientation" when there's only one page on the artboard ([01da1a0](https://github.com/AmruthPillai/Reactive-Resume/commit/01da1a06b802f1063a41d7a9a682e76b1daf9461)), closes [#655](https://github.com/AmruthPillai/Reactive-Resume/issues/655)
### Bug Fixes
* **client:** remove hard-coded "keywords:" in certain templates ([dda42b4](https://github.com/AmruthPillai/Reactive-Resume/commit/dda42b4c6b3bc359ac4f2bb91ca8118ddc84ec07)), closes [#650](https://github.com/AmruthPillai/Reactive-Resume/issues/650)
* **client:** show "present" string if end date is not entered, also add to i18n locales ([b5cd6c4](https://github.com/AmruthPillai/Reactive-Resume/commit/b5cd6c412b5b6b6ca7bb43c3801762de451f06b4)), closes [#653](https://github.com/AmruthPillai/Reactive-Resume/issues/653)
* **server:** photo uploads not working, fix save location and returned url ([799f208](https://github.com/AmruthPillai/Reactive-Resume/commit/799f20823e6d97a1ff0ba2c45c61d56304d0fa58)), closes [#658](https://github.com/AmruthPillai/Reactive-Resume/issues/658)
## [3.0.0](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.0.0-beta.6...v3.0.0) (2022-03-11)
### Features
* **lang**: add German, Kannada and Tamil languages to the app ([3a524f9](https://github.com/AmruthPillai/Reactive-Resume/commit/3a524f9c9c7a0e446491265b2242ad3dfeae188c))
* **docs:** add docusaurus workspace, initial setup of docs ([dc4aa0b](https://github.com/AmruthPillai/Reactive-Resume/commit/dc4aa0b496096bd59c45426bfcea6ba7db5f5c01))
## [3.0.0-beta.6](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.0.0-beta.5...v3.0.0-beta.6) (2022-03-11)
### Features
* **lang:** add language switcher on the landing page, in the footer ([8bc7d25](https://github.com/AmruthPillai/Reactive-Resume/commit/8bc7d2599ef6af7a07bfbe886c43844152b0d9f7))
### Bug Fixes
* **i18n:** add missing translation keys, update lang/locale logic ([7d8828a](https://github.com/AmruthPillai/Reactive-Resume/commit/7d8828a358d653bb162877a64c75028eb82678cd))
* **webkit:** fix issue with webkit not supporting .at() ([2654cba](https://github.com/AmruthPillai/Reactive-Resume/commit/2654cba039eb73d33257c36fa90a52cabc9fda96))
## [3.0.0-beta.5](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.0.0-beta.4...v3.0.0-beta.5) (2022-03-10)
### Bug Fixes
* **app:** fix issue with using swipelayout ([972e8b1](https://github.com/AmruthPillai/Reactive-Resume/commit/972e8b1bcf9ad44d8915bf23d189711672937bc0))

128
CODE_OF_CONDUCT.md Normal file
View File

@ -0,0 +1,128 @@
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or
advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
im.amruth@gmail.com.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series
of actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within
the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.

21
LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2022 Amruth Pillai
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -2,10 +2,13 @@
# 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)
[![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)
[![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://beta.rxresu.me/)
## [Go to App](https://rxresu.me) | [Docs](https://docs.rxresu.me)
Reactive Resume is a free and open source resume builder thats built to make the mundane tasks of creating, updating and sharing your resume as easy as 1, 2, 3. With this app, you can create multiple resumes, share them with recruiters through a unique link and print as PDF, all for free, no advertisements, without losing the integrity and privacy of your data.
@ -15,13 +18,13 @@ You have complete control over what goes into your resume, how it looks, what co
- Free, forever
- No Advertising
- No Tracking (no 🍪s too)
- No User Tracking
- Sync your data across devices
- Accessible in multiple languages
- Import data from [LinkedIn](https://www.linkedin.com/), [JSON Resume](https://jsonresume.org/)
- Manage multiple resumes with one account
- Open Source (with large community support)
- Send your resume to others with a unique sharable link
- Accessible in multiple languages, [help translate here](https://translate.rxresu.me/)
- Pick any font from [Google Fonts](https://fonts.google.com/) to use on your resume
- Choose from 6 vibrant templates and more coming soon
- Export your resume to JSON or PDF format with just one click
@ -31,64 +34,35 @@ You have complete control over what goes into your resume, how it looks, what co
- Tailor-made Backend and Database, isolated from Google, Amazon etc.
- **Oh, and did I mention that it's free?**
## Docker Setup
## Languages
You can pull the prebuilt docker images right off the shelf from either [Docker Hub](https://hub.docker.com/repository/docker/amruthpillai/reactive-resume) or [GitHub Container Registry](https://ghcr.io/amruthpillai/reactive-resume). Keep in mind, you would also need a database for this to work as intended.
- Bengali (বাংলা)
- Chinese (中文)
- Danish (Dansk)
- English
- French (Français)
- German (Deutsch)
- Hindi (हिन्दी)
- Italian (Italiano)
- Kannada (ಕನ್ನಡ)
- Polish (Polski)
- Spanish (Español)
- Tamil (தமிழ்)
- Turkish (Türkçe)
```sh
# Server
docker run -p 3100:3100 --env-file .env amruthpillai/reactive-resume:server-latest
Help by [translating Reactive Resume](https://translate.rxresu.me) to your language!
# Client
docker run -p 3000:3000 --env-file .env amruthpillai/reactive-resume:client-latest
```
## Tutorial
Or, to make your life easier there's a simple `docker-compose.yml` included to help you get set up for success.
```sh
docker compose up
```
The docs include an extensive [Tutorial](https://docs.rxresu.me/tutorial) section which outline the features of Reactive Resume and help you through building your first resume on the app.
## Build from Source
If you don't want to use Docker, I understand. There's an old-school way to build the app too. This project, and these instructions rely heavily on [pnpm](https://pnpm.io/) so you might want to have that installed on your system before you continue.
1. Clone the repository locally, or use GitHub Codespaces or CodeSandbox
```
git clone https://github.com/AmruthPillai/Reactive-Resume.git
cd Reactive-Resume
```
2. Install dependencies using `pnpm`, but feel free to use any other package manager that supports npm workspaces.
```
pnpm install
```
3. Copy the `.env.example` file to `.env` in the project root and fill it with values according to your setup. You can skip the SendGrid variables if you don't want to set up mail right away.
```
cp .env.example .env
```
1. Use Docker Compose to create a PostgreSQL instance and a `reactive_resume` database, or feel free to use your own and modify the variables used in `.env`
```
docker-compose up -d postgres
```
5. Run the project and start building!
```
pnpm dev
```
For extensive information on how to build the app on your local machine, head over to the docs's [Source Code](https://docs.rxresu.me/source-code) section.
## Contributing
Please refer to the project's style and contribution guidelines for submitting pull requests.
In general, this project follows the "fork-and-pull" Git workflow.
This project makes use of [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) style and workflow for commit messages to ensure that the CHANGELOG is auto-generated. In general, this project follows the "fork-and-pull" Git workflow.
1. **Fork** the repo on GitHub
2. **Clone** the project to your own machine
@ -104,17 +78,19 @@ Use the [GitHub Issues](https://github.com/AmruthPillai/Reactive-Resume/issues/n
## Donations
Reactive Resume would be nothing without the folks who supported me and kept the project alive in the beginning, and your cotinued support is what keeps me going. If you found Reactive Resume to be useful, helpful or just insightful and appreciate the effort I took to make the project, please consider donating as little or as much as your can.
Reactive Resume would be nothing without the folks who supported me and kept the project alive in the beginning, and your continued support is what keeps me going. If you found Reactive Resume to be useful, helpful or just insightful and appreciate the effort I took to make the project, please consider donating as little or as much as you can.
[☕️ Buy me a coffee](https://www.buymeacoffee.com/AmruthPillai)
### [💸 PayPal](https://paypal.me/RajaRajanA)
## Infrastructure
- Next.js, frontend
- NestJS, backend
- PostgreSQL, database
- DigitalOcean, infrastructure provider
- Crowdin, translation management platform
- [Next.js](https://nextjs.org/), frontend
- [NestJS](https://nestjs.com/), backend
- [PostgreSQL](https://www.postgresql.org/), database
- [DigitalOcean](https://www.digitalocean.com/), infrastructure provider
- [Crowdin](https://translate.rxresu.me/), translation management platform
&nbsp;
<a href="https://pillai.xyz/digitalocean">
<img src="https://opensource.nyc3.cdn.digitaloceanspaces.com/attribution/assets/PoweredByDO/DO_Powered_by_Badge_blue.svg" width="200px" />

View File

@ -6,31 +6,35 @@ plugins {
android {
compileSdk 32
def appVersionCode = Integer.valueOf(System.env.BUILD_NUMBER ?: 0)
defaultConfig {
applicationId "me.rxresu.app"
minSdk 21
targetSdk 32
versionCode 3
versionName "1.0"
versionCode appVersionCode
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
resConfigs "en"
}
buildTypes {
release {
minifyEnabled false
minifyEnabled true
shrinkResources true
zipAlignEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
buildFeatures {
viewBinding true
}
@ -39,8 +43,4 @@ android {
dependencies {
implementation 'androidx.core:core-ktx:1.7.0'
implementation 'com.google.android.material:material:1.5.0'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="me.rxresu.app">
<uses-permission android:name="android.permission.INTERNET"/>
@ -10,11 +11,11 @@
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.ReactiveResume.NoActionBar">
android:theme="@style/AppTheme">
<activity
android:configChanges="orientation|screenSize"
android:name=".MainActivity"
android:exported="true"
android:theme="@style/Theme.ReactiveResume.NoActionBar">
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

View File

@ -0,0 +1,21 @@
package me.rxresu.app
import android.content.Intent
import android.net.Uri
import android.webkit.WebView
import android.webkit.WebViewClient
internal class CustomWebViewClient : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
val hostname = "rxresu.me"
val uri = Uri.parse(url)
if (uri.host != null && uri.host!!.endsWith(hostname)) {
return false
}
view.context.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
return true
}
}

View File

@ -1,23 +1,15 @@
package me.rxresu.app
import android.annotation.SuppressLint
import android.graphics.Bitmap
import android.os.Bundle
import android.view.KeyEvent
import android.webkit.WebResourceError
import android.webkit.WebResourceRequest
import android.webkit.WebView
import android.webkit.WebViewClient
import androidx.appcompat.app.AppCompatActivity
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
class MainActivity : AppCompatActivity() {
private lateinit var webView: WebView
private lateinit var swipeLayout: SwipeRefreshLayout
private var isLoaded: Boolean = false
private var webURL = "https://beta.rxresu.me"
private var url = "https://rxresu.me"
@SuppressLint("SetJavaScriptEnabled")
override fun onCreate(savedInstanceState: Bundle?) {
@ -25,63 +17,19 @@ class MainActivity : AppCompatActivity() {
setContentView(R.layout.activity_main)
webView = findViewById(R.id.webview)
swipeLayout = findViewById(R.id.swipelayout)
webView.webViewClient = CustomWebViewClient()
webView.settings.javaScriptEnabled = true
webView.settings.userAgentString = "Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Mobile Safari/537.36"
WebView.setWebContentsDebuggingEnabled(true)
swipeLayout.setOnRefreshListener {
webView.reload()
swipeLayout.isRefreshing = false
}
webView.loadUrl(url)
}
override fun onResume() {
if (!isLoaded) loadWebView()
super.onResume()
}
private fun loadWebView() {
webView.loadUrl(webURL)
webView.webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
val url = request?.url.toString()
view?.loadUrl(url)
return super.shouldOverrideUrlLoading(view, request)
}
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
super.onPageStarted(view, url, favicon)
}
override fun onPageFinished(view: WebView?, url: String?) {
isLoaded = true
super.onPageFinished(view, url)
}
override fun onReceivedError(view: WebView, request: WebResourceRequest, error: WebResourceError) {
isLoaded = false
super.onReceivedError(view, request, error)
}
override fun onBackPressed() {
if (webView.canGoBack()) {
webView.goBack()
} else {
super.onBackPressed()
}
}
override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
if (event.action == KeyEvent.ACTION_DOWN) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (webView.canGoBack()) {
webView.goBack()
}
return true
}
}
return super.onKeyDown(keyCode, event)
}
}

View File

@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/swipelayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
@ -10,10 +9,9 @@
android:id="@+id/webview"
android:layout_width="0dp"
android:layout_height="0dp"
android:visibility="visible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -1,12 +1,6 @@
<resources>
<style name="Theme.ReactiveResume" parent="Theme.MaterialComponents.DayNight.DarkActionBar" />
<style name="Theme.ReactiveResume.NoActionBar">
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="Theme.ReactiveResume.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
<style name="Theme.ReactiveResume.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
</resources>

View File

@ -33,6 +33,7 @@ const ArtboardController: React.FC<ReactZoomPanPinchRef> = ({ zoomIn, zoomOut, c
const resume = useAppSelector((state) => state.resume);
const isDesktop = useMediaQuery(theme.breakpoints.up('sm'));
const pages = useAppSelector((state) => state.resume.metadata.layout);
const { left, right } = useAppSelector((state) => state.build.sidebar);
const orientation = useAppSelector((state) => state.build.page.orientation);
@ -74,19 +75,19 @@ const ArtboardController: React.FC<ReactZoomPanPinchRef> = ({ zoomIn, zoomOut, c
})}
>
<div className={styles.controller}>
<Tooltip arrow placement="top" title={t<string>('builder.controller.tooltip.zoom-in')}>
<Tooltip arrow placement="top" title={t('builder.controller.tooltip.zoom-in') as string}>
<ButtonBase onClick={() => zoomIn(0.25)}>
<ZoomIn fontSize="medium" />
</ButtonBase>
</Tooltip>
<Tooltip arrow placement="top" title={t<string>('builder.controller.tooltip.zoom-out')}>
<Tooltip arrow placement="top" title={t('builder.controller.tooltip.zoom-out') as string}>
<ButtonBase onClick={() => zoomOut(0.25)}>
<ZoomOut fontSize="medium" />
</ButtonBase>
</Tooltip>
<Tooltip arrow placement="top" title={t<string>('builder.controller.tooltip.center-artboard')}>
<Tooltip arrow placement="top" title={t('builder.controller.tooltip.center-artboard') as string}>
<ButtonBase onClick={() => centerView(0.95)}>
<FilterCenterFocus fontSize="medium" />
</ButtonBase>
@ -96,23 +97,25 @@ const ArtboardController: React.FC<ReactZoomPanPinchRef> = ({ zoomIn, zoomOut, c
{isDesktop && (
<>
<Tooltip arrow placement="top" title={t<string>('builder.controller.tooltip.toggle-orientation')}>
<ButtonBase onClick={handleTogglePageOrientation}>
{orientation === 'vertical' ? (
<AlignHorizontalCenter fontSize="medium" />
) : (
<AlignVerticalCenter fontSize="medium" />
)}
</ButtonBase>
</Tooltip>
{pages.length > 1 && (
<Tooltip arrow placement="top" title={t('builder.controller.tooltip.toggle-orientation') as string}>
<ButtonBase onClick={handleTogglePageOrientation}>
{orientation === 'vertical' ? (
<AlignHorizontalCenter fontSize="medium" />
) : (
<AlignVerticalCenter fontSize="medium" />
)}
</ButtonBase>
</Tooltip>
)}
<Tooltip arrow placement="top" title={t<string>('builder.controller.tooltip.toggle-page-break-line')}>
<Tooltip arrow placement="top" title={t('builder.controller.tooltip.toggle-page-break-line') as string}>
<ButtonBase onClick={handleTogglePageBreakLine}>
<InsertPageBreak fontSize="medium" />
</ButtonBase>
</Tooltip>
<Tooltip arrow placement="top" title={t<string>('builder.controller.tooltip.toggle-sidebars')}>
<Tooltip arrow placement="top" title={t('builder.controller.tooltip.toggle-sidebars') as string}>
<ButtonBase onClick={handleToggleSidebar}>
<ViewSidebar fontSize="medium" />
</ButtonBase>
@ -122,13 +125,13 @@ const ArtboardController: React.FC<ReactZoomPanPinchRef> = ({ zoomIn, zoomOut, c
</>
)}
<Tooltip arrow placement="top" title={t<string>('builder.controller.tooltip.copy-link')}>
<Tooltip arrow placement="top" title={t('builder.controller.tooltip.copy-link') as string}>
<ButtonBase onClick={handleCopyLink}>
<Link fontSize="medium" />
</ButtonBase>
</Tooltip>
<Tooltip arrow placement="top" title={t<string>('builder.controller.tooltip.export-pdf')}>
<Tooltip arrow placement="top" title={t('builder.controller.tooltip.export-pdf') as string}>
<ButtonBase onClick={handleExportPDF} disabled={isLoading}>
<Download fontSize="medium" />
</ButtonBase>

View File

@ -184,7 +184,7 @@ const Header = () => {
<ListItemText>{t('builder.header.menu.share-link')}</ListItemText>
</MenuItem>
) : (
<Tooltip arrow placement="right" title={t<string>('builder.header.menu.tooltips.share-link')}>
<Tooltip arrow placement="right" title={t('builder.header.menu.tooltips.share-link') as string}>
<div>
<MenuItem>
<ListItemIcon>
@ -196,7 +196,7 @@ const Header = () => {
</Tooltip>
)}
<Tooltip arrow placement="right" title={t<string>('builder.header.menu.tooltips.delete')}>
<Tooltip arrow placement="right" title={t('builder.header.menu.tooltips.delete') as string}>
<MenuItem onClick={handleDelete}>
<ListItemIcon>
<Delete className="scale-90" />

View File

@ -27,10 +27,12 @@ const Basics = () => {
<Heading path="sections.basics" name={t('builder.leftSidebar.sections.basics.heading')} />
<div className="grid grid-cols-1 gap-4 sm:grid-cols-2">
<div className="flex flex-col items-center gap-4 sm:col-span-2 sm:flex-row">
<PhotoUpload />
<div className="grid items-center gap-4 sm:col-span-2 sm:grid-cols-3">
<div className="mx-auto">
<PhotoUpload />
</div>
<div className="flex w-full flex-col-reverse gap-4 sm:flex-col sm:gap-2">
<div className="grid gap-2 w-full sm:col-span-2">
<ResumeInput label={t('builder.leftSidebar.sections.basics.name.label')} path="basics.name" />
<Button variant="outlined" startIcon={<PhotoFilter />} onClick={handleClick}>

View File

@ -58,14 +58,14 @@ const PhotoFilters = () => {
<div className="flex items-center">
<FormControlLabel
label={t<string>('builder.leftSidebar.sections.basics.photo-filters.effects.grayscale.label')}
label={t('builder.leftSidebar.sections.basics.photo-filters.effects.grayscale.label') as string}
control={
<Checkbox color="secondary" checked={grayscale} onChange={(_, value) => handleSetGrayscale(value)} />
}
/>
<FormControlLabel
label={t<string>('builder.leftSidebar.sections.basics.photo-filters.effects.border.label')}
label={t('builder.leftSidebar.sections.basics.photo-filters.effects.border.label') as string}
control={<Checkbox color="secondary" checked={border} onChange={(_, value) => handleSetBorder(value)} />}
/>
</div>

View File

@ -67,8 +67,8 @@ const PhotoUpload: React.FC = () => {
<Tooltip
title={
isEmpty(photo.url)
? t<string>('builder.leftSidebar.sections.basics.photo-upload.tooltip.upload')
: t<string>('builder.leftSidebar.sections.basics.photo-upload.tooltip.remove')
? (t('builder.leftSidebar.sections.basics.photo-upload.tooltip.upload') as string)
: (t('builder.leftSidebar.sections.basics.photo-upload.tooltip.remove') as string)
}
>
<Avatar sx={{ width: 96, height: 96 }} src={photo.url} />

View File

@ -41,14 +41,14 @@ const Section: React.FC<Props> = ({
const visibility = useAppSelector<boolean>((state) => get(state.resume, `${path}.visible`, true));
const handleAdd = () => {
const id = path ? (path.split('.').at(-1) as string) : '';
const id = path.split('.')[1];
const modal: ModalName = validate(id) ? 'builder.sections.custom' : `builder.${path}`;
dispatch(setModalState({ modal, state: { open: true, payload: { path } } }));
};
const handleEdit = (item: ListItem) => {
const id = path ? (path.split('.').at(-1) as string) : '';
const id = path.split('.')[1];
const modal: ModalName = validate(id) ? 'builder.sections.custom' : `builder.${path}`;
const payload = validate(id) ? { path, item } : { item };

View File

@ -32,7 +32,7 @@ const SectionSettings: React.FC<Props> = ({ path }) => {
return (
<div>
<Tooltip title={t<string>('builder.common.columns.tooltip')}>
<Tooltip title={t('builder.common.columns.tooltip') as string}>
<ButtonBase onClick={handleClick} sx={{ padding: 1, borderRadius: 1 }} className="opacity-50 hover:opacity-75">
<ViewWeek /> <span className="ml-1.5 text-xs">{columns}</span>
</ButtonBase>

View File

@ -62,7 +62,7 @@ const Layout = () => {
path="metadata.layout"
name={t('builder.rightSidebar.sections.layout.heading')}
action={
<Tooltip title={t<string>('builder.rightSidebar.sections.layout.tooltip.reset-layout')}>
<Tooltip title={t('builder.rightSidebar.sections.layout.tooltip.reset-layout') as string}>
<IconButton onClick={handleResetLayout}>
<Restore />
</IconButton>
@ -81,7 +81,7 @@ const Layout = () => {
<div className={clsx(styles.delete, { hidden: pageIndex === 0 })}>
<Tooltip
title={t<string>('builder.common.actions.delete', { token: t('builder.common.glossary.page') })}
title={t('builder.common.actions.delete', { token: t('builder.common.glossary.page') }) as string}
>
<IconButton size="small" onClick={() => handleDeletePage(pageIndex)}>
<Close fontSize="small" />

View File

@ -13,17 +13,18 @@ import {
import { DateConfig, Resume } from '@reactive-resume/schema';
import dayjs from 'dayjs';
import get from 'lodash/get';
import { useRouter } from 'next/router';
import { useTranslation } from 'next-i18next';
import { useMemo } from 'react';
import { useMutation } from 'react-query';
import Heading from '@/components/shared/Heading';
import ThemeSwitch from '@/components/shared/ThemeSwitch';
import { Language, languages } from '@/config/languages';
import { Language, languageMap, languages } from '@/config/languages';
import { ServerError } from '@/services/axios';
import queryClient from '@/services/react-query';
import { loadSampleData, LoadSampleDataParams, resetResume, ResetResumeParams } from '@/services/resume';
import { setLanguage, setTheme, togglePageBreakLine, togglePageOrientation } from '@/store/build/buildSlice';
import { setTheme, togglePageBreakLine, togglePageOrientation } from '@/store/build/buildSlice';
import { useAppDispatch, useAppSelector } from '@/store/hooks';
import { setResumeState } from '@/store/resume/resumeSlice';
import { dateFormatOptions } from '@/utils/date';
@ -33,9 +34,11 @@ const Settings = () => {
const dispatch = useAppDispatch();
const { locale, ...router } = useRouter();
const resume = useAppSelector((state) => state.resume);
const theme = useAppSelector((state) => state.build.theme);
const language = useAppSelector((state) => state.build.language);
const pages = useAppSelector((state) => state.resume.metadata.layout);
const breakLine = useAppSelector((state) => state.build.page.breakLine);
const orientation = useAppSelector((state) => state.build.page.orientation);
@ -59,7 +62,13 @@ const Settings = () => {
dispatch(setResumeState({ path: 'metadata.date.format', value }));
const handleChangeLanguage = (value: Language | null) => {
dispatch(setLanguage({ language: value?.code || 'en' }));
const { pathname, asPath, query, push } = router;
const code = value?.code || 'en';
document.cookie = `NEXT_LOCALE=${code}; path=/; expires=2147483647`;
dispatch(setResumeState({ path: 'metadata.locale', value: code }));
push({ pathname, query }, asPath, { locale: code });
};
const handleLoadSampleData = async () => {
@ -122,7 +131,7 @@ const Settings = () => {
disableClearable
className="my-2 w-full"
options={languages}
value={language}
value={languageMap[locale ?? 'en']}
isOptionEqualToValue={(a, b) => a.code === b.code}
onChange={(_, value) => handleChangeLanguage(value)}
renderInput={(params) => <TextField {...params} />}
@ -144,10 +153,15 @@ const Settings = () => {
<ListItem>
<ListItemText
primary={t('builder.rightSidebar.sections.settings.page.orientation.primary')}
secondary={t('builder.rightSidebar.sections.settings.page.orientation.secondary')}
secondary={
pages.length === 1
? t('builder.rightSidebar.sections.settings.page.orientation.disabled')
: t('builder.rightSidebar.sections.settings.page.orientation.secondary')
}
/>
<Switch
color="secondary"
disabled={pages.length === 1}
checked={orientation === 'horizontal'}
onChange={() => dispatch(togglePageOrientation())}
/>

View File

@ -63,7 +63,7 @@ const Sharing = () => {
<div className="mt-1 flex w-full">
<FormControlLabel
label={t<string>('builder.rightSidebar.sections.sharing.short-url.label')}
label={t('builder.rightSidebar.sections.sharing.short-url.label') as string}
control={
<Checkbox className="mr-1" checked={showShortUrl} onChange={(_, value) => setShowShortUrl(value)} />
}

View File

@ -1,4 +1,4 @@
import { Theme } from '@reactive-resume/schema';
import { Theme as ThemeType } from '@reactive-resume/schema';
import get from 'lodash/get';
import { useTranslation } from 'next-i18next';
@ -16,7 +16,7 @@ const Theme = () => {
const dispatch = useAppDispatch();
const { background, text, primary } = useAppSelector<Theme>((state) => get(state.resume, 'metadata.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 }));

View File

@ -161,7 +161,7 @@ const ResumePreview: React.FC<Props> = ({ resume }) => {
<ListItemText>{t('dashboard.resume.menu.share-link')}</ListItemText>
</MenuItem>
) : (
<Tooltip arrow placement="right" title={t<string>('dashboard.resume.menu.tooltips.share-link')}>
<Tooltip arrow placement="right" title={t('dashboard.resume.menu.tooltips.share-link') as string}>
<div>
<MenuItem>
<ListItemIcon>
@ -173,7 +173,7 @@ const ResumePreview: React.FC<Props> = ({ resume }) => {
</Tooltip>
)}
<Tooltip arrow placement="right" title={t<string>('dashboard.resume.menu.tooltips.delete')}>
<Tooltip arrow placement="right" title={t('dashboard.resume.menu.tooltips.delete') as string}>
<MenuItem onClick={handleDelete}>
<ListItemIcon>
<DeleteOutline className="scale-90" />

View File

@ -1,8 +1,8 @@
import { Testimony } from '@/data/testimonials';
import { Testimony as TestimonyType } from '@/data/testimonials';
import styles from './Testimony.module.scss';
type Props = Testimony;
type Props = TestimonyType;
const Testimony: React.FC<Props> = ({ name, message }) => {
return (

View File

@ -12,7 +12,7 @@ const ColorAvatar: React.FC<Props> = ({ color, size = 20, onClick }) => {
return (
<IconButton onClick={handleClick}>
<Avatar sx={{ bgcolor: color, width: size, height: size }}> </Avatar>
<Avatar sx={{ bgcolor: color, width: size, height: size }}>&nbsp;</Avatar>
</IconButton>
);
};

View File

@ -9,7 +9,7 @@ const Footer: React.FC<Props> = ({ className }) => {
const { t } = useTranslation();
return (
<footer className={clsx('text-xs', className)}>
<div className={clsx('text-xs', className)}>
<p>{t('common.footer.license')}</p>
<p>
@ -20,7 +20,7 @@ const Footer: React.FC<Props> = ({ className }) => {
</a>
</Trans>
</p>
</footer>
</div>
);
};

View File

@ -37,7 +37,7 @@ const Heading: React.FC<Props> = ({
const [editMode, setEditMode] = useState(false);
const id = useMemo(() => (path ? path.split('.').at(-1) : ''), [path]);
const id = useMemo(() => path.split('.')[1], [path]);
const icon = sections.find((x) => x.id === id)?.icon || <Grade />;
@ -72,19 +72,19 @@ const Heading: React.FC<Props> = ({
})}
>
{isEditable && (
<Tooltip title={t<string>('builder.common.tooltip.rename-section')}>
<Tooltip title={t('builder.common.tooltip.rename-section') as string}>
<IconButton onClick={toggleEditMode}>{editMode ? <Check /> : <DriveFileRenameOutline />}</IconButton>
</Tooltip>
)}
{isHideable && (
<Tooltip title={t<string>('builder.common.tooltip.toggle-visibility')}>
<Tooltip title={t('builder.common.tooltip.toggle-visibility') as string}>
<IconButton onClick={toggleVisibility}>{visibility ? <Visibility /> : <VisibilityOff />}</IconButton>
</Tooltip>
)}
{isDeletable && (
<Tooltip title={t<string>('builder.common.tooltip.delete-section')}>
<Tooltip title={t('builder.common.tooltip.delete-section') as string}>
<IconButton onClick={handleDelete}>
<Delete />
</IconButton>

View File

@ -0,0 +1,13 @@
.popover {
width: 460px;
@apply px-4 py-2;
}
.container {
@apply grid grid-cols-3 items-center justify-center gap-x-2;
}
.language {
@apply py-2 px-4 cursor-pointer text-center hover:underline;
}

View File

@ -0,0 +1,72 @@
import { Language } from '@mui/icons-material';
import { IconButton, Popover } 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';
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 { pathname, asPath, query } = router;
document.cookie = `NEXT_LOCALE=${locale}; path=/; expires=2147483647`;
dispatch(setResumeState({ path: 'metadata.locale', value: locale }));
router.push({ pathname, query }, asPath, { locale });
};
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>
))}
<a href="https://translate.rxresu.me" target="_blank" rel="noreferrer" className={styles.language}>
{t('common.footer.language.missing')}
</a>
</div>
</div>
</Popover>
</div>
);
};
export default LanguageSwitcher;

View File

@ -3,6 +3,7 @@ import { Divider, IconButton, ListItemIcon, ListItemText, Menu, MenuItem, Toolti
import { ListItem as ListItemType } from '@reactive-resume/schema';
import clsx from 'clsx';
import isFunction from 'lodash/isFunction';
import { useTranslation } from 'next-i18next';
import React, { useRef, useState } from 'react';
import { DropTargetMonitor, useDrag, useDrop, XYCoord } from 'react-dnd';
@ -26,6 +27,8 @@ type Props = {
};
const ListItem: React.FC<Props> = ({ item, index, title, subtitle, onMove, onEdit, onDelete, onDuplicate }) => {
const { t } = useTranslation();
const ref = useRef<HTMLDivElement>(null);
const [anchorEl, setAnchorEl] = useState<Element | null>(null);
@ -122,29 +125,25 @@ const ListItem: React.FC<Props> = ({ item, index, title, subtitle, onMove, onEdi
<ListItemIcon>
<DriveFileRenameOutline className="scale-90" />
</ListItemIcon>
<ListItemText>Edit</ListItemText>
<ListItemText>{t('builder.common.list.actions.edit')}</ListItemText>
</MenuItem>
<MenuItem onClick={() => handleDuplicate(item)}>
<ListItemIcon>
<FileCopy className="scale-90" />
</ListItemIcon>
<ListItemText>Duplicate</ListItemText>
<ListItemText>{t('builder.common.list.actions.duplicate')}</ListItemText>
</MenuItem>
<Divider />
<Tooltip
arrow
placement="right"
title="Are you sure you want to delete this item? This is an irreversible action."
>
<Tooltip arrow placement="right" title={t('builder.common.tooltip.delete-item') as string}>
<div>
<MenuItem onClick={() => handleDelete(item)}>
<ListItemIcon>
<DeleteOutline className="scale-90" />
</ListItemIcon>
<ListItemText>Delete</ListItemText>
<ListItemText>{t('builder.common.list.actions.delete')}</ListItemText>
</MenuItem>
</div>
</Tooltip>

View File

@ -5,11 +5,20 @@ export type Language = {
};
export const languages: Language[] = [
{
code: 'en',
name: 'English',
},
];
{ code: 'bn', name: 'Bengali', localName: 'বাংলা' },
{ code: 'da', name: 'Danish', localName: 'Dansk' },
{ code: 'de', name: 'German', localName: 'Deutsch' },
{ code: 'en', name: 'English' },
{ code: 'es', name: 'Spanish', localName: 'Español' },
{ code: 'fr', name: 'French', localName: 'Français' },
{ code: 'hi', name: 'Hindi', localName: 'हिन्दी' },
{ code: 'it', name: 'Italian', localName: 'Italiano' },
{ code: 'kn', name: 'Kannada', localName: 'ಕನ್ನಡ' },
{ code: 'pl', name: 'Polish', localName: 'Polski' },
{ code: 'ta', name: 'Tamil', localName: 'தமிழ்' },
{ code: 'tr', name: 'Turkish', localName: 'Türkçe' },
{ code: 'zh', name: 'Chinese', localName: '中文' },
].sort((a, b) => a.name.localeCompare(b.name));
export const languageMap: Record<string, Language> = languages.reduce(
(acc, lang) => ({

View File

@ -2,10 +2,14 @@
export const FONTS_QUERY = 'fonts';
export const RESUMES_QUERY = 'resumes';
// Regular Expressions
export const VALID_URL_REGEX = /[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)/;
// Date Formats
export const FILENAME_TIMESTAMP = 'DDMMYYYYHHmmss';
// Links
export const DONATION_URL = 'https://www.buymeacoffee.com/AmruthPillai';
export const DONATION_URL = 'https://paypal.me/RajaRajanA';
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

@ -13,6 +13,7 @@ import { Controller, useForm } from 'react-hook-form';
import BaseModal from '@/components/shared/BaseModal';
import MarkdownSupported from '@/components/shared/MarkdownSupported';
import { VALID_URL_REGEX } from '@/constants/index';
import { useAppDispatch, useAppSelector } from '@/store/hooks';
import { setModalState } from '@/store/modal/modalSlice';
import { addItem, editItem } from '@/store/resume/resumeSlice';
@ -34,9 +35,7 @@ const schema = Joi.object<FormData>().keys({
title: Joi.string().required(),
awarder: Joi.string().required(),
date: Joi.string().allow(''),
url: Joi.string()
.pattern(/[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)/, { name: 'valid URL' })
.allow(''),
url: Joi.string().pattern(VALID_URL_REGEX, { name: 'valid URL' }).allow(''),
summary: Joi.string().allow(''),
});
@ -154,6 +153,7 @@ const AwardModal: React.FC = () => {
render={({ field, fieldState }) => (
<TextField
label={t('builder.common.form.url.label')}
placeholder="https://"
error={!!fieldState.error}
helperText={fieldState.error?.message}
{...field}

View File

@ -13,6 +13,7 @@ import { Controller, useForm } from 'react-hook-form';
import BaseModal from '@/components/shared/BaseModal';
import MarkdownSupported from '@/components/shared/MarkdownSupported';
import { VALID_URL_REGEX } from '@/constants/index';
import { useAppDispatch, useAppSelector } from '@/store/hooks';
import { setModalState } from '@/store/modal/modalSlice';
import { addItem, editItem } from '@/store/resume/resumeSlice';
@ -34,9 +35,7 @@ const schema = Joi.object<FormData>().keys({
name: Joi.string().required(),
issuer: Joi.string().required(),
date: Joi.string().allow(''),
url: Joi.string()
.pattern(/[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)/, { name: 'valid URL' })
.allow(''),
url: Joi.string().pattern(VALID_URL_REGEX, { name: 'valid URL' }).allow(''),
summary: Joi.string().allow(''),
});
@ -154,6 +153,7 @@ const CertificateModal: React.FC = () => {
render={({ field, fieldState }) => (
<TextField
label={t('builder.common.form.url.label')}
placeholder="https://"
error={!!fieldState.error}
helperText={fieldState.error?.message}
{...field}

View File

@ -14,6 +14,7 @@ import { Controller, useForm } from 'react-hook-form';
import ArrayInput from '@/components/shared/ArrayInput';
import BaseModal from '@/components/shared/BaseModal';
import MarkdownSupported from '@/components/shared/MarkdownSupported';
import { VALID_URL_REGEX } from '@/constants/index';
import { useAppDispatch, useAppSelector } from '@/store/hooks';
import { setModalState } from '@/store/modal/modalSlice';
import { addItem, editItem } from '@/store/resume/resumeSlice';
@ -47,9 +48,7 @@ const schema = Joi.object<FormData>().keys({
start: Joi.string().allow(''),
end: Joi.string().allow(''),
}),
url: Joi.string()
.pattern(/[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)/, { name: 'valid URL' })
.allow(''),
url: Joi.string().pattern(VALID_URL_REGEX, { name: 'valid URL' }).allow(''),
level: Joi.string().allow(''),
levelNum: Joi.number().min(0).max(10),
summary: Joi.string().allow(''),
@ -194,6 +193,7 @@ const CustomModal: React.FC = () => {
render={({ field, fieldState }) => (
<TextField
label={t('builder.common.form.url.label')}
placeholder="https://"
className="col-span-2"
error={!!fieldState.error}
helperText={fieldState.error?.message}

View File

@ -14,6 +14,7 @@ import { Controller, useForm } from 'react-hook-form';
import ArrayInput from '@/components/shared/ArrayInput';
import BaseModal from '@/components/shared/BaseModal';
import MarkdownSupported from '@/components/shared/MarkdownSupported';
import { VALID_URL_REGEX } from '@/constants/index';
import { useAppDispatch, useAppSelector } from '@/store/hooks';
import { setModalState } from '@/store/modal/modalSlice';
import { addItem, editItem } from '@/store/resume/resumeSlice';
@ -46,9 +47,7 @@ const schema = Joi.object<FormData>().keys({
start: Joi.string().allow(''),
end: Joi.string().allow(''),
}),
url: Joi.string()
.pattern(/[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)/, { name: 'valid URL' })
.allow(''),
url: Joi.string().pattern(VALID_URL_REGEX, { name: 'valid URL' }).allow(''),
summary: Joi.string().allow(''),
courses: Joi.array().items(Joi.string().optional()),
});
@ -217,6 +216,7 @@ const EducationModal: React.FC = () => {
render={({ field, fieldState }) => (
<TextField
label={t('builder.common.form.url.label')}
placeholder="https://"
className="col-span-2"
error={!!fieldState.error}
helperText={fieldState.error?.message}

View File

@ -10,6 +10,7 @@ import { useEffect, useMemo } from 'react';
import { Controller, useForm } from 'react-hook-form';
import BaseModal from '@/components/shared/BaseModal';
import { VALID_URL_REGEX } from '@/constants/index';
import { useAppDispatch, useAppSelector } from '@/store/hooks';
import { setModalState } from '@/store/modal/modalSlice';
import { addItem, editItem } from '@/store/resume/resumeSlice';
@ -21,17 +22,14 @@ const path = 'sections.profile';
const defaultState: FormData = {
network: '',
username: '',
url: 'https://',
url: '',
};
const schema = Joi.object<FormData>({
id: Joi.string(),
network: Joi.string().required(),
username: Joi.string().required(),
url: Joi.string()
.pattern(/[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)/, { name: 'valid URL' })
.default('https://')
.allow(''),
url: Joi.string().pattern(VALID_URL_REGEX, { name: 'valid URL' }).allow(''),
});
const ProfileModal: React.FC = () => {
@ -131,6 +129,7 @@ const ProfileModal: React.FC = () => {
<TextField
label={t('builder.common.form.url.label')}
className="col-span-2"
placeholder="https://"
error={!!fieldState.error}
helperText={fieldState.error?.message}
{...field}

View File

@ -14,6 +14,7 @@ import { Controller, useForm } from 'react-hook-form';
import ArrayInput from '@/components/shared/ArrayInput';
import BaseModal from '@/components/shared/BaseModal';
import MarkdownSupported from '@/components/shared/MarkdownSupported';
import { VALID_URL_REGEX } from '@/constants/index';
import { useAppDispatch, useAppSelector } from '@/store/hooks';
import { setModalState } from '@/store/modal/modalSlice';
import { addItem, editItem } from '@/store/resume/resumeSlice';
@ -42,9 +43,7 @@ const schema = Joi.object<FormData>().keys({
start: Joi.string().allow(''),
end: Joi.string().allow(''),
}),
url: Joi.string()
.pattern(/[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)/, { name: 'valid URL' })
.allow(''),
url: Joi.string().pattern(VALID_URL_REGEX, { name: 'valid URL' }).allow(''),
summary: Joi.string().allow(''),
keywords: Joi.array().items(Joi.string().optional()),
});
@ -187,6 +186,7 @@ const ProjectModal: React.FC = () => {
render={({ field, fieldState }) => (
<TextField
label={t('builder.common.form.url.label')}
placeholder="https://"
className="col-span-2"
error={!!fieldState.error}
helperText={fieldState.error?.message}

View File

@ -13,6 +13,7 @@ import { Controller, useForm } from 'react-hook-form';
import BaseModal from '@/components/shared/BaseModal';
import MarkdownSupported from '@/components/shared/MarkdownSupported';
import { VALID_URL_REGEX } from '@/constants/index';
import { useAppDispatch, useAppSelector } from '@/store/hooks';
import { setModalState } from '@/store/modal/modalSlice';
import { addItem, editItem } from '@/store/resume/resumeSlice';
@ -34,9 +35,7 @@ const schema = Joi.object<FormData>().keys({
name: Joi.string().required(),
publisher: Joi.string().required(),
date: Joi.string().allow(''),
url: Joi.string()
.pattern(/[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)/, { name: 'valid URL' })
.allow(''),
url: Joi.string().pattern(VALID_URL_REGEX, { name: 'valid URL' }).allow(''),
summary: Joi.string().allow(''),
});
@ -154,6 +153,7 @@ const PublicationModal: React.FC = () => {
render={({ field, fieldState }) => (
<TextField
label={t('builder.common.form.url.label')}
placeholder="https://"
error={!!fieldState.error}
helperText={fieldState.error?.message}
{...field}

View File

@ -29,7 +29,7 @@ const defaultState: FormData = {
const schema = Joi.object<FormData>().keys({
id: Joi.string(),
name: Joi.string().required(),
level: Joi.string().required(),
level: Joi.string().allow(''),
levelNum: Joi.number().min(0).max(10).required(),
keywords: Joi.array().items(Joi.string().optional()),
});
@ -109,7 +109,6 @@ const SkillModal: React.FC = () => {
control={control}
render={({ field, fieldState }) => (
<TextField
required
label={t('builder.common.form.level.label')}
error={!!fieldState.error}
helperText={fieldState.error?.message}
@ -125,7 +124,7 @@ const SkillModal: React.FC = () => {
<div className="col-span-2">
<h4 className="mb-3 font-semibold">{t('builder.common.form.levelNum.label')}</h4>
<div className="px-10">
<div className="px-3">
<Slider
{...field}
marks={[

View File

@ -13,6 +13,7 @@ import { Controller, useForm } from 'react-hook-form';
import BaseModal from '@/components/shared/BaseModal';
import MarkdownSupported from '@/components/shared/MarkdownSupported';
import { VALID_URL_REGEX } from '@/constants/index';
import { useAppDispatch, useAppSelector } from '@/store/hooks';
import { setModalState } from '@/store/modal/modalSlice';
import { addItem, editItem } from '@/store/resume/resumeSlice';
@ -40,9 +41,7 @@ const schema = Joi.object<FormData>().keys({
start: Joi.string().allow(''),
end: Joi.string().allow(''),
}),
url: Joi.string()
.pattern(/[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)/, { name: 'valid URL' })
.allow(''),
url: Joi.string().pattern(VALID_URL_REGEX, { name: 'valid URL' }).allow(''),
summary: Joi.string().allow(''),
});
@ -184,6 +183,7 @@ const VolunteerModal: React.FC = () => {
render={({ field, fieldState }) => (
<TextField
label={t('builder.common.form.url.label')}
placeholder="https://"
className="col-span-2"
error={!!fieldState.error}
helperText={fieldState.error?.message}

View File

@ -13,6 +13,7 @@ import { Controller, useForm } from 'react-hook-form';
import BaseModal from '@/components/shared/BaseModal';
import MarkdownSupported from '@/components/shared/MarkdownSupported';
import { VALID_URL_REGEX } from '@/constants/index';
import { useAppDispatch, useAppSelector } from '@/store/hooks';
import { setModalState } from '@/store/modal/modalSlice';
import { addItem, editItem } from '@/store/resume/resumeSlice';
@ -40,9 +41,7 @@ const schema = Joi.object<FormData>().keys({
start: Joi.string().allow(''),
end: Joi.string().allow(''),
}),
url: Joi.string()
.pattern(/[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)/, { name: 'valid URL' })
.allow(''),
url: Joi.string().pattern(VALID_URL_REGEX, { name: 'valid URL' }).allow(''),
summary: Joi.string().allow(''),
});
@ -184,6 +183,7 @@ const WorkModal: React.FC = () => {
render={({ field, fieldState }) => (
<TextField
label={t('builder.common.form.url.label')}
placeholder="https://"
className="col-span-2"
error={!!fieldState.error}
helperText={fieldState.error?.message}

View File

@ -125,7 +125,7 @@ const CreateResumeModal: React.FC = () => {
<FormGroup>
<FormControlLabel
label={t<string>('modals.dashboard.create-resume.form.public.label')}
label={t('modals.dashboard.create-resume.form.public.label') as string}
control={
<Controller
name="isPublic"

View File

@ -24,6 +24,7 @@ const ImportExternalModal: React.FC = () => {
const linkedinInputRef = useRef<HTMLInputElement>(null);
const jsonResumeInputRef = useRef<HTMLInputElement>(null);
const reactiveResumeInputRef = useRef<HTMLInputElement>(null);
const reactiveResumeV2InputRef = useRef<HTMLInputElement>(null);
const { open: isOpen } = useAppSelector((state) => state.modal['dashboard.import-external']);
@ -49,6 +50,11 @@ const ImportExternalModal: React.FC = () => {
reactiveResumeInputRef.current.click();
reactiveResumeInputRef.current.value = '';
}
} else if (integration === 'reactive-resume-v2') {
if (reactiveResumeV2InputRef.current) {
reactiveResumeV2InputRef.current.click();
reactiveResumeV2InputRef.current.value = '';
}
}
};
@ -84,7 +90,7 @@ const ImportExternalModal: React.FC = () => {
<p className="mb-2">
<Trans t={t} i18nKey="modals.dashboard.import-external.linkedin.body">
You can save time by exporting your data from LinkedIn and using it to auto-fill fields on Reactive Resume.
Head on over to the
Head over to the
<a
href="https://www.linkedin.com/psettings/member-data"
className="underline"
@ -93,7 +99,7 @@ const ImportExternalModal: React.FC = () => {
>
Data Privacy
</a>
section on LinkedIn and request an archive of your data. Once it is available, upload the ZIP archive below.
section on LinkedIn and request an archive of your data. Once it is available, upload the ZIP file below.
</Trans>
</p>
@ -171,7 +177,7 @@ const ImportExternalModal: React.FC = () => {
<p className="mb-2">{t('modals.dashboard.import-external.reactive-resume.body')}</p>
<div>
<div className="flex gap-4">
<Button
variant="contained"
disabled={isLoading}
@ -181,6 +187,15 @@ const ImportExternalModal: React.FC = () => {
{t('modals.dashboard.import-external.reactive-resume.actions.upload-json')}
</Button>
<Button
variant="contained"
disabled={isLoading}
startIcon={<UploadFile />}
onClick={() => handleClick('reactive-resume-v2')}
>
{t('modals.dashboard.import-external.reactive-resume.actions.upload-json-v2')}
</Button>
<input
hidden
type="file"
@ -188,6 +203,14 @@ const ImportExternalModal: React.FC = () => {
onChange={(event) => handleChange(event, 'reactive-resume')}
accept="application/json"
/>
<input
hidden
type="file"
ref={reactiveResumeV2InputRef}
onChange={(event) => handleChange(event, 'reactive-resume-v2')}
accept="application/json"
/>
</div>
</div>
</BaseModal>

View File

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

View File

@ -0,0 +1,6 @@
/** @type {import('next-sitemap').IConfig} */
module.exports = {
siteUrl: 'https://rxresu.me',
changefreq: 'monthly',
generateRobotsTxt: true,
};

View File

@ -2,29 +2,30 @@
"name": "@reactive-resume/client",
"scripts": {
"dev": "react-env --prefix PUBLIC -- next dev",
"build": "next build",
"build": "next build && npm run sitemap",
"start": "react-env --prefix PUBLIC -- next start",
"lint": "next lint --fix"
"lint": "next lint --fix",
"sitemap": "next-sitemap --config next-sitemap.config.js"
},
"dependencies": {
"@beam-australia/react-env": "^3.1.1",
"@emotion/css": "^11.7.1",
"@emotion/react": "^11.8.1",
"@emotion/react": "^11.8.2",
"@emotion/styled": "^11.8.1",
"@hookform/resolvers": "2.8.8",
"@monaco-editor/react": "^4.3.1",
"@mui/icons-material": "^5.5.0",
"@mui/lab": "^5.0.0-alpha.72",
"@mui/material": "^5.5.0",
"@mui/icons-material": "^5.5.1",
"@mui/lab": "^5.0.0-alpha.73",
"@mui/material": "^5.5.1",
"@reduxjs/toolkit": "^1.8.0",
"axios": "^0.26.1",
"clsx": "^1.1.1",
"dayjs": "^1.10.8",
"dayjs": "^1.11.0",
"downloadjs": "^1.4.7",
"joi": "^17.6.0",
"lodash": "^4.17.21",
"md5-hex": "^4.0.0",
"monaco-editor": "^0.32.1",
"monaco-editor": "^0.33.0",
"nanoid": "^3.3.1",
"next": "12.1.0",
"next-i18next": "^10.5.0",
@ -35,11 +36,11 @@
"react-dnd-html5-backend": "^15.1.2",
"react-dom": ">=17",
"react-google-login": "^5.2.2",
"react-hook-form": "^7.27.1",
"react-hook-form": "^7.28.0",
"react-hot-toast": "2.2.0",
"react-hotkeys-hook": "^3.4.4",
"react-icons": "^4.3.1",
"react-markdown": "^8.0.0",
"react-markdown": "^8.0.1",
"react-query": "^3.34.16",
"react-redux": "^7.2.6",
"react-zoom-pan-pinch": "^2.1.3",
@ -47,28 +48,29 @@
"redux-persist": "^6.0.0",
"redux-saga": "^1.1.3",
"remark-gfm": "^3.0.1",
"sharp": "^0.30.2",
"sharp": "^0.30.3",
"uuid": "^8.3.2",
"webfontloader": "^1.6.28"
},
"devDependencies": {
"@babel/core": "^7.17.5",
"@babel/core": "^7.17.7",
"@reactive-resume/schema": "workspace:*",
"@tailwindcss/typography": "^0.5.2",
"@types/downloadjs": "^1.4.3",
"@types/lodash": "^4.14.179",
"@types/lodash": "^4.14.180",
"@types/node": "17.0.21",
"@types/react": "17.0.39",
"@types/react": "17.0.40",
"@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.2",
"eslint": "^8.10.0",
"autoprefixer": "^10.4.3",
"eslint": "^8.11.0",
"eslint-config-next": "12.1.0",
"postcss": "^8.4.8",
"prettier": "^2.5.1",
"next-sitemap": "^2.5.10",
"postcss": "^8.4.11",
"prettier": "^2.6.0",
"sass": "^1.49.9",
"tailwindcss": "^3.0.23",
"typescript": "<4.6.0"

View File

@ -42,6 +42,7 @@ const Build: NextPage<Props> = ({ username, slug }) => {
`resume/${username}/${slug}`,
() => fetchResumeByIdentifier({ username, slug }),
{
cacheTime: 0,
refetchOnMount: false,
refetchOnReconnect: false,
refetchOnWindowFocus: false,

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 { serverSideTranslations } from 'next-i18next/serverSideTranslations';
import { useEffect } from 'react';
import Page from '@/components/build/Center/Page';
@ -22,15 +23,19 @@ type Props = {
redirect?: any;
};
export const getServerSideProps: GetServerSideProps<Props | Promise<Props>, QueryParams> = async ({ query }) => {
export const getServerSideProps: GetServerSideProps<Props | Promise<Props>, QueryParams> = async ({
query,
locale,
}) => {
const { username, slug, secretKey } = query as QueryParams;
try {
if (isEmpty(secretKey)) throw new Error('There is no secret key!');
const resume = await fetchResumeByIdentifier({ username, slug, options: { secretKey } });
const displayLocale = resume.metadata.locale || locale || 'en';
return { props: { resume } };
return { props: { resume, ...(await serverSideTranslations(displayLocale, ['common'])) } };
} catch (error) {
return {
redirect: {

View File

@ -9,6 +9,7 @@ import { serverSideTranslations } from 'next-i18next/serverSideTranslations';
import Testimony from '@/components/landing/Testimony';
import Footer from '@/components/shared/Footer';
import LanguageSwitcher from '@/components/shared/LanguageSwitcher';
import Logo from '@/components/shared/Logo';
import NoSSR from '@/components/shared/NoSSR';
import { screenshots } from '@/config/screenshots';
@ -180,9 +181,13 @@ const Home: NextPage = () => {
</section>
<footer>
<Footer className="font-semibold leading-5 opacity-50" />
<div className={styles.version}>
<Footer className="font-semibold leading-5 opacity-50" />
<div>v{process.env.appVersion}</div>
<div>v{process.env.appVersion}</div>
</div>
<LanguageSwitcher />
</footer>
</main>
);

View File

@ -0,0 +1,32 @@
{
"avatar": {
"menu": {
"greeting": "مرحبا",
"logout": "تسجيل خروج"
}
},
"footer": {
"credit": "مشروع عاطفي من تأليف <1> أمروث بيلاي</1>",
"language": {
"missing": "هل تفتقد لغتك؟"
},
"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,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": "পিডিএফ আকারে পাঠান",
"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": "আকার (px এ)"
}
},
"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": "কাস্টম সিএসএস"
},
"export": {
"heading": "এক্সপোর্ট",
"json": {
"primary": "JSON",
"secondary": "আপনার জীবনবৃত্তান্তের একটি JSON সংস্করণ ডাউনলোড করুন যা পুনরায় প্রতিক্রিয়াশীল জীবনবৃত্তান্তে আমদানি করা যেতে পারে।"
},
"pdf": {
"loading": {
"primary": "পিডিএফ তৈরি করা হচ্ছে",
"secondary": "আপনার পিডিএফ তৈরি হওয়ার জন্য অনুগ্রহ করে অপেক্ষা করুন, এতে 15 সেকেন্ড পর্যন্ত সময় লাগতে পারে।"
},
"normal": {
"primary": "পিডিএফ",
"secondary": "আপনার জীবনবৃত্তান্তের একটি পিডিএফ ডাউনলোড করুন যা আপনি প্রিন্ট করে আপনার স্বপ্নের চাকরিতে পাঠাতে পারেন। এই ফাইলটি আরও সম্পাদনার জন্য আবার আমদানি করা যাবে না৷"
}
}
},
"layout": {
"heading": "লেআউট",
"tooltip": {
"reset-layout": "লেআউট রিসেট করুন"
}
},
"links": {
"bugs-features": {
"body": "জীবনবৃত্তান্ত তৈরি করা থেকে কিছু আপনাকে বাধা দিচ্ছে? অথবা আপনি যোগ করার জন্য একটি আশ্চর্যজনক ধারণা আছে? শুরু করতে GitHub-এ একটি সমস্যা উত্থাপন করুন।",
"button": "Github ইস্যু তালিকা",
"heading": "বাগ? বৈশিষ্ট্য অনুরোধ?"
},
"donate": {
"body": "আপনি যদি প্রতিক্রিয়াশীল জীবনবৃত্তান্ত ব্যবহার করতে পছন্দ করেন, অনুগ্রহ করে বিজ্ঞাপন ছাড়া এবং চিরতরে বিনামূল্যে অ্যাপটিকে চালু ও চালু রাখার জন্য যতটা সম্ভব দান করার কথা বিবেচনা করুন।",
"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

@ -0,0 +1,32 @@
{
"avatar": {
"menu": {
"greeting": "হ্যালো",
"logout": "লগআউট"
}
},
"footer": {
"credit": "<1>অমরুথ পিল্লাই</1>-এর একটি প্যাশন প্রোজেক্ট",
"language": {
"missing": "আপনার ভাষা অনুপস্থিত?"
},
"license": "সম্প্রদায়ের দ্বারা, সম্প্রদায়ের জন্য।"
},
"markdown": {
"help-text": "এই বিভাগটি <1>মার্কডাউন</1> ফর্ম্যাটিং সমর্থন করে।"
},
"date": {
"present": "বর্তমান"
},
"subtitle": "একটি বিনামূল্যে এবং ওপেন সোর্স জীবনবৃত্তান্ত নির্মাতা।",
"title": "Reactive Resume",
"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": "ড্যাশবোর্ড"
}

View File

@ -0,0 +1,41 @@
{
"actions": {
"app": "অ্যাপ্লিকেশন এ যান",
"login": "লগইন",
"logout": "লগআউট",
"register": "নিবন্ধন"
},
"features": {
"heading": "বৈশিষ্ট্যসমূহ",
"list": {
"ads": "বিজ্ঞাপনবিহীন",
"export": "JSON বা PDF ফরম্যাটে আপনার জীবনবৃত্তান্ত রপ্তানি করুন",
"free": "সব সময়ের জন্য ফ্রি",
"import": "LinkedIn, JSON Resume থেকে ডেটা আমদানি করুন",
"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 এর মতো সহজ করে তুলতে তৈরি করা হয়েছে৷ এই অ্যাপটির মাধ্যমে, আপনি একাধিক জীবনবৃত্তান্ত তৈরি করতে পারেন, নিয়োগকারীদের বা বন্ধুদের সাথে শেয়ার করতে পারেন৷ একটি অনন্য লিঙ্কের মাধ্যমে এবং আপনার ডেটার অখণ্ডতা এবং গোপনীয়তা হারানো ছাড়াই বিনামূল্যে, কোনও বিজ্ঞাপন, কোনও ট্র্যাকিং ছাড়াই একটি পিডিএফ হিসাবে মুদ্রণ করুন।",
"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": "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": "আপনার যদি একটি <1>প্রমাণিত JSON সারসংকলন</1> যাওয়ার জন্য প্রস্তুত থাকে, তাহলে আপনি এটি ব্যবহার করতে পারেন প্রতিক্রিয়াশীল জীবনবৃত্তান্তে আপনার বিকাশ দ্রুত-ট্র্যাক করতে। নীচের বোতামে ক্লিক করুন এবং শুরু করতে একটি বৈধ JSON ফাইল আপলোড করুন৷",
"heading": "JSON রিজিউম থেকে আমদানি করুন"
},
"linkedin": {
"actions": {
"upload-archive": "ZIP সংরক্ষণাগার আপলোড করুন"
},
"body": "আপনি LinkedIn থেকে আপনার ডেটা রপ্তানি করে এবং Reactive Resume-এ ক্ষেত্রগুলি স্বয়ংক্রিয়ভাবে পূরণ করতে ব্যবহার করে সময় বাঁচাতে পারেন। LinkedIn-এর <1>ডেটা গোপনীয়তা</1> বিভাগে যান এবং আপনার ডেটা সংরক্ষণের জন্য অনুরোধ করুন। একবার এটি উপলব্ধ হলে, নীচের জিপ ফাইলটি আপলোড করুন।",
"heading": "LinkedIn থেকে আমদানি করুন"
},
"reactive-resume": {
"actions": {
"upload-json": "JSON আপলোড করুন",
"upload-json-v2": "v2 থেকে JSON আপলোড করুন"
},
"body": "আপনার যদি একটি JSON থাকে যা রিঅ্যাকটিভ রিজিউমের বর্তমান সংস্করণের সাথে রপ্তানি করা হয়েছিল, আপনি আবার সম্পাদনাযোগ্য সংস্করণ পেতে এটিকে এখানে আবার আমদানি করতে পারেন।",
"heading": "প্রতিক্রিয়াশীল জীবনবৃত্তান্ত থেকে আমদানি করুন"
}
},
"rename-resume": {
"actions": {
"rename-resume": "রিজিউমের নাম পরিবর্তন করুন"
},
"form": {
"name": {
"label": "নাম"
},
"slug": {
"label": "স্লাগ"
}
},
"heading": "আপনার জীবনবৃত্তান্তের নাম পরিবর্তন করুন"
}
}
}

View File

@ -0,0 +1,358 @@
{
"common": {
"actions": {
"add": "Přidat nový {{token}}",
"delete": "Odstranit {{token}}",
"edit": "Upravit {{token}}"
},
"columns": {
"heading": "Sloupce",
"tooltip": "Změnit počet sloupců"
},
"form": {
"date": {
"label": "Datum"
},
"description": {
"label": "Popis"
},
"email": {
"label": "E-mailová adresa"
},
"end-date": {
"help-text": "Nechte toto pole prázdné, pokud stále trvá",
"label": "Datum ukončení"
},
"keywords": {
"label": "Klíčová slova"
},
"level": {
"label": "Úroveň"
},
"levelNum": {
"label": "Úroveň (číslo)"
},
"name": {
"label": "Jméno"
},
"phone": {
"label": "Telefonní číslo"
},
"position": {
"label": "Pozice"
},
"start-date": {
"label": "Počáteční datum"
},
"subtitle": {
"label": "Podtitul"
},
"summary": {
"label": "Shrnutí"
},
"title": {
"label": "Název"
},
"url": {
"label": "Webová stránka"
}
},
"glossary": {
"page": "Stránka"
},
"list": {
"actions": {
"delete": "Odstranit",
"duplicate": "Duplikovat",
"edit": "Upravit"
},
"empty-text": "Tento seznam je prázdný."
},
"tooltip": {
"delete-item": "Opravdu chcete odstranit tuto položku? Tato akce je nevratná.",
"delete-section": "Odstranit sekci",
"rename-section": "Přejmenovat sekci",
"toggle-visibility": "Přepnout viditelnost"
}
},
"controller": {
"tooltip": {
"center-artboard": "Vycentrovat Artboard",
"copy-link": "Kopírovat odkaz na životopis",
"export-pdf": "Exportovat PDF",
"toggle-orientation": "Přepnout orientaci stránky",
"toggle-page-break-line": "Přepnout řádek zalomení stránky",
"toggle-sidebars": "Přepnout boční panely",
"zoom-in": "Přiblížit",
"zoom-out": "Oddálit"
}
},
"header": {
"menu": {
"delete": "Odstranit",
"duplicate": "Duplikovat",
"rename": "Přejmenovat",
"share-link": "Sdílet odkaz",
"tooltips": {
"delete": "Opravdu chcete smazat tento životopis? Tato akce je nevratná.",
"share-link": "Musíte změnit viditelnost svého životopisu na veřejnou, aby byl viditelný pro ostatní."
}
}
},
"leftSidebar": {
"sections": {
"awards": {
"form": {
"awarder": {
"label": "Udělovatel"
}
}
},
"basics": {
"actions": {
"photo-filters": "Foto filtry"
},
"heading": "Základy",
"headline": {
"label": "Titulek"
},
"name": {
"label": "Celé jméno"
},
"photo-filters": {
"effects": {
"border": {
"label": "Rám"
},
"grayscale": {
"label": "Odstíny šedi"
},
"heading": "Efekty"
},
"shape": {
"heading": "Tvar"
},
"size": {
"heading": "Velikost (v px)"
}
},
"photo-upload": {
"tooltip": {
"remove": "Odstranit fotku",
"upload": "Nahrát fotografii"
}
}
},
"certifications": {
"form": {
"issuer": {
"label": "Vydavatel"
}
}
},
"education": {
"form": {
"area-study": {
"label": "Studijní oblast"
},
"courses": {
"label": "Kurzy"
},
"degree": {
"label": "Titul"
},
"grade": {
"label": "Známka"
},
"institution": {
"label": "Instituce"
}
}
},
"location": {
"address": {
"label": "Adresa"
},
"city": {
"label": "Město"
},
"country": {
"label": "Stát"
},
"heading": "Lokace",
"postal-code": {
"label": "PSČ"
},
"region": {
"label": "Region"
}
},
"profiles": {
"form": {
"network": {
"label": "Síť"
},
"username": {
"label": "Uživatelské jméno"
}
},
"heading": "Profily",
"heading_one": "Profil"
},
"publications": {
"form": {
"publisher": {
"label": "Vydavatel"
}
}
},
"references": {
"form": {
"relationship": {
"label": "Vztah"
}
}
},
"section": {
"heading": "Sekce"
},
"volunteer": {
"form": {
"organization": {
"label": "Firma"
}
}
}
}
},
"rightSidebar": {
"sections": {
"css": {
"heading": "Vlastní CSS"
},
"export": {
"heading": "Exportovat",
"json": {
"primary": "JSON",
"secondary": "Stáhněte si JSON verzi vašeho životopisu, kterou lze importovat zpět do Reactive Resume."
},
"pdf": {
"loading": {
"primary": "Generování PDF",
"secondary": "Počkejte prosím, než se váš PDF vygeneruje, může to trvat až 15 sekund."
},
"normal": {
"primary": "PDF",
"secondary": "Stáhněte si PDF se svým životopisem, který si můžete vytisknout a poslat do své vysněné práce. Tento soubor nelze importovat zpět pro další úpravy."
}
}
},
"layout": {
"heading": "Rozvržení",
"tooltip": {
"reset-layout": "Reset rozvržení"
}
},
"links": {
"bugs-features": {
"body": "Brání vám něco ve vytvoření životopisu? Nebo máte úžasný nápad, který byste mohli přidat? Pro začátek, založte problém na GitHubu.",
"button": "Hlášení chyb GitHub",
"heading": "Chyby? Požadavky na funkce?"
},
"donate": {
"body": "Pokud se vám líbilo používání Reactive Resume, zvažte prosím darování co největší částky na udržení aplikace v provozu, bez reklam a navždy zdarma.",
"button": "Kupte mi kávu",
"heading": "Přispějte na Reactive Resume"
},
"github": "Zdrojový kód",
"heading": "Odkazy"
},
"settings": {
"global": {
"date": {
"primary": "Datum",
"secondary": "Formát datumu, který se má používat napříč aplikací"
},
"heading": "Globální",
"language": {
"primary": "Jazyk",
"secondary": "Jazyk zobrazení pro použití v celé aplikaci"
},
"theme": {
"primary": "Motiv"
}
},
"heading": "Nastavení",
"page": {
"break-line": {
"primary": "Nový řádek",
"secondary": "Zobrazit čáru na všech stránkách pro označení výšky stránky A4"
},
"heading": "Stránka",
"orientation": {
"disabled": "Nemá žádný efekt, pokud existuje pouze jedna stránka",
"primary": "Orientace",
"secondary": "Zda se mají stránky zobrazovat vodorovně nebo svisle"
}
},
"resume": {
"heading": "Životopis",
"reset": {
"primary": "Resetovat vše",
"secondary": "Udělali jste příliš mnoho chyb? Kliknutím sem můžete všechny změny resetovat a začít znovu. Buďte opatrní, tuto akci nelze vrátit zpět."
},
"sample": {
"primary": "Načíst ukázková data",
"secondary": "Nevíte, kde začít? Klikněte zde a načtěte si vzorové údaje, abyste viděli, jak vypadá kompletní životopis."
}
}
},
"sharing": {
"heading": "Sdílení",
"short-url": {
"label": "Preferovat krátkou adresu URL"
},
"visibility": {
"subtitle": "Umožnit komukoli pomocí odkazu zobrazit váš životopis",
"title": "Veřejné"
}
},
"templates": {
"heading": "Šablony"
},
"theme": {
"form": {
"background": {
"label": "Pozadí"
},
"primary": {
"label": "Hlavní"
},
"text": {
"label": "Text"
}
},
"heading": "Motiv"
},
"typography": {
"form": {
"font-family": {
"label": "Rodina písma"
},
"font-size": {
"label": "Velikost písma"
}
},
"heading": "Typografie",
"widgets": {
"body": {
"label": "Tělo"
},
"headings": {
"label": "Nadpisy"
}
}
}
}
}
}

View File

@ -0,0 +1,358 @@
{
"common": {
"actions": {
"add": "Tilføj ny {{token}}",
"delete": "Slet {{token}}",
"edit": "Rediger {{token}}"
},
"columns": {
"heading": "Kolonner",
"tooltip": "Skift antal kolonner"
},
"form": {
"date": {
"label": "Dato"
},
"description": {
"label": "Beskriveslse"
},
"email": {
"label": "Email adresse"
},
"end-date": {
"help-text": "Lad dette felt stå tomt, hvis det stadig er til stede",
"label": "Slutdato"
},
"keywords": {
"label": "Nøgleord"
},
"level": {
"label": "Niveau"
},
"levelNum": {
"label": "Niveau (antal)"
},
"name": {
"label": "Navn"
},
"phone": {
"label": "Telefonnummer"
},
"position": {
"label": "Stilling"
},
"start-date": {
"label": "Startdato"
},
"subtitle": {
"label": "Undertitel"
},
"summary": {
"label": "Resumé"
},
"title": {
"label": "Titel"
},
"url": {
"label": "Hjemmeside"
}
},
"glossary": {
"page": "Side"
},
"list": {
"actions": {
"delete": "Slet",
"duplicate": "Duplikér",
"edit": "Rediger"
},
"empty-text": "Denne liste er tom."
},
"tooltip": {
"delete-item": "Er du sikker på at du ønsker at slette denne aktivitet? Det kan ikke fortrydes.",
"delete-section": "Slet sektion",
"rename-section": "Omdøb sektion",
"toggle-visibility": "Slå synlighed til/fra"
}
},
"controller": {
"tooltip": {
"center-artboard": "Centrer tegnebræt",
"copy-link": "Kopier link til CV",
"export-pdf": "Eksporter PDF",
"toggle-orientation": "Skift sideorientering",
"toggle-page-break-line": "Skift sideskiftlinje",
"toggle-sidebars": "Sidebjælke til/fra",
"zoom-in": "Zoom ind",
"zoom-out": "Zoom ud"
}
},
"header": {
"menu": {
"delete": "Slet",
"duplicate": "Duplikér",
"rename": "Omdøb",
"share-link": "Del Link",
"tooltips": {
"delete": "Er du sikker på at du ønsker at slette dette CV? Det kan ikke fortrydes.",
"share-link": "Du skal ændre synligheden af dit CV til offentligheden for at gøre det synligt for andre."
}
}
},
"leftSidebar": {
"sections": {
"awards": {
"form": {
"awarder": {
"label": "Udsteder"
}
}
},
"basics": {
"actions": {
"photo-filters": "Fotofiltre"
},
"heading": "Grundlæggende",
"headline": {
"label": "Overskrift"
},
"name": {
"label": "Fulde navn"
},
"photo-filters": {
"effects": {
"border": {
"label": "Grænse"
},
"grayscale": {
"label": "Gråtoneskala"
},
"heading": "Effekter"
},
"shape": {
"heading": "Facon"
},
"size": {
"heading": "Størrelse (i px)"
}
},
"photo-upload": {
"tooltip": {
"remove": "Fjern Billede",
"upload": "Upload billede"
}
}
},
"certifications": {
"form": {
"issuer": {
"label": "Udsteder"
}
}
},
"education": {
"form": {
"area-study": {
"label": "Studieretning"
},
"courses": {
"label": "Kurser"
},
"degree": {
"label": "Grad"
},
"grade": {
"label": "karakter"
},
"institution": {
"label": "Institution"
}
}
},
"location": {
"address": {
"label": "Adresse"
},
"city": {
"label": "By"
},
"country": {
"label": "Land"
},
"heading": "Lokation",
"postal-code": {
"label": "Postnummer"
},
"region": {
"label": "Region"
}
},
"profiles": {
"form": {
"network": {
"label": "Netværk"
},
"username": {
"label": "Brugernavn"
}
},
"heading": "Profiler",
"heading_one": "Profil"
},
"publications": {
"form": {
"publisher": {
"label": "Udgiver"
}
}
},
"references": {
"form": {
"relationship": {
"label": "Forbindelse"
}
}
},
"section": {
"heading": "Sektion"
},
"volunteer": {
"form": {
"organization": {
"label": "Organisation"
}
}
}
}
},
"rightSidebar": {
"sections": {
"css": {
"heading": "Tilpasset CSS"
},
"export": {
"heading": "Eksportér",
"json": {
"primary": "JSON",
"secondary": "Download en JSON-version af dit CV, der kan importeres tilbage til Reactive Resume."
},
"pdf": {
"loading": {
"primary": "Generering af PDF",
"secondary": "Vent venligst mens din PDF bliver genereret. Dette kan tage op til 15 sekunder."
},
"normal": {
"primary": "PDF",
"secondary": "Download en PDF af dit CV, som du kan printe og sende ud til dit drømmejob. Denne fil kan ikke importeres tilbage til yderligere redigering."
}
}
},
"layout": {
"heading": "Layout",
"tooltip": {
"reset-layout": "Nulstil layout"
}
},
"links": {
"bugs-features": {
"body": "Er der noget, der forhindrer dig i at lave et CV? Eller har du en fantastisk idé at tilføje? Rejs et problem på GitHub for at komme i gang.",
"button": "GitHub-problemer",
"heading": "Fejl? Ønsker til en ny funktion?"
},
"donate": {
"body": "Hvis du kunne lide at bruge Reactive Resume, bedes du overveje at donere så meget som muligt til formålet med at holde appen oppe og køre, uden annoncer og gratis for evigt.",
"button": "Købe mig en kop kaffe",
"heading": "Donér til Reactive Resume"
},
"github": "Kildekode",
"heading": "Links"
},
"settings": {
"global": {
"date": {
"primary": "Dato",
"secondary": "Datoformat til brug på tværs af appen"
},
"heading": "Global",
"language": {
"primary": "Sprog",
"secondary": "Vis sprog til brug på tværs af appen"
},
"theme": {
"primary": "Tema"
}
},
"heading": "Indstillinger",
"page": {
"break-line": {
"primary": "Brudlinje",
"secondary": "Vis en streg på alle sider for at markere højden på en A4-side"
},
"heading": "Side",
"orientation": {
"disabled": "Har ingen effekt, når der kun er én side",
"primary": "Orientering",
"secondary": "Om sider skal vises vandret eller lodret"
}
},
"resume": {
"heading": "Genoptag",
"reset": {
"primary": "Nulstil alt",
"secondary": "lavet for mange fejl? Klik her for at nulstille alle ændringer og starte fra bunden. Vær forsigtig, denne handling kan ikke gøres om."
},
"sample": {
"primary": "Indlæs prøvedata",
"secondary": "Ikke sikker på, hvor du skal begynde? Klik her for at indlæse nogle eksempeldata for at se, hvordan et komplet CV ser ud."
}
}
},
"sharing": {
"heading": "Deling",
"short-url": {
"label": "Foretræk Kort URL"
},
"visibility": {
"subtitle": "Tillad alle med et link at se dit CV",
"title": "Offentlig"
}
},
"templates": {
"heading": "Skabeloner"
},
"theme": {
"form": {
"background": {
"label": "Baggrund"
},
"primary": {
"label": "Primær"
},
"text": {
"label": "Tekst"
}
},
"heading": "Tema"
},
"typography": {
"form": {
"font-family": {
"label": "Skrifttype"
},
"font-size": {
"label": "Skriftstørrelse"
}
},
"heading": "Typografi",
"widgets": {
"body": {
"label": "Krop"
},
"headings": {
"label": "Overskrifter"
}
}
}
}
}
}

View File

@ -0,0 +1,32 @@
{
"avatar": {
"menu": {
"greeting": "Hej",
"logout": "Log ud"
}
},
"footer": {
"credit": "Et passionsprojekt af <1>Amruth Pillai</1>",
"language": {
"missing": "Mangler du dit sprog?"
},
"license": "Af fællesskabet, for fællesskabet."
},
"markdown": {
"help-text": "Dette afsnit understøtter <1>markdown</1> formatering."
},
"date": {
"present": "Nuværende"
},
"subtitle": "En gratis og open source CV-bygger.",
"title": "Reaktivt CV",
"toast": {
"error": {
"upload-file-size": "Upload kun filer under 2 megabyte.",
"upload-photo-size": "Upload kun billeder under 2 megabyte, helst kvadratiske."
},
"success": {
"resume-link-copied": "Et link til dit CV er blevet kopieret til dit udklipsholder."
}
}
}

View File

@ -0,0 +1,25 @@
{
"create-resume": {
"subtitle": "Start fra begyndelsen",
"title": "Opret nyt CV"
},
"import-external": {
"subtitle": "LinkedIn, JSON CV, Reaktivt CV",
"title": "Importer fra eksterne kilder"
},
"resume": {
"menu": {
"delete": "Slet",
"duplicate": "Duplikér",
"open": "Åbn",
"rename": "Omdøb",
"share-link": "Del Link",
"tooltips": {
"delete": "Er du sikker på at du ønsker at slette dette CV? Det kan ikke fortrydes.",
"share-link": "Du skal ændre synligheden af dit CV til offentligheden for at gøre det synligt for andre."
}
},
"timestamp": "Sidst opdateret for {{timestamp}} siden"
},
"title": "Betjeningspanel"
}

View File

@ -0,0 +1,41 @@
{
"actions": {
"app": "Gå til app",
"login": "Log ind",
"logout": "Log ud",
"register": "Tilmeld"
},
"features": {
"heading": "Funktioner",
"list": {
"ads": "Ingen reklamer.",
"export": "Eksporter dit CV til JSON- eller PDF-format",
"free": "Gratis for evigt",
"import": "Importer data fra LinkedIn, JSON CV",
"languages": "Tilgængelig på flere sprog",
"more": "Og meget flere spændende funktioner, <1>læs alt om det her</1>",
"tracking": "Ingen brugersporing"
}
},
"links": {
"heading": "Links",
"links": {
"donate": "Donér",
"github": "Kildekode",
"privacy": "Fortrolighedspolitik",
"service": "Servicevilkår"
}
},
"screenshots": {
"heading": "Skærmbilleder"
},
"testimonials": {
"heading": "Udtalelser",
"body": "Godt eller dårligt, jeg ville elske at høre din mening om Reactive Resume og hvordan oplevelsen har været for dig.<br/>Her er nogle af de beskeder, der er sendt af brugere over hele verden.",
"contact": "Du kan kontakte mig via <1>min e-mail</1> eller gennem kontaktformularen på <3>min hjemmeside</3> ."
},
"summary": {
"body": "Reactive Resume er en gratis og open source CV-bygger, der er bygget til at gøre de hverdagsagtige opgaver med at oprette, opdatere og dele dit CV så lette som 1, 2, 3. Med denne app kan du oprette flere CV'er, dele dem med rekrutterere eller venner gennem et unikt link og udskriv det som en PDF, helt gratis, ingen annoncer, ingen sporing, uden at miste integriteten og fortroligheden af dine data.",
"heading": "Opsummering"
}
}

View File

@ -0,0 +1,136 @@
{
"auth": {
"forgot-password": {
"actions": {
"send-email": "Send e-mail med Nulstil adgangskode"
},
"body": "Indtast blot den e-mailadresse, der er knyttet til den konto, du gerne vil gendanne.",
"form": {
"email": {
"label": "Email adresse"
}
},
"heading": "Har du glemt din adgangskode?",
"help-text": "Hvis der er en konto, der er knyttet til %1 vil du modtage en e-mail med et link for at nulstille din adgangskode."
},
"login": {
"actions": {
"login": "Log ind",
"google": "Log ind med Google"
},
"body": "Indtast venligst dit brugernavn og din adgangskode knyttet til din konto for at logge ind og få adgang til, administrere og dele dine CV'er.",
"form": {
"password": {
"label": "Adgangskode"
},
"username": {
"help-text": "Du skal indtaste din e-mailadresse.",
"label": "Brugernavn"
}
},
"heading": "Log ind på din konto",
"recover-text": "Hvis du har glemt din adgangskode, kan du <1>gendanne din konto</1> her.",
"register-text": "Hvis du ikke har en, kan du <1>oprette en konto</1> her."
},
"register": {
"actions": {
"register": "Tilmeld",
"google": "Log på med Google"
},
"body": "Indtast e-mail adresse for at oprette en konto.",
"form": {
"confirm-password": {
"label": "Bekræft adgangskode"
},
"email": {
"label": "Email adresse"
},
"name": {
"label": "Fulde navn"
},
"password": {
"label": "Adgangskode"
},
"username": {
"label": "Brugernavn"
}
},
"heading": "Opret en konto",
"loginText": "Hvis du allerede har en konto, kan du <1>logge ind her</1>."
},
"reset-password": {
"actions": {
"set-password": "Indstil ny adgangskode"
},
"body": "Indtast en ny adgangskode til din konto.",
"form": {
"confirm-password": {
"label": "Bekræft adgangskode"
},
"password": {
"label": "Adgangskode"
}
},
"heading": "Nulstil din adgangskode"
}
},
"dashboard": {
"create-resume": {
"actions": {
"create-resume": "Opret CV"
},
"body": "Begynd at bygge dit CV ved at give det et navn. Det kan være i forbindelse med den rolle, du søger, eller blot din yndlingssnack.",
"form": {
"name": {
"label": "Navn"
},
"public": {
"label": "Er offentligt tilgængeligt?"
},
"slug": {
"label": "Slug"
}
},
"heading": "Opret nyt CV"
},
"import-external": {
"heading": "Importer fra eksterne kilder",
"json-resume": {
"actions": {
"upload-json": "Upload JSON"
},
"body": "Hvis du har et <1>valideret JSON-CV</1> klar, kan du bruge den til at fremskynde din udvikling på Reactive Resume. Klik på knappen nedenfor og upload en gyldig JSON-fil for at begynde.",
"heading": "Importer fra JSON CV"
},
"linkedin": {
"actions": {
"upload-archive": "Upload ZIP-arkiv"
},
"body": "Du kan spare tid ved at eksportere dine data fra LinkedIn og bruge dem til automatisk at udfylde felter på Reactive Resume. Gå over til <1>Databeskyttelse</1> sektion på LinkedIn og anmod om et arkiv af dine data. Når den er tilgængelig, skal du uploade ZIP-filen nedenfor.",
"heading": "Importer fra LinkedIn"
},
"reactive-resume": {
"actions": {
"upload-json": "Upload JSON",
"upload-json-v2": "Upload JSON fra v2"
},
"body": "Hvis du har en JSON, der blev eksporteret med den aktuelle version af Reactive Resume, kan du importere den tilbage her for at få en redigerbar version igen.",
"heading": "Importer fra JSON CV"
}
},
"rename-resume": {
"actions": {
"rename-resume": "Omdøb CV"
},
"form": {
"name": {
"label": "Navn"
},
"slug": {
"label": "Slug"
}
},
"heading": "Omdøb dit CV"
}
}
}

View File

@ -0,0 +1,358 @@
{
"common": {
"actions": {
"add": "Neue {{token}} hinzufügen",
"delete": "Löschen {{token}}",
"edit": "Bearbeiten {{token}}"
},
"columns": {
"heading": "Spalten",
"tooltip": "Anzahl der Spalten ändern"
},
"form": {
"date": {
"label": "Datum"
},
"description": {
"label": "Beschreibung"
},
"email": {
"label": "E-Mail Adresse"
},
"end-date": {
"help-text": "Dieses Feld leer lassen, wenn noch vorhanden",
"label": "Enddatum"
},
"keywords": {
"label": "Stichwörter"
},
"level": {
"label": "Ebene"
},
"levelNum": {
"label": "Ebene (Anzahl)"
},
"name": {
"label": "Name"
},
"phone": {
"label": "Telefonnummer"
},
"position": {
"label": "Position"
},
"start-date": {
"label": "Startdatum"
},
"subtitle": {
"label": "Untertitel"
},
"summary": {
"label": "Zusammenfassung"
},
"title": {
"label": "Titel"
},
"url": {
"label": "Webseite"
}
},
"glossary": {
"page": "Seite"
},
"list": {
"actions": {
"delete": "Löschen",
"duplicate": "Duplizieren",
"edit": "Bearbeiten"
},
"empty-text": "Diese Liste ist leer."
},
"tooltip": {
"delete-item": "Sind Sie sicher, dass Sie dieses Element löschen möchten? Dies ist eine unumkehrbare Aktion.",
"delete-section": "Abschnitt löschen",
"rename-section": "Abschnitt umbenennen",
"toggle-visibility": "Sichtbarkeit umschalten"
}
},
"controller": {
"tooltip": {
"center-artboard": "Artboard zentrieren",
"copy-link": "Link zum Lebenslauf kopieren",
"export-pdf": "PDF exportieren",
"toggle-orientation": "Seitenausrichtung umschalten",
"toggle-page-break-line": "Pausenzeile umschalten",
"toggle-sidebars": "Seitenleisten umschalten",
"zoom-in": "Vergrößern",
"zoom-out": "Verkleinern"
}
},
"header": {
"menu": {
"delete": "Löschen",
"duplicate": "Duplizieren",
"rename": "Umbenennen",
"share-link": "Link teilen",
"tooltips": {
"delete": "Sind Sie sicher, dass Sie diesen Lebenslauf löschen möchten? Dies ist eine unumkehrbare Aktion.",
"share-link": "Du musst die Sichtbarkeit deines Lebenslaufs in die Öffentlichkeit ändern, um ihn für andere sichtbar zu machen."
}
}
},
"leftSidebar": {
"sections": {
"awards": {
"form": {
"awarder": {
"label": "Auszeichnung"
}
}
},
"basics": {
"actions": {
"photo-filters": "Fotofilter"
},
"heading": "Grundlagen",
"headline": {
"label": "Überschrift"
},
"name": {
"label": "Voller Name"
},
"photo-filters": {
"effects": {
"border": {
"label": "Grenze"
},
"grayscale": {
"label": "Graustufen"
},
"heading": "Effekte"
},
"shape": {
"heading": "Form"
},
"size": {
"heading": "Größe (in px)"
}
},
"photo-upload": {
"tooltip": {
"remove": "Foto entfernen",
"upload": "Foto hochladen"
}
}
},
"certifications": {
"form": {
"issuer": {
"label": "Aussteller"
}
}
},
"education": {
"form": {
"area-study": {
"label": "Studienbereich"
},
"courses": {
"label": "Kurse"
},
"degree": {
"label": "Grad"
},
"grade": {
"label": "Note"
},
"institution": {
"label": "Institution"
}
}
},
"location": {
"address": {
"label": "Adresse"
},
"city": {
"label": "Stadt"
},
"country": {
"label": "Land"
},
"heading": "Standort",
"postal-code": {
"label": "Postleitzahl"
},
"region": {
"label": "Region"
}
},
"profiles": {
"form": {
"network": {
"label": "Netzwerk"
},
"username": {
"label": "Benutzername"
}
},
"heading": "Profiles",
"heading_one": "Profil"
},
"publications": {
"form": {
"publisher": {
"label": "Herausgeber"
}
}
},
"references": {
"form": {
"relationship": {
"label": "Beziehung"
}
}
},
"section": {
"heading": "Abschnitt"
},
"volunteer": {
"form": {
"organization": {
"label": "Organisation"
}
}
}
}
},
"rightSidebar": {
"sections": {
"css": {
"heading": "Benutzerdefiniertes CSS"
},
"export": {
"heading": "Exportieren",
"json": {
"primary": "JSON",
"secondary": "Laden Sie eine JSON-Version Ihres Lebenslaufs herunter, die Sie wieder in Reaktives Lebenslauf importieren können."
},
"pdf": {
"loading": {
"primary": "PDF wird erstellt",
"secondary": "Bitte warten Sie, wenn Ihr PDF generiert wird, dies kann bis zu 15 Sekunden dauern."
},
"normal": {
"primary": "PDF",
"secondary": "Laden Sie sich ein PDF Ihres Lebenslaufs herunter, das Sie ausdrucken und an Ihren Traumjob senden können. Diese Datei kann nicht zur weiteren Bearbeitung importiert werden."
}
}
},
"layout": {
"heading": "Layout",
"tooltip": {
"reset-layout": "Layout zurücksetzen"
}
},
"links": {
"bugs-features": {
"body": "Hält Sie etwas davon ab, einen Lebenslauf zu erstellen? Oder haben Sie eine tolle Idee, die Sie hinzufügen möchten? Erhöhen Sie einen Eintrag auf GitHub, um loszulegen.",
"button": "GitHub Themen",
"heading": "Fehler? Feature-Anfragen?"
},
"donate": {
"body": "Wenn Ihnen Reactive Resume gefallen hat, denken Sie bitte darüber nach, so viel wie möglich zu spenden, damit die App für immer kostenlos und werbefrei bleibt.",
"button": "Kaufe mir einen Kaffee",
"heading": "Spenden an Reaktives Lebenslauf"
},
"github": "Quellcode",
"heading": "Links"
},
"settings": {
"global": {
"date": {
"primary": "Datum",
"secondary": "Datumsformat für die gesamte App"
},
"heading": "Globale",
"language": {
"primary": "Sprache",
"secondary": "Sprache anzeigen, die in der gesamten App verwendet wird"
},
"theme": {
"primary": "Thema"
}
},
"heading": "Einstellungen",
"page": {
"break-line": {
"primary": "Linie anhalten",
"secondary": "Zeile auf allen Seiten anzeigen, um die Höhe einer A4-Seite zu markieren"
},
"heading": "Seite",
"orientation": {
"disabled": "Hat keine Auswirkung, wenn nur eine Seite vorhanden ist",
"primary": "Ausrichtung",
"secondary": "Ob Seiten horizontal oder vertikal angezeigt werden sollen"
}
},
"resume": {
"heading": "Lebenslauf",
"reset": {
"primary": "Alles zurücksetzen",
"secondary": "Zu viele Fehler gemacht? Klicken Sie hier, um alle Änderungen zurückzusetzen und bei Null zu beginnen. Sei vorsichtig, diese Aktion kann nicht rückgängig gemacht werden."
},
"sample": {
"primary": "Beispieldaten laden",
"secondary": "Nicht sicher, wo man anfangen soll? Klicken Sie hier, um ein paar Beispieldaten zu laden, um zu sehen, wie ein vollständiger Lebenslauf aussieht."
}
}
},
"sharing": {
"heading": "Teilen",
"short-url": {
"label": "Kurze URL bevorzugen"
},
"visibility": {
"subtitle": "Erlaube jemandem mit einem Link deinen Lebenslauf anzusehen",
"title": "Öffentlich"
}
},
"templates": {
"heading": "Vorlagen"
},
"theme": {
"form": {
"background": {
"label": "Hintergrund"
},
"primary": {
"label": "Primär"
},
"text": {
"label": "Text"
}
},
"heading": "Thema"
},
"typography": {
"form": {
"font-family": {
"label": "Schriftfamilie"
},
"font-size": {
"label": "Schriftgröße"
}
},
"heading": "Typographie",
"widgets": {
"body": {
"label": "Körper"
},
"headings": {
"label": "Überschriften"
}
}
}
}
}
}

View File

@ -0,0 +1,32 @@
{
"avatar": {
"menu": {
"greeting": "Hallo",
"logout": "Abmelden"
}
},
"footer": {
"credit": "Ein Herzensprojekt von <1>Amruth Pillai</1>",
"language": {
"missing": "Ihre Sprache fehlt?"
},
"license": "Von der Gemeinschaft, für die Gemeinschaft."
},
"markdown": {
"help-text": "Dieser Abschnitt unterstützt <1>Markdown</1> Formatierung."
},
"date": {
"present": "Gegenwärtig"
},
"subtitle": "Ein freier und Open-Source-Lebenslauf-Builder.",
"title": "Reaktives Lebenslauf",
"toast": {
"error": {
"upload-file-size": "Bitte laden Sie nur Dateien unter 2 Megabytes hoch.",
"upload-photo-size": "Bitte laden Sie nur Fotos unter 2 Megabytes hoch, vorzugsweise quadratisch."
},
"success": {
"resume-link-copied": "Ein Link zu deinem Lebenslauf wurde in deine Zwischenablage kopiert."
}
}
}

View File

@ -0,0 +1,25 @@
{
"create-resume": {
"subtitle": "Bei Null anfangen",
"title": "Neuen Lebenslauf erstellen"
},
"import-external": {
"subtitle": "LinkedIn, JSON Resume, Reaktives Lebenslauf",
"title": "Aus externen Quellen importieren"
},
"resume": {
"menu": {
"delete": "Löschen",
"duplicate": "Duplikat",
"open": "Öffnen",
"rename": "Umbenennen",
"share-link": "Einen Link teilen",
"tooltips": {
"delete": "Möchten Sie diesen Lebenslauf wirklich löschen? Dies ist eine irreversible Aktion.",
"share-link": "Sie müssen die Sichtbarkeit Ihres Lebenslaufs auf öffentlich ändern, um ihn für andere sichtbar zu machen."
}
},
"timestamp": "Zuletzt vor {{timestamp}} aktualisiert"
},
"title": "Dashboard"
}

View File

@ -0,0 +1,41 @@
{
"actions": {
"app": "Gehe zu App",
"login": "Anmelden",
"logout": "Ausloggen",
"register": "Registrieren"
},
"features": {
"heading": "Eigenschaften",
"list": {
"ads": "Keine Werbung",
"export": "Exportieren Sie Ihren Lebenslauf in JSON oder PDF Format",
"free": "Frei, für immer",
"import": "Importiere Daten von LinkedIn, JSON Lebenslauf",
"languages": "In mehreren Sprachen zugänglich",
"more": "Und viel mehr aufregende Features, <1>lesen Sie alles hier</1>",
"tracking": "Keine Benutzerverfolgung"
}
},
"links": {
"heading": "Verknüpfungen",
"links": {
"donate": "Spenden",
"github": "Quellcode",
"privacy": "Datenschutzerklärung",
"service": "Nutzungsbedingungen"
}
},
"screenshots": {
"heading": "Screenshots"
},
"testimonials": {
"heading": "Referenzen",
"body": "Gut oder schlecht, ich würde gerne Ihre Meinung über Reactive Resume und wie die Erfahrung war für Sie.<br/>Hier sind einige der Nachrichten, die von Benutzern auf der ganzen Welt gesendet werden.",
"contact": "Du kannst mich über <1>meine E-Mail</1> oder über das Kontaktformular auf <3>meiner Website</3>erreichen."
},
"summary": {
"body": "Reaktives Lebenslauf ist ein freier und Open-Source-Lebenslauf-Builder, der gebaut wurde, um die weltlichen Aufgaben zu machen, zu erstellen, Aktualisieren und teilen Sie Ihren Lebenslauf so einfach wie 1, 2, 3. Mit dieser App kannst du mehrere Bewerbungen erstellen, sie mit Recruitern oder Freunden über einen einzigartigen Link teilen und sie als PDF ausdrucken. alle kostenlos, keine Werbung, keine Verfolgung, ohne die Integrität und Privatsphäre Ihrer Daten zu verlieren.",
"heading": "Zusammenfassung"
}
}

View File

@ -0,0 +1,136 @@
{
"auth": {
"forgot-password": {
"actions": {
"send-email": "Passwort zurücksetzen E-Mail senden"
},
"body": "Geben Sie einfach die E-Mail-Adresse ein, die mit dem Konto verknüpft ist, das Sie wiederherstellen möchten.",
"form": {
"email": {
"label": "E-Mail-Addresse"
}
},
"heading": "Passwort vergessen?",
"help-text": "Wenn das Konto existiert, erhalten Sie eine E-Mail mit einem Link zum Zurücksetzen Ihres Passworts."
},
"login": {
"actions": {
"login": "Anmeldung",
"google": "Mit Google anmelden"
},
"body": "Bitte geben Sie Ihren Benutzernamen und Ihr Passwort ein, um sich anzumelden und zuzugreifen, Ihre Bewerbungen zu verwalten und weiterzugeben.",
"form": {
"password": {
"label": "Passwort"
},
"username": {
"help-text": "Sie können auch Ihre E-Mail-Adresse eingeben",
"label": "Nutzername"
}
},
"heading": "Bei Ihrem Konto anmelden",
"recover-text": "Falls Sie Ihr Passwort vergessen haben, können Sie <1>Ihr Konto wiederherstellen</1> hier einrichten.",
"register-text": "Wenn Sie keinen haben, können Sie hier <1>ein Konto erstellen</1> anlegen."
},
"register": {
"actions": {
"register": "Registrieren",
"google": "Mit Google registrieren"
},
"body": "Bitte geben Sie Ihre persönlichen Daten ein, um ein Konto zu erstellen.",
"form": {
"confirm-password": {
"label": "Passwort bestätigen"
},
"email": {
"label": "E-Mail-Addresse"
},
"name": {
"label": "Vollständiger Name"
},
"password": {
"label": "Passwort"
},
"username": {
"label": "Nutzername"
}
},
"heading": "Ein Konto erstellen",
"loginText": "Wenn Sie bereits ein Konto haben, können Sie sich hier <1>anmelden</1>."
},
"reset-password": {
"actions": {
"set-password": "Neues Passwort setzen"
},
"body": "Geben Sie ein neues Passwort für Ihr Konto ein.",
"form": {
"confirm-password": {
"label": "Passwort bestätigen"
},
"password": {
"label": "Passwort"
}
},
"heading": "Passwort zurücksetzen"
}
},
"dashboard": {
"create-resume": {
"actions": {
"create-resume": "Lebenslauf erstellen"
},
"body": "Erstelle deinen Lebenslauf, indem du ihm einen Namen gibst. Er könnte sich auf die Rolle beziehen, die Sie beantragen, oder nur auf Ihren Lieblings-Snack.",
"form": {
"name": {
"label": "Name"
},
"public": {
"label": "Ist öffentlich zugänglich?"
},
"slug": {
"label": "Slug"
}
},
"heading": "Neuen Lebenslauf erstellen"
},
"import-external": {
"heading": "Import aus externen Quellen",
"json-resume": {
"actions": {
"upload-json": "JSON hochladen"
},
"body": "Wenn du einen <1>validierten JSON Resume</1> bereit hast, kannst du damit deine Entwicklung auf reaktiven Resume beschleunigen. Klicken Sie auf den Button unten und laden Sie eine gültige JSON-Datei hoch, um zu beginnen.",
"heading": "Import vom JSON-Lebenslauf"
},
"linkedin": {
"actions": {
"upload-archive": "ZIP-Archiv hochladen"
},
"body": "Sie können Zeit sparen, indem Sie Ihre Daten aus LinkedIn exportieren und sie zum automatischen Ausfüllen von Feldern auf Reaktives Lebenslauf verwenden. Gehen Sie zum Abschnitt <1>Datenschutz </1> auf LinkedIn und fordern Sie ein Archiv Ihrer Daten an. Sobald diese verfügbar sind, laden Sie die ZIP-Datei unten hoch.",
"heading": "Aus LinkedIn importieren"
},
"reactive-resume": {
"actions": {
"upload-json": "JSON hochladen",
"upload-json-v2": "Laden Sie JSON von v2 hoch"
},
"body": "Wenn Sie eine JSON haben, die mit der aktuellen Version von Reactive Resume exportiert wurde, können Sie sie hier wieder importieren, um wieder eine bearbeitbare Version zu erhalten.",
"heading": "Import vom Reaktives Lebenslauf"
}
},
"rename-resume": {
"actions": {
"rename-resume": "Lebenslauf umbenennen"
},
"form": {
"name": {
"label": "Name"
},
"slug": {
"label": "Slug"
}
},
"heading": "Lebenslauf umbenennen"
}
}
}

View File

@ -61,9 +61,15 @@
"page": "Page"
},
"list": {
"actions": {
"delete": "Delete",
"duplicate": "Duplicate",
"edit": "Edit"
},
"empty-text": "This list is empty."
},
"tooltip": {
"delete-item": "Are you sure you want to delete this item? This is an irreversible action.",
"delete-section": "Delete Section",
"rename-section": "Rename Section",
"toggle-visibility": "Toggle Visibility"
@ -284,6 +290,7 @@
},
"heading": "Page",
"orientation": {
"disabled": "Has no effect when there is only one page",
"primary": "Orientation",
"secondary": "Whether to display pages horizontally or vertically"
}

View File

@ -5,14 +5,19 @@
"logout": "Logout"
}
},
"description": "Reactive Resume is a free and open source resume builder that's built to make the mundane tasks of creating, updating and sharing your resume as easy as 1, 2, 3.",
"footer": {
"credit": "A passion project by <1>Amruth Pillai</1>",
"language": {
"missing": "Missing your language?"
},
"license": "By the community, for the community."
},
"markdown": {
"help-text": "This section supports <1>markdown</1> formatting."
},
"date": {
"present": "Present"
},
"subtitle": "A free and open source resume builder.",
"title": "Reactive Resume",
"toast": {

View File

@ -32,7 +32,7 @@
"testimonials": {
"heading": "Testimonials",
"body": "Good or bad, I would love to hear your opinion on Reactive Resume and how the experience has been for you.<br/>Here are some of the messages sent in by users across the world.",
"contact": "You can reach out to me through <1>my email</1> or through the contact form on <2>my website</2>."
"contact": "You can reach out to me through <1>my email</1> or through the contact form on <3>my website</3>."
},
"summary": {
"body": "Reactive Resume is a free and open source resume builder that's built to make the mundane tasks of creating, updating and sharing your resume as easy as 1, 2, 3. With this app, you can create multiple resumes, share them with recruiters or friends through a unique link and print it as a PDF, all for free, no ads, no tracking, without losing the integrity and privacy of your data.",

View File

@ -106,14 +106,15 @@
"actions": {
"upload-archive": "Upload ZIP Archive"
},
"body": "You can save time by exporting your data from LinkedIn and using it to auto-fill fields on Reactive Resume. Head on over to the <1>Data Privacy</1> section on LinkedIn and request an archive of your data. Once it is available, upload the ZIP archive below.",
"body": "You can save time by exporting your data from LinkedIn and using it to auto-fill fields on Reactive Resume. Head over to the <1>Data Privacy</1> section on LinkedIn and request an archive of your data. Once it is available, upload the ZIP file below.",
"heading": "Import From LinkedIn"
},
"reactive-resume": {
"actions": {
"upload-json": "Upload JSON"
"upload-json": "Upload JSON",
"upload-json-v2": "Upload JSON from v2"
},
"body": "If you have a JSON that was exported with the current version of Reactive Resume, you can import it back here to get an editable version again. Previous versions of Reactive Resume are unfortunately not supported at the moment.",
"body": "If you have a JSON that was exported with the current version of Reactive Resume, you can import it back here to get an editable version again.",
"heading": "Import From Reactive Resume"
}
},

View File

@ -0,0 +1,358 @@
{
"common": {
"actions": {
"add": "Agregar nuevo {{token}}",
"delete": "Eliminar {{token}}",
"edit": "Editar {{token}}"
},
"columns": {
"heading": "Columnas",
"tooltip": "Cambiar número de columnas"
},
"form": {
"date": {
"label": "Fecha"
},
"description": {
"label": "Descripción"
},
"email": {
"label": "Correo electrónico"
},
"end-date": {
"help-text": "Deje este campo en blanco, si todavía está presente",
"label": "Fecha de finalización"
},
"keywords": {
"label": "Palabras claves"
},
"level": {
"label": "Nivel"
},
"levelNum": {
"label": "Nivel (Número)"
},
"name": {
"label": "Nombre"
},
"phone": {
"label": "Número de teléfono"
},
"position": {
"label": "Puesto de trabajo"
},
"start-date": {
"label": "Fecha de inicio"
},
"subtitle": {
"label": "Subtítulo"
},
"summary": {
"label": "Resumen"
},
"title": {
"label": "Título"
},
"url": {
"label": "Sitio Web"
}
},
"glossary": {
"page": "Página"
},
"list": {
"actions": {
"delete": "Eliminar",
"duplicate": "Duplicar",
"edit": "Editar"
},
"empty-text": "Esta lista esta vacia."
},
"tooltip": {
"delete-item": "¿Estás seguro de que deseas eliminar este elemento? Esta acción es irreversible.",
"delete-section": "Eliminar sección",
"rename-section": "Renombrar sección",
"toggle-visibility": "Cambiar Visibilidad"
}
},
"controller": {
"tooltip": {
"center-artboard": "Centrar Tablero",
"copy-link": "Copiar enlace al currículum",
"export-pdf": "Exportar PDF",
"toggle-orientation": "Cambiar la orientación de la página",
"toggle-page-break-line": "Alternar línea de salto de página",
"toggle-sidebars": "Ocultar/mostrar barra lateral",
"zoom-in": "Acercar",
"zoom-out": "Alejar"
}
},
"header": {
"menu": {
"delete": "Eliminar",
"duplicate": "Duplicar",
"rename": "Renombrar",
"share-link": "Compartir enlace",
"tooltips": {
"delete": "¿Estás seguro de que deseas eliminar este elemento? Esta acción es irreversible.",
"share-link": "Debe cambiar la visibilidad de su currículum a público para que sea visible para los demás."
}
}
},
"leftSidebar": {
"sections": {
"awards": {
"form": {
"awarder": {
"label": "Otorgado por"
}
}
},
"basics": {
"actions": {
"photo-filters": "Filtro de fotos"
},
"heading": "Información básica",
"headline": {
"label": "Titular"
},
"name": {
"label": "Nombre Completo"
},
"photo-filters": {
"effects": {
"border": {
"label": "Borde"
},
"grayscale": {
"label": "Escala de grises"
},
"heading": "Efectos"
},
"shape": {
"heading": "Forma"
},
"size": {
"heading": "Tamaño (en píxeles)"
}
},
"photo-upload": {
"tooltip": {
"remove": "Eliminar foto",
"upload": "Subir foto"
}
}
},
"certifications": {
"form": {
"issuer": {
"label": "Emisor"
}
}
},
"education": {
"form": {
"area-study": {
"label": "Área de estudio"
},
"courses": {
"label": "Cursos"
},
"degree": {
"label": "Grado"
},
"grade": {
"label": "Calificación"
},
"institution": {
"label": "Institución"
}
}
},
"location": {
"address": {
"label": "Dirección"
},
"city": {
"label": "Ciudad"
},
"country": {
"label": "País"
},
"heading": "Ubicación",
"postal-code": {
"label": "Código Postal"
},
"region": {
"label": "Area"
}
},
"profiles": {
"form": {
"network": {
"label": "Red"
},
"username": {
"label": "Nombre de usario"
}
},
"heading": "Perfiles",
"heading_one": "Perfil"
},
"publications": {
"form": {
"publisher": {
"label": "Editor"
}
}
},
"references": {
"form": {
"relationship": {
"label": "Relación"
}
}
},
"section": {
"heading": "Sección"
},
"volunteer": {
"form": {
"organization": {
"label": "Organización"
}
}
}
}
},
"rightSidebar": {
"sections": {
"css": {
"heading": "CSS personalizado"
},
"export": {
"heading": "Exportar",
"json": {
"primary": "JSON",
"secondary": "Descargar una versión JSON de su currículum que se puede volver a importar a Reactive Resume."
},
"pdf": {
"loading": {
"primary": "Generando PDF",
"secondary": "Por favor, espere mientras se genera su PDF, esto puede tardar hasta 15 segundos."
},
"normal": {
"primary": "PDF",
"secondary": "Descargar un PDF de su currículum que puede imprimir y enviar al trabajo de sus sueños. Este archivo no se puede volver a importar para su posterior edición."
}
}
},
"layout": {
"heading": "Diseño",
"tooltip": {
"reset-layout": "Restablecer Diseño"
}
},
"links": {
"bugs-features": {
"body": "¿Algo que te impide hacer un currículum? ¿O tienes una idea increíble para agregar? Plantea una Propuesta en GitHub para comenzar.",
"button": "Propuesta de GitHub",
"heading": "¿Errores? ¿Solicitud de características?"
},
"donate": {
"body": "Si le gustó usar Reactive Resume, considere donar lo que pueda a la causa de mantener la aplicación en funcionamiento, sin anuncios y gratis para siempre.",
"button": "Invítame a un café",
"heading": "Donar a Reactive Resume"
},
"github": "Código Fuente",
"heading": "Enlaces"
},
"settings": {
"global": {
"date": {
"primary": "Fecha",
"secondary": "Formato de fecha para usar en toda la aplicación"
},
"heading": "Global",
"language": {
"primary": "Idioma",
"secondary": "Idioma que se utilizará en toda la aplicación"
},
"theme": {
"primary": "Tema"
}
},
"heading": "Preferencias",
"page": {
"break-line": {
"primary": "Linea de separación",
"secondary": "Mostrar una línea en todas las páginas para marcar la altura de una página A4"
},
"heading": "Página",
"orientation": {
"disabled": "No tiene efecto cuando solo hay una página",
"primary": "Orientación",
"secondary": "Visualización horizontal o vertical de las páginas"
}
},
"resume": {
"heading": "Currículum",
"reset": {
"primary": "Restablecer Todo",
"secondary": "¿Has cometido demasiados errores? Haz clic aquí para restablecer todos los cambios y empezar de cero. Ten cuidado, esta acción no se puede revertir."
},
"sample": {
"primary": "Cargar datos de muestra",
"secondary": "¿No sabe por dónde empezar? Haz clic aquí para cargar algunos datos de muestra y ver cómo es un currículum completo."
}
}
},
"sharing": {
"heading": "Compartir",
"short-url": {
"label": "Preferir URL corta"
},
"visibility": {
"subtitle": "Permitir que cualquier persona con un enlace vea su currículum",
"title": "Público"
}
},
"templates": {
"heading": "Plantillas"
},
"theme": {
"form": {
"background": {
"label": "Fondo"
},
"primary": {
"label": "Principal"
},
"text": {
"label": "Texto"
}
},
"heading": "Tema"
},
"typography": {
"form": {
"font-family": {
"label": "Familia tipográfica"
},
"font-size": {
"label": "Tamaño de fuente"
}
},
"heading": "Tipografía",
"widgets": {
"body": {
"label": "Cuerpo"
},
"headings": {
"label": "Encabezados"
}
}
}
}
}
}

View File

@ -0,0 +1,32 @@
{
"avatar": {
"menu": {
"greeting": "Hola",
"logout": "Cerrar sesión"
}
},
"footer": {
"credit": "Un proyecto apasionante de <1>Amruth Pillai</1>",
"language": {
"missing": "Idioma ausente?"
},
"license": "Por la comunidad, para la comunidad."
},
"markdown": {
"help-text": "Esta sección soporta el formato <1>markdown</1>."
},
"date": {
"present": "Actualidad"
},
"subtitle": "Un generador de currículum gratuito y de código abierto.",
"title": "Reactive Resume",
"toast": {
"error": {
"upload-file-size": "Por favor, suba sólo archivos de menos de 2 megabytes.",
"upload-photo-size": "Por favor, suba sólo fotos de menos de 2 megabytes, preferiblemente cuadradas."
},
"success": {
"resume-link-copied": "Se ha copiado un enlace a su currículum en su portapapeles."
}
}
}

View File

@ -0,0 +1,25 @@
{
"create-resume": {
"subtitle": "Empezar desde cero",
"title": "Crear currículum"
},
"import-external": {
"subtitle": "LinkedIn, JSON Resume, Reactive Resume",
"title": "Importar desde fuentes externas"
},
"resume": {
"menu": {
"delete": "Borrar",
"duplicate": "Duplicar",
"open": "Abrir",
"rename": "Rebautizar",
"share-link": "Compartir enlace",
"tooltips": {
"delete": "¿Está seguro de que desea eliminar este currículum? Esta es una acción irreversible.",
"share-link": "Debe cambiar la visibilidad de su currículum a público para que sea visible para los demás."
}
},
"timestamp": "Última actualización {{timestamp}}"
},
"title": "Panel de Control"
}

View File

@ -0,0 +1,41 @@
{
"actions": {
"app": "Ir a la aplicación",
"login": "Iniciar sesión",
"logout": "Cerrar sesión",
"register": "Registrar"
},
"features": {
"heading": "Características",
"list": {
"ads": "Sin publicidad",
"export": "Exporta tu currículum a formato JSON o PDF",
"free": "Gratis para siempre",
"import": "Importar datos de LinkedIn, JSON Resume",
"languages": "Accesible en varios idiomas",
"more": "Y funciones mucho más emocionantes, <1>lea todo sobre esto aquí</1>",
"tracking": "Sin seguimiento de usuario"
}
},
"links": {
"heading": "Enlaces",
"links": {
"donate": "Donar",
"github": "Código fuente",
"privacy": "Política de Privacidad",
"service": "Términos de Servicio"
}
},
"screenshots": {
"heading": "Capturas de pantalla"
},
"testimonials": {
"heading": "Opiniones",
"body": "Bueno o malo, me encantaría saber tu opinión sobre Reactive Resume y cómo ha sido la experiencia para ti.<br/>Estos son algunos de los mensajes enviados por usuarios de todo el mundo.",
"contact": "Puedes comunicarte conmigo a través de <1>mi correo electrónico</1> o a través del formulario de contacto en <3>mi sitio web</3>."
},
"summary": {
"body": "Reactive Resume es un generador de currículums gratuito y de código abierto que está diseñado para hacer que las tareas mundanas de crear, actualizar y compartir su currículum sean tan fáciles como 1, 2, 3. Con esta aplicación, puede crear múltiples currículums, compartirlos con reclutadores o amigos a través de un enlace único e imprímalo como PDF, todo gratis, sin anuncios, sin seguimiento, sin perder la integridad y privacidad de sus datos.",
"heading": "Resumen"
}
}

View File

@ -0,0 +1,136 @@
{
"auth": {
"forgot-password": {
"actions": {
"send-email": "Enviar correo electrónico para restablecer la contraseña"
},
"body": "Simplemente ingrese la dirección de correo electrónico asociada con la cuenta que desea recuperar.",
"form": {
"email": {
"label": "Dirección de correo electrónico"
}
},
"heading": "¿Olvidó su contraseña?",
"help-text": "Si la cuenta existe, recibirá un correo electrónico con un enlace para restablecer su contraseña."
},
"login": {
"actions": {
"login": "Acceso",
"google": "Iniciar sesión con Google"
},
"body": "Por favor, introduzca su nombre de usuario y contraseña asociados a su cuenta para iniciar sesión y acceder, gestionar y compartir sus currículos.",
"form": {
"password": {
"label": "Contraseña"
},
"username": {
"help-text": "También puede ingresar su dirección de correo electrónico",
"label": "Nombre de usuario"
}
},
"heading": "Ingrese en su cuenta",
"recover-text": "En caso de que hayas olvidado tu contraseña, puedes <1>recuperar tu cuenta</1> aquí.",
"register-text": "Si no tiene una, puede <1>crear una cuenta</1> aquí."
},
"register": {
"actions": {
"register": "Registrarse",
"google": "Regístrese con Google"
},
"body": "Por favor ingrese su información personal para crear una cuenta.",
"form": {
"confirm-password": {
"label": "Confirmar Contraseña"
},
"email": {
"label": "Dirección de correo electrónico"
},
"name": {
"label": "Nombre completo"
},
"password": {
"label": "Clave"
},
"username": {
"label": "Nombre de usuario"
}
},
"heading": "Crear una cuenta",
"loginText": "Si ya tiene una cuenta, puede <1>iniciar sesión aquí</1>."
},
"reset-password": {
"actions": {
"set-password": "Establecer una nueva contraseña"
},
"body": "Introduzca una nueva contraseña para su cuenta.",
"form": {
"confirm-password": {
"label": "Confirmar contraseña"
},
"password": {
"label": "Clave"
}
},
"heading": "Restablecer tu contraseña"
}
},
"dashboard": {
"create-resume": {
"actions": {
"create-resume": "Crear currículum"
},
"body": "Comience a construir su currículum dándole un nombre. Podría ser en referencia al puesto que está solicitando, o simplemente a su refrigerio favorito.",
"form": {
"name": {
"label": "Nombre"
},
"public": {
"label": "¿Es de acceso público?"
},
"slug": {
"label": "Segmento"
}
},
"heading": "Crear un nuevo currículum"
},
"import-external": {
"heading": "Importar desde fuentes externas",
"json-resume": {
"actions": {
"upload-json": "Subir JSON"
},
"body": "Si tiene un <1>JSON Resume validado</1> listo para usar, puede usarlo para acelerar su desarrollo en Reactive Resume. Haga clic en el botón a continuación y cargue un archivo JSON válido para comenzar.",
"heading": "Importar desde JSON Resume"
},
"linkedin": {
"actions": {
"upload-archive": "Subir archivo ZIP"
},
"body": "Puede ahorrar tiempo exportando sus datos de LinkedIn y usándolos para autocompletar campos en Reactive Resume. Dirígete a <1>Privacidad de datos</1> en LinkedIn y solicita un archivo de tus datos. Una vez que esté disponible, cargue el archivo ZIP a continuación.",
"heading": "Importar desde LinkedIn"
},
"reactive-resume": {
"actions": {
"upload-json": "Subir JSON",
"upload-json-v2": "Subir JSON desde v2"
},
"body": "Si tiene un JSON que se exportó con la versión actual de Reactive Resume, puede volver a importarlo aquí para obtener una versión editable nuevamente.",
"heading": "Importar desde Reactive Resume"
}
},
"rename-resume": {
"actions": {
"rename-resume": "Renombrar currículum"
},
"form": {
"name": {
"label": "Nombre"
},
"slug": {
"label": "Babosa"
}
},
"heading": "Renombrar tu currículum"
}
}
}

View File

@ -0,0 +1,358 @@
{
"common": {
"actions": {
"add": "Ajouter un/une {{token}}",
"delete": "Supprimer {{token}}",
"edit": "Éditer {{token}}"
},
"columns": {
"heading": "Colonnes",
"tooltip": "Modifier le nombre de colonnes"
},
"form": {
"date": {
"label": "Date"
},
"description": {
"label": "Description"
},
"email": {
"label": "Adresse email"
},
"end-date": {
"help-text": "Si actuel, laisser ce champ vide",
"label": "Date de fin"
},
"keywords": {
"label": "Mots-clés"
},
"level": {
"label": "Niveau"
},
"levelNum": {
"label": "Niveau (nombre)"
},
"name": {
"label": "Nom"
},
"phone": {
"label": "Numéro de téléphone"
},
"position": {
"label": "Poste"
},
"start-date": {
"label": "Date de début"
},
"subtitle": {
"label": "Sous-titre"
},
"summary": {
"label": "Résumé"
},
"title": {
"label": "Titre"
},
"url": {
"label": "Site web"
}
},
"glossary": {
"page": "Page"
},
"list": {
"actions": {
"delete": "Supprimer",
"duplicate": "Dédoubler",
"edit": "Éditer"
},
"empty-text": "Cette liste est vide."
},
"tooltip": {
"delete-item": "Êtes-vous sûr de vouloir supprimer cet objet ? Cette action est irréversible.",
"delete-section": "Supprimer la section",
"rename-section": "Renommer la section",
"toggle-visibility": "Rendre visible/invisible"
}
},
"controller": {
"tooltip": {
"center-artboard": "Centrer l'affichage",
"copy-link": "Copier le lien vers le CV",
"export-pdf": "Exporter en PDF",
"toggle-orientation": "Basculer l'orientation de la page",
"toggle-page-break-line": "Afficher/cacher l'indicateur de saut de page",
"toggle-sidebars": "Afficher/cacher les barres latérales",
"zoom-in": "Zoomer",
"zoom-out": "Dézoomer"
}
},
"header": {
"menu": {
"delete": "Supprimer",
"duplicate": "Dédoubler",
"rename": "Renommer",
"share-link": "Partager un lien",
"tooltips": {
"delete": "Êtes-vous sûr(e) de vouloir supprimer ce CV ? Cette action est irréversible.",
"share-link": "Vous devez changer la visibilité de votre CV en public pour le rendre visible aux autres."
}
}
},
"leftSidebar": {
"sections": {
"awards": {
"form": {
"awarder": {
"label": "Décerné par"
}
}
},
"basics": {
"actions": {
"photo-filters": "Filtres pour la photo"
},
"heading": "Informations de base",
"headline": {
"label": "Titre"
},
"name": {
"label": "Nom complet"
},
"photo-filters": {
"effects": {
"border": {
"label": "Bordure"
},
"grayscale": {
"label": "Noir et blanc"
},
"heading": "Effets"
},
"shape": {
"heading": "Forme"
},
"size": {
"heading": "Taille (en pixels)"
}
},
"photo-upload": {
"tooltip": {
"remove": "Supprimer la photo",
"upload": "Importer une photo"
}
}
},
"certifications": {
"form": {
"issuer": {
"label": "Certifié par"
}
}
},
"education": {
"form": {
"area-study": {
"label": "Domaine d'étude"
},
"courses": {
"label": "Cours"
},
"degree": {
"label": "Diplôme"
},
"grade": {
"label": "Note"
},
"institution": {
"label": "Établissement"
}
}
},
"location": {
"address": {
"label": "Adresse"
},
"city": {
"label": "Commune"
},
"country": {
"label": "Pays"
},
"heading": "Adresse",
"postal-code": {
"label": "Code postal"
},
"region": {
"label": "Région"
}
},
"profiles": {
"form": {
"network": {
"label": "Réseau social"
},
"username": {
"label": "Nom d'utilisateur"
}
},
"heading": "Profils",
"heading_one": "Profil"
},
"publications": {
"form": {
"publisher": {
"label": "Éditeur"
}
}
},
"references": {
"form": {
"relationship": {
"label": "Type de relation"
}
}
},
"section": {
"heading": "Section"
},
"volunteer": {
"form": {
"organization": {
"label": "Association"
}
}
}
}
},
"rightSidebar": {
"sections": {
"css": {
"heading": "CSS personnalisé"
},
"export": {
"heading": "Exporter",
"json": {
"primary": "JSON",
"secondary": "Télécharger une version JSON de votre CV, qui pourra être réimportée dans Reactive Resume."
},
"pdf": {
"loading": {
"primary": "Génération du PDF",
"secondary": "Veuillez patienter pendant que votre PDF est généré, cela peut prendre jusqu'à 15 secondes."
},
"normal": {
"primary": "PDF",
"secondary": "Téléchargez un PDF de votre CV que vous pourrez imprimer et envoyer à l'emploi de vos rêves. Ce fichier ne peut pas être réimporté pour être modifié ultérieurement."
}
}
},
"layout": {
"heading": "Disposition",
"tooltip": {
"reset-layout": "Réinitialiser la disposition"
}
},
"links": {
"bugs-features": {
"body": "Quelque chose vous a empêché de rédiger un CV ? Ou vous avez une idée géniale à ajouter ? Créez une issue sur GitHub pour commencer.",
"button": "Issues GitHub",
"heading": "Bogues ? Demandes de fonctionnalités ?"
},
"donate": {
"body": "Si vous avez aimé utiliser Reactive Resume, pensez à donner comme vous le pouvez pour que l'application reste disponible, gratuite et sans publicité pour toujours.",
"button": "Offrez-moi un café",
"heading": "Faire un don à Reactive Resume"
},
"github": "Code source",
"heading": "Liens"
},
"settings": {
"global": {
"date": {
"primary": "Date",
"secondary": "Format de date à utiliser dans l'application"
},
"heading": "Général",
"language": {
"primary": "Langue",
"secondary": "Langue d'affichage à utiliser dans l'application"
},
"theme": {
"primary": "Thème"
}
},
"heading": "Paramètres",
"page": {
"break-line": {
"primary": "Indicateur de changement de page",
"secondary": "Afficher une ligne sur toutes les pages pour marquer la hauteur d'une feuille A4"
},
"heading": "Page",
"orientation": {
"disabled": "N'a aucun effet lorsqu'il n'y a qu'une seule page",
"primary": "Orientation",
"secondary": "Afficher les pages horizontalement ou verticalement"
}
},
"resume": {
"heading": "CV",
"reset": {
"primary": "Tout remettre à zéro",
"secondary": "Vous avez fait trop d'erreurs ? Cliquez ici pour réinitialiser toutes les modifications et repartir de zéro. Attention, cette action ne peut pas être annulée."
},
"sample": {
"primary": "Charger les données de démo",
"secondary": "Vous ne savez pas par où commencer ? Cliquez ici pour charger quelques exemples de données afin de voir à quoi ressemble un CV complet."
}
}
},
"sharing": {
"heading": "Partage",
"short-url": {
"label": "Préférer une URL courte"
},
"visibility": {
"subtitle": "Permettre à toute personne ayant un lien de consulter votre CV",
"title": "Public"
}
},
"templates": {
"heading": "Modèles"
},
"theme": {
"form": {
"background": {
"label": "Couleur d'arrière plan"
},
"primary": {
"label": "Couleur principale"
},
"text": {
"label": "Couleur de texte"
}
},
"heading": "Thème"
},
"typography": {
"form": {
"font-family": {
"label": "Famille de police"
},
"font-size": {
"label": "Taille de la police"
}
},
"heading": "Typographie",
"widgets": {
"body": {
"label": "Contenu"
},
"headings": {
"label": "Titres"
}
}
}
}
}
}

View File

@ -0,0 +1,32 @@
{
"avatar": {
"menu": {
"greeting": "Bonjour",
"logout": "Déconnexion"
}
},
"footer": {
"credit": "Un projet passionné de <1>Amruth Pillai</1>",
"language": {
"missing": "Il manque votre langue ?"
},
"license": "Par la communauté, pour la communauté."
},
"markdown": {
"help-text": "Cette section prend en charge la mise en forme <1>markdown</1>."
},
"date": {
"present": "Présent"
},
"subtitle": "Un constructeur de CV gratuit et open source.",
"title": "Reactive Resume",
"toast": {
"error": {
"upload-file-size": "Veuillez télécharger uniquement des fichiers de moins de 2 Mo.",
"upload-photo-size": "Veuillez télécharger uniquement des photos de moins de 2 Mo, de préférence carrées."
},
"success": {
"resume-link-copied": "Un lien vers votre CV a été copié dans votre presse-papier."
}
}
}

View File

@ -0,0 +1,25 @@
{
"create-resume": {
"subtitle": "Partir de zéro",
"title": "Créer un nouveau CV"
},
"import-external": {
"subtitle": "LinkedIn, JSON Resume, Reactive Resume",
"title": "Importer de sources externes"
},
"resume": {
"menu": {
"delete": "Supprimer",
"duplicate": "Dédoubler",
"open": "Ouvrir",
"rename": "Renommer",
"share-link": "Partager un lien",
"tooltips": {
"delete": "Êtes-vous sûr(e) de vouloir supprimer ce CV ? Cette action est irréversible.",
"share-link": "Vous devez changer la visibilité de votre CV en public pour le rendre visible aux autres."
}
},
"timestamp": "Dernière mise à jour il y a {{timestamp}}"
},
"title": "Tableau de bord"
}

View File

@ -0,0 +1,41 @@
{
"actions": {
"app": "Accéder à l'app",
"login": "Connexion",
"logout": "Déconnexion",
"register": "Inscription"
},
"features": {
"heading": "Fonctionnalités",
"list": {
"ads": "Pas de publicité",
"export": "Exporter votre CV au format JSON ou PDF",
"free": "Gratuit, pour toujours",
"import": "Importer des données depuis LinkedIn, JSON Resume",
"languages": "Accessible en plusieurs langues",
"more": "Et bien plus de fonctionnalités intéressantes, <1>tout lire ici</1>",
"tracking": "Pas de pistage des utilisateurs"
}
},
"links": {
"heading": "Liens",
"links": {
"donate": "Faire un don",
"github": "Code source",
"privacy": "Politique de confidentialité",
"service": "Conditions d'utilisation"
}
},
"screenshots": {
"heading": "Captures d'écran"
},
"testimonials": {
"heading": "Témoignages",
"body": "Bonne ou mauvaiss, j'aimerais entendre votre opinion sur Reactive Resume et comment l'expérience a été pour vous.<br/>Voici quelques-uns des messages envoyés par des utilisateurs du monde entier.",
"contact": "Vous pouvez me contacter via <1>mon e-mail</1> ou via le formulaire de contact de <3>mon site web</3>."
},
"summary": {
"body": "Reactive Resume est un générateur de CV gratuit et open source, conçu pour rendre les tâches banales de création, de mise à jour et de partage de votre CV aussi faciles que de compter jusqu'à 3. Avec cette application, vous pouvez créer plusieurs CVs, les partager avec des recruteurs ou des amis par le biais d'un lien unique et les imprimer au format PDF, le tout gratuitement, sans publicité, sans pistage, et sans perdre l'intégrité et la confidentialité de vos données.",
"heading": "Résumé"
}
}

View File

@ -0,0 +1,136 @@
{
"auth": {
"forgot-password": {
"actions": {
"send-email": "Envoyer l'email de réinitialisation du mot de passe"
},
"body": "Il suffit de saisir l'adresse email associée au compte que vous souhaitez récupérer.",
"form": {
"email": {
"label": "Adresse e-mail"
}
},
"heading": "Mot de passe oublié ?",
"help-text": "Si le compte existe, vous recevrez un courriel contenant un lien pour réinitialiser votre mot de passe."
},
"login": {
"actions": {
"login": "Connexion",
"google": "Connexion avec Google"
},
"body": "Veuillez entrer votre nom d'utilisateur et votre mot de passe associés à votre compte pour vous connecter et accéder, gérer et partager vos CVs.",
"form": {
"password": {
"label": "Mot de passe"
},
"username": {
"help-text": "Vous pouvez également saisir votre adresse e-mail",
"label": "Nom d'utilisateur"
}
},
"heading": "Connexion à votre compte",
"recover-text": "Si vous avez oublié votre mot de passe, vous pouvez <1>récupérer votre compte</1> ici.",
"register-text": "Si vous n'en avez pas, vous pouvez <1>créer un compte</1> ici."
},
"register": {
"actions": {
"register": "Inscription",
"google": "Inscription avec Google"
},
"body": "Veuillez saisir vos informations personnelles pour créer un compte.",
"form": {
"confirm-password": {
"label": "Confirmez le mot de passe"
},
"email": {
"label": "Adresse e-mail"
},
"name": {
"label": "Nom complet"
},
"password": {
"label": "Mot de passe"
},
"username": {
"label": "Nom d'utilisateur"
}
},
"heading": "Créer un compte",
"loginText": "Si vous avez déjà un compte, vous pouvez <1>vous connecter ici</1>."
},
"reset-password": {
"actions": {
"set-password": "Définir un nouveau mot de passe"
},
"body": "Saisissez un nouveau mot de passe pour votre compte.",
"form": {
"confirm-password": {
"label": "Confirmez le mot de passe"
},
"password": {
"label": "Mot de passe"
}
},
"heading": "Réinitialiser votre mot de passe"
}
},
"dashboard": {
"create-resume": {
"actions": {
"create-resume": "Créer un CV"
},
"body": "Commencez à construire votre CV en lui donnant un nom. Il peut s'agir d'une référence au rôle auquel vous postulez ou simplement de votre repas préféré.",
"form": {
"name": {
"label": "Nom"
},
"public": {
"label": "Est-il accessible au public ?"
},
"slug": {
"label": "Alias"
}
},
"heading": "Créer un nouveau CV"
},
"import-external": {
"heading": "Importer de sources externes",
"json-resume": {
"actions": {
"upload-json": "Mettre en ligne un JSON"
},
"body": "Si vous avez un <1>JSON Resume valide</1> prêt à l'emploi, vous pouvez l'utiliser pour accélérer votre création sur Reactive Resume. Cliquez sur le bouton ci-dessous et mettez en ligne un fichier JSON valide pour commencer.",
"heading": "Importer depuis JSON Resume"
},
"linkedin": {
"actions": {
"upload-archive": "Mettre en ligne une archive ZIP"
},
"body": "Vous pouvez gagner du temps en exportant vos données depuis LinkedIn et en les utilisant pour remplir automatiquement les champs sur Reactive Resume. Rendez-vous dans la section <1>Confidentialité des données</1> sur LinkedIn et demandez une archive de vos données. Une fois disponible, chargez le fichier ZIP ci-dessous.",
"heading": "Import depuis LinkedIn"
},
"reactive-resume": {
"actions": {
"upload-json": "Mettre en ligne un JSON",
"upload-json-v2": "Télécharger JSON à partir de la v2"
},
"body": "Si vous avez un JSON qui a été exporté avec la version actuelle de Reactive Resume, vous pouvez le réimporter ici pour obtenir à nouveau une version modifiable.",
"heading": "Importer depuis Reactive Resume"
}
},
"rename-resume": {
"actions": {
"rename-resume": "Renommer le CV"
},
"form": {
"name": {
"label": "Nom"
},
"slug": {
"label": "Alias"
}
},
"heading": "Renommer votre CV"
}
}
}

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": "पीडीएफ निर्यात करें",
"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": "कस्टम सीएसएस"
},
"export": {
"heading": "निर्यात",
"json": {
"primary": "JSON",
"secondary": "अपने रेज़्यूमे का JSON संस्करण डाउनलोड करें जिसे रिएक्टिव रेज़्यूमे में वापस आयात किया जा सकता है।"
},
"pdf": {
"loading": {
"primary": "पीडीएफ उत्पन्न करना",
"secondary": "कृपया प्रतीक्षा करें क्योंकि आपका PDF जनरेट हो गया है, इसमें 15 सेकंड तक लग सकते हैं।"
},
"normal": {
"primary": "पीडीएफ",
"secondary": "अपने रिज्यूमे का एक पीडीएफ डाउनलोड करें जिसे आप प्रिंट कर सकते हैं और अपने सपनों की नौकरी के लिए भेज सकते हैं। आगे के संपादन के लिए इस फ़ाइल को वापस आयात नहीं किया जा सकता है।"
}
}
},
"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,32 @@
{
"avatar": {
"menu": {
"greeting": "नमस्ते",
"logout": "लॉग आउट"
}
},
"footer": {
"credit": "<1>अमृत पिल्लै</1> . का एक जुनूनी प्रोजेक्ट",
"language": {
"missing": "आपकी भाषा याद आ रही है?"
},
"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": "लिंक्डइन, JSON रिज्यूमे, रिएक्टिव रिज्यूमे",
"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": "लिंक्डइन, 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": "रिएक्टिव रिज्यूमे एक फ्री और ओपन सोर्स रिज्यूमे बिल्डर है जो आपके रिज्यूमे को बनाने, अपडेट करने और साझा करने के सांसारिक कार्यों को 1, 2, 3 जितना आसान बनाने के लिए बनाया गया है। इस ऐप के साथ, आप कई रिज्यूमे बना सकते हैं, उन्हें रिक्रूटर्स या दोस्तों के साथ साझा कर सकते हैं। एक अद्वितीय लिंक के माध्यम से और अपने डेटा की अखंडता और गोपनीयता को खोए बिना इसे एक पीडीएफ के रूप में प्रिंट करें, सब कुछ मुफ्त में, कोई विज्ञापन नहीं, कोई ट्रैकिंग नहीं।",
"heading": "सारांश"
}
}

View File

@ -0,0 +1,136 @@
{
"auth": {
"forgot-password": {
"actions": {
"send-email": "रीसेट पासवर्ड ईमेल भेजें"
},
"body": "बस उस खाते से संबद्ध ईमेल पता दर्ज करें जिसे आप पुनर्प्राप्त करना चाहते हैं।",
"form": {
"email": {
"label": "ईमेल पता"
}
},
"heading": "अपना कूट शब्द भूल गए?",
"help-text": "यदि खाता मौजूद है, तो आपको अपना पासवर्ड रीसेट करने के लिए एक लिंक के साथ एक ईमेल प्राप्त होगा।"
},
"login": {
"actions": {
"login": "लॉग इन करें",
"google": "Google के साथ लॉगिन करें"
},
"body": "लॉग इन करने और अपने रिज्यूमे को एक्सेस करने, प्रबंधित करने और साझा करने के लिए कृपया अपने खाते से संबद्ध अपना उपयोगकर्ता नाम और पासवर्ड दर्ज करें।",
"form": {
"password": {
"label": "कुंजिका"
},
"username": {
"help-text": "आप अपना ईमेल पता भी दर्ज कर सकते हैं",
"label": "उपयोगकर्ता नाम"
}
},
"heading": "अपने अकाउंट में लॉग इन करें",
"recover-text": "यदि आप अपना पासवर्ड भूल गए हैं, तो आप यहां <1>अपना खाता पुनर्प्राप्त</1> कर सकते हैं।",
"register-text": "यदि आपके पास खाता नहीं है, तो आप यहां <1>खाता बना</1> सकते हैं।"
},
"register": {
"actions": {
"register": "रजिस्टर करें",
"google": "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": "यदि आपके पास <1>मान्य JSON रिज्यूमे</1> जाने के लिए तैयार है, तो आप इसका उपयोग रिएक्टिव रिज्यूमे पर अपने विकास को तेजी से ट्रैक करने के लिए कर सकते हैं। शुरू करने के लिए नीचे दिए गए बटन पर क्लिक करें और एक मान्य JSON फ़ाइल अपलोड करें।",
"heading": "JSON रिज्यूमे से आयात करें"
},
"linkedin": {
"actions": {
"upload-archive": "ज़िप संग्रह अपलोड करें"
},
"body": "आप अपने डेटा को लिंक्डइन से निर्यात करके और रिएक्टिव रिज्यूमे पर ऑटो-फिल फ़ील्ड में इसका उपयोग करके समय बचा सकते हैं। लिंक्डइन पर <1>डेटा गोपनीयता</1> अनुभाग पर जाएं और अपने डेटा के संग्रह का अनुरोध करें। एक बार यह उपलब्ध हो जाने पर, नीचे ज़िप फ़ाइल अपलोड करें।",
"heading": "लिंक्डइन से आयात करें"
},
"reactive-resume": {
"actions": {
"upload-json": "JSON अपलोड करें",
"upload-json-v2": "v2 . से JSON अपलोड करें"
},
"body": "यदि आपके पास एक JSON है जिसे रिएक्टिव रिज्यूमे के वर्तमान संस्करण के साथ निर्यात किया गया था, तो आप इसे फिर से एक संपादन योग्य संस्करण प्राप्त करने के लिए यहां वापस आयात कर सकते हैं।",
"heading": "रिएक्टिव रिज्यूमे से आयात करें"
}
},
"rename-resume": {
"actions": {
"rename-resume": "रिज्यूमे का नाम बदलें"
},
"form": {
"name": {
"label": "नाम"
},
"slug": {
"label": "काउंटर"
}
},
"heading": "अपने रिज्यूमे का नाम बदलें"
}
}
}

View File

@ -0,0 +1,358 @@
{
"common": {
"actions": {
"add": "Aggiungi {{token}}",
"delete": "Elimina {{token}}",
"edit": "Modifica {{token}}"
},
"columns": {
"heading": "Colonne",
"tooltip": "Modifica numero di colonne"
},
"form": {
"date": {
"label": "Data"
},
"description": {
"label": "Descrizione"
},
"email": {
"label": "Indirizzo e-mail"
},
"end-date": {
"help-text": "Se in corso, lascia questo campo vuoto",
"label": "Data di fine"
},
"keywords": {
"label": "Parole chiave"
},
"level": {
"label": "Livello"
},
"levelNum": {
"label": "Livello (numero)"
},
"name": {
"label": "Nome"
},
"phone": {
"label": "Numero di telefono"
},
"position": {
"label": "Posizione"
},
"start-date": {
"label": "Data di inizio"
},
"subtitle": {
"label": "Sottotitolo"
},
"summary": {
"label": "Sommario"
},
"title": {
"label": "Titolo"
},
"url": {
"label": "Sito web"
}
},
"glossary": {
"page": "Pagina"
},
"list": {
"actions": {
"delete": "Elimina",
"duplicate": "Duplica",
"edit": "Modifica"
},
"empty-text": "Questo elenco è vuoto."
},
"tooltip": {
"delete-item": "Vuoi davvero rimuovere questo elemento? Questa operazione è irreversibile.",
"delete-section": "Elimina sezione",
"rename-section": "Rinomina sezione",
"toggle-visibility": "Mostra/Nascondi"
}
},
"controller": {
"tooltip": {
"center-artboard": "Centra tavola da disegno",
"copy-link": "Copia link del curriculum",
"export-pdf": "Esporta in PDF",
"toggle-orientation": "Orientamento verticale/orizzontale",
"toggle-page-break-line": "Mostra/Nascondi linea interruzione pagina",
"toggle-sidebars": "Mostra/Nascondi barre laterali",
"zoom-in": "Ingrandisci",
"zoom-out": "Riduci"
}
},
"header": {
"menu": {
"delete": "Elimina",
"duplicate": "Duplica",
"rename": "Rinomina",
"share-link": "Condividi link",
"tooltips": {
"delete": "Vuoi davvero eliminare questo curriculum? Questa operazione è irreversibile.",
"share-link": "Per rendere il curriculum visibile agli altri, imposta la visibilità su \"Pubblico\"."
}
}
},
"leftSidebar": {
"sections": {
"awards": {
"form": {
"awarder": {
"label": "Conferito da"
}
}
},
"basics": {
"actions": {
"photo-filters": "Filtri per foto"
},
"heading": "Informazioni di base",
"headline": {
"label": "Intestazione"
},
"name": {
"label": "Nome e cognome"
},
"photo-filters": {
"effects": {
"border": {
"label": "Bordo"
},
"grayscale": {
"label": "Scala di grigi"
},
"heading": "Effetti"
},
"shape": {
"heading": "Forma"
},
"size": {
"heading": "Dimensioni (pixel)"
}
},
"photo-upload": {
"tooltip": {
"remove": "Rimuovi foto",
"upload": "Carica foto"
}
}
},
"certifications": {
"form": {
"issuer": {
"label": "Rilasciata da"
}
}
},
"education": {
"form": {
"area-study": {
"label": "Area di studio"
},
"courses": {
"label": "Corsi"
},
"degree": {
"label": "Laurea"
},
"grade": {
"label": "Voto"
},
"institution": {
"label": "Istituto"
}
}
},
"location": {
"address": {
"label": "Indirizzo"
},
"city": {
"label": "Città"
},
"country": {
"label": "Paese"
},
"heading": "Posizione",
"postal-code": {
"label": "CAP"
},
"region": {
"label": "Regione"
}
},
"profiles": {
"form": {
"network": {
"label": "Rete"
},
"username": {
"label": "Nome utente"
}
},
"heading": "Profili",
"heading_one": "Profilo"
},
"publications": {
"form": {
"publisher": {
"label": "Pubblicato da"
}
}
},
"references": {
"form": {
"relationship": {
"label": "Rapporto"
}
}
},
"section": {
"heading": "Sezione"
},
"volunteer": {
"form": {
"organization": {
"label": "Organizzazione"
}
}
}
}
},
"rightSidebar": {
"sections": {
"css": {
"heading": "CSS personalizzato"
},
"export": {
"heading": "Esporta",
"json": {
"primary": "JSON",
"secondary": "Scarica una versione JSON del tuo curriculum che puoi importare nuovamente in Reactive Resume."
},
"pdf": {
"loading": {
"primary": "Generazione del PDF in corso...",
"secondary": "Attendi che la generazione del PDF sia completata, l'operazione potrebbe richiedere fino a 15 secondi."
},
"normal": {
"primary": "PDF",
"secondary": "Scarica un PDF del tuo curriculum che puoi stampare e usare per il lavoro dei tuoi sogni. Questo file non può essere importato nuovamente per ulteriori modifiche."
}
}
},
"layout": {
"heading": "Layout",
"tooltip": {
"reset-layout": "Ripristina layout"
}
},
"links": {
"bugs-features": {
"body": "Hai riscontrato un problema nella creazione del tuo curriculum? Hai un'idea fantastica da aggiungere? Usa gli Issue di GitHub per iniziare.",
"button": "Issue di GitHub",
"heading": "Bug? Richieste di funzionalità?"
},
"donate": {
"body": "Se Reactive Resume ti è piaciuto, ti invitiamo a contribuire con una donazione. In questo modo l'applicazione potrà continuare ad essere attiva, gratuita e senza pubblicità.",
"button": "Offrimi un caffè",
"heading": "Dona a Reactive Resume"
},
"github": "Codice sorgente",
"heading": "Link"
},
"settings": {
"global": {
"date": {
"primary": "Data",
"secondary": "Formato della data da usare nell'app"
},
"heading": "Globale",
"language": {
"primary": "Lingua",
"secondary": "Lingua di visualizzazione dell'app"
},
"theme": {
"primary": "Tema"
}
},
"heading": "Impostazioni",
"page": {
"break-line": {
"primary": "Linea di interruzione",
"secondary": "Mostra su tutte le pagine una linea che indica l'altezza di un foglio A4"
},
"heading": "Pagina",
"orientation": {
"disabled": "Questa funzione non ha effetto se c'è solo una pagina",
"primary": "Orientamento",
"secondary": "Scegli se visualizzare le pagine in orizzontale o verticale"
}
},
"resume": {
"heading": "Curriculum",
"reset": {
"primary": "Ripristina tutto",
"secondary": "Hai fatto un po' troppi errori? Clicca qui per ripristinare tutte le modifiche e iniziare da zero. Questa operazione non è reversibile."
},
"sample": {
"primary": "Carica dati di esempio",
"secondary": "Non sai da dove cominciare? Clicca qui per caricare alcuni dati di esempio per vedere che aspetto ha un curriculum completo."
}
}
},
"sharing": {
"heading": "Condividi",
"short-url": {
"label": "Preferisci URL breve"
},
"visibility": {
"subtitle": "Consenti a chiunque abbia il link di vedere il tuo curriculum",
"title": "Pubblico"
}
},
"templates": {
"heading": "Modelli"
},
"theme": {
"form": {
"background": {
"label": "Sfondo"
},
"primary": {
"label": "Principale"
},
"text": {
"label": "Testo"
}
},
"heading": "Tema"
},
"typography": {
"form": {
"font-family": {
"label": "Famiglia di caratteri"
},
"font-size": {
"label": "Dimensioni carattere"
}
},
"heading": "Tipografia",
"widgets": {
"body": {
"label": "Corpo"
},
"headings": {
"label": "Intestazioni"
}
}
}
}
}
}

View File

@ -0,0 +1,32 @@
{
"avatar": {
"menu": {
"greeting": "Ciao",
"logout": "Esci"
}
},
"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": {
"help-text": "Questa sezione supporta la formattazione <1>Markdown</1>."
},
"date": {
"present": "In corso"
},
"subtitle": "Un'applicazione gratuita e open source per creare il tuo curriculum.",
"title": "Reactive Resume",
"toast": {
"error": {
"upload-file-size": "Carica solo file inferiori a 2 MB.",
"upload-photo-size": "Carica solo foto inferiori a 2 MB, preferibilmente quadrate."
},
"success": {
"resume-link-copied": "Il link del tuo curriculum è stato copiato negli appunti."
}
}
}

View File

@ -0,0 +1,25 @@
{
"create-resume": {
"subtitle": "Inizia da zero",
"title": "Crea nuovo curriculum"
},
"import-external": {
"subtitle": "LinkedIn, JSON Resume, Reactive Resume",
"title": "Importa da fonti esterne"
},
"resume": {
"menu": {
"delete": "Elimina",
"duplicate": "Duplica",
"open": "Apri",
"rename": "Rinomina",
"share-link": "Condividi link",
"tooltips": {
"delete": "Vuoi davvero eliminare questo curriculum? Questa operazione è irreversibile.",
"share-link": "Per rendere il curriculum visibile agli altri, imposta la visibilità su \"Pubblico\"."
}
},
"timestamp": "Ultimo aggiornamento {{timestamp}} fa"
},
"title": "Dashboard"
}

View File

@ -0,0 +1,41 @@
{
"actions": {
"app": "Vai all'app",
"login": "Accedi",
"logout": "Esci",
"register": "Registrati"
},
"features": {
"heading": "Funzioni",
"list": {
"ads": "Nessuna pubblicità",
"export": "Esporta il tuo curriculum in formato JSON o PDF",
"free": "Gratuita, per sempre",
"import": "Importa dati da LinkedIn, JSON Resume",
"languages": "Accessibile in varie lingue",
"more": "Tante altre funzioni interessanti, scopri di più <1>qui</1>",
"tracking": "Senza rilevamento delle azioni dell'utente"
}
},
"links": {
"heading": "Link",
"links": {
"donate": "Dona",
"github": "Codice sorgente",
"privacy": "Informativa sulla privacy",
"service": "Condizioni d'uso"
}
},
"screenshots": {
"heading": "Screenshot"
},
"testimonials": {
"heading": "Cosa dicono i nostri utenti",
"body": "Che la tua opinione sia positiva o negativa, mi piacerebbe sapere cosa ne pensi di Reactive Resume.<br/>Ecco alcuni dei messaggi che abbiamo ricevuto dai nostri utenti in tutto il mondo.",
"contact": "Puoi contattarmi al <1>mio indirizzo e-mail</1> oppure usando l'apposito modulo sul <3>mio sito web</3>."
},
"summary": {
"body": "Reactive Resume è un'applicazione di creazione di curriculum gratuita e open source, ideata per semplificare le attività di creazione, aggiornamento e condivisione del tuo curriculum. Con questa applicazione puoi creare più curriculum, condividerli con recruiter o amici attraverso un link unico e stamparli in formato PDF, il tutto gratuitamente, senza pubblicità, senza tracciamento e soprattutto preservando l'integrità e la privacy dei tuoi dati.",
"heading": "Sommario"
}
}

View File

@ -0,0 +1,136 @@
{
"auth": {
"forgot-password": {
"actions": {
"send-email": "Invia e-mail per reimpostare la password"
},
"body": "Inserisci l'indirizzo e-mail associato all'account da recuperare.",
"form": {
"email": {
"label": "Indirizzo e-mail"
}
},
"heading": "Hai dimenticato la password?",
"help-text": "Se l'account esiste, riceverai un'e-mail con un link per reimpostare la password."
},
"login": {
"actions": {
"login": "Accedi",
"google": "Accedi con Google"
},
"body": "Per accedere e iniziare a lavorare sui tuoi curriculum, inserisci il nome utente e la password associati al tuo account.",
"form": {
"password": {
"label": "Password"
},
"username": {
"help-text": "Puoi anche inserire il tuo indirizzo e-mail",
"label": "Nome utente"
}
},
"heading": "Accedi al tuo account",
"recover-text": "Se hai dimenticato la password, puoi recuperare il tuo account <1>qui</1>.",
"register-text": "Se non hai ancora un account, puoi crearne uno <1>qui</1>."
},
"register": {
"actions": {
"register": "Registrati",
"google": "Registrati con Google"
},
"body": "Inserisci i tuoi dati per creare un account.",
"form": {
"confirm-password": {
"label": "Conferma password"
},
"email": {
"label": "Indirizzo e-mail"
},
"name": {
"label": "Nome e cognome"
},
"password": {
"label": "Password"
},
"username": {
"label": "Nome utente"
}
},
"heading": "Crea un account",
"loginText": "Se hai già un account, puoi accedere <1>qui</1>."
},
"reset-password": {
"actions": {
"set-password": "Imposta nuova password"
},
"body": "Inserisci una nuova password per l'account.",
"form": {
"confirm-password": {
"label": "Conferma password"
},
"password": {
"label": "Password"
}
},
"heading": "Reimposta password"
}
},
"dashboard": {
"create-resume": {
"actions": {
"create-resume": "Crea curriculum"
},
"body": "Inizia a creare un curriculum inserendo un nome, in riferimento alla posizione per cui vuoi candidarti o semplicemente il tuo snack preferito.",
"form": {
"name": {
"label": "Nome"
},
"public": {
"label": "Vuoi renderlo accessibile pubblicamente?"
},
"slug": {
"label": "URL personalizzato"
}
},
"heading": "Crea un nuovo curriculum"
},
"import-external": {
"heading": "Importa da fonti esterne",
"json-resume": {
"actions": {
"upload-json": "Carica JSON"
},
"body": "Se hai un <1>JSON Resume</1> valido già pronto, puoi usarlo per velocizzare il lavoro su Reactive Resume. Usa il pulsante qui sotto e carica un file JSON valido per iniziare.",
"heading": "Importa da JSON Resume"
},
"linkedin": {
"actions": {
"upload-archive": "Carica archivio ZIP"
},
"body": "Puoi velocizzare il tuo lavoro esportando i tuoi dati da LinkedIn e usandoli per riempire automaticamente i campi su Reactive Resume. Vai alla sezione <1>Privacy dei dati</1> di LinkedIn, richiedi una copia dei tuoi dati e carica il file ZIP tramite il pulsante qui sotto.",
"heading": "Importa da LinkedIn"
},
"reactive-resume": {
"actions": {
"upload-json": "Carica JSON",
"upload-json-v2": "Carica JSON dalla v2"
},
"body": "Se hai un JSON che è stato esportato con la versione corrente di Reactive Resume, puoi importarlo nuovamente qui per ottenere di nuovo una versione modificabile.",
"heading": "Importa da Reactive Resume"
}
},
"rename-resume": {
"actions": {
"rename-resume": "Rinomina curriculum"
},
"form": {
"name": {
"label": "Nome"
},
"slug": {
"label": "URL personalizzato"
}
},
"heading": "Rinomina il tuo curriculum"
}
}
}

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": "ಗಾತ್ರ (px ನಲ್ಲಿ)"
}
},
"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": "ಜೆಸೊನ್",
"secondary": "ರಿಯಾಕ್ಟಿವ್ ರೆಸ್ಯೂಮ್‌ಗೆ ಮರಳಿ ಆಮದು ಮಾಡಿಕೊಳ್ಳಬಹುದಾದ ನಿಮ್ಮ ರೆಸ್ಯೂಮ್‌ನ ஜேசன் ಆವೃತ್ತಿಯನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ."
},
"pdf": {
"loading": {
"primary": "PDF ಅನ್ನು ರಚಿಸಲಾಗುತ್ತಿದೆ",
"secondary": "ನಿಮ್ಮ PDF ರಚನೆಯಾಗುತ್ತಿದ್ದಂತೆ ದಯವಿಟ್ಟು ನಿರೀಕ್ಷಿಸಿ, ಇದು 15 ಸೆಕೆಂಡುಗಳವರೆಗೆ ತೆಗೆದುಕೊಳ್ಳಬಹುದು."
},
"normal": {
"primary": "ಪಿಡಿಎಫ್",
"secondary": "ನಿಮ್ಮ ರೆಸ್ಯೂಮ್‌ನ ಪಿಡಿಎಫ್ ಅನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ ಅದನ್ನು ನೀವು ಮುದ್ರಿಸಬಹುದು ಮತ್ತು ನಿಮ್ಮ ಕನಸಿನ ಕೆಲಸಕ್ಕೆ ಕಳುಹಿಸಬಹುದು. ಹೆಚ್ಚಿನ ಸಂಪಾದನೆಗಾಗಿ ಈ ಫೈಲ್ ಅನ್ನು ಮರಳಿ ಆಮದು ಮಾಡಿಕೊಳ್ಳಲಾಗುವುದಿಲ್ಲ."
}
}
},
"layout": {
"heading": "ಲೆಔಟ್",
"tooltip": {
"reset-layout": "ಲೇಔಟ್ ಅನ್ನು ಮರುಹೊಂದಿಸಿ"
}
},
"links": {
"bugs-features": {
"body": "ರೇಸುಮೆವನ್ನು ಮಾಡಲು ಏನಾದರೂ ನಿಮ್ಮನ್ನು ತಡೆಯುತ್ತಿದೆಯೇ? ಅಥವಾ ನೀವು ಸೇರಿಸಲು ಅದ್ಭುತವಾದ ಕಲ್ಪನೆಯನ್ನು ಹೊಂದಿದ್ದೀರಾ? ಪ್ರಾರಂಭಿಸಲು GitHub ನಲ್ಲಿ ಸಮಸ್ಯೆಯನ್ನು ಎತ್ತಿಕೊಳ್ಳಿ.",
"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,32 @@
{
"avatar": {
"menu": {
"greeting": "ನಮಸ್ಕಾರ",
"logout": "ಲಾಗ್ ಔಟ್"
}
},
"footer": {
"credit": "<1>ಅಮೃತ್ ಪಿಳ್ಳೈ</1> ಅವರು ಉತ್ಸಾಹದಿಂದ ಮಾಡಿರುವ ಪ್ರಾಜೆಕ್ಟ್",
"language": {
"missing": "ನಿಮ್ಮ ಭಾಷೆ ಕಾಣೆಯಾಗಿದೆಯೇ?"
},
"license": "ಸಮುದಾಯದಿಂದ, ಸಮುದಾಯಕ್ಕಾಗಿ."
},
"markdown": {
"help-text": "ಈ ವಿಭಾಗವು <1>ಮಾರ್ಕ್‌ಡೌನ್</1> ಫಾರ್ಮ್ಯಾಟಿಂಗ್ ಅನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ."
},
"date": {
"present": "ಪ್ರಸ್ತುತ"
},
"subtitle": "ಉಚಿತ ಮತ್ತು ಮುಕ್ತ ಮೂಲ ರೇಸುಮೆ ಬಿಲ್ಡರ್.",
"title": "ರಿಯಾಕ್ಟಿವ್ ರೇಸುಮೆ",
"toast": {
"error": {
"upload-file-size": "ದಯವಿಟ್ಟು 2 ಮೆಗಾಬೈಟ್‌ಗಳೊಳಗಿನ ಫೈಲ್‌ಗಳನ್ನು ಮಾತ್ರ ಅಪ್‌ಲೋಡ್ ಮಾಡಿ.",
"upload-photo-size": "ದಯವಿಟ್ಟು 2 ಮೆಗಾಬೈಟ್‌ಗಳ ಕೆಳಗಿನ ಫೋಟೋಗಳನ್ನು ಮಾತ್ರ ಅಪ್‌ಲೋಡ್ ಮಾಡಿ, ಮೇಲಾಗಿ ಚೌಕ."
},
"success": {
"resume-link-copied": "ನಿಮ್ಮ ರೇಸುಮೆಗೆ ಲಿಂಕ್ ಅನ್ನು ನಿಮ್ಮ ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ಗೆ ನಕಲಿಸಲಾಗಿದೆ."
}
}
}

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