Compare commits

...

127 Commits

Author SHA1 Message Date
a037a091e7 chore(release): 3.4.6 2022-06-19 20:55:23 +02:00
f3a4c17cb4 correct versions 2022-06-19 20:55:14 +02:00
f06f7ad2e5 chore(release): 3.6.2 2022-06-19 20:52:34 +02:00
aab2e5c8a9 correct versions 2022-06-19 20:52:24 +02:00
4318dbe762 add languages 2022-06-19 20:51:10 +02:00
ae3ff274ee updates to app 2022-06-19 20:44:28 +02:00
164403c495 chore(release): 3.4.6 2022-06-19 20:44:04 +02:00
8595c92fb7 Merge pull request #906 from dvd741-a/main
Add File based Storage toggle for Photos
2022-06-18 16:53:05 +02:00
8f75f32f88 Merge pull request #903 from AmruthPillai/i18n_main
New Crowdin updates
2022-06-18 16:52:54 +02:00
0d44189a5f Merge branch 'main' into i18n_main 2022-06-18 16:51:51 +02:00
cd16a6d360 Merge pull request #902 from Mhnramin/main
New translation for Bahasa (Indonesia)
2022-06-18 16:49:25 +02:00
7b795bfaa4 Merge pull request #914 from AmruthPillai/dependabot/gradle/app/org.jetbrains.kotlin.android-1.7.0
chore(deps): bump org.jetbrains.kotlin.android from 1.6.21 to 1.7.0 in /app
2022-06-18 16:49:08 +02:00
8f78d47661 Change Dockerfile to include Volume 2022-06-18 14:21:10 +02:00
0b5e5a2ece New translations common.json (Hebrew) 2022-06-14 03:09:35 +05:30
9eade9514c chore(deps): bump org.jetbrains.kotlin.android in /app
Bumps [org.jetbrains.kotlin.android](https://github.com/JetBrains/kotlin) from 1.6.21 to 1.7.0.
- [Release notes](https://github.com/JetBrains/kotlin/releases)
- [Changelog](https://github.com/JetBrains/kotlin/blob/v1.7.0/ChangeLog.md)
- [Commits](https://github.com/JetBrains/kotlin/compare/v1.6.21...v1.7.0)

---
updated-dependencies:
- dependency-name: org.jetbrains.kotlin.android
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-13 02:22:25 +00:00
d744e06e96 New translations builder.json (Persian) 2022-06-07 23:23:40 +05:30
9657c199d2 New translations common.json (Persian) 2022-06-07 23:23:39 +05:30
2dbe737b73 New translations dashboard.json (Persian) 2022-06-07 23:23:38 +05:30
f624699efa New translations landing.json (Persian) 2022-06-07 23:23:37 +05:30
e46f473754 New translations modals.json (Persian) 2022-06-07 23:23:36 +05:30
767f4bf4bc Correction 2022-06-06 15:41:08 +02:00
1c5d025c15 Version 2022-06-06 15:26:37 +02:00
8de8d89290 File Storage toggle 2022-06-06 15:15:39 +02:00
83662122a5 Changes 2022-06-06 02:31:44 +02:00
126482a760 chore(release): 3.6.1 2022-06-06 01:36:29 +02:00
b04c22a27b Changes 2022-06-06 01:35:46 +02:00
63f88a3d1c Changes 2022-06-06 01:34:58 +02:00
bd519db14f chore(release): 3.6.0 2022-06-06 01:32:56 +02:00
a49aa42176 New translations modals.json (Indonesian) 2022-06-05 12:49:38 +05:30
1a382db4d9 New translations builder.json (Indonesian) 2022-06-05 12:49:36 +05:30
c68f75dc8c New translations common.json (Indonesian) 2022-06-05 12:49:35 +05:30
c12de0c013 New translations dashboard.json (Indonesian) 2022-06-05 12:49:34 +05:30
4cafaf306a New translations landing.json (Indonesian) 2022-06-05 12:49:33 +05:30
0238cf18a5 New translation for Bahasa (Indonesia) 2022-06-05 08:16:49 +08:00
2f6072a7ba Merge pull request #889 from AmruthPillai/i18n_main
New Crowdin updates
2022-05-24 08:25:16 +05:30
55dd2c5925 Merge pull request #879 from AmruthPillai/dependabot/github_actions/docker/build-push-action-3.0.0
chore(deps): bump docker/build-push-action from 2.10.0 to 3.0.0
2022-05-24 08:25:05 +05:30
a3e25f87fa Merge pull request #878 from AmruthPillai/dependabot/github_actions/docker/login-action-2.0.0
chore(deps): bump docker/login-action from 1.14.1 to 2.0.0
2022-05-24 08:24:56 +05:30
9e82ea11c3 chore(release): 3.4.5 2022-05-24 08:23:03 +05:30
62fd63e41f fix(i18n): fix language mismatch in exported pdf 2022-05-24 08:21:03 +05:30
b91c175352 New translations builder.json (Arabic) 2022-05-18 19:51:52 +05:30
898e2314fc New translations builder.json (Arabic) 2022-05-18 18:39:53 +05:30
bca2aa2fe5 chore(deps): bump docker/build-push-action from 2.10.0 to 3.0.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 2.10.0 to 3.0.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v2.10.0...v3.0.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-09 02:51:05 +00:00
427fdb717a chore(deps): bump docker/login-action from 1.14.1 to 2.0.0
Bumps [docker/login-action](https://github.com/docker/login-action) from 1.14.1 to 2.0.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v1.14.1...v2.0.0)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-09 02:51:02 +00:00
ee5b0187e2 docs(i18n): add Hungarian language to docs readme 2022-05-02 09:01:50 +02:00
94d05f33b4 chore(release): v3.4.4 2022-05-02 08:59:36 +02:00
35fe4e2774 feat(i18n): add Hungrarian (Magyar) language 2022-05-02 08:58:25 +02:00
317901a4d2 Merge pull request #870 from AmruthPillai/i18n_main
New Crowdin updates
2022-05-02 08:50:01 +02:00
350ffcbc43 New translations builder.json (Odia) 2022-05-02 08:47:55 +02:00
2c074a96c8 New translations builder.json (Kannada) 2022-05-02 08:47:54 +02:00
79f140b2d0 New translations builder.json (Malayalam) 2022-05-02 08:47:53 +02:00
649c655ad5 New translations builder.json (Hindi) 2022-05-02 08:47:52 +02:00
d5284a90d1 New translations builder.json (Bengali) 2022-05-02 08:47:51 +02:00
bd18c53ab8 New translations builder.json (Tamil) 2022-05-02 08:47:50 +02:00
704c1ab7d4 New translations builder.json (Vietnamese) 2022-05-02 08:47:35 +02:00
1dbd7f221e New translations builder.json (Chinese Simplified) 2022-05-02 08:47:34 +02:00
e1a47ffbe2 New translations modals.json (Hungarian) 2022-05-02 08:47:33 +02:00
2add629970 New translations modals.json (Czech) 2022-05-02 08:47:31 +02:00
a48fcd9c97 New translations landing.json (Hungarian) 2022-05-02 08:47:29 +02:00
df7b00cb2c New translations builder.json (Turkish) 2022-05-02 08:47:28 +02:00
27fc939101 New translations builder.json (Portuguese) 2022-05-02 08:47:26 +02:00
7c574d17e4 New translations builder.json (Polish) 2022-05-02 08:47:25 +02:00
86a105f5a5 New translations builder.json (Dutch) 2022-05-02 08:47:25 +02:00
327bcc2b32 New translations builder.json (Italian) 2022-05-02 08:47:24 +02:00
a6cbd85010 New translations builder.json (Greek) 2022-05-02 08:47:23 +02:00
371b820923 New translations builder.json (German) 2022-05-02 08:47:22 +02:00
1d47fd0267 New translations builder.json (Danish) 2022-05-02 08:47:21 +02:00
276fc95bb0 New translations builder.json (Czech) 2022-05-02 08:47:20 +02:00
34c8861321 New translations builder.json (Arabic) 2022-05-02 08:47:19 +02:00
780b782579 New translations builder.json (French) 2022-05-02 08:47:18 +02:00
9daa99fd5b New translations builder.json (Spanish) 2022-05-02 08:47:16 +02:00
76b3aa29cf New translations landing.json (Czech) 2022-05-02 08:47:16 +02:00
25d4913fab New translations common.json (Hungarian) 2022-05-02 08:47:15 +02:00
0efeff3a4f New translations common.json (Czech) 2022-05-02 08:47:13 +02:00
f56089925e New translations builder.json (Swedish) 2022-05-02 08:47:12 +02:00
5afae08f20 New translations builder.json (Hungarian) 2022-05-02 08:47:11 +02:00
4bf114dfd6 New translations dashboard.json (Hungarian) 2022-05-02 08:47:09 +02:00
23a3c2e624 New translations dashboard.json (Czech) 2022-05-02 08:47:07 +02:00
71862f4354 New translations builder.json (Russian) 2022-05-01 15:42:24 +02:00
6861c0f0fa chore(release): 3.4.3 2022-05-01 08:03:37 +02:00
9a18e74b90 revert(react): downgrade back to 17.0.2 due to lack of support 2022-05-01 08:03:22 +02:00
4dd1b70079 remove linux/arm64 builds, failing temporarily 2022-04-30 13:39:23 +02:00
f9580fe716 chore(release): 3.4.2 2022-04-30 13:19:34 +02:00
3545f7939f remove linux/arm64 for server, as playwright does not support it 2022-04-30 13:19:08 +02:00
9caad3bc0b chore(release): 3.4.1 2022-04-30 13:01:59 +02:00
5bdb92b1cf fix(typeorm): update typeorm to latest 0.2.x for secpatch 2022-04-30 13:01:45 +02:00
87d381fe8e feat(all): upgrade to v3.4.0 2022-04-30 12:58:17 +02:00
ccfb4d3cb0 Merge pull request #867 from Tomiiwa/Table-of-Contents
[DOC] Added Table of Contents to ReadMe
2022-04-30 09:11:08 +02:00
763074a86c Added Table of Contents to ReadMe 2022-04-29 16:41:52 +01:00
0f46895711 Merge pull request #861 from AmruthPillai/dependabot/github_actions/actions/checkout-3.0.2
chore(deps): bump actions/checkout from 3.0.1 to 3.0.2
2022-04-25 09:34:20 +02:00
aa736af0f5 Merge pull request #858 from AmruthPillai/dependabot/gradle/app/org.jetbrains.kotlin.android-1.6.21
chore(deps): bump org.jetbrains.kotlin.android from 1.6.20 to 1.6.21 in /app
2022-04-25 09:33:53 +02:00
1d9056f935 chore(deps): bump actions/checkout from 3.0.1 to 3.0.2
Bumps [actions/checkout](https://github.com/actions/checkout) from 3.0.1 to 3.0.2.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3.0.1...v3.0.2)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-25 03:11:03 +00:00
9cadd603f3 chore(deps): bump org.jetbrains.kotlin.android in /app
Bumps org.jetbrains.kotlin.android from 1.6.20 to 1.6.21.

---
updated-dependencies:
- dependency-name: org.jetbrains.kotlin.android
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-25 03:08:55 +00:00
b7b62d7bd0 Merge pull request #853 from AmruthPillai/i18n_main
New Crowdin updates
2022-04-24 08:06:24 +02:00
820e6c90d3 New translations modals.json (Greek) 2022-04-22 15:06:52 +02:00
ea642d1b60 New translations landing.json (Greek) 2022-04-22 15:06:51 +02:00
ec006779a8 New translations common.json (Greek) 2022-04-22 15:06:47 +02:00
515be23c44 New translations dashboard.json (Greek) 2022-04-22 15:06:46 +02:00
c11aec8b44 Merge pull request #851 from AmruthPillai/i18n_main
New Crowdin updates
2022-04-22 07:14:41 +02:00
3c2147e72c New translations landing.json (Swedish) 2022-04-21 21:01:56 +02:00
15a35e6243 New translations modals.json (Swedish) 2022-04-21 21:01:53 +02:00
d53a5a492c New translations landing.json (Swedish) 2022-04-21 20:00:31 +02:00
0810e5ae6a Merge pull request #842 from AmruthPillai/i18n_main
New Crowdin updates
2022-04-20 09:21:40 +02:00
881b183db5 Merge pull request #844 from AmruthPillai/dependabot/github_actions/actions/checkout-3.0.1
chore(deps): bump actions/checkout from 3.0.0 to 3.0.1
2022-04-20 09:21:32 +02:00
15cea02872 Delete close-stale.yml 2022-04-19 06:45:45 +02:00
c195561df0 Merge pull request #843 from augustocardoso07/fix/page-counter
Fix page counter in the center section
2022-04-18 18:15:24 +02:00
fc725cfc0c chore(deps): bump actions/checkout from 3.0.0 to 3.0.1
Bumps [actions/checkout](https://github.com/actions/checkout) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3.0.0...v3.0.1)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-18 02:30:45 +00:00
9f54516e8c Fix page counter in the center section 2022-04-17 21:09:55 -03:00
68a4cd9635 New translations builder.json (Swedish) 2022-04-17 19:42:51 +02:00
ff01802f2f New translations common.json (Swedish) 2022-04-17 19:42:49 +02:00
bb900bc2e1 New translations dashboard.json (Swedish) 2022-04-17 19:42:48 +02:00
459f82b66b Merge pull request #828 from AmruthPillai/i18n_main
New Crowdin updates
2022-04-11 07:48:37 +02:00
4b382243e4 New translations modals.json (Odia) 2022-04-10 12:17:28 +02:00
af074085d1 New translations landing.json (Odia) 2022-04-10 12:17:25 +02:00
0c8c872668 New translations dashboard.json (Odia) 2022-04-10 12:17:25 +02:00
ddb29bb40d New translations common.json (Odia) 2022-04-10 12:17:23 +02:00
aecb627ab7 New translations builder.json (Odia) 2022-04-10 12:17:22 +02:00
b8cd53cb59 chore(release): 3.3.4 2022-04-09 22:02:26 +02:00
e61f6153c3 Merge pull request #823 from AmruthPillai/i18n_main
New Crowdin updates
2022-04-09 22:01:54 +02:00
386e8ab902 Merge pull request #827 from AmruthPillai/compose-envs
Remove YAML anchors and prefer Docker Compose Environment Arrays
2022-04-09 22:01:41 +02:00
5e8f02e3ca add local build context comment in docker-compose 2022-04-09 21:47:41 +02:00
f219562e72 style(eslint): client/next: add specific rule for no-html-link-for-pages 2022-04-09 21:25:19 +02:00
29d94dfc14 ci(docker): remove yaml anchors in favor of environment array in docker-compose
fix #825, fix #824, fix #820
2022-04-09 21:21:45 +02:00
622f5fc28c ci(github-actions): update key tags for GitHub action to build docker image 2022-04-09 09:33:44 +02:00
647f01e25c Merge branch 'main' of github.com:AmruthPillai/Reactive-Resume 2022-04-09 09:32:20 +02:00
2a4c298572 Merge pull request #819 from martadinata666/combine-tags
combine-tags
2022-04-09 09:30:46 +02:00
447d9b3ca1 New translations builder.json (Greek) 2022-04-08 19:35:17 +02:00
86e66eb6a0 combine-tags 2022-04-08 19:08:01 +07:00
130 changed files with 81697 additions and 3637 deletions

View File

@ -1,4 +1,4 @@
ARG VARIANT="16-bullseye" ARG VARIANT="lts-bullseye"
FROM mcr.microsoft.com/vscode/devcontainers/javascript-node:0-${VARIANT} FROM mcr.microsoft.com/vscode/devcontainers/javascript-node:0-${VARIANT}

View File

@ -1,10 +1,10 @@
# Shared # Server + Client
TZ=UTC TZ=UTC
PUBLIC_URL=http://localhost PUBLIC_URL=http://localhost:3000
PUBLIC_SERVER_URL=http://localhost/api PUBLIC_SERVER_URL=http://localhost:3000/api
PUBLIC_GOOGLE_CLIENT_ID= PUBLIC_GOOGLE_CLIENT_ID=
# Database # Server + Database
POSTGRES_DB=postgres POSTGRES_DB=postgres
POSTGRES_USER=postgres POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres POSTGRES_PASSWORD=postgres
@ -16,7 +16,6 @@ POSTGRES_PORT=5432
POSTGRES_SSL_CERT= POSTGRES_SSL_CERT=
JWT_SECRET= JWT_SECRET=
JWT_EXPIRY_TIME=604800 JWT_EXPIRY_TIME=604800
PUBLIC_GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET= GOOGLE_CLIENT_SECRET=
GOOGLE_API_KEY= GOOGLE_API_KEY=
SENDGRID_API_KEY= SENDGRID_API_KEY=
@ -30,5 +29,5 @@ STORAGE_URL_PREFIX=
STORAGE_ACCESS_KEY= STORAGE_ACCESS_KEY=
STORAGE_SECRET_KEY= STORAGE_SECRET_KEY=
# Flags # Flags (Client)
PUBLIC_FLAG_DISABLE_SIGNUPS=false PUBLIC_FLAG_DISABLE_SIGNUPS=false

View File

@ -1,16 +0,0 @@
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

@ -5,144 +5,76 @@ on:
types: [published] types: [published]
jobs: jobs:
docker_client: client:
name: Docker (Client) name: Client
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout the repository - name: Checkout the repository
uses: actions/checkout@v3.0.0 uses: actions/checkout@v3.0.2
- id: version - id: version
name: Get Version name: Get Version
run: echo ::set-output name=tag::${GITHUB_REF#refs/*/} run: echo ::set-output name=tag::${GITHUB_REF#refs/*/}
- name: Set up QEMU - name: Login to Docker Hub
uses: docker/setup-qemu-action@v1.2.0 uses: docker/login-action@v2.0.0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1.6.0
- name: Login to Docker
uses: docker/login-action@v1.14.1
with: with:
username: ${{ secrets.DOCKER_USERNAME }} username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }} password: ${{ secrets.DOCKER_PASSWORD }}
- name: Login to GitHub Container Registry
uses: docker/login-action@v2.0.0
with:
registry: ghcr.io
username: $GITHUB_REPOSITORY_OWNER
password: ${{ secrets.GH_TOKEN }}
- name: Build and Push Client Image - name: Build and Push Client Image
uses: docker/build-push-action@v2.10.0 uses: docker/build-push-action@v3.0.0
with: with:
context: . context: .
push: true push: true
file: client/Dockerfile file: client/Dockerfile
platforms: linux/amd64,linux/arm64
tags: | tags: |
amruthpillai/reactive-resume:client-latest amruthpillai/reactive-resume:client-latest
amruthpillai/reactive-resume:client-${{ steps.version.outputs.tag }} amruthpillai/reactive-resume:client-${{ steps.version.outputs.tag }}
ghcr.io/amruthpillai/reactive-resume:client-latest
ghcr.io/amruthpillai/reactive-resume:client-${{ steps.version.outputs.tag }}
docker_server: server:
name: Docker (Server) name: Server
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout the repository - name: Checkout the repository
uses: actions/checkout@v3.0.0 uses: actions/checkout@v3.0.2
- id: version - id: version
name: Get Version name: Get Version
run: echo ::set-output name=tag::${GITHUB_REF#refs/*/} run: echo ::set-output name=tag::${GITHUB_REF#refs/*/}
- name: Set up QEMU - name: Login to Docker Hub
uses: docker/setup-qemu-action@v1.2.0 uses: docker/login-action@v2.0.0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1.6.0
- name: Login to Docker
uses: docker/login-action@v1.14.1
with: with:
username: ${{ secrets.DOCKER_USERNAME }} username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }} password: ${{ secrets.DOCKER_PASSWORD }}
- name: Login to GitHub Container Registry
uses: docker/login-action@v2.0.0
with:
registry: ghcr.io
username: $GITHUB_REPOSITORY_OWNER
password: ${{ secrets.GH_TOKEN }}
- name: Build and Push Server Image - name: Build and Push Server Image
uses: docker/build-push-action@v2.10.0 uses: docker/build-push-action@v3.0.0
with: with:
context: . context: .
push: true push: true
file: server/Dockerfile file: server/Dockerfile
platforms: linux/amd64,linux/arm64
tags: | tags: |
amruthpillai/reactive-resume:server-latest amruthpillai/reactive-resume:server-latest
amruthpillai/reactive-resume:server-${{ steps.version.outputs.tag }} amruthpillai/reactive-resume:server-${{ steps.version.outputs.tag }}
github_client:
name: GitHub (Client)
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v3.0.0
- id: version
name: Get Version
run: echo ::set-output name=tag::${GITHUB_REF#refs/*/}
- name: Set up QEMU
uses: docker/setup-qemu-action@v1.2.0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1.6.0
- name: Login to GitHub Container Registry
uses: docker/login-action@v1.14.1
with:
registry: ghcr.io
username: $GITHUB_REPOSITORY_OWNER
password: ${{ secrets.GH_TOKEN }}
- name: Build and Push Client Image
uses: docker/build-push-action@v2.10.0
with:
context: .
push: true
file: client/Dockerfile
platforms: linux/amd64,linux/arm64
tags: |
ghcr.io/amruthpillai/reactive-resume:client-latest
ghcr.io/amruthpillai/reactive-resume:client-${{ steps.version.outputs.tag }}
github_server:
name: GitHub (Server)
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v3.0.0
- id: version
name: Get Version
run: echo ::set-output name=tag::${GITHUB_REF#refs/*/}
- name: Set up QEMU
uses: docker/setup-qemu-action@v1.2.0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1.6.0
- name: Login to GitHub Container Registry
uses: docker/login-action@v1.14.1
with:
registry: ghcr.io
username: $GITHUB_REPOSITORY_OWNER
password: ${{ secrets.GH_TOKEN }}
- name: Build and Push Server Image
uses: docker/build-push-action@v2.10.0
with:
context: .
push: true
file: server/Dockerfile
platforms: linux/amd64,linux/arm64
tags: |
ghcr.io/amruthpillai/reactive-resume:server-latest ghcr.io/amruthpillai/reactive-resume:server-latest
ghcr.io/amruthpillai/reactive-resume:server-${{ steps.version.outputs.tag }} ghcr.io/amruthpillai/reactive-resume:server-${{ steps.version.outputs.tag }}

View File

@ -2,6 +2,64 @@
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. 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.4.6](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.4.5...v3.4.6) (2022-06-19)
## [3.6.0](https://github.com/dvd741-a/Reactive-Resume/compare/v3.3.4...v3.6.0) (2022-06-05)
### Features
* **all:** upgrade to v3.4.0 ([87d381f](https://github.com/dvd741-a/Reactive-Resume/commit/87d381fe8eab9ca4624df5de6e8b9ab18a072b67))
* **i18n:** add Hungrarian (Magyar) language ([35fe4e2](https://github.com/dvd741-a/Reactive-Resume/commit/35fe4e27744b6f7325b25db2cf3b626ed8598623))
### Bug Fixes
* **i18n:** fix language mismatch in exported pdf ([62fd63e](https://github.com/dvd741-a/Reactive-Resume/commit/62fd63e41fe10fba843a40fb08191f5944f2b2fc))
* **typeorm:** update typeorm to latest 0.2.x for secpatch ([5bdb92b](https://github.com/dvd741-a/Reactive-Resume/commit/5bdb92b1cff9e56879f9bbf31801d6554a00a8d5))
## [3.5.0](https://github.com/dvd741-a/Reactive-Resume/compare/v3.3.4...v3.5.0) (2022-06-05)
### Features
* **all:** upgrade to v3.4.0 ([87d381f](https://github.com/dvd741-a/Reactive-Resume/commit/87d381fe8eab9ca4624df5de6e8b9ab18a072b67))
* **i18n:** add Hungrarian (Magyar) language ([35fe4e2](https://github.com/dvd741-a/Reactive-Resume/commit/35fe4e27744b6f7325b25db2cf3b626ed8598623))
### Bug Fixes
* **i18n:** fix language mismatch in exported pdf ([62fd63e](https://github.com/dvd741-a/Reactive-Resume/commit/62fd63e41fe10fba843a40fb08191f5944f2b2fc))
* **typeorm:** update typeorm to latest 0.2.x for secpatch ([5bdb92b](https://github.com/dvd741-a/Reactive-Resume/commit/5bdb92b1cff9e56879f9bbf31801d6554a00a8d5))
### [3.4.5](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.4.4...v3.4.5) (2022-05-24)
### Bug Fixes
* **i18n:** fix language mismatch in exported pdf ([62fd63e](https://github.com/AmruthPillai/Reactive-Resume/commit/62fd63e41fe10fba843a40fb08191f5944f2b2fc))
## [3.4.4](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.4.3...v3.4.4) (2022-05-02)
### Features
* **i18n:** add Hungrarian (Magyar) language ([35fe4e2](https://github.com/AmruthPillai/Reactive-Resume/commit/35fe4e27744b6f7325b25db2cf3b626ed8598623))
### [3.4.3](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.4.2...v3.4.3) (2022-05-01)
### [3.4.2](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.4.1...v3.4.2) (2022-04-30)
### [3.4.1](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.4.0...v3.4.1) (2022-04-30)
### Bug Fixes
* **typeorm:** update typeorm to latest 0.2.x for secpatch ([5bdb92b](https://github.com/AmruthPillai/Reactive-Resume/commit/5bdb92b1cff9e56879f9bbf31801d6554a00a8d5))
### [3.4.0](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.3.3...v3.4.0) (2022-04-30)
### [3.3.4](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.3.3...v3.3.4) (2022-04-09)
### [3.3.3](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.3.2...v3.3.3) (2022-04-09) ### [3.3.3](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.3.2...v3.3.3) (2022-04-09)

View File

@ -15,6 +15,23 @@ Reactive Resume is a free and open source resume builder thats built to make
You have complete control over what goes into your resume, how it looks, what colors, what templates, even the layout in which sections placed. Want a dark mode resume? Its as easy as editing 3 values and youre done. You dont need to wait to see your changes either. Everything you type, everything you change, appears immediately on your resume and gets updated in real time. You have complete control over what goes into your resume, how it looks, what colors, what templates, even the layout in which sections placed. Want a dark mode resume? Its as easy as editing 3 values and youre done. You dont need to wait to see your changes either. Everything you type, everything you change, appears immediately on your resume and gets updated in real time.
## Table of Contents
- [Reactive Resume](#reactive-resume)
- [Go to App | [Docs](https://docs.rxresu.me)](#go-to-app--docs)
- [Table of Contents](#table-of-contents)
- [Features](#features)
- [Languages](#languages)
- [Tutorial](#tutorial)
- [Build from Source](#build-from-source)
- [Contributing](#contributing)
- [Report Bugs and Feature Requests](#report-bugs-and-feature-requests)
- [Donations](#donations)
- [💸 PayPal](#-paypal)
- [Infrastructure](#infrastructure)
- [Contributors Wall](#contributors-wall)
- [License](#license)
## Features ## Features
- Free, forever - Free, forever
@ -40,19 +57,27 @@ You have complete control over what goes into your resume, how it looks, what co
- Arabic (اَلْعَرَبِيَّةُ) - Arabic (اَلْعَرَبِيَّةُ)
- Bengali (বাংলা) - Bengali (বাংলা)
- Chinese (中文) - Chinese (中文)
- Czech (čeština)
- Danish (Dansk) - Danish (Dansk)
- Dutch (Nederlands) - Dutch (Nederlands)
- English - English
- French (Français) - French (Français)
- German (Deutsch) - German (Deutsch)
- Greek (Ελληνικά)
- Hebrew (Ivrit)
- Hindi (हिन्दी) - Hindi (हिन्दी)
- Hungarian (Magyar)
- Indonesian (Bahasa Indonesia)
- Italian (Italiano) - Italian (Italiano)
- Kannada (ಕನ್ನಡ) - Kannada (ಕನ್ನಡ)
- Malayalam (മലയാളം) - Malayalam (മലയാളം)
- Odia (ଓଡ଼ିଆ)
- Persian (Farsi)
- Polish (Polski) - Polish (Polski)
- Portuguese (Português) - Portuguese (Português)
- Russian (русский) - Russian (русский)
- Spanish (Español) - Spanish (Español)
- Swedish (Svenska)
- Tamil (தமிழ்) - Tamil (தமிழ்)
- Turkish (Türkçe) - Turkish (Türkçe)
- Vietnamese (Tiếng Việt) - Vietnamese (Tiếng Việt)
@ -79,7 +104,7 @@ This project makes use of [conventional commits](https://www.conventionalcommits
NOTE: Be sure to merge the latest from `main` before making a pull request! NOTE: Be sure to merge the latest from `main` before making a pull request!
## Bugs? Feature Requests? ## Report Bugs and Feature Requests
Use the [GitHub Issues](https://github.com/AmruthPillai/Reactive-Resume/issues/new/choose) platform to notify me about bugs or new features that you would like to see in Reactive Resume. Please check before creating new issues as there might already be one. Use the [GitHub Issues](https://github.com/AmruthPillai/Reactive-Resume/issues/new/choose) platform to notify me about bugs or new features that you would like to see in Reactive Resume. Please check before creating new issues as there might already be one.

View File

@ -1,7 +1,7 @@
plugins { plugins {
id 'com.android.application' version '7.1.2' apply false id 'com.android.application' version '7.1.2' apply false
id 'com.android.library' version '7.1.2' apply false id 'com.android.library' version '7.1.2' apply false
id 'org.jetbrains.kotlin.android' version '1.6.20' apply false id 'org.jetbrains.kotlin.android' version '1.7.0' apply false
} }
task clean(type: Delete) { task clean(type: Delete) {

View File

@ -3,6 +3,7 @@
"ignorePatterns": [".next", "__ENV.js"], "ignorePatterns": [".next", "__ENV.js"],
"rules": { "rules": {
"@next/next/no-img-element": "off", "@next/next/no-img-element": "off",
"@next/next/no-sync-scripts": "off" "@next/next/no-sync-scripts": "off",
"@next/next/no-html-link-for-pages": ["error", "pages"]
} }
} }

5
client/.gitignore vendored
View File

@ -36,4 +36,7 @@ yarn-error.log*
*.tsbuildinfo *.tsbuildinfo
# react-env # react-env
__ENV.js __ENV.js
# next-sitemap
sitemap*.xml

View File

@ -1,4 +1,4 @@
FROM node:17-alpine as dependencies FROM node:lts-alpine as dependencies
RUN apk add --no-cache curl g++ make python3 \ RUN apk add --no-cache curl g++ make python3 \
&& curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm && curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm
@ -11,7 +11,7 @@ COPY ./client/package.json ./client/package.json
RUN pnpm install --frozen-lockfile RUN pnpm install --frozen-lockfile
FROM node:17-alpine as builder FROM node:lts-alpine as builder
RUN apk add --no-cache curl g++ make python3 \ RUN apk add --no-cache curl g++ make python3 \
&& curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm && curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm
@ -27,7 +27,7 @@ COPY --from=dependencies /app/client/node_modules ./client/node_modules
RUN pnpm run build:schema RUN pnpm run build:schema
RUN pnpm run build:client RUN pnpm run build:client
FROM node:17-alpine as production FROM node:lts-alpine as production
WORKDIR /app WORKDIR /app

View File

@ -48,7 +48,7 @@ const Page: React.FC<Props> = ({ page, showPageNumbers = false }) => {
</div> </div>
{showPageNumbers && ( {showPageNumbers && (
<h4 className={styles.pageNumber}>{`${t<string>('builder.common.glossary.page')} {page + 1}`}</h4> <h4 className={styles.pageNumber}>{`${t<string>('builder.common.glossary.page')} ${page + 1}`}</h4>
)} )}
</div> </div>
); );

View File

@ -81,14 +81,14 @@ const LeftSidebar = () => {
arrow arrow
key={id} key={id}
placement="right" placement="right"
title={get(sections, `${id}.name`, t<string>(`builder.leftSidebar.sections.${id}.heading`))} title={get(sections, `${id}.name`, t<string>(`builder.leftSidebar.sections.${id}.heading`)) as string}
> >
<IconButton onClick={() => handleClick(id)}>{icon}</IconButton> <IconButton onClick={() => handleClick(id)}>{icon}</IconButton>
</Tooltip> </Tooltip>
))} ))}
{customSections.map(({ id }) => ( {customSections.map(({ id }) => (
<Tooltip key={id} title={get(sections, `${id}.name`, '')} placement="right" arrow> <Tooltip key={id} title={get(sections, `${id}.name`, '') as string} placement="right" arrow>
<IconButton onClick={() => handleClick(id)}> <IconButton onClick={() => handleClick(id)}>
<Star /> <Star />
</IconButton> </IconButton>

View File

@ -57,6 +57,12 @@ const Basics = () => {
</div> </div>
</div> </div>
<ResumeInput
type="date"
label={t<string>('builder.leftSidebar.sections.basics.birthdate.label')}
path="basics.birthdate"
className="sm:col-span-2"
/>
<ResumeInput <ResumeInput
label={t<string>('builder.common.form.email.label')} label={t<string>('builder.common.form.email.label')}
path="basics.email" path="basics.email"

View File

@ -117,7 +117,7 @@ const Layout = () => {
[styles.disabled]: !get(resumeSections, `${sectionId}.visible`, true), [styles.disabled]: !get(resumeSections, `${sectionId}.visible`, true),
})} })}
> >
{get(resumeSections, `${sectionId}.name`, '')} {get(resumeSections, `${sectionId}.name`, '') as string}
</div> </div>
</div> </div>
)} )}

View File

@ -5,11 +5,12 @@ import { useRouter } from 'next/router';
import styles from './BaseModal.module.scss'; import styles from './BaseModal.module.scss';
type Props = { type Props = {
icon?: React.ReactNode;
isOpen: boolean; isOpen: boolean;
heading: string; heading: string;
handleClose: () => void; icon?: React.ReactNode;
children?: React.ReactNode;
footerChildren?: React.ReactNode; footerChildren?: React.ReactNode;
handleClose: () => void;
}; };
const BaseModal: React.FC<Props> = ({ icon, isOpen, heading, children, handleClose, footerChildren }) => { const BaseModal: React.FC<Props> = ({ icon, isOpen, heading, children, handleClose, footerChildren }) => {

View File

@ -76,6 +76,7 @@ const List: React.FC<Props> = ({
return ( return (
<ListItem <ListItem
key={item.id} key={item.id}
path={path}
item={item} item={item}
index={index} index={index}
title={title} title={title}

View File

@ -17,6 +17,7 @@ interface DragItem {
type Props = { type Props = {
item: ListItemType; item: ListItemType;
path: string;
index: number; index: number;
title: string; title: string;
subtitle?: string; subtitle?: string;
@ -26,14 +27,14 @@ type Props = {
onDuplicate?: (item: ListItemType) => void; onDuplicate?: (item: ListItemType) => void;
}; };
const ListItem: React.FC<Props> = ({ item, index, title, subtitle, onMove, onEdit, onDelete, onDuplicate }) => { const ListItem: React.FC<Props> = ({ item, path, index, title, subtitle, onMove, onEdit, onDelete, onDuplicate }) => {
const { t } = useTranslation(); const { t } = useTranslation();
const ref = useRef<HTMLDivElement>(null); const ref = useRef<HTMLDivElement>(null);
const [anchorEl, setAnchorEl] = useState<Element | null>(null); const [anchorEl, setAnchorEl] = useState<Element | null>(null);
const [{ handlerId }, drop] = useDrop<DragItem, any, any>({ const [{ handlerId }, drop] = useDrop<DragItem, any, any>({
accept: 'ListItem', accept: path,
collect(monitor) { collect(monitor) {
return { handlerId: monitor.getHandlerId() }; return { handlerId: monitor.getHandlerId() };
}, },
@ -68,7 +69,7 @@ const ListItem: React.FC<Props> = ({ item, index, title, subtitle, onMove, onEdi
}); });
const [{ isDragging }, drag] = useDrag({ const [{ isDragging }, drag] = useDrag({
type: 'ListItem', type: path,
item: () => { item: () => {
return { id: item.id, index }; return { id: item.id, index };
}, },

View File

@ -1,5 +0,0 @@
import dynamic from 'next/dynamic';
const NoSSR: React.FC = ({ children }) => <>{children}</>;
export default dynamic(() => Promise.resolve(NoSSR), { ssr: false });

View File

@ -1,4 +1,7 @@
import { DatePicker } from '@mui/lab';
import { TextField } from '@mui/material'; import { TextField } from '@mui/material';
import dayjs from 'dayjs';
import { isEmpty } from 'lodash';
import get from 'lodash/get'; import get from 'lodash/get';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
@ -8,7 +11,7 @@ import { setResumeState } from '@/store/resume/resumeSlice';
import MarkdownSupported from './MarkdownSupported'; import MarkdownSupported from './MarkdownSupported';
interface Props { interface Props {
type?: 'text' | 'textarea'; type?: 'text' | 'textarea' | 'date';
label: string; label: string;
path: string; path: string;
className?: string; className?: string;
@ -31,6 +34,11 @@ const ResumeInput: React.FC<Props> = ({ type = 'text', label, path, className, m
dispatch(setResumeState({ path, value: event.target.value })); dispatch(setResumeState({ path, value: event.target.value }));
}; };
const onChangeValue = (value: string) => {
setValue(value);
dispatch(setResumeState({ path, value }));
};
if (type === 'textarea') { if (type === 'textarea') {
return ( return (
<TextField <TextField
@ -45,6 +53,22 @@ const ResumeInput: React.FC<Props> = ({ type = 'text', label, path, className, m
); );
} }
if (type === 'date') {
return (
<DatePicker
openTo="year"
label={label}
value={value}
views={['year', 'month', 'day']}
renderInput={(params) => <TextField {...params} error={false} className={className} />}
onChange={(date: Date | null, keyboardInputValue: string | undefined) => {
isEmpty(keyboardInputValue) && onChangeValue('');
date && dayjs(date).isValid() && onChangeValue(date.toISOString());
}}
/>
);
}
return <TextField type={type} label={label} value={value} onChange={onChange} className={className} />; return <TextField type={type} label={label} value={value} onChange={onChange} className={className} />;
}; };

View File

@ -7,19 +7,27 @@ export type Language = {
export const languages: Language[] = [ export const languages: Language[] = [
{ code: 'ar', name: 'Arabic', localName: 'اَلْعَرَبِيَّةُ' }, { code: 'ar', name: 'Arabic', localName: 'اَلْعَرَبِيَّةُ' },
{ code: 'bn', name: 'Bengali', localName: 'বাংলা' }, { code: 'bn', name: 'Bengali', localName: 'বাংলা' },
{ code: 'cs', name: 'Czech', localName: 'čeština' },
{ code: 'da', name: 'Danish', localName: 'Dansk' }, { code: 'da', name: 'Danish', localName: 'Dansk' },
{ code: 'de', name: 'German', localName: 'Deutsch' }, { code: 'de', name: 'German', localName: 'Deutsch' },
{ code: 'el', name: 'Greek', localName: 'Ελληνικά' },
{ code: 'en', name: 'English' }, { code: 'en', name: 'English' },
{ code: 'es', name: 'Spanish', localName: 'Español' }, { code: 'es', name: 'Spanish', localName: 'Español' },
{ code: 'fr', name: 'French', localName: 'Français' }, { code: 'fr', name: 'French', localName: 'Français' },
{ code: 'he', name: 'Hebrew', localName: 'Ivrit' },
{ code: 'hi', name: 'Hindi', localName: 'हिन्दी' }, { code: 'hi', name: 'Hindi', localName: 'हिन्दी' },
{ code: 'hu', name: 'Hungarian', localName: 'Magyar' },
{ code: 'id', name: 'Indonesian', localName: 'Bahasa Indonesia' },
{ code: 'it', name: 'Italian', localName: 'Italiano' }, { code: 'it', name: 'Italian', localName: 'Italiano' },
{ code: 'kn', name: 'Kannada', localName: 'ಕನ್ನಡ' }, { code: 'kn', name: 'Kannada', localName: 'ಕನ್ನಡ' },
{ code: 'ml', name: 'Malayalam', localName: 'മലയാളം' }, { code: 'ml', name: 'Malayalam', localName: 'മലയാളം' },
{ code: 'nl', name: 'Dutch', localName: 'Nederlands' }, { code: 'nl', name: 'Dutch', localName: 'Nederlands' },
{ code: 'or', name: 'Odia', localName: 'ଓଡ଼ିଆ' },
{ code: 'fa', name: 'Persian', localName: 'Farsi' },
{ code: 'pl', name: 'Polish', localName: 'Polski' }, { code: 'pl', name: 'Polish', localName: 'Polski' },
{ code: 'pt', name: 'Portuguese', localName: 'Português' }, { code: 'pt', name: 'Portuguese', localName: 'Português' },
{ code: 'ru', name: 'Russian', localName: 'русский' }, { code: 'ru', name: 'Russian', localName: 'русский' },
{ code: 'sv', name: 'Swedish', localName: 'Svenska' },
{ code: 'ta', name: 'Tamil', localName: 'தமிழ்' }, { code: 'ta', name: 'Tamil', localName: 'தமிழ்' },
{ code: 'tr', name: 'Turkish', localName: 'Türkçe' }, { code: 'tr', name: 'Turkish', localName: 'Türkçe' },
{ code: 'vi', name: 'Vietnamese', localName: 'Tiếng Việt' }, { code: 'vi', name: 'Vietnamese', localName: 'Tiếng Việt' },

View File

@ -6,7 +6,6 @@ import Joi from 'joi';
import { isEmpty } from 'lodash'; import { isEmpty } from 'lodash';
import { Trans, useTranslation } from 'next-i18next'; import { Trans, useTranslation } from 'next-i18next';
import { useMemo, useState } from 'react'; import { useMemo, useState } from 'react';
import { GoogleLoginResponse, GoogleLoginResponseOffline, useGoogleLogin } from 'react-google-login';
import { Controller, useForm } from 'react-hook-form'; import { Controller, useForm } from 'react-hook-form';
import toast from 'react-hot-toast'; import toast from 'react-hot-toast';
import { useIsMutating, useMutation } from 'react-query'; import { useIsMutating, useMutation } from 'react-query';
@ -18,6 +17,8 @@ import { ServerError } from '@/services/axios';
import { useAppDispatch, useAppSelector } from '@/store/hooks'; import { useAppDispatch, useAppSelector } from '@/store/hooks';
import { setModalState } from '@/store/modal/modalSlice'; import { setModalState } from '@/store/modal/modalSlice';
declare const google: any;
type FormData = { type FormData = {
identifier: string; identifier: string;
password: string; password: string;
@ -56,15 +57,6 @@ const LoginModal: React.FC = () => {
loginWithGoogle loginWithGoogle
); );
const { signIn } = useGoogleLogin({
clientId: env('GOOGLE_CLIENT_ID'),
onSuccess: async (response: GoogleLoginResponse | GoogleLoginResponseOffline) => {
await loginWithGoogleMutation({ accessToken: (response as GoogleLoginResponse).accessToken });
handleClose();
},
});
const handleClose = () => { const handleClose = () => {
dispatch(setModalState({ modal: 'auth.login', state: { open: false } })); dispatch(setModalState({ modal: 'auth.login', state: { open: false } }));
reset(); reset();
@ -93,8 +85,18 @@ const LoginModal: React.FC = () => {
dispatch(setModalState({ modal: 'auth.forgot', state: { open: true } })); dispatch(setModalState({ modal: 'auth.forgot', state: { open: true } }));
}; };
const handleLoginWithGoogle = () => { const handleLoginWithGoogle = async () => {
signIn(); google.accounts.id.initialize({
client_id: env('GOOGLE_CLIENT_ID'),
callback: async (response: any) => {
await loginWithGoogleMutation({ credential: response.credential });
handleClose();
},
auto_select: false,
});
google.accounts.id.prompt();
}; };
const PasswordVisibility = (): React.ReactElement => { const PasswordVisibility = (): React.ReactElement => {

View File

@ -5,7 +5,6 @@ import { Button, TextField } from '@mui/material';
import Joi from 'joi'; import Joi from 'joi';
import { isEmpty } from 'lodash'; import { isEmpty } from 'lodash';
import { Trans, useTranslation } from 'next-i18next'; import { Trans, useTranslation } from 'next-i18next';
import { GoogleLoginResponse, GoogleLoginResponseOffline, useGoogleLogin } from 'react-google-login';
import { Controller, useForm } from 'react-hook-form'; import { Controller, useForm } from 'react-hook-form';
import { useMutation } from 'react-query'; import { useMutation } from 'react-query';
@ -15,6 +14,8 @@ import { ServerError } from '@/services/axios';
import { useAppDispatch, useAppSelector } from '@/store/hooks'; import { useAppDispatch, useAppSelector } from '@/store/hooks';
import { setModalState } from '@/store/modal/modalSlice'; import { setModalState } from '@/store/modal/modalSlice';
declare const google: any;
type FormData = { type FormData = {
name: string; name: string;
username: string; username: string;
@ -63,15 +64,6 @@ const RegisterModal: React.FC = () => {
loginWithGoogle loginWithGoogle
); );
const { signIn } = useGoogleLogin({
clientId: env('GOOGLE_CLIENT_ID'),
onSuccess: async (response: GoogleLoginResponse | GoogleLoginResponseOffline) => {
await loginWithGoogleMutation({ accessToken: (response as GoogleLoginResponse).accessToken });
handleClose();
},
});
const handleClose = () => { const handleClose = () => {
dispatch(setModalState({ modal: 'auth.register', state: { open: false } })); dispatch(setModalState({ modal: 'auth.register', state: { open: false } }));
reset(); reset();
@ -87,8 +79,18 @@ const RegisterModal: React.FC = () => {
dispatch(setModalState({ modal: 'auth.login', state: { open: true } })); dispatch(setModalState({ modal: 'auth.login', state: { open: true } }));
}; };
const handleLoginWithGoogle = () => { const handleLoginWithGoogle = async () => {
signIn(); google.accounts.id.initialize({
client_id: env('GOOGLE_CLIENT_ID'),
callback: async (response: any) => {
await loginWithGoogleMutation({ credential: response.credential });
handleClose();
},
auto_select: false,
});
google.accounts.id.prompt();
}; };
return ( return (

View File

@ -6,19 +6,27 @@ const i18nConfig = {
locales: [ locales: [
'ar', 'ar',
'bn', 'bn',
'cs',
'da', 'da',
'de', 'de',
'el',
'en', 'en',
'es', 'es',
'fa',
'fr', 'fr',
'he',
'hi', 'hi',
'hu',
'id',
'it', 'it',
'kn', 'kn',
'ml', 'ml',
'nl', 'nl',
'or',
'pl', 'pl',
'pt', 'pt',
'ru', 'ru',
'sv',
'ta', 'ta',
'tr', 'tr',
'vi', 'vi',

View File

@ -9,71 +9,74 @@
}, },
"dependencies": { "dependencies": {
"@beam-australia/react-env": "^3.1.1", "@beam-australia/react-env": "^3.1.1",
"@date-io/dayjs": "^2.14.0",
"@emotion/css": "^11.9.0", "@emotion/css": "^11.9.0",
"@emotion/react": "^11.9.0", "@emotion/react": "^11.9.3",
"@emotion/styled": "^11.8.1", "@emotion/styled": "^11.9.3",
"@hookform/resolvers": "2.8.8", "@hookform/resolvers": "2.9.1",
"@monaco-editor/react": "^4.4.1", "@monaco-editor/react": "^4.4.5",
"@mui/icons-material": "^5.6.0", "@mui/icons-material": "^5.8.4",
"@mui/lab": "^5.0.0-alpha.76", "@mui/lab": "^5.0.0-alpha.86",
"@mui/material": "^5.6.0", "@mui/material": "^5.8.4",
"@reduxjs/toolkit": "^1.8.1", "@mui/system": "^5.8.4",
"axios": "^0.26.1", "@mui/x-date-pickers": "5.0.0-alpha.6",
"@next/env": "^12.1.6",
"@reduxjs/toolkit": "^1.8.2",
"axios": "^0.27.2",
"clsx": "^1.1.1", "clsx": "^1.1.1",
"dayjs": "^1.11.0", "dayjs": "^1.11.3",
"downloadjs": "^1.4.7", "downloadjs": "^1.4.7",
"joi": "^17.6.0", "joi": "^17.6.0",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"md5-hex": "^4.0.0", "md5-hex": "^4.0.0",
"monaco-editor": "^0.33.0", "monaco-editor": "^0.33.0",
"nanoid": "^3.3.2", "nanoid": "^3.3.4",
"next": "12.1.4", "next": "12.1.6",
"next-i18next": "^11.0.0", "next-i18next": "^11.0.0",
"react": "<18", "react": "18.2.0",
"react-beautiful-dnd": "^13.1.0", "react-beautiful-dnd": "^13.1.0",
"react-colorful": "^5.5.1", "react-colorful": "^5.5.1",
"react-dnd": "^15.1.2", "react-dnd": "16.0.1",
"react-dnd-html5-backend": "^15.1.2", "react-dnd-html5-backend": "16.0.1",
"react-dom": "<18", "react-dom": "18.2.0",
"react-google-login": "^5.2.2", "react-hook-form": "^7.32.2",
"react-hook-form": "^7.29.0",
"react-hot-toast": "2.2.0", "react-hot-toast": "2.2.0",
"react-hotkeys-hook": "^3.4.4", "react-hotkeys-hook": "^3.4.6",
"react-icons": "^4.3.1", "react-icons": "^4.4.0",
"react-markdown": "^8.0.2", "react-markdown": "^8.0.3",
"react-query": "^3.34.19", "react-query": "^3.39.1",
"react-redux": "^7.2.8", "react-redux": "^8.0.2",
"react-zoom-pan-pinch": "^2.1.3", "react-zoom-pan-pinch": "^2.1.3",
"redux": "^4.1.2", "redux": "^4.2.0",
"redux-persist": "^6.0.0", "redux-persist": "^6.0.0",
"redux-saga": "^1.1.3", "redux-saga": "^1.1.3",
"remark-gfm": "^3.0.1", "remark-gfm": "^3.0.1",
"sharp": "^0.30.3", "sharp": "^0.30.6",
"uuid": "^8.3.2", "uuid": "^8.3.2",
"webfontloader": "^1.6.28" "webfontloader": "^1.6.28"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.17.9", "@babel/core": "^7.18.5",
"@reactive-resume/schema": "workspace:*", "@reactive-resume/schema": "workspace:*",
"@tailwindcss/typography": "^0.5.2", "@tailwindcss/typography": "^0.5.2",
"@types/downloadjs": "^1.4.3", "@types/downloadjs": "^1.4.3",
"@types/lodash": "^4.14.181", "@types/lodash": "^4.14.182",
"@types/node": "17.0.23", "@types/node": "18.0.0",
"@types/react": "<18", "@types/react": "18.0.14",
"@types/react-beautiful-dnd": "^13.1.2", "@types/react-beautiful-dnd": "^13.1.2",
"@types/react-redux": "^7.1.23", "@types/react-redux": "^7.1.24",
"@types/tailwindcss": "^3.0.10", "@types/tailwindcss": "^3.0.10",
"@types/uuid": "^8.3.4", "@types/uuid": "^8.3.4",
"@types/webfontloader": "^1.6.34", "@types/webfontloader": "^1.6.34",
"autoprefixer": "^10.4.4", "autoprefixer": "^10.4.7",
"csstype": "^3.0.11", "csstype": "^3.1.0",
"eslint": "^8.12.0", "eslint": "^8.18.0",
"eslint-config-next": "12.1.4", "eslint-config-next": "12.1.6",
"next-sitemap": "^2.5.19", "next-sitemap": "^3.1.1",
"postcss": "^8.4.12", "postcss": "^8.4.14",
"prettier": "^2.6.2", "prettier": "^2.7.1",
"sass": "^1.50.0", "sass": "^1.52.3",
"tailwindcss": "^3.0.23", "tailwindcss": "^3.1.3",
"typescript": "<4.6.0" "typescript": "^4.7.4"
} }
} }

View File

@ -59,6 +59,14 @@ const Preview: NextPage<Props> = ({ username, slug, resume: initialData }) => {
} }
}, [dispatch, initialData]); }, [dispatch, initialData]);
useEffect(() => {
if (!isEmpty(resume) && router.locale !== resume.metadata.locale) {
const { pathname, asPath, query } = router;
router.push({ pathname, query }, asPath, { locale: resume.metadata.locale });
}
}, [resume, router]);
useQuery<Resume>(`resume/${username}/${slug}`, () => fetchResumeByIdentifier({ username, slug }), { useQuery<Resume>(`resume/${username}/${slug}`, () => fetchResumeByIdentifier({ username, slug }), {
initialData, initialData,
retry: false, retry: false,

View File

@ -1,9 +1,10 @@
import '@/styles/globals.scss'; import '@/styles/globals.scss';
import DateAdapter from '@mui/lab/AdapterDayjs'; import DayjsAdapter from '@date-io/dayjs';
import LocalizationProvider from '@mui/lab/LocalizationProvider'; import { LocalizationProvider } from '@mui/lab';
import type { AppProps } from 'next/app'; import type { AppProps } from 'next/app';
import Head from 'next/head'; import Head from 'next/head';
import Script from 'next/script';
import { appWithTranslation } from 'next-i18next'; import { appWithTranslation } from 'next-i18next';
import { Toaster } from 'react-hot-toast'; import { Toaster } from 'react-hot-toast';
import { QueryClientProvider } from 'react-query'; import { QueryClientProvider } from 'react-query';
@ -31,7 +32,7 @@ const App: React.FC<AppProps> = ({ Component, pageProps }) => {
</Head> </Head>
<ReduxProvider store={store}> <ReduxProvider store={store}>
<LocalizationProvider dateAdapter={DateAdapter}> <LocalizationProvider dateAdapter={DayjsAdapter}>
<PersistGate loading={null} persistor={persistor}> <PersistGate loading={null} persistor={persistor}>
<QueryClientProvider client={queryClient}> <QueryClientProvider client={queryClient}>
<WrapperRegistry> <WrapperRegistry>
@ -52,6 +53,8 @@ const App: React.FC<AppProps> = ({ Component, pageProps }) => {
</PersistGate> </PersistGate>
</LocalizationProvider> </LocalizationProvider>
</ReduxProvider> </ReduxProvider>
<Script src="https://accounts.google.com/gsi/client" />
</> </>
); );
}; };

View File

@ -1,6 +1,6 @@
import { DarkMode, LightMode, Link as LinkIcon } from '@mui/icons-material'; import { DarkMode, LightMode, Link as LinkIcon } from '@mui/icons-material';
import { Masonry } from '@mui/lab'; import { Masonry } from '@mui/lab';
import { Button, IconButton } from '@mui/material'; import { Button, IconButton, NoSsr } from '@mui/material';
import type { GetStaticProps, NextPage } from 'next'; import type { GetStaticProps, NextPage } from 'next';
import Image from 'next/image'; import Image from 'next/image';
import Link from 'next/link'; import Link from 'next/link';
@ -11,7 +11,6 @@ import Testimony from '@/components/landing/Testimony';
import Footer from '@/components/shared/Footer'; import Footer from '@/components/shared/Footer';
import LanguageSwitcher from '@/components/shared/LanguageSwitcher'; import LanguageSwitcher from '@/components/shared/LanguageSwitcher';
import Logo from '@/components/shared/Logo'; import Logo from '@/components/shared/Logo';
import NoSSR from '@/components/shared/NoSSR';
import { screenshots } from '@/config/screenshots'; import { screenshots } from '@/config/screenshots';
import { FLAG_DISABLE_SIGNUPS } from '@/constants/flags'; import { FLAG_DISABLE_SIGNUPS } from '@/constants/flags';
import testimonials from '@/data/testimonials'; import testimonials from '@/data/testimonials';
@ -59,7 +58,7 @@ const Home: NextPage = () => {
<h2>{t<string>('common.subtitle')}</h2> <h2>{t<string>('common.subtitle')}</h2>
<NoSSR> <NoSsr>
<div className={styles.buttonWrapper}> <div className={styles.buttonWrapper}>
{isLoggedIn ? ( {isLoggedIn ? (
<> <>
@ -81,7 +80,7 @@ const Home: NextPage = () => {
</> </>
)} )}
</div> </div>
</NoSSR> </NoSsr>
</div> </div>
</div> </div>

View File

@ -7,6 +7,7 @@ import get from 'lodash/get';
import isEmpty from 'lodash/isEmpty'; import isEmpty from 'lodash/isEmpty';
import { GetServerSideProps, NextPage } from 'next'; import { GetServerSideProps, NextPage } from 'next';
import Link from 'next/link'; import Link from 'next/link';
import { useRouter } from 'next/router';
import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations';
import { useEffect } from 'react'; import { useEffect } from 'react';
import toast from 'react-hot-toast'; import toast from 'react-hot-toast';
@ -35,6 +36,8 @@ export const getServerSideProps: GetServerSideProps<Props> = async ({ query, loc
}; };
const Preview: NextPage<Props> = ({ shortId }) => { const Preview: NextPage<Props> = ({ shortId }) => {
const router = useRouter();
const dispatch = useAppDispatch(); const dispatch = useAppDispatch();
const { data: resume } = useQuery<Resume>(`resume/${shortId}`, () => fetchResumeByShortId({ shortId }), { const { data: resume } = useQuery<Resume>(`resume/${shortId}`, () => fetchResumeByShortId({ shortId }), {
@ -52,6 +55,14 @@ const Preview: NextPage<Props> = ({ shortId }) => {
if (resume) dispatch(setResume(resume)); if (resume) dispatch(setResume(resume));
}, [resume, dispatch]); }, [resume, dispatch]);
useEffect(() => {
if (resume && !isEmpty(resume) && router.locale !== resume.metadata.locale) {
const { pathname, asPath, query } = router;
router.push({ pathname, query }, asPath, { locale: resume.metadata.locale });
}
}, [resume, router]);
if (!resume || isEmpty(resume)) return null; if (!resume || isEmpty(resume)) return null;
const layout: string[][][] = get(resume, 'metadata.layout', []); const layout: string[][][] = get(resume, 'metadata.layout', []);

View File

@ -1,9 +1,9 @@
{ {
"common": { "common": {
"actions": { "actions": {
"add": "إضافة {{فقرة}} جديدة", "add": "إضافة {{token}} جديدة",
"delete": "حذة {{الفقرة}}", "delete": "حذف {{token}}",
"edit": "تحرير {{الفقرة}}" "edit": "تحرير {{token}}"
}, },
"columns": { "columns": {
"heading": "الأعمدة", "heading": "الأعمدة",
@ -24,13 +24,13 @@
"label": "تاريخ الانتهاء" "label": "تاريخ الانتهاء"
}, },
"keywords": { "keywords": {
"label": "الكلمات الرئيسية" "label": "الكلمات الدالة"
}, },
"level": { "level": {
"label": "مستوى" "label": "مستوى"
}, },
"levelNum": { "levelNum": {
"label": "المستوى (Number)" "label": "المستوى (العدد)"
}, },
"name": { "name": {
"label": "الاسم" "label": "الاسم"
@ -42,7 +42,7 @@
"label": "المنصب" "label": "المنصب"
}, },
"start-date": { "start-date": {
"label": "تاريخ البداية" "label": "تاريخ البدء"
}, },
"subtitle": { "subtitle": {
"label": "العنوان الفرعي" "label": "العنوان الفرعي"
@ -119,6 +119,9 @@
"name": { "name": {
"label": "الاسم الكامل" "label": "الاسم الكامل"
}, },
"birthdate": {
"label": "تاريخ الميلاد"
},
"photo-filters": { "photo-filters": {
"effects": { "effects": {
"border": { "border": {

View File

@ -119,6 +119,9 @@
"name": { "name": {
"label": "পূর্ণ নাম" "label": "পূর্ণ নাম"
}, },
"birthdate": {
"label": "জন্ম তারিখ"
},
"photo-filters": { "photo-filters": {
"effects": { "effects": {
"border": { "border": {

View File

@ -119,6 +119,9 @@
"name": { "name": {
"label": "Celé jméno" "label": "Celé jméno"
}, },
"birthdate": {
"label": "Datum narození"
},
"photo-filters": { "photo-filters": {
"effects": { "effects": {
"border": { "border": {

View File

@ -0,0 +1,29 @@
{
"avatar": {
"menu": {
"greeting": "Dobrý den",
"logout": "Odhlásit se"
}
},
"footer": {
"credit": "Vášnivý projekt <1>Amrutha Pillaie</1>",
"license": "Od komunity, pro komunitu."
},
"markdown": {
"help-text": "Tato sekce podporuje <1>markdown</1> formátování."
},
"date": {
"present": "Současnost"
},
"subtitle": "Bezplatný a open source tvůrce životopisů.",
"title": "Reactive Resume",
"toast": {
"error": {
"upload-file-size": "Prosím nahrajte pouze soubory pod 2 megabajty.",
"upload-photo-size": "Nahrávejte prosím pouze fotografie o velikosti do 2 megabajtů, nejlépe čtvercové."
},
"success": {
"resume-link-copied": "Odkaz na váš životopis byl zkopírován do schránky."
}
}
}

View File

@ -0,0 +1,25 @@
{
"create-resume": {
"subtitle": "Začít od začátku",
"title": "Vytvořit nový životopis"
},
"import-external": {
"subtitle": "LinkedIn, JSON Resume, Reactive Resume",
"title": "Importovat z externích zdrojů"
},
"resume": {
"menu": {
"delete": "Smazat",
"duplicate": "Duplikovat",
"open": "Otevřít",
"rename": "Přejmenovat",
"share-link": "Sdílet odkaz",
"tooltips": {
"delete": "Opravdu chcete smazat tento životopis? Toto je nevratná akce.",
"share-link": "Musíte změnit viditelnost svého životopisu na veřejnou, aby byl viditelný pro ostatní."
}
},
"timestamp": "Naposledy aktualizováno před {{timestamp}}"
},
"title": "Přístrojová deska"
}

View File

@ -0,0 +1,41 @@
{
"actions": {
"app": "Přejděte do aplikace",
"login": "Přihlásit se",
"logout": "Odhlásit se",
"register": "Registrovat"
},
"features": {
"heading": "Funkce",
"list": {
"ads": "Žádná reklama",
"export": "Exportujte svůj životopis do formátu JSON nebo PDF",
"free": "Zdarma, navždy",
"import": "Import dat z LinkedIn, JSON Resume",
"languages": "Dostupné ve více jazycích",
"more": "A mnohem více vzrušujících funkcí, <1>o tom si vše přečtěte zde</1>",
"tracking": "Žádné sledování uživatelů"
}
},
"links": {
"heading": "Odkazy",
"links": {
"donate": "Darovat",
"github": "Zdrojový kód",
"privacy": "Zásady ochrany osobních údajů",
"service": "Podmínky služby"
}
},
"screenshots": {
"heading": "Snímky obrazovky"
},
"testimonials": {
"heading": "Posudky",
"body": "Ať je to dobře nebo špatně, rád bych slyšel váš názor na Reactive Resume a jaké to bylo pro vás.<br/>Zde jsou některé zprávy zaslané uživateli z celého světa.",
"contact": "Můžete mě kontaktovat prostřednictvím <1>mého e-mailu</1> nebo prostřednictvím kontaktního formuláře na <3>mých webových stránkách</3> ."
},
"summary": {
"body": "Reactive Resume je bezplatný a open source tvůrce životopisů, který je vytvořen tak, aby zjednodušil každodenní úkoly vytváření, aktualizace a sdílení vašeho životopisu jako 1, 2, 3. Pomocí této aplikace můžete vytvořit více životopisů a sdílet je s náboráři nebo přáteli. prostřednictvím jedinečného odkazu a vytiskněte si jej jako PDF, vše zdarma, bez reklam, bez sledování, bez ztráty integrity a soukromí vašich dat.",
"heading": "souhrn"
}
}

View File

@ -0,0 +1,136 @@
{
"auth": {
"forgot-password": {
"actions": {
"send-email": "Odeslat e-mail pro obnovení hesla"
},
"body": "Stačí zadat e-mailovou adresu spojenou s účtem, který chcete obnovit.",
"form": {
"email": {
"label": "Emailová adresa"
}
},
"heading": "Zapomněli jste heslo?",
"help-text": "Pokud účet existuje, obdržíte e-mail s odkazem na resetování hesla."
},
"login": {
"actions": {
"login": "Přihlásit se",
"google": "Přihlaste se pomocí Google"
},
"body": "Zadejte prosím své uživatelské jméno a heslo spojené s vaším účtem, abyste se mohli přihlásit a získat přístup, spravovat a sdílet své životopisy.",
"form": {
"password": {
"label": "Heslo"
},
"username": {
"help-text": "Můžete také zadat svou e-mailovou adresu",
"label": "uživatelské jméno"
}
},
"heading": "Přihlaste se ke svému účtu",
"recover-text": "V případě, že jste zapomněli své heslo, můžete <1>obnovit svůj účet</1> tady.",
"register-text": "Pokud jej nemáte, můžete si <1>vytvořit účet</1> tady."
},
"register": {
"actions": {
"register": "Registrovat",
"google": "Zaregistrujte se u Google"
},
"body": "Chcete-li vytvořit účet, zadejte své osobní údaje.",
"form": {
"confirm-password": {
"label": "Potvrďte heslo"
},
"email": {
"label": "Emailová adresa"
},
"name": {
"label": "Celé jméno"
},
"password": {
"label": "Heslo"
},
"username": {
"label": "uživatelské jméno"
}
},
"heading": "Vytvořit účet",
"loginText": "Pokud již máte účet, můžete se <1>přihlásit zde</1> ."
},
"reset-password": {
"actions": {
"set-password": "Nastavit nové heslo"
},
"body": "Zadejte nové heslo ke svému účtu.",
"form": {
"confirm-password": {
"label": "Potvrďte heslo"
},
"password": {
"label": "Heslo"
}
},
"heading": "Obnovit heslo"
}
},
"dashboard": {
"create-resume": {
"actions": {
"create-resume": "Vytvořit životopis"
},
"body": "Začněte budovat svůj životopis tím, že mu dáte jméno. Může to být odkaz na roli, o kterou se ucházíte, nebo jen na vaši oblíbenou svačinu.",
"form": {
"name": {
"label": "název"
},
"public": {
"label": "Je veřejně přístupný?"
},
"slug": {
"label": "Slimák"
}
},
"heading": "Vytvořte nový životopis"
},
"import-external": {
"heading": "Import z externích zdrojů",
"json-resume": {
"actions": {
"upload-json": "Nahrajte JSON"
},
"body": "Pokud máte <1>ověřený životopis JSON</1> připraven k použití, můžete jej použít k rychlému sledování svého vývoje na Reactive Resume. Začněte kliknutím na tlačítko níže a nahráním platného souboru JSON.",
"heading": "Import z obnovení JSON"
},
"linkedin": {
"actions": {
"upload-archive": "Nahrát archiv ZIP"
},
"body": "Můžete ušetřit čas tím, že exportujete svá data z LinkedIn a použijete je k automatickému vyplňování polí na Reactive Resume. Přejděte na <1>Ochrana osobních údajů</1> sekce na LinkedIn a vyžádejte si archiv vašich dat. Jakmile bude k dispozici, nahrajte níže uvedený soubor ZIP.",
"heading": "Import z LinkedIn"
},
"reactive-resume": {
"actions": {
"upload-json": "Nahrajte JSON",
"upload-json-v2": "Nahrajte JSON z v2"
},
"body": "Pokud máte JSON, který byl exportován s aktuální verzí Reactive Resume, můžete jej sem importovat zpět a znovu získat upravitelnou verzi.",
"heading": "Import z reaktivního obnovení"
}
},
"rename-resume": {
"actions": {
"rename-resume": "Přejmenovat Resume"
},
"form": {
"name": {
"label": "název"
},
"slug": {
"label": "Slimák"
}
},
"heading": "Přejmenujte svůj životopis"
}
}
}

View File

@ -119,6 +119,9 @@
"name": { "name": {
"label": "Fulde navn" "label": "Fulde navn"
}, },
"birthdate": {
"label": "Fødselsdato"
},
"photo-filters": { "photo-filters": {
"effects": { "effects": {
"border": { "border": {

View File

@ -119,6 +119,9 @@
"name": { "name": {
"label": "Voller Name" "label": "Voller Name"
}, },
"birthdate": {
"label": "Geburtsdatum"
},
"photo-filters": { "photo-filters": {
"effects": { "effects": {
"border": { "border": {

View File

@ -0,0 +1,361 @@
{
"common": {
"actions": {
"add": "Προσθήκη νέου {{token}}",
"delete": "Διαγραφή {{token}}",
"edit": "Επεξεργασία {{token}}"
},
"columns": {
"heading": "Στήλες",
"tooltip": "Αλλαγή αριθμού στηλών"
},
"form": {
"date": {
"label": "Ημερομηνία"
},
"description": {
"label": "Περιγραφή"
},
"email": {
"label": "Διεύθυνση Email"
},
"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": "Ονοματεπώνυμο"
},
"birthdate": {
"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": "JSON",
"secondary": "Κατεβάστε μια έκδοση JSON του βιογραφικού σας που μπορεί να εισαχθεί ξανά στο Reactive Resume."
},
"pdf": {
"loading": {
"primary": "Δημιουργία PDF",
"secondary": "Περιμένετε μέχρι να δημιουργηθεί το PDF σας, αυτό μπορεί να διαρκέσει έως και 15 δευτερόλεπτα."
},
"normal": {
"primary": "PDF",
"secondary": "Κατεβάστε ένα PDF του βιογραφικού σας που μπορείτε να εκτυπώσετε και να στείλετε στην εργασία των ονείρων σας. Αυτό το αρχείο δεν μπορεί να εισαχθεί ξανά για περαιτέρω επεξεργασία."
}
}
},
"layout": {
"heading": "Διάταξη",
"tooltip": {
"reset-layout": "Επαναφορά διάταξης"
}
},
"links": {
"bugs-features": {
"body": "Υπάρχει κάτι που σας εμποδίζει να φτιάξετε ένα βιογραφικό σημείωμα; Ή μήπως έχετε μια καταπληκτική ιδέα να προσθέσετε; Θέστε το ως σφάλμα στο GitHub για να ξεκινήσετε.",
"button": "Σφάλματα GitHub",
"heading": "Σφάλματα; Αιτήματα δυνατοτήτων;"
},
"donate": {
"body": "Αν σας άρεσε να χρησιμοποιείτε το Reactive Resume, σκεφτείτε το ενδεχόμενο να δωρίσετε όσο το δυνατόν περισσότερα για τον σκοπό της διατήρησης και λειτουργίας της εφαρμογής, χωρίς διαφημίσεις και δωρεάν για πάντα.",
"button": "Κεράστε με ένα καφεδάκι",
"heading": "Κάντε δωρεά στο Reactive βιογραφικό"
},
"github": "Πηγαίος κώδικας",
"heading": "Σύνδεσμοι"
},
"settings": {
"global": {
"date": {
"primary": "Ημερομηνία",
"secondary": "Μορφή ημερομηνίας για χρήση στην εφαρμογή"
},
"heading": "Καθολικό",
"language": {
"primary": "Γλώσσα",
"secondary": "Εμφάνιση γλώσσας για χρήση στην εφαρμογή"
},
"theme": {
"primary": "Θέμα"
}
},
"heading": "Ρυθμίσεις",
"page": {
"break-line": {
"primary": "Γραμμή διακοπής",
"secondary": "Εμφάνιση μιας γραμμής σε όλες τις σελίδες για να επισημάνετε το ύψος μιας σελίδας Α4"
},
"heading": "Σελίδα",
"orientation": {
"disabled": "Δεν έχει αποτέλεσμα όταν υπάρχει μόνο μία σελίδα",
"primary": "Προσανατολισμός",
"secondary": "Αν θα εμφανίζονται οι σελίδες οριζόντια ή κάθετα"
}
},
"resume": {
"heading": "Βιογραφικό σημείωμα",
"reset": {
"primary": "Επαναφορά όλων",
"secondary": "Κάνατε πάρα πολλά λάθη; Κάντε κλικ εδώ για να επαναφέρετε όλες τις αλλαγές και να ξεκινήσετε από την αρχή. Προσέξτε, αυτή η ενέργεια δεν μπορεί να αντιστραφεί."
},
"sample": {
"primary": "Φόρτωση δειγμάτων δεδομένων",
"secondary": "Δεν είστε σίγουροι από πού να ξεκινήσετε; Κάντε κλικ εδώ για να φορτώσετε μερικά δείγματα δεδομένων για να δείτε πώς φαίνεται ένα πλήρες βιογραφικό."
}
}
},
"sharing": {
"heading": "Κοινοποίηση",
"short-url": {
"label": "Προτίμηση σύντομης διεύθυνσης"
},
"visibility": {
"subtitle": "Επιτρέψτε σε οποιονδήποτε έχει σύνδεσμο να δει το βιογραφικό σας",
"title": "Δημόσιο"
}
},
"templates": {
"heading": "Πρότυπα"
},
"theme": {
"form": {
"background": {
"label": "Φόντο"
},
"primary": {
"label": "Πρωτεύον"
},
"text": {
"label": "Κείμενο"
}
},
"heading": "Θέμα"
},
"typography": {
"form": {
"font-family": {
"label": "Γραμματοσειρά"
},
"font-size": {
"label": "Μέγεθος γραμματοσειράς"
}
},
"heading": "Τυπογραφία",
"widgets": {
"body": {
"label": "Σώμα"
},
"headings": {
"label": "Επικεφαλίδες"
}
}
}
}
}
}

View File

@ -0,0 +1,29 @@
{
"avatar": {
"menu": {
"greeting": "Γειά σου",
"logout": "Αποσύνδεση"
}
},
"footer": {
"credit": "Ένα έργο με πάθος από τον <1>Amruth Pillai</1>",
"license": "Από την κοινότητα, για την κοινότητα."
},
"markdown": {
"help-text": "Αυτή η ενότητα υποστηρίζει τη μορφοποίηση <1>markdown</1>."
},
"date": {
"present": "Τώρα"
},
"subtitle": "Ένας δωρεάν κατασκευαστής βιογραφικών σημειωμάτων ανοικτού κώδικα.",
"title": "Reactive Resume",
"toast": {
"error": {
"upload-file-size": "Παρακαλούμε ανεβάζετε μόνο αρχεία κάτω των 2 megabytes.",
"upload-photo-size": "Παρακαλούμε ανεβάστε μόνο φωτογραφίες κάτω των 2 megabytes, κατά προτίμηση τετράγωνες."
},
"success": {
"resume-link-copied": "Ένας σύνδεσμος για το βιογραφικό σας αντιγράφηκε."
}
}
}

View File

@ -0,0 +1,25 @@
{
"create-resume": {
"subtitle": "Επανεκκίνηση από την αρχή",
"title": "Δημιουργία νέου βιογραφικού"
},
"import-external": {
"subtitle": "LinkedIn, JSON Resume, Reactive Resume",
"title": "Εισαγωγή από εξωτερικές πηγές"
},
"resume": {
"menu": {
"delete": "Διαγραφή",
"duplicate": "Διπλότυπο",
"open": "Άνοιγμα",
"rename": "Μετονομασία",
"share-link": "Κοινοποίηση συνδέσμου",
"tooltips": {
"delete": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το βιογραφικό; Αυτή είναι μια μη αναστρέψιμη ενέργεια.",
"share-link": "Πρέπει να αλλάξετε την ορατότητα του βιογραφικού σας σε δημόσιο για να το κάνετε ορατό σε άλλους."
}
},
"timestamp": "Τελευταία ενημέρωση πριν από {{timestamp}}"
},
"title": "Πίνακας ελέγχου"
}

View File

@ -0,0 +1,41 @@
{
"actions": {
"app": "Μετάβαση στην εφαρμογή",
"login": "Σύνδεση",
"logout": "Αποσύνδεση",
"register": "Εγγραφή"
},
"features": {
"heading": "Δυνατότητες",
"list": {
"ads": "Χωρίς διαφημίσεις",
"export": "Εξαγωγή του βιογραφικού σας σε μορφή JSON ή PDF",
"free": "Δωρεάν για πάντα",
"import": "Εισαγωγή δεδομένων από το LinkedIn, JSON Resume",
"languages": "Προσβάσιμο σε πολλές γλώσσες",
"more": "Και πολλά άλλα συναρπαστικά χαρακτηριστικά, <1>διαβάστε τα όλα εδώ</1>",
"tracking": "Χωρίς παρακολούθηση χρήστη"
}
},
"links": {
"heading": "Σύνδεσμοι",
"links": {
"donate": "Δωρεά",
"github": "Πηγαίος Κώδικας",
"privacy": "Πολιτική Απορρήτου",
"service": "Όρους παροχής υπηρεσιών"
}
},
"screenshots": {
"heading": "Στιγμιότυπα οθόνης"
},
"testimonials": {
"heading": "Αναφορές",
"body": "Καλή ή κακή, θα ήθελα πολύ να ακούσω τη γνώμη σας για το Reactive Resume και πώς ήταν η εμπειρία σας.<br/>Ακολουθούν μερικά από τα μηνύματα που έστειλαν χρήστες από όλο τον κόσμο.",
"contact": "Μπορείτε να επικοινωνήσετε μαζί μου μέσω <1>του email μου</1> ή μέσω της φόρμας επικοινωνίας στην <3>ιστοσελίδα μου</3>."
},
"summary": {
"body": "Το Reactive Resume είναι ένας δωρεάν κατασκευαστής βιογραφικών σημειωμάτων ανοικτού κώδικα που έχει δημιουργηθεί για να κάνει τις καθημερινές εργασίες δημιουργίας, ενημέρωσης και κοινοποίησης του βιογραφικού σας σημειώματος τόσο εύκολες όσο το 1, 2, 3. Με αυτή την εφαρμογή, μπορείτε να δημιουργήσετε πολλαπλά βιογραφικά, να τα μοιραστείτε με τους υπεύθυνους προσλήψεων ή τους φίλους σας μέσω ενός μοναδικού συνδέσμου και να τα εκτυπώσετε σε μορφή PDF, και όλα αυτά δωρεάν, χωρίς διαφημίσεις, χωρίς παρακολούθηση, χωρίς να χάσετε την ακεραιότητα και το απόρρητο των δεδομένων σας.",
"heading": "Σύνοψη"
}
}

View File

@ -0,0 +1,136 @@
{
"auth": {
"forgot-password": {
"actions": {
"send-email": "Αποστολή email επαναφοράς κωδικού πρόσβασης"
},
"body": "Απλώς εισάγετε τη διεύθυνση ηλεκτρονικού ταχυδρομείου που σχετίζεται με τον λογαριασμό που θέλετε να ανακτήσετε.",
"form": {
"email": {
"label": "Διεύθυνση Email"
}
},
"heading": "Ξεχάσατε τον κωδικό σας;",
"help-text": "Εάν ο λογαριασμός υπάρχει, θα λάβετε ένα email με έναν σύνδεσμο για να επαναφέρετε τον κωδικό πρόσβασής σας."
},
"login": {
"actions": {
"login": "Σύνδεση",
"google": "Συνδεθείτε με το Google"
},
"body": "Εισαγάγετε το όνομα χρήστη και τον κωδικό πρόσβασης που σχετίζονται με τον λογαριασμό σας για να συνδεθείτε και να αποκτήσετε πρόσβαση, να διαχειριστείτε και να μοιραστείτε τα βιογραφικά σας.",
"form": {
"password": {
"label": "Κωδικός πρόσβασης"
},
"username": {
"help-text": "Μπορείτε επίσης να εισάγετε τη διεύθυνση email σας",
"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": "Slug"
}
},
"heading": "Δημιουργία νέου βιογραφικού σημειώματος"
},
"import-external": {
"heading": "Εισαγωγή από εξωτερικές πηγές",
"json-resume": {
"actions": {
"upload-json": "Μεταφόρτωση JSON"
},
"body": "Αν έχετε έτοιμο ένα <1>επικυρωμένο JSON Resume</1>, μπορείτε να το χρησιμοποιήσετε για να επιταχύνετε την ανάπτυξή σας στο Reactive Resume. Κάντε κλικ στο παρακάτω κουμπί και ανεβάστε ένα έγκυρο αρχείο JSON για να ξεκινήσετε.",
"heading": "Εισαγωγή από JSON Resume"
},
"linkedin": {
"actions": {
"upload-archive": "Ανεβάστε το αρχείο ZIP"
},
"body": "Μπορείτε να εξοικονομήσετε χρόνο εξάγοντας τα δεδομένα σας από το LinkedIn και χρησιμοποιώντας τα για αυτόματη συμπλήρωση πεδίων στο Reactive Resume. Μεταβείτε στην ενότητα <1>Απόρρητο δεδομένων</1> στο LinkedIn και ζητήστε ένα αρχείο των δεδομένων σας. Μόλις είναι διαθέσιμο, ανεβάστε το αρχείο ZIP παρακάτω.",
"heading": "Εισαγωγή από το LinkedIn"
},
"reactive-resume": {
"actions": {
"upload-json": "Μεταφόρτωση JSON",
"upload-json-v2": "Μεταφόρτωση JSON από v2"
},
"body": "Εάν έχετε ένα JSON που εξήχθη με την τρέχουσα έκδοση του Reactive Resume, μπορείτε να το εισάγετε ξανά εδώ για να λάβετε ξανά μια επεξεργάσιμη έκδοση.",
"heading": "Εισαγωγή από Reactive Resume"
}
},
"rename-resume": {
"actions": {
"rename-resume": "Μετονομασία βιογραφικού"
},
"form": {
"name": {
"label": "Ονομα"
},
"slug": {
"label": "Slug"
}
},
"heading": "Μετονομασία του βιογραφικού σας"
}
}
}

View File

@ -119,6 +119,9 @@
"name": { "name": {
"label": "Full Name" "label": "Full Name"
}, },
"birthdate": {
"label": "Date of Birth"
},
"photo-filters": { "photo-filters": {
"effects": { "effects": {
"border": { "border": {

View File

@ -119,6 +119,9 @@
"name": { "name": {
"label": "Nombre Completo" "label": "Nombre Completo"
}, },
"birthdate": {
"label": "Fecha de cumpleaños"
},
"photo-filters": { "photo-filters": {
"effects": { "effects": {
"border": { "border": {

View File

@ -0,0 +1,361 @@
{
"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": "نام کامل"
},
"birthdate": {
"label": "تاریخ تولد"
},
"photo-filters": {
"effects": {
"border": {
"label": "لبه"
},
"grayscale": {
"label": "سیاه و سفید"
},
"heading": "افکت‌ها"
},
"shape": {
"heading": "شکل"
},
"size": {
"heading": "اندازه (بر حسب پیکسل)"
}
},
"photo-upload": {
"tooltip": {
"remove": "حذف تصویر",
"upload": "آپلود تصویر"
}
}
},
"certifications": {
"form": {
"issuer": {
"label": "صادرکننده"
}
}
},
"education": {
"form": {
"area-study": {
"label": "رشته تحصیلی"
},
"courses": {
"label": "دوره‌ها"
},
"degree": {
"label": "مدرک تحصیلی"
},
"grade": {
"label": "نمره"
},
"institution": {
"label": "مؤسسه"
}
}
},
"location": {
"address": {
"label": "نشانی"
},
"city": {
"label": "شهر"
},
"country": {
"label": "كشور"
},
"heading": "موقعیت مکانی",
"postal-code": {
"label": "کد پستی"
},
"region": {
"label": "منطقه"
}
},
"profiles": {
"form": {
"network": {
"label": "شبکه اجتماعی"
},
"username": {
"label": "نام کاربری"
}
},
"heading": "پروفایل‌ها",
"heading_one": "پروفایل"
},
"publications": {
"form": {
"publisher": {
"label": "ناشر"
}
}
},
"references": {
"form": {
"relationship": {
"label": "نسبت"
}
}
},
"section": {
"heading": "بخش"
},
"volunteer": {
"form": {
"organization": {
"label": "سازمان"
}
}
}
}
},
"rightSidebar": {
"sections": {
"css": {
"heading": "CSS سفارشی"
},
"export": {
"heading": "خروجی",
"json": {
"primary": "JSON",
"secondary": "یک نسخه JSON از رزومه خود را دانلود کنید که می‌تواند دوباره در Reactive Resume بارگذاری شود."
},
"pdf": {
"loading": {
"primary": "در حال تولید PDF",
"secondary": "لطفاً منتظر بمانید تا PDF شما تولید شود، ممکن است تا ۱۵ ثانیه طول بکشد."
},
"normal": {
"primary": "PDF",
"secondary": "یک PDF از رزومه خود را دانلود کنید که می‌توانید آن را چاپ کرده و به شغل رویایی خود ارسال کنید. این فایل را نمی‌توان برای ویرایش بیشتر بارگذاری کرد."
}
}
},
"layout": {
"heading": "چیدمان",
"tooltip": {
"reset-layout": "بازنشانی چیدمان"
}
},
"links": {
"bugs-features": {
"body": "چیزی شما را از ایجاد رزومه باز می‌دارد؟ یا ایده جذابی برای اضافه کردن دارید؟ برای شروع یک issue در GitHub مطرح کنید.",
"button": "GitHub Issues",
"heading": "باگ‌ها؟ درخواست ویژگی جدید؟"
},
"donate": {
"body": "اگر استفاده از Reactive Resume را دوست داشتید، لطفاً تا جایی که می توانید کمک مالی کنید تا برنامه را بدون تبلیغات و برای همیشه رایگان نگه دارید.",
"button": "برای من یک قهوه بخر",
"heading": "کمک مالی به Reactive Resume"
},
"github": "کد منبع",
"heading": "لینک‌ها"
},
"settings": {
"global": {
"date": {
"primary": "تاریخ",
"secondary": "فرمت تاریخ برای استفاده در سراسر برنامه"
},
"heading": "سراسری",
"language": {
"primary": "زبان",
"secondary": "زبان مورد نمایش برای استفاده از برنامه"
},
"theme": {
"primary": "پوسته"
}
},
"heading": "تنظیمات",
"page": {
"break-line": {
"primary": "خط شکست",
"secondary": "برای مشخص کردن ارتفاع صفحه A4 یک خط در همه صفحات نشان داده شود"
},
"heading": "صفحه",
"orientation": {
"disabled": "زمانی که تنها یک صفحه وجود دارد، تاثیری ندارد",
"primary": "جهت‌گیری",
"secondary": "اینکه صفحات به صورت عمودی یا افقی نمایش داده شوند"
}
},
"resume": {
"heading": "رزومه",
"reset": {
"primary": "بازنشانی همه چیز",
"secondary": "اشتباهات زیادی انجام دادید؟ اینجا کلیک کنید تا همه تغییرات بازنشانی شوند و از ابتدا شروع کنید. مراقب باشید، این عمل غیرقابل برگشت است."
},
"sample": {
"primary": "بارگیری داده‌های نمونه",
"secondary": "نمی‌دانید از کجا شروع کنید؟برای اینکه تعدادی داده نمونه بارگیری شوند تا ببینید یک رزومه کامل به چه شکل است، اینجا کلیک کنید."
}
}
},
"sharing": {
"heading": "اشتراک‌گذاری",
"short-url": {
"label": "انتخاب URL کوتاه"
},
"visibility": {
"subtitle": "هرکسی با این لینک بتواند رزومه شما را ببیند",
"title": "عمومی"
}
},
"templates": {
"heading": "قالب‌ها"
},
"theme": {
"form": {
"background": {
"label": "پس‌زمینه"
},
"primary": {
"label": "اصلی"
},
"text": {
"label": "متن"
}
},
"heading": "پوسته"
},
"typography": {
"form": {
"font-family": {
"label": "نوع فونت"
},
"font-size": {
"label": "اندازه فونت"
}
},
"heading": "تایپوگرافی",
"widgets": {
"body": {
"label": "بدنه"
},
"headings": {
"label": "سرصفحه‌ها"
}
}
}
}
}
}

View File

@ -0,0 +1,29 @@
{
"avatar": {
"menu": {
"greeting": "سلام",
"logout": "خروج"
}
},
"footer": {
"credit": "پروژه‌ای پرشور توسط <1>Amruth Pillai</1>",
"license": "ساخته‌شده توسط جامعه، برای جامعه."
},
"markdown": {
"help-text": "این بخش از <1>markdown</1> پشتیبانی می‌کند."
},
"date": {
"present": "امروز"
},
"subtitle": "یک رزومه‌ساز رایگان و متن‌باز.",
"title": "Reactive Resume",
"toast": {
"error": {
"upload-file-size": "لطفا تنها فایل‌هایی با حجم کمتر از ۲ مگابایت آپلود کنید.",
"upload-photo-size": "لطفا تنها عکس هایی با حجم کمتر از 2 مگابایت و ترجیحا مربع آپلود کنید."
},
"success": {
"resume-link-copied": "لینک رزومه شما در کلیپ‌بورد کپی شد."
}
}
}

View File

@ -0,0 +1,25 @@
{
"create-resume": {
"subtitle": "از ابتدا شروع کنید",
"title": "ساخت رزومه جدید"
},
"import-external": {
"subtitle": "LinkedIn، JSON Resume، Reactive Resume",
"title": "وارد کردن از منابع خارجی"
},
"resume": {
"menu": {
"delete": "حذف",
"duplicate": "کپی",
"open": "باز کردن",
"rename": "تغییر نام",
"share-link": "اشتراک‌گذاری لینک",
"tooltips": {
"delete": "آیا از حذف این رزومه اطمینان دارید؟ این عمل غیرقابل برگشت است.",
"share-link": "باید وضعیت نمایش رزومه خود را به عمومی تغییر دهید تا برای دیگران قابل مشاهده باشد."
}
},
"timestamp": "آخرین به‌روزرسانی {{timestamp}} قبل"
},
"title": "داشبورد"
}

View File

@ -0,0 +1,41 @@
{
"actions": {
"app": "رفتن به برنامه",
"login": "ورود",
"logout": "خروج",
"register": "ثبت نام"
},
"features": {
"heading": "ویژگی‌ها",
"list": {
"ads": "بدون تبلیغات",
"export": "گرفتن خروجی از رزومه خود به فرمت JSON یا PDF",
"free": "رایگان، برای همیشه",
"import": "وارد کردن داده از LinkedIn، JSON Resume",
"languages": "قابل دسترسی به چندین زبان",
"more": "و تعداد زیادی ویژگی هیجان انگیز دیگر، <1>همه‌چیز را درباره آنها اینجا بخوانید</1>",
"tracking": "بدون ردیابی کاربر"
}
},
"links": {
"heading": "لینک‌ها",
"links": {
"donate": "حمایت مالی",
"github": "کد منبع",
"privacy": "حریم خصوصی",
"service": "شرایط سرویس‌دهی"
}
},
"screenshots": {
"heading": "اسکرین‌شات‌ها"
},
"testimonials": {
"heading": "نظرات کاربران",
"body": "خوب یا بد، من دوست دارم نظر شما را در مورد Reactive Resume و اینکه تجربه کار با آن برای شما چگونه بوده است را بدانم.<br/>تعدادی از پیام های ارسال شده توسط کاربران در سراسر جهان را اینجا می‌بینید.",
"contact": "می‌توانید از طریق <1>ایمیل من</1> یا فرم تماس در <3>وب‌سایت من</3> با من در ارتباط باشید."
},
"summary": {
"body": "Reactive Resume یک رزومه ساز رایگان و متن‌باز است که برای ایجاد، به روز رسانی و به اشتراک گذاری رزومه شما به آسانی شمردن ۱، ۲، ۳ ساخته شده است. با این برنامه، می توانید چندین رزومه ایجاد کنید و آنها را با کارفرماها یا دوستان از طریق یک لینک منحصر به فرد و چاپ آن به صورت PDF، همه به صورت رایگان، بدون تبلیغات، بدون ردیابی، بدون از دست دادن امنیت و حریم خصوصی داده های شما، به اشتراک بگذارید.",
"heading": "درباره من"
}
}

View File

@ -0,0 +1,136 @@
{
"auth": {
"forgot-password": {
"actions": {
"send-email": "ارسال ایمیل بازنشانی رمز عبور"
},
"body": "آدرس ایمیل حسابی را که می خواهید بازیابی کنید، وارد کنید.",
"form": {
"email": {
"label": "آدرس ایمیل"
}
},
"heading": "رمز عبور خود را فراموش کرده‌اید؟",
"help-text": "اگر حساب مورد نظر موجود باشد، یک ایمیل با لینک بازنشانی رمز عبور خود دریافت می‌کنید."
},
"login": {
"actions": {
"login": "ورود",
"google": "ورود با گوگل"
},
"body": "لطفا نام کاربری و رمز عبور مرتبط با حساب کاربری خود را وارد کنید تا وارد شوید و به رزومه خود دسترسی پیدا کنید، آن را مدیریت کنید و به اشتراک بگذارید.",
"form": {
"password": {
"label": "رمز عبور"
},
"username": {
"help-text": "همچنین می توانید آدرس ایمیل خود را وارد کنید",
"label": "نام کاربری"
}
},
"heading": "ورود به حساب کابری",
"recover-text": "در صورتی که رمز عبور خود را فراموش کرده‌اید، می توانید از اینجا <1>حساب خود را بازیابی کنید</1>.",
"register-text": "اگر حسابی ندارید، می‌توانید از اینجا <1>یک حساب ایجاد کنید</1>."
},
"register": {
"actions": {
"register": "ثبت نام",
"google": "ثبت نام با گوگل"
},
"body": "لطفا برای ایجاد حساب کاربری، اطلاعات شخصی خود را وارد کنید.",
"form": {
"confirm-password": {
"label": "تکرار رمز عبور"
},
"email": {
"label": "آدرس ایمیل"
},
"name": {
"label": "نام کامل"
},
"password": {
"label": "رمز عبور"
},
"username": {
"label": "نام کاربری"
}
},
"heading": "ایجاد حساب کاربری",
"loginText": "اکر حساب کاربری دارید، می‌توانید از <1>اینجا</1> وارد شوید."
},
"reset-password": {
"actions": {
"set-password": "تعیین رمز عبور جدید"
},
"body": "یک رمز عبور جدید برای حساب خود وارد کنید.",
"form": {
"confirm-password": {
"label": "تکرار رمز عبور"
},
"password": {
"label": "رمز عبور"
}
},
"heading": "بازنشانی رمز عبور"
}
},
"dashboard": {
"create-resume": {
"actions": {
"create-resume": "ایجاد رزومه"
},
"body": "ساخت رزومه خود را با نام‌گذاری آن شروع کنید. این نام می‌تواند به سمتی که برای آن درخواست می‌کنید مرتبط باشد، یا میان‌وعده مورد علاقه شما باشد.",
"form": {
"name": {
"label": "نام"
},
"public": {
"label": "آیا به صورت عمومی قابل دسترسی است؟"
},
"slug": {
"label": "نام یکتا"
}
},
"heading": "ایجاد یک رزومه جدید"
},
"import-external": {
"heading": "وارد کردن از منابع خارجی",
"json-resume": {
"actions": {
"upload-json": "آپلود JSON"
},
"body": "اگر یک <1>JSON Resume معتبر</1> که آماده کار است، می توانید از آن برای پیگیری سریع توسعه خود در Reactive Resume استفاده کنید. روی دکمه زیر کلیک کنید و برای شروع یک فایل JSON معتبر آپلود کنید.",
"heading": "بارگذاری از JSON Resume"
},
"linkedin": {
"actions": {
"upload-archive": "آپلود آرشیو ZIP"
},
"body": "می‌توانید با خروجی گرفتن از داده‌های خود در LinkedIn و استفاده از آن برای پر کردن خودکار فیلدهای Reactive Resume در زمانصرفه‌جویی کنید. به بخش <1>Data Privacy</1> در LinkedIn بروید و یک آرشیو از داده‌های خود را درخواست کنید. پس از در دسترس قرار گرفتن، فایل ZIP را در زیر آپلود کنید.",
"heading": "بارگذاری از LinkedIn"
},
"reactive-resume": {
"actions": {
"upload-json": "آپلود JSON",
"upload-json-v2": "آپلود JSON از ورژن ۲"
},
"body": "اگر یک فایل JSON دارید که با نسخه فعلی Reactive Resume خروجی گرفته‌شده است، می‌توانید آن را اینجا بارگذاری کنید تا دوباره نسخه قابل ویرایش دریافت کنید.",
"heading": "بارگذاری از Reactive Resume"
}
},
"rename-resume": {
"actions": {
"rename-resume": "تغییر نام رزومه"
},
"form": {
"name": {
"label": "نام"
},
"slug": {
"label": "نام یکتا"
}
},
"heading": "نام رزومه خود را تغییر دهید"
}
}
}

View File

@ -119,6 +119,9 @@
"name": { "name": {
"label": "Nom complet" "label": "Nom complet"
}, },
"birthdate": {
"label": "Date de naissance"
},
"photo-filters": { "photo-filters": {
"effects": { "effects": {
"border": { "border": {

View File

@ -0,0 +1,29 @@
{
"avatar": {
"menu": {
"greeting": "שלום",
"logout": "התנתק/י"
}
},
"footer": {
"credit": "פרויקט תשוקה מאת <1>אמרות פילאי</1>",
"license": "על ידי הקהילה, עבור הקהילה."
},
"markdown": {
"help-text": "סעיף זה תומך ב-<1>markdown</1> עיצוב."
},
"date": {
"present": "הווה"
},
"subtitle": "בונה קורות חיים חינמי ובקוד פתוח.",
"title": "קורות חיים תגובתיים",
"toast": {
"error": {
"upload-file-size": "נא להעלות רק קבצים מתחת ל-2 מגה בייט.",
"upload-photo-size": "נא להעלות רק תמונות מתחת ל-2 מגה בייט, רצוי מרובע."
},
"success": {
"resume-link-copied": "קישור לקורות החיים שלך הועתק ללוח."
}
}
}

View File

@ -119,6 +119,9 @@
"name": { "name": {
"label": "पूरा नाम" "label": "पूरा नाम"
}, },
"birthdate": {
"label": "जन्म की तारीख"
},
"photo-filters": { "photo-filters": {
"effects": { "effects": {
"border": { "border": {

View File

@ -0,0 +1,361 @@
{
"common": {
"actions": {
"add": "Új hozzáadása {{token}}",
"delete": "{{token}} törlése",
"edit": "{{token}} szerkesztése"
},
"columns": {
"heading": "Oszlopok",
"tooltip": "Az oszlopok számának módosítása"
},
"form": {
"date": {
"label": "Dátum"
},
"description": {
"label": "Leírás"
},
"email": {
"label": "E-mail cím"
},
"end-date": {
"help-text": "Hagyja üresen ezt a mezőt, ha még mindig tart van",
"label": "Befejezés dátuma"
},
"keywords": {
"label": "Kulcsszavak"
},
"level": {
"label": "Szint"
},
"levelNum": {
"label": "Szint (szám)"
},
"name": {
"label": "Név"
},
"phone": {
"label": "Telefonszám"
},
"position": {
"label": "Pozíció"
},
"start-date": {
"label": "Kezdés dátuma"
},
"subtitle": {
"label": "Felirat"
},
"summary": {
"label": "Összegzés"
},
"title": {
"label": "Cím"
},
"url": {
"label": "Honlap"
}
},
"glossary": {
"page": "Oldal"
},
"list": {
"actions": {
"delete": "Törlés",
"duplicate": "Duplikálás",
"edit": "Szerkesztés"
},
"empty-text": "Ez a lista üres."
},
"tooltip": {
"delete-item": "Biztosan törli ezt az elemet? Ez egy visszafordíthatatlan művelet.",
"delete-section": "Szakasz törlése",
"rename-section": "Szakasz átnevezése",
"toggle-visibility": "Láthatóság váltása"
}
},
"controller": {
"tooltip": {
"center-artboard": "Központi rajztábla",
"copy-link": "Link másolása az önéletrajzba",
"export-pdf": "Exportálás PDF-be",
"toggle-orientation": "Oldaltájolás váltása",
"toggle-page-break-line": "Oldaltörés vonal váltása",
"toggle-sidebars": "Az oldalsávok váltása",
"zoom-in": "Nagyítás",
"zoom-out": "Kicsinyítés"
}
},
"header": {
"menu": {
"delete": "Törlés",
"duplicate": "Másolat",
"rename": "Átnevezés",
"share-link": "Link megosztása",
"tooltips": {
"delete": "Biztos, hogy törölni szeretné ezt az önéletrajzot? Ez egy visszafordíthatatlan művelet.",
"share-link": "Az önéletrajz láthatóságát nyilvánosra kell változtatnia, hogy mások számára is látható legyen."
}
}
},
"leftSidebar": {
"sections": {
"awards": {
"form": {
"awarder": {
"label": "Díjazó"
}
}
},
"basics": {
"actions": {
"photo-filters": "Fotószűrők"
},
"heading": "Alapok",
"headline": {
"label": "Címsor"
},
"name": {
"label": "Teljes név"
},
"birthdate": {
"label": "Születési dátum"
},
"photo-filters": {
"effects": {
"border": {
"label": "Határ"
},
"grayscale": {
"label": "Szürkeárnyalatos"
},
"heading": "Hatások"
},
"shape": {
"heading": "Alak"
},
"size": {
"heading": "Méret (px-ben)"
}
},
"photo-upload": {
"tooltip": {
"remove": "Fotó eltávolítása",
"upload": "Fénykép feltöltése"
}
}
},
"certifications": {
"form": {
"issuer": {
"label": "Kibocsátó"
}
}
},
"education": {
"form": {
"area-study": {
"label": "Tanulmányi terület"
},
"courses": {
"label": "Kurzusok"
},
"degree": {
"label": "Diploma"
},
"grade": {
"label": "Osztályzat"
},
"institution": {
"label": "Intézmény"
}
}
},
"location": {
"address": {
"label": "Cím"
},
"city": {
"label": "Település"
},
"country": {
"label": "Ország"
},
"heading": "Helyszín",
"postal-code": {
"label": "Irányítószám"
},
"region": {
"label": "Vidék"
}
},
"profiles": {
"form": {
"network": {
"label": "Hálózat"
},
"username": {
"label": "Felhasználónév"
}
},
"heading": "Profilok",
"heading_one": "Profil"
},
"publications": {
"form": {
"publisher": {
"label": "Kiadó"
}
}
},
"references": {
"form": {
"relationship": {
"label": "Kapcsolat"
}
}
},
"section": {
"heading": "Szakasz"
},
"volunteer": {
"form": {
"organization": {
"label": "Szervezet"
}
}
}
}
},
"rightSidebar": {
"sections": {
"css": {
"heading": "Egyedi CSS"
},
"export": {
"heading": "Exportálás",
"json": {
"primary": "JSON",
"secondary": "Töltse le önéletrajzának JSON-verzióját, amelyet vissza lehet importálni a Reactive Resume alkalmazásba."
},
"pdf": {
"loading": {
"primary": "PDF generálása",
"secondary": "Kérjük, várjon, amíg a PDF generálódik, ez akár 15 másodpercig is eltarthat."
},
"normal": {
"primary": "PDF",
"secondary": "Töltse le önéletrajzának PDF formátumát, amelyet kinyomtathat és elküldhet álmai munkahelyére. Ez a fájl nem importálható vissza további szerkesztéshez."
}
}
},
"layout": {
"heading": "Elrendezés",
"tooltip": {
"reset-layout": "Elrendezés visszaállítása"
}
},
"links": {
"bugs-features": {
"body": "Valami akadályozza az önéletrajz elkészítésében? Vagy van egy elképesztő ötlete az alkalmazáshoz? Hozzon létre egy Issue-t a GitHubon, hogy elkezdhessük.",
"button": "GitHub problémák",
"heading": "Hibák? Funkciókérés?"
},
"donate": {
"body": "Ha tetszett a Reactive Resume, kérjük, fontolja meg, hogy amennyit csak tud, adományozzon arra, hogy az alkalmazás folyamatosan működjön, hirdetések nélkül és örökké ingyenesen.",
"button": "Vegyél nekem egy kávét",
"heading": "Adományozzon a Reactive Resume-nak"
},
"github": "Forráskód",
"heading": "Linkek"
},
"settings": {
"global": {
"date": {
"primary": "Dátum",
"secondary": "Az alkalmazásban használható dátumformátum"
},
"heading": "Globális",
"language": {
"primary": "Nyelv",
"secondary": "Az alkalmazásban használható megjelenítési nyelv"
},
"theme": {
"primary": "Téma"
}
},
"heading": "Beállítások",
"page": {
"break-line": {
"primary": "Törésvonal",
"secondary": "Mutasson egy vonalat az összes oldalon, hogy megjelölje egy A4-es oldal magasságát"
},
"heading": "oldal",
"orientation": {
"disabled": "Nincs hatása, ha csak egy oldal van",
"primary": "Irányultság",
"secondary": "Az oldalak vízszintes vagy függőleges megjelenítése"
}
},
"resume": {
"heading": "Önéletrajz",
"reset": {
"primary": "Mindent visszaállít",
"secondary": "Túl sok hibát követett el? Kattintson ide az összes módosítás visszaállításához és a nulláról kezdéshez. Legyen óvatos, ezt a műveletet nem lehet visszafordítani."
},
"sample": {
"primary": "Példa adat betöltése",
"secondary": "Nem tudja hol kezdje? Kattintson ide néhány minta adat betöltéséhez, hogy megtudja, hogyan néz ki a teljes önéletrajz."
}
}
},
"sharing": {
"heading": "Megosztás",
"short-url": {
"label": "Rövid URL-t részesítsen előnyben"
},
"visibility": {
"subtitle": "A link birtokában bárki megtekintheti önéletrajzát",
"title": "Nyilvános"
}
},
"templates": {
"heading": "Sablonok"
},
"theme": {
"form": {
"background": {
"label": "Háttér"
},
"primary": {
"label": "Elsődleges"
},
"text": {
"label": "Szöveg"
}
},
"heading": "Téma"
},
"typography": {
"form": {
"font-family": {
"label": "Betűkészlet"
},
"font-size": {
"label": "Betűméret"
}
},
"heading": "Tipográfia",
"widgets": {
"body": {
"label": "Test"
},
"headings": {
"label": "Címsorok"
}
}
}
}
}
}

View File

@ -0,0 +1,29 @@
{
"avatar": {
"menu": {
"greeting": "Helló",
"logout": "Kijelentkezés"
}
},
"footer": {
"credit": "<1>Amruth Pillai szenvedélyes projektje</1>",
"license": "A közösség által, a közösségért."
},
"markdown": {
"help-text": "Ez a szakasz támogatja a <1>markdown</1> formázást."
},
"date": {
"present": "Ajándék"
},
"subtitle": "Ingyenes és nyílt forráskódú önéletrajzkészítő.",
"title": "Reactive Resume",
"toast": {
"error": {
"upload-file-size": "Kérjük, csak 2 megabájtnál kisebb fájlokat töltsön fel.",
"upload-photo-size": "Kérjük, csak 2 megabájt alatti, lehetőleg négyzet alakú képeket töltsön fel."
},
"success": {
"resume-link-copied": "Az önéletrajzának linkjét a vágólapra másoltuk."
}
}
}

View File

@ -0,0 +1,25 @@
{
"create-resume": {
"subtitle": "Kezdjük a legelejéről",
"title": "Új önéletrajz létrehozása"
},
"import-external": {
"subtitle": "LinkedIn, JSON önéletrajz, reaktív önéletrajz",
"title": "Importálás külső forrásokból"
},
"resume": {
"menu": {
"delete": "Törlés",
"duplicate": "Másolat",
"open": "Nyisd ki",
"rename": "Átnevezés",
"share-link": "Link megosztása",
"tooltips": {
"delete": "Biztos, hogy törölni szeretné ezt az önéletrajzot? Ez egy visszafordíthatatlan művelet.",
"share-link": "Az önéletrajz láthatóságát nyilvánosra kell változtatnia, hogy mások számára is látható legyen."
}
},
"timestamp": "Utoljára frissítve {{timestamp}} ezelőtt"
},
"title": "Irányítópult"
}

View File

@ -0,0 +1,41 @@
{
"actions": {
"app": "Lépjen az App",
"login": "Belépés",
"logout": "Kijelentkezés",
"register": "Regisztráció"
},
"features": {
"heading": "Jellemzők",
"list": {
"ads": "Nincs reklám",
"export": "Exportálja önéletrajzát JSON vagy PDF formátumba",
"free": "Ingyenes, örökre",
"import": "Adatok importálása a LinkedInből, JSON Resume",
"languages": "Több nyelven is elérhető",
"more": "És még sok izgalmas funkció, <1>erről itt olvashat</1>",
"tracking": "Nincs felhasználói követés"
}
},
"links": {
"heading": "Linkek",
"links": {
"donate": "Adományoz",
"github": "Forráskód",
"privacy": "Adatvédelmi irányelvek",
"service": "Szolgáltatási feltételek"
}
},
"screenshots": {
"heading": "Képernyőképek"
},
"testimonials": {
"heading": "Beszámolók",
"body": "Jó vagy rossz, szeretném hallani a véleményét a Reactive Resume-ról, és arról, hogy milyen élményben volt része az Ön számára.<br/>Íme néhány üzenet a felhasználók által a világ minden tájáról küldött üzenetei közül.",
"contact": "Az <1>e-mail címemen keresztül elérhetsz</1> vagy a <3>webhelyemen található kapcsolatfelvételi űrlapon keresztül</3> ."
},
"summary": {
"body": "A Reactive Resume egy ingyenes és nyílt forráskódú önéletrajz-készítő, amely az önéletrajz létrehozásának, frissítésének és megosztásának hétköznapi feladatait olyan egyszerűvé teszi, mint 1, 2, 3. Ezzel az alkalmazással több önéletrajzot hozhat létre, és megoszthatja azokat toborzókkal vagy barátaival. egy egyedi hivatkozáson keresztül, és nyomtassa ki PDF formátumban, mindezt ingyenesen, hirdetések nélkül, nyomon követés nélkül, anélkül, hogy elveszítené adatai sértetlenségét és magánéletét.",
"heading": "Összegzés"
}
}

View File

@ -0,0 +1,136 @@
{
"auth": {
"forgot-password": {
"actions": {
"send-email": "Jelszó visszaállítása e-mail küldése"
},
"body": "Csak adja meg a helyreállítani kívánt fiókhoz társított e-mail címet.",
"form": {
"email": {
"label": "Email cím"
}
},
"heading": "Elfelejtette a jelszavát?",
"help-text": "Ha a fiók létezik, kap egy e-mailt a jelszó visszaállításához szükséges linkkel."
},
"login": {
"actions": {
"login": "Belépés",
"google": "Jelentkezzen be a Google-lal"
},
"body": "Kérjük, adja meg a fiókjához tartozó felhasználónevét és jelszavát a bejelentkezéshez, valamint önéletrajzainak eléréséhez, kezeléséhez és megosztásához.",
"form": {
"password": {
"label": "Jelszó"
},
"username": {
"help-text": "E-mail címét is megadhatja",
"label": "Felhasználónév"
}
},
"heading": "Jelentkezz be a fiókodba",
"recover-text": "Ha elfelejtette jelszavát, <1>visszaállíthatja fiókját</1> itt.",
"register-text": "Ha nem rendelkezik fiókkal, <1>létrehozhat egy fiókot</1> itt."
},
"register": {
"actions": {
"register": "Regisztráció",
"google": "Regisztráljon a Google-nál"
},
"body": "Kérjük, adja meg személyes adatait fiók létrehozásához.",
"form": {
"confirm-password": {
"label": "Jelszó megerősítése"
},
"email": {
"label": "E-mail cím"
},
"name": {
"label": "Teljes név"
},
"password": {
"label": "Jelszó"
},
"username": {
"label": "Felhasználónév"
}
},
"heading": "Fiók létrehozása",
"loginText": "Ha már van fiókja, <1>itt bejelentkezhet</1> ."
},
"reset-password": {
"actions": {
"set-password": "Új jelszó beállítása"
},
"body": "Adjon meg egy új jelszót a fiókjához.",
"form": {
"confirm-password": {
"label": "Jelszó megerősítése"
},
"password": {
"label": "Jelszó"
}
},
"heading": "Jelszó visszaállítása"
}
},
"dashboard": {
"create-resume": {
"actions": {
"create-resume": "Önéletrajz létrehozása"
},
"body": "Kezdje el az önéletrajz felépítését azzal, hogy nevet ad neki. Ez utalhat a megpályázott szerepre, vagy egyszerűen csak a kedvenc nassolnivalójára.",
"form": {
"name": {
"label": "Név"
},
"public": {
"label": "Nyilvánosan elérhető?"
},
"slug": {
"label": "Meztelen csiga"
}
},
"heading": "Új önéletrajz létrehozása"
},
"import-external": {
"heading": "Importálás külső forrásokból",
"json-resume": {
"actions": {
"upload-json": "JSON feltöltése"
},
"body": "Ha <1>ellenőrzött JSON-önéletrajza van</1> használatra kész, segítségével felgyorsíthatja a Reactive Resume fejlesztését. Kattintson az alábbi gombra, és töltsön fel egy érvényes JSON-fájlt a kezdéshez.",
"heading": "Importálás a JSON-ból Folytatás"
},
"linkedin": {
"actions": {
"upload-archive": "Töltse fel a ZIP-archívumot"
},
"body": "Időt takaríthat meg, ha exportálja adatait a LinkedInből, és automatikusan kitölti a Reactive Resume mezőit. Nyissa meg az <1>Adatvédelem oldalt</1> szakaszt a LinkedIn-en, és kérje adatainak archiválását. Amint elérhető, töltse fel az alábbi ZIP-fájlt.",
"heading": "Importálás a LinkedIn-ből"
},
"reactive-resume": {
"actions": {
"upload-json": "JSON feltöltése",
"upload-json-v2": "JSON feltöltése v2-ből"
},
"body": "Ha van olyan JSON-ja, amelyet a Reactive Resume jelenlegi verziójával exportált, akkor ide visszaimportálhatja, hogy újra szerkeszthető változatot kapjon.",
"heading": "Importálás a Reactive Resume alkalmazásból"
}
},
"rename-resume": {
"actions": {
"rename-resume": "Önéletrajz átnevezése"
},
"form": {
"name": {
"label": "Név"
},
"slug": {
"label": "Meztelen csiga"
}
},
"heading": "Nevezze át önéletrajzát"
}
}
}

View File

@ -0,0 +1,361 @@
{
"common": {
"actions": {
"add": "Tambah Baru {{token}}",
"delete": "Hapus {{token}}",
"edit": "Ubah {{token}}"
},
"columns": {
"heading": "Kolom",
"tooltip": "Ubah nomor kolom"
},
"form": {
"date": {
"label": "Tanggal"
},
"description": {
"label": "Keterangan"
},
"email": {
"label": "Alamat Email"
},
"end-date": {
"help-text": "Biarkan kosong, Jika masih terbaru",
"label": "Tanggal Akhir"
},
"keywords": {
"label": "Kata Kunci"
},
"level": {
"label": "Tingkat"
},
"levelNum": {
"label": "Tingkat (Angka)"
},
"name": {
"label": "Nama"
},
"phone": {
"label": "Nomor Telepon"
},
"position": {
"label": "Jabatan"
},
"start-date": {
"label": "Tanggal Mulai"
},
"subtitle": {
"label": "Sub Judul"
},
"summary": {
"label": "Ringkasan"
},
"title": {
"label": "Judul"
},
"url": {
"label": "Situs web"
}
},
"glossary": {
"page": "Halaman"
},
"list": {
"actions": {
"delete": "Hapus",
"duplicate": "Duplikat",
"edit": "Ubah"
},
"empty-text": "Daftar ini kosong."
},
"tooltip": {
"delete-item": "Anda yakin ingin menghapus item ini? Tindakan ini tidak dapat dibatalkan.",
"delete-section": "Hapus Bagian",
"rename-section": "Ganti Nama Bagian",
"toggle-visibility": "Beralih Visibilitas"
}
},
"controller": {
"tooltip": {
"center-artboard": "Tengahkan Artboard",
"copy-link": "Salin Tautan ke Resume",
"export-pdf": "Ekspor PDF",
"toggle-orientation": "Beralih Orientasi Halaman",
"toggle-page-break-line": "Beralih Garis Pemisah Halaman",
"toggle-sidebars": "Beralih Sidebar",
"zoom-in": "Perbesar",
"zoom-out": "Perkecil"
}
},
"header": {
"menu": {
"delete": "Hapus",
"duplicate": "Duplikat",
"rename": "Ganti nama",
"share-link": "Bagikan tautan",
"tooltips": {
"delete": "Anda yakin ingin menghapus Resume ini? Tindakan ini tidak dapat dibatalkan.",
"share-link": "Anda perlu mengubah visibilitas resume Anda ke publik agar terlihat oleh orang lain."
}
}
},
"leftSidebar": {
"sections": {
"awards": {
"form": {
"awarder": {
"label": "Penghargaan"
}
}
},
"basics": {
"actions": {
"photo-filters": "Filter Foto"
},
"heading": "Dasar",
"headline": {
"label": "Judul"
},
"name": {
"label": "Nama Lengkap"
},
"birthdate": {
"label": "Tanggal Lahir"
},
"photo-filters": {
"effects": {
"border": {
"label": "Batas"
},
"grayscale": {
"label": "Grayscale"
},
"heading": "Efek"
},
"shape": {
"heading": "Bentuk"
},
"size": {
"heading": "Besar (dalam px)"
}
},
"photo-upload": {
"tooltip": {
"remove": "Hapus Foto",
"upload": "Unggah Foto"
}
}
},
"certifications": {
"form": {
"issuer": {
"label": "Penerbit"
}
}
},
"education": {
"form": {
"area-study": {
"label": "Area belajar"
},
"courses": {
"label": "Kursus"
},
"degree": {
"label": "Gelar"
},
"grade": {
"label": "Tingkatan"
},
"institution": {
"label": "Lembaga"
}
}
},
"location": {
"address": {
"label": "Alamat"
},
"city": {
"label": "Kota"
},
"country": {
"label": "Negara"
},
"heading": "Lokasi",
"postal-code": {
"label": "Kode Pos"
},
"region": {
"label": "Wilayah"
}
},
"profiles": {
"form": {
"network": {
"label": "Social Media"
},
"username": {
"label": "Nama Panggilan"
}
},
"heading": "Profil",
"heading_one": "Profil"
},
"publications": {
"form": {
"publisher": {
"label": "Penerbit"
}
}
},
"references": {
"form": {
"relationship": {
"label": "Hubungan"
}
}
},
"section": {
"heading": "Bagian"
},
"volunteer": {
"form": {
"organization": {
"label": "Organisasi"
}
}
}
}
},
"rightSidebar": {
"sections": {
"css": {
"heading": "Kostumisasi CSS"
},
"export": {
"heading": "Ekspor",
"json": {
"primary": "JSON",
"secondary": "Unduh versi JSON dari resume Anda yang dapat diimpor kembali ke Reactive Resume."
},
"pdf": {
"loading": {
"primary": "Membuat PDF",
"secondary": "Harap tunggu saat ini PDF Anda sedang dibuat, mungkin memerlukan waktu hingga 15 detik."
},
"normal": {
"primary": "PDF",
"secondary": "Unduh PDF dari resume Anda yang dapat Anda cetak dan kirimkan ke pekerjaan impian Anda. File ini tidak dapat diimpor kembali untuk pengeditan lanjutan."
}
}
},
"layout": {
"heading": "Tata Letak",
"tooltip": {
"reset-layout": "Atur ulang Layout"
}
},
"links": {
"bugs-features": {
"body": "Sesuatu menghentikan Anda dari membuat resume? Atau apakah Anda memiliki ide luar biasa untuk ditambahkan? Buat Issues di GitHub untuk memulai.",
"button": "Masalah GitHub",
"heading": "Bugs? Request Fitur?"
},
"donate": {
"body": "Jika Anda suka menggunakan Reactive Resume, harap pertimbangkan untuk donasi sebanyak mungkin untuk menjaga aplikasi tetap berjalan, tanpa iklan dan gratis selamanya.",
"button": "Belikan Saya Kopi",
"heading": "Donasi ke Reactive Resume"
},
"github": "Kode sumber",
"heading": "Link"
},
"settings": {
"global": {
"date": {
"primary": "Tanggal",
"secondary": "Format tanggal untuk digunakan di seluruh aplikasi"
},
"heading": "Global",
"language": {
"primary": "Bahasa",
"secondary": "Tampilkan bahasa untuk digunakan di seluruh aplikasi"
},
"theme": {
"primary": "Tema"
}
},
"heading": "Pengaturan",
"page": {
"break-line": {
"primary": "Break Line",
"secondary": "Tampilkan garis di semua halaman untuk menandai ketinggian halaman A4"
},
"heading": "Halaman",
"orientation": {
"disabled": "Tidak berpengaruh ketika hanya ada satu halaman",
"primary": "Orientasi",
"secondary": "Menampilkan halaman secara horizontal atau vertikal"
}
},
"resume": {
"heading": "Resume",
"reset": {
"primary": "Atur ulang Semuanya",
"secondary": "Membuat terlalu banyak kesalahan? Klik di sini untuk mengatur ulang semua perubahan dan memulai dari awal. Hati-hati, tindakan ini tidak dapat dibatalkan."
},
"sample": {
"primary": "Muat Data Sampel",
"secondary": "Tidak yakin harus mulai dari mana? Klik di sini untuk memuat beberapa contoh data untuk melihat bagaimana resume lengkap terlihat."
}
}
},
"sharing": {
"heading": "Bagikan",
"short-url": {
"label": "Gunakan URL pendek"
},
"visibility": {
"subtitle": "Izinkan siapa pun yang memiliki tautan untuk melihat resume Anda",
"title": "Publik"
}
},
"templates": {
"heading": "Template"
},
"theme": {
"form": {
"background": {
"label": "Latar Belakang"
},
"primary": {
"label": "Utama"
},
"text": {
"label": "Teks"
}
},
"heading": "Tema"
},
"typography": {
"form": {
"font-family": {
"label": "Font Family"
},
"font-size": {
"label": "Besar Font"
}
},
"heading": "Tipografi",
"widgets": {
"body": {
"label": "Tubuh"
},
"headings": {
"label": "Judul"
}
}
}
}
}
}

View File

@ -0,0 +1,29 @@
{
"avatar": {
"menu": {
"greeting": "Halo",
"logout": "Keluar"
}
},
"footer": {
"credit": "Sebuah passion project dari <1>Amruth Pillai</1>",
"license": "Dari komunitas, untuk komunitas."
},
"markdown": {
"help-text": "Bagian ini mendukung format <1>markdown</1>."
},
"date": {
"present": "Sekarang"
},
"subtitle": "Pembuat resume open source dan gratis.",
"title": "Reactive Resume",
"toast": {
"error": {
"upload-file-size": "Harap unggah hanya file di bawah 2 megabytes.",
"upload-photo-size": "Harap unggah hanya foto di bawah 2 megabytes, lebih baik jika persegi."
},
"success": {
"resume-link-copied": "Tautan ke resume Anda telah disalin ke papan klip Anda."
}
}
}

View File

@ -0,0 +1,25 @@
{
"create-resume": {
"subtitle": "Mulai dari Awal",
"title": "Buat Resume Baru"
},
"import-external": {
"subtitle": "LinkedIn, JSON Resume, Reactive Resume",
"title": "Impor dari sumber luar"
},
"resume": {
"menu": {
"delete": "Hapus",
"duplicate": "Duplikasi",
"open": "Buka",
"rename": "Ganti Nama",
"share-link": "Bagikan link",
"tooltips": {
"delete": "Anda yakin ingin menghapus resume ini? Ini adalah tindakan yang tidak dapat dibatalkan.",
"share-link": "Anda perlu mengubah visibilitas resume Anda ke publik agar terlihat oleh orang lain."
}
},
"timestamp": "Terakhir diubah {{timestamp}} lalu"
},
"title": "Dasbor"
}

View File

@ -0,0 +1,41 @@
{
"actions": {
"app": "Buka Aplikasi",
"login": "Masuk",
"logout": "Keluar",
"register": "Registrasi"
},
"features": {
"heading": "Fitur",
"list": {
"ads": "Tanpa Iklan",
"export": "Ekspor resume Anda ke JSON atau format PDF",
"free": "Gratis, selamanya",
"import": "Impor data dari LinkedIn, JSON Resume",
"languages": "Dapat diakses dari berbagai bahasa",
"more": "Dan masih banyak lagi fitur menarik lainnya, <1>baca semuanya disini</1>",
"tracking": "Tanpa Pelacakan Pengguna"
}
},
"links": {
"heading": "Link",
"links": {
"donate": "Donasi",
"github": "Kode Sumber",
"privacy": "Kebijakan Pribadi",
"service": "Persyaratan Layanan"
}
},
"screenshots": {
"heading": "Screenshot"
},
"testimonials": {
"heading": "Testimoni",
"body": "Baik atau buruk, saya akan senang mendengar pendapat Anda tentang Reactive Resume dan bagaimana pengalamannya bagi Anda.<br/>Berikut adalah beberapa pesan yang dikirim oleh pengguna di seluruh dunia.",
"contact": "Anda dapat menghubungi saya melalui <1>email saya</1> atau melalui formulir kontak di <3>situs web saya</3>."
},
"summary": {
"body": "Reactive Resume adalah pembuat resume gratis dan open source yang dibuat untuk membuat tugas-tugas lebih mudah seperti membuat, memperbarui, dan membagikan resume Anda semudah 1, 2, 3. Dengan aplikasi ini, Anda dapat membuat beberapa resume, membaginya dengan perekrut atau teman melalui tautan unik dan cetak sebagai PDF, semuanya gratis, tanpa iklan, tanpa pelacakan, tanpa kehilangan integritas dan privasi data Anda.",
"heading": "Ringkasan"
}
}

View File

@ -0,0 +1,136 @@
{
"auth": {
"forgot-password": {
"actions": {
"send-email": "Kirim Reset Kata Sandi Email"
},
"body": "Cukup masukkan alamat email yang terkait dengan akun yang ingin Anda pulihkan.",
"form": {
"email": {
"label": "Alamat Email"
}
},
"heading": "Lupa Kata Sandi?",
"help-text": "Jika akun ada, Anda akan menerima email dengan tautan untuk mengatur ulang kata sandi Anda."
},
"login": {
"actions": {
"login": "Masuk",
"google": "Masuk dengan Google"
},
"body": "Silakan masukkan nama pengguna dan kata sandi Anda yang terkait dengan akun Anda untuk masuk dan mengakses, mengelola, dan membagikan resume Anda.",
"form": {
"password": {
"label": "kata Sandi"
},
"username": {
"help-text": "Anda juga dapat memasukkan alamat email Anda",
"label": "Nama Pengguna"
}
},
"heading": "Masuk ke akun Anda",
"recover-text": "Jika Anda lupa sandi, Anda dapat <1>memulihkan akun</1> di sini.",
"register-text": "Jika Anda tidak memilikinya, Anda dapat <1>membuat akun</1> di sini."
},
"register": {
"actions": {
"register": "Daftar",
"google": "Daftar dengan Google"
},
"body": "Silakan masukkan informasi pribadi Anda untuk membuat akun.",
"form": {
"confirm-password": {
"label": "Konfirmasi Sandi"
},
"email": {
"label": "Alamat Email"
},
"name": {
"label": "Nama Lengkap"
},
"password": {
"label": "Kata Sandi"
},
"username": {
"label": "Nama Panggilan"
}
},
"heading": "Buat akun",
"loginText": "Jika Anda sudah memiliki akun, Anda dapat <1>masuk di sini</1>."
},
"reset-password": {
"actions": {
"set-password": "Ubah Kata Sandi Baru"
},
"body": "Masukkan kata sandi baru untuk akun Anda.",
"form": {
"confirm-password": {
"label": "Konfirmasi Sandi"
},
"password": {
"label": "Kata Sandi"
}
},
"heading": "Atur ulang kata sandi"
}
},
"dashboard": {
"create-resume": {
"actions": {
"create-resume": "Buat Resume"
},
"body": "Mulailah membangun resume Anda dengan memberinya nama. Bisa jadi mengacu pada peran yang Anda lamar, atau hanya cemilan favorit Anda.",
"form": {
"name": {
"label": "Nama"
},
"public": {
"label": "Apakah Dapat Diakses Publik?"
},
"slug": {
"label": "Slug"
}
},
"heading": "Buat resume baru"
},
"import-external": {
"heading": "Impor dari Sumber luar",
"json-resume": {
"actions": {
"upload-json": "Unggah JSON"
},
"body": "Jika Anda memiliki <1>JSON Resume yang divalidasi</1> yang siap digunakan, Anda dapat menggunakannya untuk mempercepat pengembangan Anda di Reactive Resume. Klik tombol di bawah dan unggah file JSON yang valid untuk memulai.",
"heading": "Impor dari JSON Resume"
},
"linkedin": {
"actions": {
"upload-archive": "Unggah berkas ZIP"
},
"body": "Anda dapat menghemat waktu dengan mengekspor data Anda dari LinkedIn dan menggunakannya untuk mengisi kolom secara otomatis di Reactive Resume. Buka bagian <1>Privasi Data</1> di LinkedIn dan minta arsip data Anda. Setelah tersedia, unggah file ZIP di bawah ini.",
"heading": "Impor dari LinkedIn"
},
"reactive-resume": {
"actions": {
"upload-json": "Unggah JSON",
"upload-json-v2": "Unggah JSON dari v2"
},
"body": "Jika Anda memiliki JSON yang diekspor dengan versi Reactive Resume saat ini, Anda dapat mengimpornya kembali ke sini untuk mendapatkan versi yang dapat diedit lagi.",
"heading": "Impor dari Reactive Resume"
}
},
"rename-resume": {
"actions": {
"rename-resume": "Ubah nama Resume"
},
"form": {
"name": {
"label": "Nama"
},
"slug": {
"label": "Slug"
}
},
"heading": "Ubah nama resume Anda"
}
}
}

View File

@ -119,6 +119,9 @@
"name": { "name": {
"label": "Nome e cognome" "label": "Nome e cognome"
}, },
"birthdate": {
"label": "Data di nascita"
},
"photo-filters": { "photo-filters": {
"effects": { "effects": {
"border": { "border": {

View File

@ -119,6 +119,9 @@
"name": { "name": {
"label": "ಪೂರ್ಣ ಹೆಸರು" "label": "ಪೂರ್ಣ ಹೆಸರು"
}, },
"birthdate": {
"label": "ಹುಟ್ತಿದ ದಿನ"
},
"photo-filters": { "photo-filters": {
"effects": { "effects": {
"border": { "border": {

View File

@ -119,6 +119,9 @@
"name": { "name": {
"label": "പൂർണ്ണമായ പേര്" "label": "പൂർണ്ണമായ പേര്"
}, },
"birthdate": {
"label": "ജനിച്ച ദിവസം"
},
"photo-filters": { "photo-filters": {
"effects": { "effects": {
"border": { "border": {

View File

@ -119,6 +119,9 @@
"name": { "name": {
"label": "Volledige naam" "label": "Volledige naam"
}, },
"birthdate": {
"label": "Geboortedatum"
},
"photo-filters": { "photo-filters": {
"effects": { "effects": {
"border": { "border": {

View File

@ -0,0 +1,361 @@
{
"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": "ପୁରା ନାମ"
},
"birthdate": {
"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": "JSON",
"secondary": "ତୁମର ରିଜ୍ୟୁମର ଏକ JSON ସଂସ୍କରଣ ଡାଉନଲୋଡ୍ କର ଯାହାକି Reactive Resume କୁ ଆମଦାନୀ ହୋଇପାରିବ ।"
},
"pdf": {
"loading": {
"primary": "PDF ସୃଷ୍ଟି କରୁଛି",
"secondary": "ଆପଣଙ୍କର PDF ସୃଷ୍ଟି ହେଉଛି ଦୟାକରି ଅପେକ୍ଷା କରନ୍ତୁ, ଏହା ୧୫ ସେକେଣ୍ଡ ପର୍ଯ୍ୟନ୍ତ ସମୟ ନେଇପାରେ ।"
},
"normal": {
"primary": "PDF",
"secondary": "ଆପଣଙ୍କର ରିଜ୍ୟୁମର ଏକ PDF ଡାଉନଲୋଡ୍ କରନ୍ତୁ ଯାହାକୁ ଆପଣ ଆପଣଙ୍କର ପ୍ରିୟ ନିଯୁକ୍ତିଦାତାଙ୍କୁ ପ୍ରିଣ୍ଟ କରି ପଠାଇ ପାରିବେ । ପରବର୍ତ୍ତୀ ସମ୍ପାଦନା ପାଇଁ ଏହି ଫାଇଲ୍ ପୁନର୍ବାର ଆମଦାନୀ ହୋଇପାରିବ ନାହିଁ ।"
}
}
},
"layout": {
"heading": "ଲେଆଉଟ୍‌",
"tooltip": {
"reset-layout": "ଲେଆଉଟ୍ ରିସେଟ୍ କରନ୍ତୁ"
}
},
"links": {
"bugs-features": {
"body": "ଏକ ରିଜ୍ୟୁମ୍ ତିଆରି କରିବାରେ ଆପଣଙ୍କୁ କିଛି ବାଧା ଦେଉଛି କି? କିମ୍ବା ଯୋଡିବାକୁ ଆପଣଙ୍କର ଏକ ଆଶ୍ଚର୍ଯ୍ୟଜନକ ଧାରଣା ଅଛି କି? ଆରମ୍ଭ କରିବା ପାଇଁ GitHub ରେ ଏକ ସମସ୍ୟା ଉଠାନ୍ତୁ ।",
"button": "GitHub ସମସ୍ୟା",
"heading": "ତ୍ରୁଟି? ବୈଶିଷ୍ଟ୍ୟ ଅନୁରୋଧ?"
},
"donate": {
"body": "ଯଦି ଆପଣ Reactive Resume ବ୍ୟବହାର କରିବାକୁ ପସନ୍ଦ କରନ୍ତି, ଦୟାକରି ବିଜ୍ଞାପନ ବିନା ଏବଂ ସବୁଦିନ ପାଇଁ ମାଗଣା ଆପ୍ କୁ ଚାଲୁରଖିବା ପାଇଁ ଆପଣ ଯେତେ ସମ୍ଭବ ଦାନ କରିବାକୁ ଚିନ୍ତା କରନ୍ତୁ ।",
"button": "ମୋତେ ଏକ କଫି କିଣନ୍ତୁ",
"heading": "Reactive Resume ପାଇଁ ଦାନ କରନ୍ତୁ ।"
},
"github": "ଉତ୍ସ କୋଡ୍",
"heading": "ଲିଙ୍କ୍"
},
"settings": {
"global": {
"date": {
"primary": "ତାରିଖ",
"secondary": "ଆପ୍ ରେ ବ୍ୟବହାର କରିବାକୁ ତାରିଖ ଫର୍ମାଟ୍"
},
"heading": "ଗ୍ଲୋବାଲ୍",
"language": {
"primary": "ଭାଷା",
"secondary": "ଆପ୍ ରେ ବ୍ୟବହାର କରିବାକୁ ଭାଷା ପ୍ରଦର୍ଶନ କରନ୍ତୁ"
},
"theme": {
"primary": "ଥିମ୍"
}
},
"heading": "ସେଟିଂସ୍",
"page": {
"break-line": {
"primary": "ବ୍ରେକ୍ ଲାଇନ୍",
"secondary": "A4 ପୃଷ୍ଠାର ଉଚ୍ଚତା ଚିହ୍ନିତ କରିବାକୁ ସମସ୍ତ ପୃଷ୍ଠାରେ ଏକ ରେଖା ଦେଖାନ୍ତୁ ।"
},
"heading": "ପୃଷ୍ଠା",
"orientation": {
"disabled": "କେବଳ ଗୋଟିଏ ପୃଷ୍ଠା ଥିବାବେଳେ ଏହାର କୌଣସି ପ୍ରଭାବ ନାହିଁ ।",
"primary": "ଓରିଏଣ୍ଟେସନ୍",
"secondary": "ପୃଷ୍ଠାଗୁଡ଼ିକ ଭୂସମାନ୍ତର କିମ୍ବା ଭୂଲମ୍ବ ଭାବରେ ପ୍ରଦର୍ଶିତ ହେବ କି ନାହିଁ ।"
}
},
"resume": {
"heading": "ରେଜ୍ୟୁମ",
"reset": {
"primary": "ସବୁକିଛି ରିସେଟ୍ କରନ୍ତୁ ।",
"secondary": "ବହୁତ ଭୁଲ୍ କରିଛନ୍ତି କି? ସମସ୍ତ ପରିବର୍ତ୍ତନକୁ ରିସେଟ୍ କରିବାକୁ ଏବଂ ଆରମ୍ଭରୁ ଆରମ୍ଭ କରିବାକୁ ଏଠାରେ କ୍ଲିକ୍ କରନ୍ତୁ । ସାବଧାନ ରୁହନ୍ତୁ, ଏହି କାର୍ଯ୍ୟଟି ଅପରିବର୍ତ୍ତନୀୟ ।"
},
"sample": {
"primary": "ନମୁନା ତଥ୍ୟ ଲୋଡ୍ କରନ୍ତୁ ।",
"secondary": "କେଉଁଠାରୁ ଆରମ୍ଭ କରିବେ ନିଶ୍ଚିତ ନୁହଁନ୍ତି? ଏକ ସଂପୂର୍ଣ୍ଣ ରିଜ୍ୟୁମ୍ କିପରି ଦେଖାଯାଉଛି ଦେଖିବା ପାଇଁ କିଛି ନମୁନା ତଥ୍ୟ ଲୋଡ୍ କରିବାକୁ ଏଠାରେ କ୍ଲିକ୍ କରନ୍ତୁ ।"
}
}
},
"sharing": {
"heading": "ଅଂଶୀଦାର",
"short-url": {
"label": "ସଂକ୍ଷିପ୍ତ URL କୁ ପସନ୍ଦ କରନ୍ତୁ ।"
},
"visibility": {
"subtitle": "ଆପଣଙ୍କର ରିଜ୍ୟୁମ୍ ଦେଖିବାକୁ ଲିଙ୍କ୍ ଥିବା କାହାକୁ ଅନୁମତି ଦିଅନ୍ତୁ ।",
"title": "ଜନସାଧାରଣ"
}
},
"templates": {
"heading": "ଟେମ୍ପଲେଟ୍"
},
"theme": {
"form": {
"background": {
"label": "ପୃଷ୍ଠଭୂମି"
},
"primary": {
"label": "ପ୍ରାଥମିକ"
},
"text": {
"label": "ଟେକ୍ସଟ"
}
},
"heading": "ଥିମ୍"
},
"typography": {
"form": {
"font-family": {
"label": "ଫଣ୍ଟ ପରିବାର"
},
"font-size": {
"label": "ଫଣ୍ଟ ଆକାର"
}
},
"heading": "ଟାଇପୋଗ୍ରାଫି",
"widgets": {
"body": {
"label": "ଶରୀର"
},
"headings": {
"label": "ଶିରୋନାମା"
}
}
}
}
}
}

View File

@ -0,0 +1,29 @@
{
"avatar": {
"menu": {
"greeting": "ନମସ୍କାର",
"logout": "ଲଗ ଆଉଟ"
}
},
"footer": {
"credit": "<1> ଅମୃତ ପିଲ୍ଲାଇ</1> ଦ୍ୱାରା ଏକ ଉତ୍ସାହ ପ୍ରୋଜେକ୍ଟ ।",
"license": "ସମ୍ପ୍ରଦାୟ ଦ୍ୱାରା, ସମ୍ପ୍ରଦାୟ ପାଇଁ ।"
},
"markdown": {
"help-text": "ଏହି ବିଭାଗ <1> ମାର୍କଡାଉନ୍ </1> ଫର୍ମାଟିଂକୁ ସମର୍ଥନ କରେ"
},
"date": {
"present": "ବର୍ତ୍ତମାନ"
},
"subtitle": "ଏକ ମାଗଣା ଏବଂ ମୁକ୍ତ ଉତ୍ସ ପୁନଃନିର୍ମାଣକାରୀ ।",
"title": "ଋଆକ୍ଟିଭ ରେଜ୍ୟୁମ",
"toast": {
"error": {
"upload-file-size": "ଦୟାକରି କେବଳ 2 ମେଗାବାଇଟ୍ ରୁ କମ ଆକାରର ଫାଇଲ୍ ଅପଲୋଡ୍ କରନ୍ତୁ ।",
"upload-photo-size": "ଦୟାକରି କେବଳ ମେଗାବାଇଟ୍ ତଳେ ଫଟୋ ଅପଲୋଡ୍ କରନ୍ତୁ ।"
},
"success": {
"resume-link-copied": "ତୁମର ରିଜ୍ୟୁମର ଏକ ଲିଙ୍କ୍ ତୁମର କ୍ଲିପବୋର୍ଡରେ କପି କରାଯାଇଛି ।"
}
}
}

View File

@ -0,0 +1,25 @@
{
"create-resume": {
"subtitle": "ଆରମ୍ଭରୁ ଆରମ୍ଭ କରନ୍ତୁ",
"title": "ନୂତନ ରିଜ୍ୟୁମ୍ ସୃଷ୍ଟି କରନ୍ତୁ"
},
"import-external": {
"subtitle": "LinkedIn, JSON Resume, Reactive Resume",
"title": "ବାହ୍ୟ ଉତ୍ସରୁ ଆମଦାନୀ କରନ୍ତୁ"
},
"resume": {
"menu": {
"delete": "ବିଲୋପ କରନ୍ତୁ",
"duplicate": "ନକଲ",
"open": "ଖୋଲନ୍ତୁ",
"rename": "ନାମ ବଦଳାନ୍ତୁ",
"share-link": "ଲିଙ୍କ୍ ଶେୟର କରନ୍ତୁ",
"tooltips": {
"delete": "ଆପଣ ନିଶ୍ଚିତ କି ଆପଣ ଏହି ଆଇଟମ୍ ଡିଲିଟ୍ କରିବାକୁ ଚାହୁଁଛନ୍ତି? ଏହା ଏକ ଅପରିବର୍ତ୍ତନୀୟ କାର୍ଯ୍ୟ ।",
"share-link": "ଏହାକୁ ଅନ୍ୟମାନଙ୍କ ପାଇଁ ଦୃଶ୍ୟମାନ କରିବା ପାଇଁ ଆପଣଙ୍କର ରେଜ୍ୟୁମର ଦୃଶ୍ୟତାକୁ ସର୍ବସାଧାରଣରେ ପରିବର୍ତ୍ତନ କରିବାକୁ ପଡିବ ।"
}
},
"timestamp": "{{timestamp}} ପୂର୍ବରୁ ଶେଷ ଅଦ୍ୟତନ ହୋଇଛି"
},
"title": "ଡ୍ୟାସବୋର୍ଡ"
}

View File

@ -0,0 +1,41 @@
{
"actions": {
"app": "ଆପ୍ କୁ ଯାଆନ୍ତୁ",
"login": "ଲଗ ଇନ",
"logout": "ଲଗ ଆଉଟ",
"register": "ପଞ୍ଜୀକରଣ କରନ୍ତୁ"
},
"features": {
"heading": "ବୈଶିଷ୍ଟ୍ୟଗୁଡ଼ିକ",
"list": {
"ads": "କୌଣସି ବିଜ୍ଞାପନ ନାହିଁ",
"export": "ତୁମର ରିଜ୍ୟୁମ୍ JSON କିମ୍ବା PDF ଫର୍ମାଟକୁ ରପ୍ତାନି କରନ୍ତୁ",
"free": "ମାଗଣା, ସବୁଦିନ ପାଇଁ",
"import": "LinkedIn, JSON 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": "ରିଆକ୍ଟିଭ୍ ରିଜ୍ୟୁମ୍ ହେଉଛି ଏକ ମାଗଣା ଏବଂ ଓପନ ସୋର୍ସ ରିଜ୍ୟୁମ୍ ବିଲଡର୍ ଯାହା ଆପଣଙ୍କର ରିଜ୍ୟୁମ୍ ସୃଷ୍ଟି କରିବା, ଅପଡେଟ୍ କରିବା ଏବଂ ଅଂଶୀଦାର କରିବାର ସାଧାରଣ କାର୍ଯ୍ୟକୁ ୧, , ୩ ଭଳି ସହଜ କରିବା ପାଇଁ ନିର୍ମିତ, ଏହି ଆପ୍ ସହିତ, ଆପଣ ଏକାଧିକ ରିଜ୍ୟୁମ୍ ସୃଷ୍ଟି କରିପାରିବେ, ନିଯୁକ୍ତିକାରୀ କିମ୍ବା ସାଙ୍ଗମାନଙ୍କ ସହିତ ଅଂଶୀଦାର କରିପାରିବେ । ଆପଣଙ୍କର ତଥ୍ୟର ଅଖଣ୍ଡତା ଏବଂ ଗୋପନୀୟତା ନହରାଇ ଏକ ଅନନ୍ୟ ଲିଙ୍କ୍ ମାଧ୍ୟମରେ, ଏହାକୁ ଏକ PDF ଭାବରେ ମୁଦ୍ରଣ କରନ୍ତୁ, ସମସ୍ତ ମାଗଣାରେ, ବିନା ବିଜ୍ଞାପନ ବା ଉପଭୋକ୍ତା ଟ୍ରାକିଂରେ ।",
"heading": "ସାରାଂଶ"
}
}

View File

@ -0,0 +1,136 @@
{
"auth": {
"forgot-password": {
"actions": {
"send-email": "ପାସୱାର୍ଡ଼ ରିସେଟ ଇମେଲ ପଠାନ୍ତୁ"
},
"body": "ଆପଣ ପୁନରୁଦ୍ଧାର କରିବାକୁ ଚାହୁଁଥିବା ଖାତା ସହିତ ଜଡିତ ଇମେଲ ଠିକଣା ପ୍ରବେଶ କରନ୍ତୁ ।",
"form": {
"email": {
"label": "ଇମେଲ ଠିକଣା"
}
},
"heading": "ପାସୱାର୍ଡ଼ ଭୁଲି ଯାଇଛନ୍ତି?",
"help-text": "ଯଦି ଖାତା ବିଦ୍ୟମାନ ଅଛି, ଆପଣଙ୍କର ପାସୱାର୍ଡ ରିସେଟ୍ କରିବାକୁ ଏକ ଲିଙ୍କ୍ ସହିତ ଏକ ଇମେଲ୍ ପାଇବେ ।"
},
"login": {
"actions": {
"login": "ଲଗ ଇନ",
"google": "ଗୁଗୁଲ୍ ସହିତ ଲଗ୍ଇନ୍ କରନ୍ତୁ"
},
"body": "ଲଗ୍ଇନ୍ ଏବଂ ଆକ୍ସେସ୍, ପରିଚାଳନା ଏବଂ ଅଂଶୀଦାର କରିବା ପାଇଁ ଦୟାକରି ଆପଣଙ୍କର ଖାତା ସହିତ ଜଡିତ ଆପଣଙ୍କର ଉପଯୋଗକର୍ତ୍ତା ନାମ ଏବଂ ପାସୱାର୍ଡ ପ୍ରବେଶ କରନ୍ତୁ ।",
"form": {
"password": {
"label": "ପାସ୍‍ୱାର୍ଡ଼"
},
"username": {
"help-text": "ଆପଣ ଆପଣଙ୍କର ଇମେଲ୍ ଠିକଣା ମଧ୍ୟ ପ୍ରବେଶ କରିପାରିବେ ।",
"label": "ଉପଯୋଗକର୍ତ୍ତା ନାମ"
}
},
"heading": "ଆପଣଙ୍କ ଖାତାକୁ ଲଗ୍ଇନ୍ କରନ୍ତୁ ।",
"recover-text": "ଯଦି ଆପଣ ଆପଣଙ୍କର ପାସୱାର୍ଡ ଭୁଲି ଯାଇଛନ୍ତି, ଆପଣ ଆପଣଙ୍କର ଖାତାକୁ <1>ପୁନରୁଦ୍ଧାର କରିପାରିବେ </1> ଏଠାରେ ।",
"register-text": "ଯଦି ଆପଣଙ୍କର ପାଖରେ ନାହିଁ, ଆପଣ <1> ଏକ ଖାତା ସୃଷ୍ଟି କରିପାରିବେ </1> ଏଠାରେ"
},
"register": {
"actions": {
"register": "ପଞ୍ଜୀକରଣ କରନ୍ତୁ",
"google": "ଗୁଗୁଲ୍ ସହିତ ପଞ୍ଜୀକରଣ କରନ୍ତୁ"
},
"body": "ଏକ ଖାତା ସୃଷ୍ଟି କରିବାକୁ ଦୟାକରି ଆପଣଙ୍କର ବ୍ୟକ୍ତିଗତ ସୂଚନା ପ୍ରବେଶ କରନ୍ତୁ ।",
"form": {
"confirm-password": {
"label": "ପାସୱାର୍ଡ଼ ନିଶ୍ଚିତ କରନ୍ତୁ"
},
"email": {
"label": "ଇମେଲ ଠିକଣା"
},
"name": {
"label": "ପୁରା ନାମ"
},
"password": {
"label": "ପାସ୍‍ୱାର୍ଡ଼"
},
"username": {
"label": "ଉପଯୋଗକର୍ତ୍ତା ନାମ"
}
},
"heading": "ଏକ ଆକାଉଣ୍ଟ ସୃଷ୍ଟି କରନ୍ତୁ",
"loginText": "ଯଦି ଆପଣଙ୍କର ପୂର୍ବରୁ ଏକ ଖାତା ଅଛି, ଆପଣ ଏଠାରେ <1>ଲଗଇନ୍ କରିପାରିବେ</1> ।"
},
"reset-password": {
"actions": {
"set-password": "ଏକ ନୂତନ ପାସୱାର୍ଡ୍ ସେଟ୍‍ କରନ୍ତୁ"
},
"body": "ଆପଣଙ୍କ ଖାତା ପାଇଁ ଏକ ନୂତନ ପାସୱାର୍ଡ ପ୍ରବେଶ କରନ୍ତୁ ।",
"form": {
"confirm-password": {
"label": "ପାସୱାର୍ଡ଼ ନିଶ୍ଚିତ କରନ୍ତୁ"
},
"password": {
"label": "ପାସ୍‍ୱାର୍ଡ଼"
}
},
"heading": "ଆପଣଙ୍କ ପାସୱାର୍ଡ ରିସେଟ୍ କରନ୍ତୁ"
}
},
"dashboard": {
"create-resume": {
"actions": {
"create-resume": "ନୂତନ ରିଜ୍ୟୁମ୍ ସୃଷ୍ଟି କରନ୍ତୁ"
},
"body": "ଏହାକୁ ଏକ ନାମ ଦେଇ ଆପଣଙ୍କର ରିଜ୍ୟୁମ୍ ନିର୍ମାଣ ଆରମ୍ଭ କରନ୍ତୁ । ଆପଣ ଯେଉଁ ଭୂମିକା ପାଇଁ ଆବେଦନ କରୁଛନ୍ତି, କିମ୍ବା କେବଳ ଆପଣଙ୍କର ପ୍ରିୟ ସ୍ନାକ୍ସ ବିଷୟରେ ଏହା ସୂଚିତ ହୋଇପାରେ ।",
"form": {
"name": {
"label": "ନାମ"
},
"public": {
"label": "ସର୍ବସାଧାରଣରେ ଉପଲବ୍ଧ କି?"
},
"slug": {
"label": "ସ୍ଲଗ୍"
}
},
"heading": "ନୂତନ ରିଜ୍ୟୁମ୍ ସୃଷ୍ଟି କରନ୍ତୁ"
},
"import-external": {
"heading": "ବାହ୍ୟ ଉତ୍ସରୁ ଆମଦାନୀ କରନ୍ତୁ",
"json-resume": {
"actions": {
"upload-json": "JSON ଅପଲୋଡ୍ କରନ୍ତୁ ।"
},
"body": "ଯଦି ଆପଣଙ୍କର ଏକ <1> ବୈଧ JSON ରିଜ୍ୟୁମ୍ ଅଛି |</1> ଯିବାକୁ ପ୍ରସ୍ତୁତ, ଆପଣ ଏହାକୁ Reactive Resume ରେ ଆପଣଙ୍କର ବିକାଶକୁ ଫାଷ୍ଟ-ଟ୍ରାକ୍ କରିବାକୁ ବ୍ୟବହାର କରିପାରିବେ । ନିମ୍ନରେ ବଟନ୍ କ୍ଲିକ୍ କରନ୍ତୁ ଏବଂ ଆରମ୍ଭ କରିବାକୁ ଏକ ବୈଧ JSON ଫାଇଲ୍ ଅପଲୋଡ୍ କରନ୍ତୁ ।",
"heading": "JSON Resume ରୁ ଆମଦାନୀ କରନ୍ତୁ"
},
"linkedin": {
"actions": {
"upload-archive": "ZIP ଅଭିଲେଖାଗାର ଅପଲୋଡ୍ କରନ୍ତୁ ।"
},
"body": "LinkedInରୁ ଆପଣଙ୍କର ତଥ୍ୟ ରପ୍ତାନି କରି ଏହାକୁ Reactive Resume ରେ ଅଟୋ-ଫିଲ୍ ଫିଲ୍ଡରେ ବ୍ୟବହାର କରି ଆପଣ ସମୟ ସଞ୍ଚୟ କରିପାରିବେ । <1> ଡାଟା ଗୋପନୀୟତାକୁ ଯାଆନ୍ତୁ</1> LinkedIn ରେ ବିଭାଗ ଏବଂ ଆପଣଙ୍କର ତଥ୍ୟର ଏକ ଅଭିଲେଖାଗାର ପାଇଁ ଅନୁରୋଧ । ଏହା ଉପଲବ୍ଧ ହେବା ପରେ, ନିମ୍ନରେ ZIP ଫାଇଲ୍ ଅପଲୋଡ୍ କରନ୍ତୁ ।",
"heading": "LinkedIn ରୁ ଆମଦାନୀ କରନ୍ତୁ ।"
},
"reactive-resume": {
"actions": {
"upload-json": "JSON ଅପଲୋଡ୍ କରନ୍ତୁ ।",
"upload-json-v2": "V2 ରୁ JSON ଅପଲୋଡ୍ କରନ୍ତୁ ।"
},
"body": "ଯଦି ଆପଣଙ୍କର ଏକ JSON ଅଛି ଯାହା Reactive Resume ର ସାମ୍ପ୍ରତିକ ସଂସ୍କରଣ ସହିତ ରପ୍ତାନି ହୋଇଛି, ଆପଣ ପୁନର୍ବାର ଏକ ସମ୍ପାଦିତ ସଂସ୍କରଣ ପାଇବାକୁ ଏହାକୁ ଏଠାରେ ଆମଦାନି କରିପାରିବେ ।",
"heading": "Reactive Resume ରୁ ଆମଦାନୀ କରନ୍ତୁ"
}
},
"rename-resume": {
"actions": {
"rename-resume": "ରେଜ୍ୟୁମ ନାମ ବଦଳାନ୍ତୁ"
},
"form": {
"name": {
"label": "ନାମ"
},
"slug": {
"label": "ସ୍ଲଗ୍"
}
},
"heading": "ଆପଣଙ୍କର ରେଜ୍ୟୁମ ନାମ ବଦଳାନ୍ତୁ"
}
}
}

View File

@ -119,6 +119,9 @@
"name": { "name": {
"label": "Imię i nazwisko" "label": "Imię i nazwisko"
}, },
"birthdate": {
"label": "Data urodzenia"
},
"photo-filters": { "photo-filters": {
"effects": { "effects": {
"border": { "border": {

View File

@ -119,6 +119,9 @@
"name": { "name": {
"label": "Nome Completo" "label": "Nome Completo"
}, },
"birthdate": {
"label": "Data de nascimento"
},
"photo-filters": { "photo-filters": {
"effects": { "effects": {
"border": { "border": {

View File

@ -119,6 +119,9 @@
"name": { "name": {
"label": "ФИО" "label": "ФИО"
}, },
"birthdate": {
"label": "Дата рождения"
},
"photo-filters": { "photo-filters": {
"effects": { "effects": {
"border": { "border": {

View File

@ -0,0 +1,361 @@
{
"common": {
"actions": {
"add": "Lägg till {{token}}",
"delete": "Ta bort {{token}}",
"edit": "Redigera {{token}}"
},
"columns": {
"heading": "Kolumner",
"tooltip": "Ändra antalet kolumner"
},
"form": {
"date": {
"label": "Datum"
},
"description": {
"label": "Beskrivning"
},
"email": {
"label": "E-postadress"
},
"end-date": {
"help-text": "Lämna fältet blankt, om fortfarande aktuellt",
"label": "Slutdatum"
},
"keywords": {
"label": "Nyckelord"
},
"level": {
"label": "Nivå"
},
"levelNum": {
"label": "Nivå (siffror)"
},
"name": {
"label": "Namn"
},
"phone": {
"label": "Telefonnummer"
},
"position": {
"label": "Position"
},
"start-date": {
"label": "Startdatum"
},
"subtitle": {
"label": "Undertitel"
},
"summary": {
"label": "Sammanfattning"
},
"title": {
"label": "Titel"
},
"url": {
"label": "Webbplats"
}
},
"glossary": {
"page": "Sida"
},
"list": {
"actions": {
"delete": "Ta bort",
"duplicate": "Duplicera",
"edit": "Redigera"
},
"empty-text": "Denna lista är tom."
},
"tooltip": {
"delete-item": "Är du säker på att du vill ta bort det här objektet? Detta är en oåterkallelig handling.",
"delete-section": "Ta bort avsnitt",
"rename-section": "Döp om avsnitt",
"toggle-visibility": "Visa/dölj"
}
},
"controller": {
"tooltip": {
"center-artboard": "Centrera Artboard",
"copy-link": "Kopiera länken till CV:et",
"export-pdf": "Exportera som PDF",
"toggle-orientation": "Byt sidans orientering",
"toggle-page-break-line": "Visa/dölj Sidbrytningslinjer",
"toggle-sidebars": "Visa/dölj Sidpanelen",
"zoom-in": "Zooma in",
"zoom-out": "Zooma Ut"
}
},
"header": {
"menu": {
"delete": "Ta bort",
"duplicate": "Duplicera",
"rename": "Ändra Namn",
"share-link": "Dela länk",
"tooltips": {
"delete": "Är du säker du vill ta bort detta CV? Detta går ej att ångra.",
"share-link": "Du måste ändra synligheten av ditt CV till offentligt för att göra det synligt för andra."
}
}
},
"leftSidebar": {
"sections": {
"awards": {
"form": {
"awarder": {
"label": "Utmärkelser"
}
}
},
"basics": {
"actions": {
"photo-filters": "Fotofilter"
},
"heading": "Grunder",
"headline": {
"label": "Rubrik"
},
"name": {
"label": "Fullständigt namn"
},
"birthdate": {
"label": "Födelsedatum"
},
"photo-filters": {
"effects": {
"border": {
"label": "Kant"
},
"grayscale": {
"label": "Gråskala"
},
"heading": "Effekter"
},
"shape": {
"heading": "Form"
},
"size": {
"heading": "Storlek (i pixlar)"
}
},
"photo-upload": {
"tooltip": {
"remove": "Ta bort bild",
"upload": "Ladda upp bild"
}
}
},
"certifications": {
"form": {
"issuer": {
"label": "Utgivare"
}
}
},
"education": {
"form": {
"area-study": {
"label": "Studieinriktning"
},
"courses": {
"label": "Kurser"
},
"degree": {
"label": "Examen"
},
"grade": {
"label": "Betyg"
},
"institution": {
"label": "Institution"
}
}
},
"location": {
"address": {
"label": "Adress"
},
"city": {
"label": "Ort"
},
"country": {
"label": "Land"
},
"heading": "Plats",
"postal-code": {
"label": "Postnummer"
},
"region": {
"label": "Län"
}
},
"profiles": {
"form": {
"network": {
"label": "Nätverk"
},
"username": {
"label": "Användarnamn"
}
},
"heading": "Profiler",
"heading_one": "Profil"
},
"publications": {
"form": {
"publisher": {
"label": "Utgivare"
}
}
},
"references": {
"form": {
"relationship": {
"label": "Relation"
}
}
},
"section": {
"heading": "Sektion"
},
"volunteer": {
"form": {
"organization": {
"label": "Organisation"
}
}
}
}
},
"rightSidebar": {
"sections": {
"css": {
"heading": "Anpassad CSS"
},
"export": {
"heading": "Exportera",
"json": {
"primary": "JSON",
"secondary": "Ladda ner en JSON-version av ditt CV som kan importeras tillbaka till Reactive Resume."
},
"pdf": {
"loading": {
"primary": "Genererar PDF",
"secondary": "Vänligen vänta medans din PDF genereras, detta kan ta upp till 15 sekunder."
},
"normal": {
"primary": "PDF",
"secondary": "Ladda ner en PDF av ditt CV som du kan skriva ut och skicka till ditt drömjobb. Den här filen kan inte importeras tillbaka för ytterligare redigering."
}
}
},
"layout": {
"heading": "Layout",
"tooltip": {
"reset-layout": "Återställ layout"
}
},
"links": {
"bugs-features": {
"body": "Något som hindrar dig från att göra ett CV? Eller har du en fantastisk idé att lägga till? Starta en issue på GitHub för att komma igång.",
"button": "GitHub Issues",
"heading": "Buggar? Funktionsförslag?"
},
"donate": {
"body": "Om du gillade att använda Reactive Resume, överväg att donera så mycket som möjligt för att hålla appen igång utan annonser och gratis för alltid.",
"button": "Köp mig en kaffe",
"heading": "Donera till Reactive Resume"
},
"github": "Källkod",
"heading": "Länkar"
},
"settings": {
"global": {
"date": {
"primary": "Datum",
"secondary": "Datumformat som ska användas i hela appen"
},
"heading": "Globalt",
"language": {
"primary": "Språk",
"secondary": "Visa det språk som ska användas i hela appen"
},
"theme": {
"primary": "Tema"
}
},
"heading": "Inställningar",
"page": {
"break-line": {
"primary": "Radbrytning",
"secondary": "Visa en linje på alla sidor för att markera höjden på en A4-sida"
},
"heading": "Sida",
"orientation": {
"disabled": "Har ingen effekt när det bara finns en sida",
"primary": "Orientering",
"secondary": "Om sidor ska visas horisontellt eller vertikalt"
}
},
"resume": {
"heading": "CV",
"reset": {
"primary": "Återställ allt",
"secondary": "Har du gjort för många misstag? Klicka här för att återställa alla ändringar och börja om från början. Var försiktig, den här åtgärden kan inte återställas."
},
"sample": {
"primary": "Läs in exempeldata",
"secondary": "Vet du inte var du ska börja? Klicka här för att ladda några exempel för att se hur ett komplett CV ser ut."
}
}
},
"sharing": {
"heading": "Delning",
"short-url": {
"label": "Föredra kort URL"
},
"visibility": {
"subtitle": "Tillåt alla med en länk att se ditt CV",
"title": "Publik"
}
},
"templates": {
"heading": "Mallar"
},
"theme": {
"form": {
"background": {
"label": "Bakgrund"
},
"primary": {
"label": "Primär"
},
"text": {
"label": "Text"
}
},
"heading": "Tema"
},
"typography": {
"form": {
"font-family": {
"label": "Typsnittsfamilj"
},
"font-size": {
"label": "Textstorlek"
}
},
"heading": "Typografi",
"widgets": {
"body": {
"label": "Innehåll"
},
"headings": {
"label": "Rubriker"
}
}
}
}
}
}

View File

@ -0,0 +1,29 @@
{
"avatar": {
"menu": {
"greeting": "Hej",
"logout": "Logga ut"
}
},
"footer": {
"credit": "Ett passionsprojekt av <1>Amruth Pillai</1>",
"license": "Av communityn, för communityn."
},
"markdown": {
"help-text": "Det här avsnittet stöder <1>markdown</1> formatering."
},
"date": {
"present": "Nuvarande"
},
"subtitle": "En CV byggare som är kostnadsfri och under öppen källkod.",
"title": "Reactive Resume",
"toast": {
"error": {
"upload-file-size": "Vänligen ladda endast upp filer under 2 megabyte.",
"upload-photo-size": "Vänligen ladda endast upp bilder under 2 megabyte, helst kvadratiska."
},
"success": {
"resume-link-copied": "En länk till ditt CV har kopierats till ditt urklipp."
}
}
}

View File

@ -0,0 +1,25 @@
{
"create-resume": {
"subtitle": "Börja från grunden",
"title": "Skapa nytt CV"
},
"import-external": {
"subtitle": "LinkedIn, JSON CV, Reactive Resume",
"title": "Importera från externa källor"
},
"resume": {
"menu": {
"delete": "Ta bort",
"duplicate": "Duplicera",
"open": "Öppna",
"rename": "Ändra Namn",
"share-link": "Dela länk",
"tooltips": {
"delete": "Är du säker du vill ta bort detta CV? Detta går ej att ångra.",
"share-link": "Du måste ändra synligheten av ditt CV till offentligt för att göra det synligt för andra."
}
},
"timestamp": "Senast uppdaterad {{timestamp}}"
},
"title": "Dashboard"
}

View File

@ -0,0 +1,41 @@
{
"actions": {
"app": "Till appen",
"login": "Logga in",
"logout": "Logga ut",
"register": "Registrera"
},
"features": {
"heading": "Funktioner",
"list": {
"ads": "Ingen reklam",
"export": "Exportera ditt CV till JSON- eller PDF-format",
"free": "Gratis för alltid",
"import": "Importera data från LinkedIn, JSON CV",
"languages": "Tillgänglig på flera språk",
"more": "Och många fler spännande funktioner, <1>läs allt om det här</1>",
"tracking": "Ingen spårning av användare"
}
},
"links": {
"heading": "Länkar",
"links": {
"donate": "Donera",
"github": "Källkod",
"privacy": "Sekretesspolicy",
"service": "Användarvillkor"
}
},
"screenshots": {
"heading": "Skärmdumpar"
},
"testimonials": {
"heading": "Rekommendationer",
"body": "Bra eller dåligt, jag skulle älska att höra din åsikt om Reactive Resume och hur upplevelsen har varit för dig.<br/>Här är några av de meddelanden som skickas in av användare över hela världen.",
"contact": "Du kan nå mig via <1>min e-post</1> eller genom kontaktformuläret på <3>min hemsida</3> ."
},
"summary": {
"body": "Reactive Resume är en gratis och öppen källkodsbyggare för CV som är gjord för att göra de vardagliga uppgifterna som att skapa, uppdatera och dela ditt CV så enkelt som 1, 2, 3. Med den här appen kan du skapa flera CV, dela dem med rekryterare eller vänner genom en unik länk och skriva ut den som en PDF, helt gratis, inga annonser, ingen spårning och utan att förlora integriteten för dina data.",
"heading": "Sammanfattning"
}
}

View File

@ -0,0 +1,136 @@
{
"auth": {
"forgot-password": {
"actions": {
"send-email": "Skicka e-post för återställning av lösenord"
},
"body": "Ange bara e-postadressen som är kopplad till kontot du vill återställa.",
"form": {
"email": {
"label": "E-postadress"
}
},
"heading": "Glömt ditt lösenord?",
"help-text": "Om kontot finns får du ett e-postmeddelande med en länk för att återställa ditt lösenord."
},
"login": {
"actions": {
"login": "Logga in",
"google": "Logga in med Google"
},
"body": "Vänligen ange ditt användarnamn och lösenord som är kopplat till ditt konto för att logga in och komma åt, hantera och dela dina CV.",
"form": {
"password": {
"label": "Lösenord"
},
"username": {
"help-text": "Du kan också ange din e-postadress",
"label": "Användarnamn"
}
},
"heading": "Logga in på ditt konto",
"recover-text": "Om du har glömt ditt lösenord kan du <1>återställa ditt konto</1> här.",
"register-text": "Om du inte har ett kan du <1>skapa ett konto</1> här."
},
"register": {
"actions": {
"register": "Registrera",
"google": "Registrera dig med Google"
},
"body": "Ange dina personliga uppgifter för att skapa ett konto.",
"form": {
"confirm-password": {
"label": "Bekräfta lösenord"
},
"email": {
"label": "E-postadress"
},
"name": {
"label": "Fullständigt namn"
},
"password": {
"label": "Lösenord"
},
"username": {
"label": "Användarnamn"
}
},
"heading": "Skapa ett konto",
"loginText": "Om du redan har ett konto kan du <1>logga in här</1> ."
},
"reset-password": {
"actions": {
"set-password": "Ange nytt lösenord"
},
"body": "Ange ett nytt lösenord för ditt konto.",
"form": {
"confirm-password": {
"label": "Bekräfta lösenord"
},
"password": {
"label": "Lösenord"
}
},
"heading": "Återställ ditt lösenord"
}
},
"dashboard": {
"create-resume": {
"actions": {
"create-resume": "Skapa CV"
},
"body": "Börja bygga ditt CV genom att ge det ett namn. Det kan vara med hänvisning till rollen du söker, eller bara ditt favoritmellanmål.",
"form": {
"name": {
"label": "Namn"
},
"public": {
"label": "Är allmänt tillgängligt?"
},
"slug": {
"label": "Permalänk"
}
},
"heading": "Skapa ett nytt CV"
},
"import-external": {
"heading": "Importera från externa källor",
"json-resume": {
"actions": {
"upload-json": "Ladda upp JSON"
},
"body": "Om du har ett <1>validerat JSON CV</1> redo att användas, kan du använda det för att snabba upp din utveckling på Reactive Resume. Klicka på knappen nedan och ladda upp en giltig JSON-fil för att börja.",
"heading": "Importera från JSON CV"
},
"linkedin": {
"actions": {
"upload-archive": "Ladda upp ZIP-arkiv"
},
"body": "Du kan spara tid genom att exportera dina uppgifter från LinkedIn och använda dem för att automatiskt fylla i fälten i Reactive Resume. Gå till avsnittet <1>Dataintegritet</1> på LinkedIn och begär ett arkiv av dina uppgifter. När det är tillgängligt laddar du upp ZIP-filen nedan.",
"heading": "Importera från LinkedIn"
},
"reactive-resume": {
"actions": {
"upload-json": "Ladda upp JSON",
"upload-json-v2": "Ladda upp JSON från v2"
},
"body": "Om du har en JSON som exporterades med den aktuella versionen av Reactive Resume, kan du importera den tillbaka hit för att få en redigerbar version igen.",
"heading": "Importera från Reactive Resume"
}
},
"rename-resume": {
"actions": {
"rename-resume": "Byt namn på CV"
},
"form": {
"name": {
"label": "Namn"
},
"slug": {
"label": "Permalänk"
}
},
"heading": "Byt namn på ditt CV"
}
}
}

View File

@ -119,6 +119,9 @@
"name": { "name": {
"label": "முழு பெயர்" "label": "முழு பெயர்"
}, },
"birthdate": {
"label": "பிறந்த தேதி"
},
"photo-filters": { "photo-filters": {
"effects": { "effects": {
"border": { "border": {

View File

@ -119,6 +119,9 @@
"name": { "name": {
"label": "Ad Soyad" "label": "Ad Soyad"
}, },
"birthdate": {
"label": "Doğum tarihi"
},
"photo-filters": { "photo-filters": {
"effects": { "effects": {
"border": { "border": {

View File

@ -119,6 +119,9 @@
"name": { "name": {
"label": "Họ và tên" "label": "Họ và tên"
}, },
"birthdate": {
"label": "Ngày sinh"
},
"photo-filters": { "photo-filters": {
"effects": { "effects": {
"border": { "border": {

View File

@ -119,6 +119,9 @@
"name": { "name": {
"label": "全名" "label": "全名"
}, },
"birthdate": {
"label": "出生日期"
},
"photo-filters": { "photo-filters": {
"effects": { "effects": {
"border": { "border": {

View File

@ -1,43 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:mobile="http://www.google.com/schemas/sitemap-mobile/1.0" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
<url><loc>https://rxresu.me</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.972Z</lastmod></url>
<url><loc>https://rxresu.me/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.972Z</lastmod></url>
<url><loc>https://rxresu.me/meta/privacy</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.972Z</lastmod></url>
<url><loc>https://rxresu.me/meta/service</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.972Z</lastmod></url>
<url><loc>https://rxresu.me/ar/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.972Z</lastmod></url>
<url><loc>https://rxresu.me/bn/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.972Z</lastmod></url>
<url><loc>https://rxresu.me/da/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.972Z</lastmod></url>
<url><loc>https://rxresu.me/de/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.972Z</lastmod></url>
<url><loc>https://rxresu.me/es/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.972Z</lastmod></url>
<url><loc>https://rxresu.me/fr/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.972Z</lastmod></url>
<url><loc>https://rxresu.me/hi/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.972Z</lastmod></url>
<url><loc>https://rxresu.me/it/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.972Z</lastmod></url>
<url><loc>https://rxresu.me/kn/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.972Z</lastmod></url>
<url><loc>https://rxresu.me/ml/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.973Z</lastmod></url>
<url><loc>https://rxresu.me/nl/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.973Z</lastmod></url>
<url><loc>https://rxresu.me/pl/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.973Z</lastmod></url>
<url><loc>https://rxresu.me/pt/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.973Z</lastmod></url>
<url><loc>https://rxresu.me/ru/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.973Z</lastmod></url>
<url><loc>https://rxresu.me/ta/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.973Z</lastmod></url>
<url><loc>https://rxresu.me/tr/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.973Z</lastmod></url>
<url><loc>https://rxresu.me/vi/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.973Z</lastmod></url>
<url><loc>https://rxresu.me/zh/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.973Z</lastmod></url>
<url><loc>https://rxresu.me/ar</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.973Z</lastmod></url>
<url><loc>https://rxresu.me/bn</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.973Z</lastmod></url>
<url><loc>https://rxresu.me/da</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.973Z</lastmod></url>
<url><loc>https://rxresu.me/de</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.973Z</lastmod></url>
<url><loc>https://rxresu.me/es</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.973Z</lastmod></url>
<url><loc>https://rxresu.me/fr</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.973Z</lastmod></url>
<url><loc>https://rxresu.me/hi</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.973Z</lastmod></url>
<url><loc>https://rxresu.me/it</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.973Z</lastmod></url>
<url><loc>https://rxresu.me/kn</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.973Z</lastmod></url>
<url><loc>https://rxresu.me/ml</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.973Z</lastmod></url>
<url><loc>https://rxresu.me/nl</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.973Z</lastmod></url>
<url><loc>https://rxresu.me/pl</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.973Z</lastmod></url>
<url><loc>https://rxresu.me/pt</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.973Z</lastmod></url>
<url><loc>https://rxresu.me/ru</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.973Z</lastmod></url>
<url><loc>https://rxresu.me/ta</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.973Z</lastmod></url>
<url><loc>https://rxresu.me/tr</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.973Z</lastmod></url>
<url><loc>https://rxresu.me/vi</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.973Z</lastmod></url>
<url><loc>https://rxresu.me/zh</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-04-08T08:32:21.973Z</lastmod></url>
</urlset>

View File

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap><loc>https://rxresu.me/sitemap-0.xml</loc></sitemap>
</sitemapindex>

View File

@ -13,7 +13,7 @@ export type LoginParams = {
}; };
export type LoginWithGoogleParams = { export type LoginWithGoogleParams = {
accessToken: string; credential: string;
}; };
export type RegisterParams = { export type RegisterParams = {

View File

@ -1,4 +1,4 @@
import _axios, { AxiosError } from 'axios'; import _axios from 'axios';
import Router from 'next/router'; import Router from 'next/router';
import { logout } from '@/store/auth/authSlice'; import { logout } from '@/store/auth/authSlice';
@ -27,7 +27,7 @@ axios.interceptors.request.use((config) => {
axios.interceptors.response.use( axios.interceptors.response.use(
(response) => response, (response) => response,
(error: AxiosError) => { (error) => {
const { response } = error; const { response } = error;
if (response) { if (response) {

View File

@ -5,7 +5,7 @@ import { useMemo } from 'react';
import { useAppSelector } from '@/store/hooks'; import { useAppSelector } from '@/store/hooks';
const Heading: React.FC = ({ children }) => { const Heading: React.FC<React.PropsWithChildren<unknown>> = ({ children }) => {
const theme: Theme = useAppSelector((state) => get(state.resume, 'metadata.theme', {})); const theme: Theme = useAppSelector((state) => get(state.resume, 'metadata.theme', {}));
const darkerPrimary = useMemo(() => darken(theme.primary, 0.2), [theme.primary]); const darkerPrimary = useMemo(() => darken(theme.primary, 0.2), [theme.primary]);

View File

@ -1,5 +1,5 @@
import { css } from '@emotion/css'; import { css } from '@emotion/css';
import { Email, Phone, Public, Room } from '@mui/icons-material'; import { Cake, Email, Phone, Public, Room } from '@mui/icons-material';
import { Theme } from '@reactive-resume/schema'; import { Theme } from '@reactive-resume/schema';
import clsx from 'clsx'; import clsx from 'clsx';
import get from 'lodash/get'; import get from 'lodash/get';
@ -9,12 +9,14 @@ import { useMemo } from 'react';
import Markdown from '@/components/shared/Markdown'; import Markdown from '@/components/shared/Markdown';
import { useAppSelector } from '@/store/hooks'; import { useAppSelector } from '@/store/hooks';
import DataDisplay from '@/templates/shared/DataDisplay'; import DataDisplay from '@/templates/shared/DataDisplay';
import { formatDateString } from '@/utils/date';
import getProfileIcon from '@/utils/getProfileIcon'; import getProfileIcon from '@/utils/getProfileIcon';
import { getContrastColor } from '@/utils/styles'; import { getContrastColor } from '@/utils/styles';
import { addHttp, formatLocation, getPhotoClassNames } from '@/utils/template'; import { addHttp, formatLocation, getPhotoClassNames } from '@/utils/template';
export const MastheadSidebar: React.FC = () => { export const MastheadSidebar: React.FC = () => {
const { name, headline, photo, email, phone, website, location, profiles } = useAppSelector( const dateFormat: string = useAppSelector((state) => get(state.resume, 'metadata.date.format'));
const { name, headline, photo, email, phone, birthdate, website, location, profiles } = useAppSelector(
(state) => state.resume.basics (state) => state.resume.basics
); );
const theme: Theme = useAppSelector((state) => get(state.resume, 'metadata.theme', {})); const theme: Theme = useAppSelector((state) => get(state.resume, 'metadata.theme', {}));
@ -43,6 +45,10 @@ export const MastheadSidebar: React.FC = () => {
{formatLocation(location)} {formatLocation(location)}
</DataDisplay> </DataDisplay>
<DataDisplay icon={<Cake />} className="!gap-2 text-xs">
{formatDateString(birthdate, dateFormat)}
</DataDisplay>
<DataDisplay icon={<Email />} className="!gap-2 text-xs" link={`mailto:${email}`}> <DataDisplay icon={<Email />} className="!gap-2 text-xs" link={`mailto:${email}`}>
{email} {email}
</DataDisplay> </DataDisplay>

View File

@ -3,7 +3,7 @@ import get from 'lodash/get';
import { useAppSelector } from '@/store/hooks'; import { useAppSelector } from '@/store/hooks';
const Heading: React.FC = ({ children }) => { const Heading: React.FC<React.PropsWithChildren<unknown>> = ({ children }) => {
const theme: Theme = useAppSelector((state) => get(state.resume, 'metadata.theme', {})); const theme: Theme = useAppSelector((state) => get(state.resume, 'metadata.theme', {}));
return ( return (

View File

@ -1,5 +1,5 @@
import { css } from '@emotion/css'; import { css } from '@emotion/css';
import { Email, Phone, Public, Room } from '@mui/icons-material'; import { Cake, Email, Phone, Public, Room } from '@mui/icons-material';
import { alpha } from '@mui/material'; import { alpha } from '@mui/material';
import { Theme } from '@reactive-resume/schema'; import { Theme } from '@reactive-resume/schema';
import clsx from 'clsx'; import clsx from 'clsx';
@ -10,12 +10,14 @@ import { useMemo } from 'react';
import Markdown from '@/components/shared/Markdown'; import Markdown from '@/components/shared/Markdown';
import { useAppSelector } from '@/store/hooks'; import { useAppSelector } from '@/store/hooks';
import DataDisplay from '@/templates/shared/DataDisplay'; import DataDisplay from '@/templates/shared/DataDisplay';
import { formatDateString } from '@/utils/date';
import getProfileIcon from '@/utils/getProfileIcon'; import getProfileIcon from '@/utils/getProfileIcon';
import { getContrastColor } from '@/utils/styles'; import { getContrastColor } from '@/utils/styles';
import { addHttp, formatLocation, getPhotoClassNames } from '@/utils/template'; import { addHttp, formatLocation, getPhotoClassNames } from '@/utils/template';
export const MastheadSidebar: React.FC = () => { export const MastheadSidebar: React.FC = () => {
const { name, headline, photo, email, phone, website, location, profiles } = useAppSelector( const dateFormat: string = useAppSelector((state) => get(state.resume, 'metadata.date.format'));
const { name, headline, photo, email, phone, birthdate, website, location, profiles } = useAppSelector(
(state) => state.resume.basics (state) => state.resume.basics
); );
const theme: Theme = useAppSelector((state) => get(state.resume, 'metadata.theme', {})); const theme: Theme = useAppSelector((state) => get(state.resume, 'metadata.theme', {}));
@ -44,6 +46,10 @@ export const MastheadSidebar: React.FC = () => {
{formatLocation(location)} {formatLocation(location)}
</DataDisplay> </DataDisplay>
<DataDisplay icon={<Cake />} className="!gap-2 text-xs">
{formatDateString(birthdate, dateFormat)}
</DataDisplay>
<DataDisplay icon={<Email />} className="!gap-2 text-xs" link={`mailto:${email}`}> <DataDisplay icon={<Email />} className="!gap-2 text-xs" link={`mailto:${email}`}>
{email} {email}
</DataDisplay> </DataDisplay>

View File

@ -3,7 +3,7 @@ import get from 'lodash/get';
import { useAppSelector } from '@/store/hooks'; import { useAppSelector } from '@/store/hooks';
const Heading: React.FC = ({ children }) => { const Heading: React.FC<React.PropsWithChildren<unknown>> = ({ children }) => {
const theme: Theme = useAppSelector((state) => get(state.resume, 'metadata.theme', {})); const theme: Theme = useAppSelector((state) => get(state.resume, 'metadata.theme', {}));
return ( return (

View File

@ -1,16 +1,18 @@
import { Email, Phone, Public, Room } from '@mui/icons-material'; import { Cake, Email, Phone, Public, Room } from '@mui/icons-material';
import get from 'lodash/get'; import get from 'lodash/get';
import isEmpty from 'lodash/isEmpty'; import isEmpty from 'lodash/isEmpty';
import Markdown from '@/components/shared/Markdown'; import Markdown from '@/components/shared/Markdown';
import { useAppSelector } from '@/store/hooks'; import { useAppSelector } from '@/store/hooks';
import DataDisplay from '@/templates/shared/DataDisplay'; import DataDisplay from '@/templates/shared/DataDisplay';
import { formatDateString } from '@/utils/date';
import getProfileIcon from '@/utils/getProfileIcon'; import getProfileIcon from '@/utils/getProfileIcon';
import { addHttp, formatLocation, getPhotoClassNames } from '@/utils/template'; import { addHttp, formatLocation, getPhotoClassNames } from '@/utils/template';
export const MastheadSidebar: React.FC = () => { export const MastheadSidebar: React.FC = () => {
const dateFormat: string = useAppSelector((state) => get(state.resume, 'metadata.date.format'));
const primaryColor: string = useAppSelector((state) => get(state.resume, 'metadata.theme.primary')); const primaryColor: string = useAppSelector((state) => get(state.resume, 'metadata.theme.primary'));
const { name, headline, photo, email, phone, website, location, profiles } = useAppSelector( const { name, headline, photo, email, phone, birthdate, website, location, profiles } = useAppSelector(
(state) => state.resume.basics (state) => state.resume.basics
); );
@ -36,6 +38,10 @@ export const MastheadSidebar: React.FC = () => {
{formatLocation(location)} {formatLocation(location)}
</DataDisplay> </DataDisplay>
<DataDisplay icon={<Cake />} className="text-xs">
{formatDateString(birthdate, dateFormat)}
</DataDisplay>
<DataDisplay icon={<Email />} className="text-xs" link={`mailto:${email}`}> <DataDisplay icon={<Email />} className="text-xs" link={`mailto:${email}`}>
{email} {email}
</DataDisplay> </DataDisplay>

View File

@ -1,4 +1,4 @@
const Heading: React.FC = ({ children }) => { const Heading: React.FC<React.PropsWithChildren<unknown>> = ({ children }) => {
return <h3 className="my-2 inline-block border-b px-5 pb-2">{children}</h3>; return <h3 className="my-2 inline-block border-b px-5 pb-2">{children}</h3>;
}; };

View File

@ -1,14 +1,17 @@
import { Email, Phone, Public, Room } from '@mui/icons-material'; import { Cake, Email, Phone, Public, Room } from '@mui/icons-material';
import get from 'lodash/get';
import isEmpty from 'lodash/isEmpty'; import isEmpty from 'lodash/isEmpty';
import React from 'react'; import React from 'react';
import { useAppSelector } from '@/store/hooks'; import { useAppSelector } from '@/store/hooks';
import DataDisplay from '@/templates/shared/DataDisplay'; import DataDisplay from '@/templates/shared/DataDisplay';
import { formatDateString } from '@/utils/date';
import getProfileIcon from '@/utils/getProfileIcon'; import getProfileIcon from '@/utils/getProfileIcon';
import { addHttp, formatLocation, getPhotoClassNames } from '@/utils/template'; import { addHttp, formatLocation, getPhotoClassNames } from '@/utils/template';
const Masthead = () => { const Masthead = () => {
const { name, photo, email, phone, website, headline, location, profiles } = useAppSelector( const dateFormat: string = useAppSelector((state) => get(state.resume, 'metadata.date.format'));
const { name, photo, email, phone, website, birthdate, headline, location, profiles } = useAppSelector(
(state) => state.resume.basics (state) => state.resume.basics
); );
@ -32,6 +35,8 @@ const Masthead = () => {
</div> </div>
<div className="flex flex-wrap justify-center gap-3"> <div className="flex flex-wrap justify-center gap-3">
<DataDisplay icon={<Cake />}>{formatDateString(birthdate, dateFormat)}</DataDisplay>
<DataDisplay icon={<Email />} link={`mailto:${email}`}> <DataDisplay icon={<Email />} link={`mailto:${email}`}>
{email} {email}
</DataDisplay> </DataDisplay>

View File

@ -1,5 +1,3 @@
.page {}
.container { .container {
@apply grid grid-cols-2 gap-8 px-6 py-4; @apply grid grid-cols-2 gap-8 px-6 py-4;

View File

@ -3,7 +3,7 @@ import get from 'lodash/get';
import { useAppSelector } from '@/store/hooks'; import { useAppSelector } from '@/store/hooks';
const Heading: React.FC = ({ children }) => { const Heading: React.FC<React.PropsWithChildren<unknown>> = ({ children }) => {
const theme: Theme = useAppSelector((state) => get(state.resume, 'metadata.theme', {})); const theme: Theme = useAppSelector((state) => get(state.resume, 'metadata.theme', {}));
return ( return (

View File

@ -1,4 +1,4 @@
import { Email, Phone, Public, Room } from '@mui/icons-material'; import { Cake, Email, Phone, Public, Room } from '@mui/icons-material';
import { alpha } from '@mui/material'; import { alpha } from '@mui/material';
import { Theme } from '@reactive-resume/schema'; import { Theme } from '@reactive-resume/schema';
import get from 'lodash/get'; import get from 'lodash/get';
@ -6,11 +6,13 @@ import isEmpty from 'lodash/isEmpty';
import { useAppSelector } from '@/store/hooks'; import { useAppSelector } from '@/store/hooks';
import DataDisplay from '@/templates/shared/DataDisplay'; import DataDisplay from '@/templates/shared/DataDisplay';
import { formatDateString } from '@/utils/date';
import getProfileIcon from '@/utils/getProfileIcon'; import getProfileIcon from '@/utils/getProfileIcon';
import { addHttp, formatLocation, getPhotoClassNames } from '@/utils/template'; import { addHttp, formatLocation, getPhotoClassNames } from '@/utils/template';
const Masthead: React.FC = () => { const Masthead: React.FC = () => {
const { name, photo, headline, summary, email, phone, website, location, profiles } = useAppSelector( const dateFormat: string = useAppSelector((state) => get(state.resume, 'metadata.date.format'));
const { name, photo, headline, summary, email, phone, birthdate, website, location, profiles } = useAppSelector(
(state) => state.resume.basics (state) => state.resume.basics
); );
const theme: Theme = useAppSelector((state) => get(state.resume, 'metadata.theme', {})); const theme: Theme = useAppSelector((state) => get(state.resume, 'metadata.theme', {}));
@ -48,6 +50,12 @@ const Masthead: React.FC = () => {
id="Masterhead_data" id="Masterhead_data"
style={{ backgroundColor: alpha(theme.primary, 0.4), gridTemplateColumns: `repeat(2, minmax(0, 1fr))` }} style={{ backgroundColor: alpha(theme.primary, 0.4), gridTemplateColumns: `repeat(2, minmax(0, 1fr))` }}
> >
<DataDisplay icon={<Room />} className="col-span-2">
{formatLocation(location)}
</DataDisplay>
<DataDisplay icon={<Cake />}>{formatDateString(birthdate, dateFormat)}</DataDisplay>
<DataDisplay icon={<Email />} link={`mailto:${email}`}> <DataDisplay icon={<Email />} link={`mailto:${email}`}>
{email} {email}
</DataDisplay> </DataDisplay>
@ -60,8 +68,6 @@ const Masthead: React.FC = () => {
{website} {website}
</DataDisplay> </DataDisplay>
<DataDisplay icon={<Room />}>{formatLocation(location)}</DataDisplay>
{profiles.map(({ id, username, network, url }) => ( {profiles.map(({ id, username, network, url }) => (
<DataDisplay key={id} icon={getProfileIcon(network)} link={url && addHttp(url)}> <DataDisplay key={id} icon={getProfileIcon(network)} link={url && addHttp(url)}>
{username} {username}

View File

@ -3,7 +3,7 @@ import get from 'lodash/get';
import { useAppSelector } from '@/store/hooks'; import { useAppSelector } from '@/store/hooks';
const Heading: React.FC = ({ children }) => { const Heading: React.FC<React.PropsWithChildren<unknown>> = ({ children }) => {
const theme: Theme = useAppSelector((state) => get(state.resume, 'metadata.theme', {})); const theme: Theme = useAppSelector((state) => get(state.resume, 'metadata.theme', {}));
return ( return (

View File

@ -1,13 +1,16 @@
import { Email, Phone, Public, Room } from '@mui/icons-material'; import { Cake, Email, Phone, Public, Room } from '@mui/icons-material';
import get from 'lodash/get';
import isEmpty from 'lodash/isEmpty'; import isEmpty from 'lodash/isEmpty';
import { useAppSelector } from '@/store/hooks'; import { useAppSelector } from '@/store/hooks';
import DataDisplay from '@/templates/shared/DataDisplay'; import DataDisplay from '@/templates/shared/DataDisplay';
import { formatDateString } from '@/utils/date';
import getProfileIcon from '@/utils/getProfileIcon'; import getProfileIcon from '@/utils/getProfileIcon';
import { addHttp, formatLocation, getPhotoClassNames } from '@/utils/template'; import { addHttp, formatLocation, getPhotoClassNames } from '@/utils/template';
const Masthead: React.FC = () => { const Masthead: React.FC = () => {
const { name, photo, email, phone, website, headline, location, profiles } = useAppSelector( const dateFormat: string = useAppSelector((state) => get(state.resume, 'metadata.date.format'));
const { name, photo, email, phone, website, birthdate, headline, location, profiles } = useAppSelector(
(state) => state.resume.basics (state) => state.resume.basics
); );
@ -33,6 +36,10 @@ const Masthead: React.FC = () => {
</DataDisplay> </DataDisplay>
<div className="flex items-center gap-2"> <div className="flex items-center gap-2">
<DataDisplay icon={<Cake />} className="text-xs">
{formatDateString(birthdate, dateFormat)}
</DataDisplay>
<DataDisplay icon={<Email />} className="text-xs" link={`mailto:${email}`}> <DataDisplay icon={<Email />} className="text-xs" link={`mailto:${email}`}>
{email} {email}
</DataDisplay> </DataDisplay>

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