mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2025-11-11 21:12:42 +10:00
Compare commits
350 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5ee99cfdab | |||
| 72e610b50d | |||
| ba34787333 | |||
| e11b0e6224 | |||
| c78ee18e05 | |||
| 5f5b484243 | |||
| bcc451a6a1 | |||
| 55a7f6a556 | |||
| e9b6265c60 | |||
| 2e2f3271c9 | |||
| fa3e92d643 | |||
| 1f9b52eda6 | |||
| 7074b6fc76 | |||
| b4c4fb94f7 | |||
| 22bdb64fa9 | |||
| af02158d05 | |||
| 6a8db92fc4 | |||
| 6f219ef17e | |||
| 667e51abdc | |||
| 7b98277c32 | |||
| 77ed7ed8be | |||
| ce584d9326 | |||
| 5685352375 | |||
| 036b2917a6 | |||
| e972320722 | |||
| 4ac1e9db35 | |||
| 9fe4403b40 | |||
| 4f4084ab45 | |||
| 72227dc9ab | |||
| d44795a421 | |||
| e9584144e4 | |||
| bbedfa3b75 | |||
| 03f7d74096 | |||
| a62693d611 | |||
| 421f195e1e | |||
| b22dff523f | |||
| 58d0c6e315 | |||
| 36178cac22 | |||
| 376786fa25 | |||
| efceda1c55 | |||
| 047e317c51 | |||
| 36ad63adb9 | |||
| 45c88caf58 | |||
| ca11a9217a | |||
| fd6fbbba77 | |||
| e2fb83bda9 | |||
| 40567e8f61 | |||
| 64c899b159 | |||
| b267cc4097 | |||
| f4657b6592 | |||
| 6a2f512638 | |||
| 499005c21f | |||
| 0e18d3fc48 | |||
| 3b831c4eb4 | |||
| 40564944ef | |||
| fdbb6d2e5b | |||
| 398cd63082 | |||
| efd4af14e5 | |||
| 889697fc31 | |||
| 3aedf6618d | |||
| abf42e13af | |||
| 40bcbebadd | |||
| 364f2e6d49 | |||
| 7e5dfd75f9 | |||
| b94d10c614 | |||
| 8c40b417ec | |||
| 1f17dfe6ea | |||
| be6ea1a224 | |||
| 583e9effae | |||
| 619b2757c8 | |||
| 9e27eee029 | |||
| c2d3c611e1 | |||
| 735f589e54 | |||
| 1e3d6fbb77 | |||
| 3995e7159a | |||
| 6662acf0b0 | |||
| feb8abca95 | |||
| 75c83bd91d | |||
| f6d5897ed3 | |||
| ed356763a1 | |||
| 4847246d84 | |||
| a0ae6cb77e | |||
| 2aa2550be0 | |||
| df39913d49 | |||
| 2225505d48 | |||
| afe20e61ee | |||
| 794e9c6511 | |||
| e7e423bf29 | |||
| 2173297207 | |||
| b091cfa474 | |||
| 057bb3a414 | |||
| c1442c9acc | |||
| 977f1beafd | |||
| 39ee710e97 | |||
| 1d1841c8db | |||
| 3e44774ed4 | |||
| 9e2fa01896 | |||
| 7811f9840c | |||
| 34425c6200 | |||
| 46f9fc549a | |||
| 237abf359b | |||
| c5e8739009 | |||
| 0ea8040977 | |||
| 1f10e8efe3 | |||
| 8c2688670e | |||
| bc5d49b568 | |||
| 27ea84e720 | |||
| 0becb66bfd | |||
| 11f88492e9 | |||
| ae3e01466f | |||
| 5d04dd8a83 | |||
| 52c15a8151 | |||
| f6104e7051 | |||
| ed710f6fe5 | |||
| 7e6e239d7f | |||
| b4381a22f3 | |||
| ba6ca4d220 | |||
| 5486906b05 | |||
| 7348b295cb | |||
| 025762fdf6 | |||
| 96411cdb90 | |||
| 835f453384 | |||
| cc475ae1e9 | |||
| a5249ec646 | |||
| d0e3090421 | |||
| 14f68c8937 | |||
| 9c0c6076b3 | |||
| 36bf729161 | |||
| 3a430ad98c | |||
| 90a8610dd7 | |||
| d62ddab140 | |||
| ca0186bb67 | |||
| 88ac8389ea | |||
| 2f3864fff2 | |||
| 7878e52cc4 | |||
| 08b1967a4e | |||
| b870ca8297 | |||
| 1507c54671 | |||
| 0984ca4daf | |||
| 438798f8de | |||
| 27aadb8948 | |||
| 244a4118cf | |||
| cde320ce46 | |||
| 4772df7618 | |||
| ecb95b35f3 | |||
| 24b09af563 | |||
| 9471fb4169 | |||
| 2f296d6f08 | |||
| cd3d3caa15 | |||
| 440eefe46e | |||
| 5787e2badb | |||
| c235e5ab16 | |||
| f584c70f27 | |||
| 3aa0279519 | |||
| 6830aec2f9 | |||
| 9a3d7af325 | |||
| 52f7e8557f | |||
| 12c17d1c7c | |||
| 67918187a1 | |||
| dcbc0c2b45 | |||
| 26b6a741c2 | |||
| d7064129e8 | |||
| 279dd36a13 | |||
| 49e47b28de | |||
| a782343e0a | |||
| 1e7821a46d | |||
| f7bea5a218 | |||
| 05fa4f3192 | |||
| ed357f0ebc | |||
| 1774832a58 | |||
| 2837befd52 | |||
| 38d866c0c2 | |||
| 87c7acf4f1 | |||
| 1bd68118ce | |||
| 5c34b28c80 | |||
| c550183720 | |||
| 3605579b1b | |||
| fa2e28688f | |||
| 20f1031e28 | |||
| 292cb6d0ed | |||
| 45f2dc1cfc | |||
| e319dd3e3d | |||
| 9678f7a6e5 | |||
| 0cca4e21fb | |||
| f6758f191d | |||
| 983662f877 | |||
| c7fc28a5c5 | |||
| 1f7c33e805 | |||
| 437cc331a8 | |||
| aef51375b8 | |||
| bdd65968e5 | |||
| 061a789c18 | |||
| 68507d0501 | |||
| 1e28c5adfa | |||
| 3b09550ebd | |||
| 16aef9cbec | |||
| b24da90ba7 | |||
| 2aa7dbd3ad | |||
| 9f8f2c4b8b | |||
| 5331ecccc1 | |||
| f2ec86940c | |||
| cd74e707ba | |||
| ff101dbfac | |||
| 5024c19f87 | |||
| c9850b5815 | |||
| 6fe4e7d7e1 | |||
| a5b8b91e82 | |||
| cc7095adc3 | |||
| e2703f55aa | |||
| 8c5849c988 | |||
| 5322ab2420 | |||
| b84e6bcfb1 | |||
| a4ab0174c7 | |||
| 7e93b5a757 | |||
| 044820fa71 | |||
| 322178e8a4 | |||
| 6358fbad30 | |||
| d342c0a9af | |||
| 63084eebb4 | |||
| 3b4ea00db8 | |||
| c8f7bffe7e | |||
| 3ff56f89d9 | |||
| 7fb9f27837 | |||
| c9685d4ce7 | |||
| 4dc987e27d | |||
| f7af06ae9a | |||
| a5c337faa3 | |||
| fc4704f0a6 | |||
| d968334ada | |||
| fea6d23178 | |||
| 3fefc95572 | |||
| b07e7d1213 | |||
| d47b8bfb03 | |||
| 5bf7fbdae1 | |||
| fca766b382 | |||
| feadfb1b67 | |||
| e69000f221 | |||
| 6b4a54465a | |||
| 878659999f | |||
| 1868c47e30 | |||
| 51442efc23 | |||
| 556e962ec5 | |||
| b5ce67f863 | |||
| c3ce89dc3a | |||
| e87930c758 | |||
| 815a693e58 | |||
| 8287fcae96 | |||
| cd7fe6c404 | |||
| d47d5dd819 | |||
| 1919d79e43 | |||
| ab08cd9e34 | |||
| 2522bdd0a2 | |||
| f9b6aefffe | |||
| 2ba6658a0b | |||
| dbc46f27a3 | |||
| f21e1caed1 | |||
| 4ffe2a6330 | |||
| 1bc0438872 | |||
| 57fb9fdaea | |||
| 58ce641f18 | |||
| 5f4e7802e4 | |||
| 42d3109ae1 | |||
| f7ca7b97fa | |||
| f5d8a54134 | |||
| eaec14dc62 | |||
| c93b3264cd | |||
| bf41aa9c6c | |||
| 8af6bfd5ae | |||
| ab08c10874 | |||
| 9af9a0284e | |||
| 716a05032d | |||
| 43e43e7d76 | |||
| c91af3668d | |||
| 52f41f0b3b | |||
| 3b709d606b | |||
| 2e5fafac62 | |||
| ea2aee2d25 | |||
| e36fbb5f64 | |||
| 5221ef707b | |||
| f0df806f01 | |||
| 9d01d6a833 | |||
| 1914ebb9ae | |||
| 686dba90c9 | |||
| 95dc3bf571 | |||
| 1c8fdbf848 | |||
| d8357c9959 | |||
| 90e994377b | |||
| 82c6ee6d5d | |||
| 7b615e73c3 | |||
| 268e4a87fe | |||
| 73f8eb84c9 | |||
| a31ef89996 | |||
| d6bca7ebab | |||
| e0a42fd928 | |||
| deb4e0a0de | |||
| a687062866 | |||
| 700439c8a8 | |||
| fb09283e53 | |||
| 88ac365e03 | |||
| aec78cf875 | |||
| 77c587681b | |||
| 7ac8b906d9 | |||
| e9a5f86a6a | |||
| 7238a3b50e | |||
| ebe13fa82e | |||
| 6ee290a625 | |||
| 69f2b7070f | |||
| 11bea1c7c4 | |||
| 68a1dc65c1 | |||
| 4b1ce539d5 | |||
| a6fbb8191d | |||
| 552ff281b8 | |||
| 54fad2f6d8 | |||
| 78edcd7d0e | |||
| a8034b21d5 | |||
| f0e95905d2 | |||
| 69a5276614 | |||
| 2e62eea351 | |||
| 13d972b8f3 | |||
| 03cb198e95 | |||
| 67ee55b502 | |||
| b5998d7f3a | |||
| f71cf99b77 | |||
| a2092a6a39 | |||
| 43c09666a0 | |||
| 0da23f95fd | |||
| e8f44e2142 | |||
| fbb237e982 | |||
| 7f7c1d7b87 | |||
| be0b7f20f9 | |||
| 0672988fff | |||
| 75dad60cb5 | |||
| 0140e3fce0 | |||
| 42d0e14b98 | |||
| 9a42d684fb | |||
| ab6ad65445 | |||
| b613764ccc | |||
| ac44d0489f | |||
| c57e6fbbb8 | |||
| 6c6da215c8 | |||
| be700c7629 | |||
| b697f73492 | |||
| 3106f94989 | |||
| 50f41f73d5 | |||
| 83e3f59e68 | |||
| 056c61e985 | |||
| d1a1b68302 | |||
| 6bd7b9a50f | |||
| e6967aab88 | |||
| 47e96803e3 |
@ -2,9 +2,8 @@
|
|||||||
/app
|
/app
|
||||||
|
|
||||||
# Build Artifacts
|
# Build Artifacts
|
||||||
dist
|
/server/dist
|
||||||
.next
|
/client/.next
|
||||||
.turbo
|
|
||||||
|
|
||||||
# IDEs
|
# IDEs
|
||||||
.vscode
|
.vscode
|
||||||
@ -19,7 +18,7 @@ CHANGELOG.md
|
|||||||
CODE_OF_CONDUCT.md
|
CODE_OF_CONDUCT.md
|
||||||
|
|
||||||
# Project Dependencies
|
# Project Dependencies
|
||||||
node_modules
|
**/node_modules
|
||||||
|
|
||||||
# Docker
|
# Docker
|
||||||
Dockerfile
|
Dockerfile
|
||||||
|
|||||||
12
.env.example
12
.env.example
@ -1,7 +1,3 @@
|
|||||||
# Turbo Cache (Optional)
|
|
||||||
TURBO_TEAM=
|
|
||||||
TURBO_TOKEN=
|
|
||||||
|
|
||||||
# Server + Client
|
# Server + Client
|
||||||
TZ=UTC
|
TZ=UTC
|
||||||
PUBLIC_URL=http://localhost:3000
|
PUBLIC_URL=http://localhost:3000
|
||||||
@ -15,7 +11,7 @@ POSTGRES_PASSWORD=postgres
|
|||||||
|
|
||||||
# Server
|
# Server
|
||||||
SECRET_KEY=
|
SECRET_KEY=
|
||||||
POSTGRES_HOST=postgres
|
POSTGRES_HOST=localhost
|
||||||
POSTGRES_PORT=5432
|
POSTGRES_PORT=5432
|
||||||
POSTGRES_SSL_CERT=
|
POSTGRES_SSL_CERT=
|
||||||
JWT_SECRET=
|
JWT_SECRET=
|
||||||
@ -34,7 +30,7 @@ STORAGE_ENDPOINT=
|
|||||||
STORAGE_URL_PREFIX=
|
STORAGE_URL_PREFIX=
|
||||||
STORAGE_ACCESS_KEY=
|
STORAGE_ACCESS_KEY=
|
||||||
STORAGE_SECRET_KEY=
|
STORAGE_SECRET_KEY=
|
||||||
PDF_DELETION_TIME=
|
PDF_DELETION_TIME=345600000
|
||||||
|
|
||||||
# Flags (Client)
|
# Client
|
||||||
PUBLIC_FLAG_DISABLE_SIGNUPS=false
|
PUBLIC_FLAG_DISABLE_SIGNUPS=false
|
||||||
|
|||||||
@ -14,6 +14,7 @@
|
|||||||
// TypeScript ESLint
|
// TypeScript ESLint
|
||||||
"@typescript-eslint/no-unused-vars": "off",
|
"@typescript-eslint/no-unused-vars": "off",
|
||||||
"@typescript-eslint/no-explicit-any": "off",
|
"@typescript-eslint/no-explicit-any": "off",
|
||||||
|
"@typescript-eslint/no-non-null-assertion": "off",
|
||||||
"@typescript-eslint/interface-name-prefix": "off",
|
"@typescript-eslint/interface-name-prefix": "off",
|
||||||
"@typescript-eslint/explicit-function-return-type": "off",
|
"@typescript-eslint/explicit-function-return-type": "off",
|
||||||
"@typescript-eslint/explicit-module-boundary-types": "off"
|
"@typescript-eslint/explicit-module-boundary-types": "off"
|
||||||
|
|||||||
13
.github/workflows/digitalocean-deploy.yml
vendored
13
.github/workflows/digitalocean-deploy.yml
vendored
@ -8,14 +8,21 @@ on:
|
|||||||
- completed
|
- completed
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
deploy:
|
on-success:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
||||||
steps:
|
steps:
|
||||||
- name: Install DigitalOcean CLI
|
- name: Install DigitalOcean CLI
|
||||||
uses: digitalocean/action-doctl@v2.2.0
|
uses: digitalocean/action-doctl@v2.3.0
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.DIGITALOCEAN_TOKEN }}
|
token: ${{ secrets.DIGITALOCEAN_TOKEN }}
|
||||||
|
|
||||||
- name: Create Deployment with Latest Version
|
- name: Create Deployment with Latest Version
|
||||||
run: doctl apps create-deployment ${{ secrets.DIGITALOCEAN_APP_ID }} --wait --force-rebuild
|
run: doctl apps create-deployment ${{ secrets.DIGITALOCEAN_APP_ID }} --wait --force-rebuild
|
||||||
|
|
||||||
|
on-failure:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
|
||||||
|
steps:
|
||||||
|
- name: Abruptly end the worklfow
|
||||||
|
run: exit 1
|
||||||
|
|||||||
94
.github/workflows/docker-build-push.yml
vendored
94
.github/workflows/docker-build-push.yml
vendored
@ -1,36 +1,35 @@
|
|||||||
name: Build and Push Docker Image
|
name: Build and Push Docker Image
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
release:
|
release:
|
||||||
types: [published]
|
types: [published]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
client:
|
build_matrix:
|
||||||
name: Client
|
name: Build and Push Docker Image
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
env:
|
strategy:
|
||||||
TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
|
matrix:
|
||||||
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
|
image: [client, server]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout the repository
|
- name: Checkout the repository
|
||||||
uses: actions/checkout@v3.1.0
|
uses: actions/checkout@v3.5.2
|
||||||
with:
|
|
||||||
fetch-depth: 2
|
|
||||||
|
|
||||||
- id: version
|
- id: version
|
||||||
name: Get Version
|
name: App Version
|
||||||
run: echo "version=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
|
uses: martinbeentjes/npm-get-version-action@v1.3.1
|
||||||
|
|
||||||
- name: Set up QEMU
|
- name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@v2.1.0
|
uses: docker/setup-qemu-action@v2.1.0
|
||||||
|
with:
|
||||||
|
platforms: amd64
|
||||||
|
|
||||||
- id: buildx
|
- id: buildx
|
||||||
name: Set up Docker Buildx
|
name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v2.2.1
|
uses: docker/setup-buildx-action@v2.5.0
|
||||||
with:
|
|
||||||
install: true
|
|
||||||
|
|
||||||
- name: Login to Docker Hub
|
- name: Login to Docker Hub
|
||||||
uses: docker/login-action@v2.1.0
|
uses: docker/login-action@v2.1.0
|
||||||
@ -45,68 +44,15 @@ jobs:
|
|||||||
username: $GITHUB_REPOSITORY_OWNER
|
username: $GITHUB_REPOSITORY_OWNER
|
||||||
password: ${{ secrets.GH_TOKEN }}
|
password: ${{ secrets.GH_TOKEN }}
|
||||||
|
|
||||||
- name: Build and Push Client Image
|
- name: Build and Push Docker Image
|
||||||
uses: docker/build-push-action@v3.2.0
|
uses: docker/build-push-action@v4.0.0
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
push: true
|
push: true
|
||||||
file: client/Dockerfile
|
platforms: linux/amd64
|
||||||
platforms: linux/amd64,linux/arm64
|
file: ${{ matrix.image }}/Dockerfile
|
||||||
tags: |
|
tags: |
|
||||||
amruthpillai/reactive-resume:client-latest
|
amruthpillai/reactive-resume:${{ matrix.image }}-latest
|
||||||
amruthpillai/reactive-resume:client-${{ env.version }}
|
amruthpillai/reactive-resume:${{ matrix.image }}-${{ steps.version.outputs.current-version }}
|
||||||
ghcr.io/amruthpillai/reactive-resume:client-latest
|
ghcr.io/amruthpillai/reactive-resume:${{ matrix.image }}-latest
|
||||||
ghcr.io/amruthpillai/reactive-resume:client-${{ env.version }}
|
ghcr.io/amruthpillai/reactive-resume:${{ matrix.image }}-${{ steps.version.outputs.current-version }}
|
||||||
|
|
||||||
server:
|
|
||||||
name: Server
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
env:
|
|
||||||
TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
|
|
||||||
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout the repository
|
|
||||||
uses: actions/checkout@v3.1.0
|
|
||||||
with:
|
|
||||||
fetch-depth: 2
|
|
||||||
|
|
||||||
- id: version
|
|
||||||
name: Get Version
|
|
||||||
run: echo "version=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Set up QEMU
|
|
||||||
uses: docker/setup-qemu-action@v2.1.0
|
|
||||||
|
|
||||||
- id: buildx
|
|
||||||
name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v2.2.1
|
|
||||||
with:
|
|
||||||
install: true
|
|
||||||
|
|
||||||
- name: Login to Docker Hub
|
|
||||||
uses: docker/login-action@v2.1.0
|
|
||||||
with:
|
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
|
||||||
|
|
||||||
- name: Login to GitHub Container Registry
|
|
||||||
uses: docker/login-action@v2.1.0
|
|
||||||
with:
|
|
||||||
registry: ghcr.io
|
|
||||||
username: $GITHUB_REPOSITORY_OWNER
|
|
||||||
password: ${{ secrets.GH_TOKEN }}
|
|
||||||
|
|
||||||
- name: Build and Push Server Image
|
|
||||||
uses: docker/build-push-action@v3.2.0
|
|
||||||
with:
|
|
||||||
context: .
|
|
||||||
push: true
|
|
||||||
file: server/Dockerfile
|
|
||||||
platforms: linux/amd64,linux/arm64
|
|
||||||
tags: |
|
|
||||||
amruthpillai/reactive-resume:server-latest
|
|
||||||
amruthpillai/reactive-resume:server-${{ env.version }}
|
|
||||||
ghcr.io/amruthpillai/reactive-resume:server-latest
|
|
||||||
ghcr.io/amruthpillai/reactive-resume:server-${{ env.version }}
|
|
||||||
|
|||||||
4
.gitignore
vendored
4
.gitignore
vendored
@ -1,6 +1,7 @@
|
|||||||
# Environment Variables
|
# Environment Variables
|
||||||
.env
|
.env
|
||||||
.env.*
|
.env.*
|
||||||
|
!.env.gitpod
|
||||||
!.env.example
|
!.env.example
|
||||||
|
|
||||||
# Project Dependencies
|
# Project Dependencies
|
||||||
@ -9,8 +10,5 @@ node_modules
|
|||||||
# macOS
|
# macOS
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
|
||||||
# Turbo
|
|
||||||
.turbo
|
|
||||||
|
|
||||||
# Intellij
|
# Intellij
|
||||||
.idea
|
.idea
|
||||||
|
|||||||
41
.gitpod.yml
Normal file
41
.gitpod.yml
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
tasks:
|
||||||
|
- name: Run PostgreSQL Database
|
||||||
|
command: docker run --name postgres -p 5432:5432 -e POSTGRES_PASSWORD=postgres -d postgres
|
||||||
|
|
||||||
|
- name: Install Project Dependencies
|
||||||
|
command: |
|
||||||
|
pnpm install
|
||||||
|
pnpm dlx playwright install --with-deps chromium
|
||||||
|
gp sync-done deps
|
||||||
|
|
||||||
|
- name: Generate Environment Variables
|
||||||
|
init: gp sync-await deps
|
||||||
|
command: |
|
||||||
|
if [ -f .env ]; then
|
||||||
|
echo "Found .env in workspace, skipping generation"
|
||||||
|
else
|
||||||
|
pnpm generate-env
|
||||||
|
fi
|
||||||
|
gp sync-done env
|
||||||
|
|
||||||
|
- name: Build and Run Project
|
||||||
|
init: gp sync-await env
|
||||||
|
command: |
|
||||||
|
pnpm build
|
||||||
|
pnpm start
|
||||||
|
|
||||||
|
ports:
|
||||||
|
# PostgreSQL
|
||||||
|
- port: 5432
|
||||||
|
onOpen: ignore
|
||||||
|
visibility: private
|
||||||
|
|
||||||
|
# Client
|
||||||
|
- port: 3100
|
||||||
|
onOpen: ignore
|
||||||
|
visibility: public
|
||||||
|
|
||||||
|
# Client
|
||||||
|
- port: 3000
|
||||||
|
onOpen: open-browser
|
||||||
|
visibility: public
|
||||||
17
README.md
17
README.md
@ -6,7 +6,8 @@
|
|||||||
[](https://github.com/AmruthPillai/Reactive-Resume/blob/main/LICENSE)
|
[](https://github.com/AmruthPillai/Reactive-Resume/blob/main/LICENSE)
|
||||||
[](https://translate.rxresu.me)
|
[](https://translate.rxresu.me)
|
||||||
[](https://hub.docker.com/r/amruthpillai/reactive-resume)
|
[](https://hub.docker.com/r/amruthpillai/reactive-resume)
|
||||||

|

|
||||||
|
[](https://gitpod.io/#https://github.com/AmruthPillai/Reactive-Resume)
|
||||||
[](https://app.fossa.com/projects/git%2Bgithub.com%2FAmruthPillai%2FReactive-Resume?ref=badge_shield)
|
[](https://app.fossa.com/projects/git%2Bgithub.com%2FAmruthPillai%2FReactive-Resume?ref=badge_shield)
|
||||||
|
|
||||||
## [Go to App](https://rxresu.me) | [Docs](https://docs.rxresu.me)
|
## [Go to App](https://rxresu.me) | [Docs](https://docs.rxresu.me)
|
||||||
@ -18,7 +19,7 @@ You have complete control over what goes into your resume, how it looks, what co
|
|||||||
## Table of Contents
|
## Table of Contents
|
||||||
|
|
||||||
- [Reactive Resume](#reactive-resume)
|
- [Reactive Resume](#reactive-resume)
|
||||||
- [Go to App | [Docs](https://docs.rxresu.me)](#go-to-app--docs)
|
- [Go to App | Docs](#go-to-app--docs)
|
||||||
- [Table of Contents](#table-of-contents)
|
- [Table of Contents](#table-of-contents)
|
||||||
- [Features](#features)
|
- [Features](#features)
|
||||||
- [Languages](#languages)
|
- [Languages](#languages)
|
||||||
@ -93,7 +94,7 @@ You have complete control over what goes into your resume, how it looks, what co
|
|||||||
- Swedish (Svenska)
|
- Swedish (Svenska)
|
||||||
- Tamil (தமிழ்)
|
- Tamil (தமிழ்)
|
||||||
- Turkish (Türkçe)
|
- Turkish (Türkçe)
|
||||||
- Ukranian (Українська мова)
|
- Ukrainian (Українська мова)
|
||||||
- Vietnamese (Tiếng Việt)
|
- Vietnamese (Tiếng Việt)
|
||||||
|
|
||||||
Help by [translating Reactive Resume](https://translate.rxresu.me) to your language!
|
Help by [translating Reactive Resume](https://translate.rxresu.me) to your language!
|
||||||
@ -104,7 +105,11 @@ The docs include an extensive [Tutorial](https://docs.rxresu.me/tutorial) sectio
|
|||||||
|
|
||||||
## Build from Source
|
## Build from Source
|
||||||
|
|
||||||
For extensive information on how to build the app on your local machine, head over to the docs's [Source Code](https://docs.rxresu.me/source-code) section.
|
[](https://gitpod.io/#https://github.com/AmruthPillai/Reactive-Resume)
|
||||||
|
|
||||||
|
Initially building the image and project on Gitpod will take at least ~10 minutes, so please be patient on first launch.
|
||||||
|
|
||||||
|
For extensive information on how to build the app on your local machine, head over to the docs [Source Code](https://docs.rxresu.me/source-code) section.
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
@ -129,6 +134,10 @@ Reactive Resume would be nothing without the folks who supported me and kept the
|
|||||||
### [GitHub Sponsor](https://github.com/sponsors/AmruthPillai)
|
### [GitHub Sponsor](https://github.com/sponsors/AmruthPillai)
|
||||||
### [PayPal](https://paypal.me/RajaRajanA)
|
### [PayPal](https://paypal.me/RajaRajanA)
|
||||||
|
|
||||||
|
## GitHub Star History
|
||||||
|
|
||||||
|
[](https://star-history.com/#AmruthPillai/Reactive-Resume&Date)
|
||||||
|
|
||||||
## Infrastructure
|
## Infrastructure
|
||||||
|
|
||||||
- [Next.js](https://nextjs.org/), frontend
|
- [Next.js](https://nextjs.org/), frontend
|
||||||
|
|||||||
@ -12,8 +12,8 @@ android {
|
|||||||
targetSdk 32
|
targetSdk 32
|
||||||
versionCode 3
|
versionCode 3
|
||||||
versionName "1.0"
|
versionName "1.0"
|
||||||
|
resConfigs 'en'
|
||||||
|
|
||||||
resConfigs "en"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
buildTypes {
|
buildTypes {
|
||||||
@ -38,6 +38,7 @@ android {
|
|||||||
buildFeatures {
|
buildFeatures {
|
||||||
viewBinding true
|
viewBinding true
|
||||||
}
|
}
|
||||||
|
namespace 'me.rxresu.app'
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest
|
<manifest
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
package="me.rxresu.app">
|
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.INTERNET"/>
|
<uses-permission android:name="android.permission.INTERNET"/>
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,6 @@ import android.webkit.WebView
|
|||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
|
||||||
class MainActivity : AppCompatActivity() {
|
class MainActivity : AppCompatActivity() {
|
||||||
|
|
||||||
private lateinit var webView: WebView
|
private lateinit var webView: WebView
|
||||||
|
|
||||||
private var url = "https://rxresu.me"
|
private var url = "https://rxresu.me"
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
plugins {
|
plugins {
|
||||||
id 'com.android.application' version '7.1.2' apply false
|
id 'com.android.application' version '7.4.2' apply false
|
||||||
id 'com.android.library' version '7.1.2' apply false
|
id 'com.android.library' version '7.4.2' apply false
|
||||||
id 'org.jetbrains.kotlin.android' version '1.7.21' apply false
|
id 'org.jetbrains.kotlin.android' version '1.8.21' apply false
|
||||||
}
|
}
|
||||||
|
|
||||||
task clean(type: Delete) {
|
task clean(type: Delete) {
|
||||||
|
|||||||
2
app/gradle/wrapper/gradle-wrapper.properties
vendored
2
app/gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,6 +1,6 @@
|
|||||||
#Wed Mar 09 21:34:49 CET 2022
|
#Wed Mar 09 21:34:49 CET 2022
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
|||||||
2
client/.gitignore
vendored
2
client/.gitignore
vendored
@ -39,4 +39,4 @@ yarn-error.log*
|
|||||||
__ENV.js
|
__ENV.js
|
||||||
|
|
||||||
# next-sitemap
|
# next-sitemap
|
||||||
sitemap*.xml
|
sitemap*.xml
|
||||||
|
|||||||
@ -2,12 +2,12 @@ FROM node:lts-alpine AS base
|
|||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
RUN apk add --no-cache g++ git curl make python3 libc6-compat \
|
RUN apk add --no-cache g++ git make curl python3 libc6-compat \
|
||||||
&& curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm
|
&& corepack enable && corepack prepare pnpm@latest --activate
|
||||||
|
|
||||||
FROM base as dependencies
|
FROM base as dependencies
|
||||||
|
|
||||||
COPY package.json pnpm-*.yaml turbo.json ./
|
COPY package.json pnpm-*.yaml ./
|
||||||
COPY ./schema/package.json ./schema/package.json
|
COPY ./schema/package.json ./schema/package.json
|
||||||
COPY ./client/package.json ./client/package.json
|
COPY ./client/package.json ./client/package.json
|
||||||
|
|
||||||
@ -21,17 +21,12 @@ COPY --from=dependencies /app/node_modules ./node_modules
|
|||||||
COPY --from=dependencies /app/schema/node_modules ./schema/node_modules
|
COPY --from=dependencies /app/schema/node_modules ./schema/node_modules
|
||||||
COPY --from=dependencies /app/client/node_modules ./client/node_modules
|
COPY --from=dependencies /app/client/node_modules ./client/node_modules
|
||||||
|
|
||||||
ARG TURBO_TEAM
|
RUN pnpm run --filter schema build \
|
||||||
ARG TURBO_TOKEN
|
&& pnpm run --filter client build
|
||||||
|
|
||||||
ENV TURBO_TEAM $TURBO_TEAM
|
|
||||||
ENV TURBO_TOKEN $TURBO_TOKEN
|
|
||||||
|
|
||||||
RUN pnpm run build --filter client
|
|
||||||
|
|
||||||
FROM base as production
|
FROM base as production
|
||||||
|
|
||||||
COPY --from=builder /app/package.json /app/pnpm-*.yaml /app/turbo.json ./
|
COPY --from=builder /app/package.json /app/pnpm-*.yaml ./
|
||||||
COPY --from=builder /app/client/package.json ./client/package.json
|
COPY --from=builder /app/client/package.json ./client/package.json
|
||||||
|
|
||||||
RUN pnpm install --filter client --prod --frozen-lockfile --workspace-root
|
RUN pnpm install --filter client --prod --frozen-lockfile --workspace-root
|
||||||
@ -48,4 +43,4 @@ ENV PORT 3000
|
|||||||
HEALTHCHECK --interval=30s --timeout=20s --retries=3 --start-period=15s \
|
HEALTHCHECK --interval=30s --timeout=20s --retries=3 --start-period=15s \
|
||||||
CMD curl -fSs localhost:3000 || exit 1
|
CMD curl -fSs localhost:3000 || exit 1
|
||||||
|
|
||||||
CMD [ "pnpm", "run", "start", "--filter", "client" ]
|
CMD [ "pnpm", "run", "start" ]
|
||||||
@ -14,11 +14,11 @@ import {
|
|||||||
import { ButtonBase, Divider, Tooltip, useMediaQuery, useTheme } from '@mui/material';
|
import { ButtonBase, Divider, Tooltip, useMediaQuery, useTheme } from '@mui/material';
|
||||||
import clsx from 'clsx';
|
import clsx from 'clsx';
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import { get } from 'lodash';
|
import get from 'lodash/get';
|
||||||
import { useTranslation } from 'next-i18next';
|
import { useTranslation } from 'next-i18next';
|
||||||
import toast from 'react-hot-toast';
|
import toast from 'react-hot-toast';
|
||||||
import { useMutation } from 'react-query';
|
import { useMutation } from 'react-query';
|
||||||
import { ReactZoomPanPinchRef } from 'react-zoom-pan-pinch';
|
import { ReactZoomPanPinchHandlers } from 'react-zoom-pan-pinch';
|
||||||
import { ActionCreators } from 'redux-undo';
|
import { ActionCreators } from 'redux-undo';
|
||||||
|
|
||||||
import { ServerError } from '@/services/axios';
|
import { ServerError } from '@/services/axios';
|
||||||
@ -29,7 +29,7 @@ import getResumeUrl from '@/utils/getResumeUrl';
|
|||||||
|
|
||||||
import styles from './ArtboardController.module.scss';
|
import styles from './ArtboardController.module.scss';
|
||||||
|
|
||||||
const ArtboardController: React.FC<ReactZoomPanPinchRef> = ({ zoomIn, zoomOut, centerView }) => {
|
const ArtboardController: React.FC<ReactZoomPanPinchHandlers> = ({ zoomIn, zoomOut, centerView }) => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
|
|||||||
@ -53,13 +53,12 @@ const Header = () => {
|
|||||||
|
|
||||||
const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null);
|
const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null);
|
||||||
|
|
||||||
const { mutateAsync: duplicateMutation } = useMutation<Resume, ServerError, DuplicateResumeParams>(duplicateResume);
|
|
||||||
|
|
||||||
const { mutateAsync: deleteMutation } = useMutation<void, ServerError, DeleteResumeParams>(deleteResume);
|
|
||||||
|
|
||||||
const resume = useAppSelector((state) => state.resume.present);
|
const resume = useAppSelector((state) => state.resume.present);
|
||||||
const { left, right } = useAppSelector((state) => state.build.sidebar);
|
const { left, right } = useAppSelector((state) => state.build.sidebar);
|
||||||
|
|
||||||
|
const { mutateAsync: deleteMutation } = useMutation<void, ServerError, DeleteResumeParams>(deleteResume);
|
||||||
|
const { mutateAsync: duplicateMutation } = useMutation<Resume, ServerError, DuplicateResumeParams>(duplicateResume);
|
||||||
|
|
||||||
const name = useMemo(() => get(resume, 'name'), [resume]);
|
const name = useMemo(() => get(resume, 'name'), [resume]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|||||||
@ -27,6 +27,7 @@ const LeftSidebar = () => {
|
|||||||
const isDesktop = useMediaQuery(theme.breakpoints.up('lg'));
|
const isDesktop = useMediaQuery(theme.breakpoints.up('lg'));
|
||||||
|
|
||||||
const sections = useAppSelector((state) => state.resume.present.sections);
|
const sections = useAppSelector((state) => state.resume.present.sections);
|
||||||
|
|
||||||
const { open } = useAppSelector((state) => state.build.sidebar.left);
|
const { open } = useAppSelector((state) => state.build.sidebar.left);
|
||||||
|
|
||||||
const customSections = useMemo(() => getCustomSections(sections), [sections]);
|
const customSections = useMemo(() => getCustomSections(sections), [sections]);
|
||||||
@ -62,7 +63,7 @@ const LeftSidebar = () => {
|
|||||||
for (const item of left) {
|
for (const item of left) {
|
||||||
const id = (item as any).id;
|
const id = (item as any).id;
|
||||||
const component = (item as any).component;
|
const component = (item as any).component;
|
||||||
const type = component.props.type || 'basic';
|
const type = component.props.type;
|
||||||
const addMore = !!component.props.addMore;
|
const addMore = !!component.props.addMore;
|
||||||
|
|
||||||
sectionsComponents.push(
|
sectionsComponents.push(
|
||||||
@ -108,7 +109,7 @@ const LeftSidebar = () => {
|
|||||||
variant={isDesktop ? 'persistent' : 'temporary'}
|
variant={isDesktop ? 'persistent' : 'temporary'}
|
||||||
>
|
>
|
||||||
<div className={styles.container}>
|
<div className={styles.container}>
|
||||||
<nav className="overflow-y-scroll">
|
<nav className="overflow-y-auto">
|
||||||
<div>
|
<div>
|
||||||
<Link href="/dashboard">
|
<Link href="/dashboard">
|
||||||
<Logo size={40} />
|
<Logo size={40} />
|
||||||
@ -122,14 +123,19 @@ const LeftSidebar = () => {
|
|||||||
arrow
|
arrow
|
||||||
key={id}
|
key={id}
|
||||||
placement="right"
|
placement="right"
|
||||||
title={get(sections, `${id}.name`, t<string>(`builder.leftSidebar.sections.${id}.heading`)) as string}
|
title={t<string>(`builder.leftSidebar.sections.${id}.heading`, get(sections, `${id}.name`))}
|
||||||
>
|
>
|
||||||
<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`, '') as string} placement="right" arrow>
|
<Tooltip
|
||||||
|
key={id}
|
||||||
|
title={t<string>(`builder.leftSidebar.sections.${id}.heading`, get(sections, `${id}.name`))}
|
||||||
|
placement="right"
|
||||||
|
arrow
|
||||||
|
>
|
||||||
<IconButton onClick={() => id && handleClick(id)}>
|
<IconButton onClick={() => id && handleClick(id)}>
|
||||||
<Star />
|
<Star />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
@ -142,9 +148,10 @@ const LeftSidebar = () => {
|
|||||||
|
|
||||||
<main>
|
<main>
|
||||||
{sectionsList()}
|
{sectionsList()}
|
||||||
|
|
||||||
{customSections.map(({ id }) => (
|
{customSections.map(({ id }) => (
|
||||||
<section key={id} id={`section-${id}`}>
|
<section key={id} id={`section-${id}`}>
|
||||||
<Section path={`sections.${id}`} isEditable isHideable isDeletable />
|
<Section path={`sections.${id}`} type="custom" isEditable isHideable isDeletable />
|
||||||
</section>
|
</section>
|
||||||
))}
|
))}
|
||||||
|
|
||||||
|
|||||||
@ -47,12 +47,8 @@ const Section: React.FC<Props> = ({
|
|||||||
const visibility = useAppSelector<boolean>((state) => get(state.resume.present, `${path}.visible`, true));
|
const visibility = useAppSelector<boolean>((state) => get(state.resume.present, `${path}.visible`, true));
|
||||||
|
|
||||||
const handleAdd = () => {
|
const handleAdd = () => {
|
||||||
const id = path.split('.')[1];
|
const modal: ModalName = `builder.sections.${type}`;
|
||||||
let modal: ModalName = validate(id) ? 'builder.sections.custom' : `builder.${path}`;
|
|
||||||
|
|
||||||
if (type) {
|
|
||||||
modal = `builder.sections.${type}`;
|
|
||||||
}
|
|
||||||
dispatch(setModalState({ modal, state: { open: true, payload: { path } } }));
|
dispatch(setModalState({ modal, state: { open: true, payload: { path } } }));
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -102,7 +98,9 @@ const Section: React.FC<Props> = ({
|
|||||||
<SectionSettings path={path} />
|
<SectionSettings path={path} />
|
||||||
|
|
||||||
<Button variant="outlined" startIcon={<Add />} onClick={handleAdd}>
|
<Button variant="outlined" startIcon={<Add />} onClick={handleAdd}>
|
||||||
{t<string>('builder.common.actions.add', { token: heading })}
|
{t<string>('builder.common.actions.add', {
|
||||||
|
token: t<string>(`builder.leftSidebar.${path}.heading`, { defaultValue: heading }),
|
||||||
|
})}
|
||||||
</Button>
|
</Button>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { Divider, IconButton, SwipeableDrawer, Tooltip, useMediaQuery, useTheme } from '@mui/material';
|
import { Divider, IconButton, SwipeableDrawer, Tooltip, useMediaQuery, useTheme } from '@mui/material';
|
||||||
import { capitalize } from 'lodash';
|
import capitalize from 'lodash/capitalize';
|
||||||
import { useTranslation } from 'next-i18next';
|
import { useTranslation } from 'next-i18next';
|
||||||
|
|
||||||
import Avatar from '@/components/shared/Avatar';
|
import Avatar from '@/components/shared/Avatar';
|
||||||
@ -43,7 +43,7 @@ const RightSidebar = () => {
|
|||||||
variant={isDesktop ? 'persistent' : 'temporary'}
|
variant={isDesktop ? 'persistent' : 'temporary'}
|
||||||
>
|
>
|
||||||
<div className={styles.container}>
|
<div className={styles.container}>
|
||||||
<nav className="overflow-y-scroll">
|
<nav className="overflow-y-auto">
|
||||||
<div>
|
<div>
|
||||||
<Avatar size={40} />
|
<Avatar size={40} />
|
||||||
<Divider />
|
<Divider />
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import { Button } from '@mui/material';
|
|||||||
import { useTranslation } from 'next-i18next';
|
import { useTranslation } from 'next-i18next';
|
||||||
|
|
||||||
import Heading from '@/components/shared/Heading';
|
import Heading from '@/components/shared/Heading';
|
||||||
import { DOCS_URL, DONATION_URL, GITHUB_ISSUES_URL, GITHUB_URL } from '@/constants/index';
|
import { DOCS_URL, DONATION_URL, GITHUB_ISSUES_URL, GITHUB_URL, REDDIT_URL } from '@/constants/index';
|
||||||
|
|
||||||
import styles from './Links.module.scss';
|
import styles from './Links.module.scss';
|
||||||
|
|
||||||
@ -50,6 +50,12 @@ const Links = () => {
|
|||||||
</Button>
|
</Button>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
<a href={REDDIT_URL} target="_blank" rel="noreferrer">
|
||||||
|
<Button variant="text" startIcon={<Link />}>
|
||||||
|
{t<string>('builder.rightSidebar.sections.links.reddit')}
|
||||||
|
</Button>
|
||||||
|
</a>
|
||||||
|
|
||||||
<a href={DOCS_URL} target="_blank" rel="noreferrer">
|
<a href={DOCS_URL} target="_blank" rel="noreferrer">
|
||||||
<Button variant="text" startIcon={<Link />}>
|
<Button variant="text" startIcon={<Link />}>
|
||||||
{t<string>('builder.rightSidebar.sections.links.docs')}
|
{t<string>('builder.rightSidebar.sections.links.docs')}
|
||||||
|
|||||||
@ -51,7 +51,7 @@ const Settings = () => {
|
|||||||
const pageConfig: PageConfig | undefined = useMemo(() => get(resume, 'metadata.page'), [resume]);
|
const pageConfig: PageConfig | undefined = useMemo(() => get(resume, 'metadata.page'), [resume]);
|
||||||
|
|
||||||
const isDarkMode = useMemo(() => theme === 'dark', [theme]);
|
const isDarkMode = useMemo(() => theme === 'dark', [theme]);
|
||||||
const exampleDateString = useMemo(() => `Eg. ${dayjs().utc().format(dateConfig.format)}`, [dateConfig.format]);
|
const exampleDateString = useMemo(() => `Eg. ${dayjs().format(dateConfig.format)}`, [dateConfig.format]);
|
||||||
const themeString = useMemo(() => (isDarkMode ? 'Matte Black Everything' : 'As bright as your future'), [isDarkMode]);
|
const themeString = useMemo(() => (isDarkMode ? 'Matte Black Everything' : 'As bright as your future'), [isDarkMode]);
|
||||||
|
|
||||||
const { mutateAsync: loadSampleDataMutation } = useMutation<Resume, ServerError, LoadSampleDataParams>(
|
const { mutateAsync: loadSampleDataMutation } = useMutation<Resume, ServerError, LoadSampleDataParams>(
|
||||||
|
|||||||
@ -6,15 +6,17 @@ import { useState } from 'react';
|
|||||||
|
|
||||||
import { logout } from '@/store/auth/authSlice';
|
import { logout } from '@/store/auth/authSlice';
|
||||||
import { useAppDispatch, useAppSelector } from '@/store/hooks';
|
import { useAppDispatch, useAppSelector } from '@/store/hooks';
|
||||||
|
import { setModalState } from '@/store/modal/modalSlice';
|
||||||
import getGravatarUrl from '@/utils/getGravatarUrl';
|
import getGravatarUrl from '@/utils/getGravatarUrl';
|
||||||
|
|
||||||
import styles from './Avatar.module.scss';
|
import styles from './Avatar.module.scss';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
size?: number;
|
size?: number;
|
||||||
|
interactive?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
const Avatar: React.FC<Props> = ({ size = 64 }) => {
|
const Avatar: React.FC<Props> = ({ size = 64, interactive = true }) => {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
@ -34,6 +36,11 @@ const Avatar: React.FC<Props> = ({ size = 64 }) => {
|
|||||||
setAnchorEl(null);
|
setAnchorEl(null);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handleOpenProfile = () => {
|
||||||
|
dispatch(setModalState({ modal: 'auth.profile', state: { open: true } }));
|
||||||
|
handleClose();
|
||||||
|
};
|
||||||
|
|
||||||
const handleLogout = () => {
|
const handleLogout = () => {
|
||||||
dispatch(logout());
|
dispatch(logout());
|
||||||
handleClose();
|
handleClose();
|
||||||
@ -43,7 +50,7 @@ const Avatar: React.FC<Props> = ({ size = 64 }) => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<IconButton onClick={handleOpen}>
|
<IconButton onClick={handleOpen} disabled={!interactive}>
|
||||||
<Image
|
<Image
|
||||||
width={size}
|
width={size}
|
||||||
height={size}
|
height={size}
|
||||||
@ -54,9 +61,9 @@ const Avatar: React.FC<Props> = ({ size = 64 }) => {
|
|||||||
</IconButton>
|
</IconButton>
|
||||||
|
|
||||||
<Menu anchorEl={anchorEl} onClose={handleClose} open={Boolean(anchorEl)}>
|
<Menu anchorEl={anchorEl} onClose={handleClose} open={Boolean(anchorEl)}>
|
||||||
<MenuItem>
|
<MenuItem onClick={handleOpenProfile}>
|
||||||
<div>
|
<div>
|
||||||
<span className="text-xs opacity-50">{t<string>('common.avatar.menu.greeting')}</span>
|
<span className="text-xs opacity-50">{t<string>('common.avatar.menu.greeting')},</span>
|
||||||
<p>{user?.name}</p>
|
<p>{user?.name}</p>
|
||||||
</div>
|
</div>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
|
|||||||
@ -62,7 +62,7 @@ const Heading: React.FC<Props> = ({
|
|||||||
{editMode ? (
|
{editMode ? (
|
||||||
<TextField size="small" value={heading} className="w-3/4" onChange={handleChange} />
|
<TextField size="small" value={heading} className="w-3/4" onChange={handleChange} />
|
||||||
) : (
|
) : (
|
||||||
<h1>{heading}</h1>
|
<h1>{t<string>(`builder.leftSidebar.${path}.heading`, { defaultValue: heading })}</h1>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,9 @@
|
|||||||
import clsx from 'clsx';
|
import clsx from 'clsx';
|
||||||
import { isEmpty } from 'lodash';
|
import isEmpty from 'lodash/isEmpty';
|
||||||
import ReactMarkdown from 'react-markdown';
|
import ReactMarkdown from 'react-markdown';
|
||||||
|
import rehypeKatex from 'rehype-katex';
|
||||||
import remarkGfm from 'remark-gfm';
|
import remarkGfm from 'remark-gfm';
|
||||||
|
import remarkMath from 'remark-math';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
children?: string;
|
children?: string;
|
||||||
@ -12,7 +14,11 @@ const Markdown: React.FC<Props> = ({ className, children }) => {
|
|||||||
if (!children || isEmpty(children)) return null;
|
if (!children || isEmpty(children)) return null;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ReactMarkdown remarkPlugins={[remarkGfm]} className={clsx('markdown', className)}>
|
<ReactMarkdown
|
||||||
|
className={clsx('markdown', className)}
|
||||||
|
remarkPlugins={[remarkGfm, remarkMath]}
|
||||||
|
rehypePlugins={[rehypeKatex]}
|
||||||
|
>
|
||||||
{children}
|
{children}
|
||||||
</ReactMarkdown>
|
</ReactMarkdown>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
import { TextField } from '@mui/material';
|
import { TextField } from '@mui/material';
|
||||||
import { DatePicker } from '@mui/x-date-pickers';
|
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
|
||||||
import dayjs from 'dayjs';
|
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';
|
||||||
|
|
||||||
@ -58,12 +57,13 @@ const ResumeInput: React.FC<Props> = ({ type = 'text', label, path, className, m
|
|||||||
<DatePicker
|
<DatePicker
|
||||||
openTo="year"
|
openTo="year"
|
||||||
label={label}
|
label={label}
|
||||||
value={value}
|
value={dayjs(value)}
|
||||||
views={['year', 'month', 'day']}
|
views={['year', 'month', 'day']}
|
||||||
renderInput={(params) => <TextField {...params} error={false} className={className} />}
|
slots={{
|
||||||
onChange={(date: Date | null, keyboardInputValue: string | undefined) => {
|
textField: (params) => <TextField {...params} error={false} className={className} />,
|
||||||
isEmpty(keyboardInputValue) && onChangeValue('');
|
}}
|
||||||
date && dayjs(date).utc().isValid() && onChangeValue(dayjs(date).utc().toISOString());
|
onChange={(date: dayjs.Dayjs | null) => {
|
||||||
|
date && dayjs(date).isValid() && onChangeValue(dayjs(date).format('YYYY-MM-DD'));
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -13,7 +13,7 @@ export const languages: Language[] = [
|
|||||||
{ code: 'ca', name: 'Catalan', localName: 'Valencian' },
|
{ code: 'ca', name: 'Catalan', localName: 'Valencian' },
|
||||||
{ code: 'cs', name: 'Czech', localName: 'čeština' },
|
{ 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 Formell / Sie' },
|
||||||
{ code: 'el', name: 'Greek', localName: 'Ελληνικά' },
|
{ 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' },
|
||||||
@ -37,6 +37,7 @@ export const languages: Language[] = [
|
|||||||
{ code: 'or', name: 'Odia', localName: 'ଓଡ଼ିଆ' },
|
{ code: 'or', name: 'Odia', localName: 'ଓଡ଼ିଆ' },
|
||||||
{ 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: 'pt-BR', name: 'Brazilian Portuguese', localName: 'Brasil' },
|
||||||
{ code: 'ro', name: 'Romanian', localName: 'limba română' },
|
{ code: 'ro', name: 'Romanian', localName: 'limba română' },
|
||||||
{ code: 'ru', name: 'Russian', localName: 'русский' },
|
{ code: 'ru', name: 'Russian', localName: 'русский' },
|
||||||
{ code: 'sr', name: 'Serbian', localName: 'српски језик' },
|
{ code: 'sr', name: 'Serbian', localName: 'српски језик' },
|
||||||
|
|||||||
@ -13,6 +13,11 @@ export const DOCS_URL = 'https://docs.rxresu.me';
|
|||||||
export const DONATION_URL = 'https://paypal.me/RajaRajanA';
|
export const DONATION_URL = 'https://paypal.me/RajaRajanA';
|
||||||
export const TRANSLATE_URL = 'https://translate.rxresu.me/';
|
export const TRANSLATE_URL = 'https://translate.rxresu.me/';
|
||||||
export const DIGITALOCEAN_URL = 'https://pillai.xyz/digitalocean';
|
export const DIGITALOCEAN_URL = 'https://pillai.xyz/digitalocean';
|
||||||
|
export const REDDIT_URL = 'https://www.reddit.com/r/reactiveresume/';
|
||||||
export const GITHUB_URL = 'https://github.com/AmruthPillai/Reactive-Resume';
|
export const GITHUB_URL = 'https://github.com/AmruthPillai/Reactive-Resume';
|
||||||
export const PRODUCT_HUNT_URL = 'https://www.producthunt.com/posts/reactive-resume-v3';
|
export const PRODUCT_HUNT_URL = 'https://www.producthunt.com/posts/reactive-resume-v3';
|
||||||
export const GITHUB_ISSUES_URL = 'https://github.com/AmruthPillai/Reactive-Resume/issues/new/choose';
|
export const GITHUB_ISSUES_URL = 'https://github.com/AmruthPillai/Reactive-Resume/issues/new/choose';
|
||||||
|
|
||||||
|
// Default Error Message
|
||||||
|
export const DEFAULT_ERROR_MESSAGE =
|
||||||
|
'Something went wrong while performing this action, please report this issue on GitHub.';
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import { Login, Visibility, VisibilityOff } from '@mui/icons-material';
|
|||||||
import { Button, IconButton, InputAdornment, TextField } from '@mui/material';
|
import { Button, IconButton, InputAdornment, TextField } from '@mui/material';
|
||||||
import { CredentialResponse, GoogleLogin } from '@react-oauth/google';
|
import { CredentialResponse, GoogleLogin } from '@react-oauth/google';
|
||||||
import Joi from 'joi';
|
import Joi from 'joi';
|
||||||
import { isEmpty } from 'lodash';
|
import isEmpty from 'lodash/isEmpty';
|
||||||
import { Trans, useTranslation } from 'next-i18next';
|
import { Trans, useTranslation } from 'next-i18next';
|
||||||
import { useMemo, useState } from 'react';
|
import { useMemo, useState } from 'react';
|
||||||
import { Controller, useForm } from 'react-hook-form';
|
import { Controller, useForm } from 'react-hook-form';
|
||||||
@ -62,14 +62,7 @@ const LoginModal: React.FC = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const onSubmit = async ({ identifier, password }: FormData) => {
|
const onSubmit = async ({ identifier, password }: FormData) => {
|
||||||
await loginMutation(
|
await loginMutation({ identifier, password });
|
||||||
{ identifier, password },
|
|
||||||
{
|
|
||||||
onError: (error) => {
|
|
||||||
toast.error(error.message);
|
|
||||||
},
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
handleClose();
|
handleClose();
|
||||||
};
|
};
|
||||||
@ -86,14 +79,14 @@ const LoginModal: React.FC = () => {
|
|||||||
|
|
||||||
const handleLoginWithGoogle = async (response: CredentialResponse) => {
|
const handleLoginWithGoogle = async (response: CredentialResponse) => {
|
||||||
if (response.credential) {
|
if (response.credential) {
|
||||||
await loginWithGoogleMutation({ credential: response.credential }, { onError: handleLoginWithGoogleError });
|
await loginWithGoogleMutation({ credential: response.credential }, { onError: handleGoogleLoginError });
|
||||||
|
|
||||||
handleClose();
|
handleClose();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleLoginWithGoogleError = () => {
|
const handleGoogleLoginError = () => {
|
||||||
toast("Please try logging in using email/password, or use another browser that supports Google's One Tap API.");
|
toast.error("Google doesn't seem to be responding, please try logging in using email/password instead.");
|
||||||
};
|
};
|
||||||
|
|
||||||
const PasswordVisibility = (): React.ReactElement => {
|
const PasswordVisibility = (): React.ReactElement => {
|
||||||
@ -117,7 +110,7 @@ const LoginModal: React.FC = () => {
|
|||||||
footerChildren={
|
footerChildren={
|
||||||
<div className="flex gap-4">
|
<div className="flex gap-4">
|
||||||
{!isEmpty(env('GOOGLE_CLIENT_ID')) && (
|
{!isEmpty(env('GOOGLE_CLIENT_ID')) && (
|
||||||
<GoogleLogin onSuccess={handleLoginWithGoogle} onError={handleLoginWithGoogleError} />
|
<GoogleLogin onSuccess={handleLoginWithGoogle} onError={handleGoogleLoginError} />
|
||||||
)}
|
)}
|
||||||
|
|
||||||
<Button type="submit" onClick={handleSubmit(onSubmit)} disabled={isLoading}>
|
<Button type="submit" onClick={handleSubmit(onSubmit)} disabled={isLoading}>
|
||||||
@ -169,7 +162,7 @@ const LoginModal: React.FC = () => {
|
|||||||
|
|
||||||
<p className="text-xs">
|
<p className="text-xs">
|
||||||
<Trans t={t} i18nKey="modals.auth.login.recover-text">
|
<Trans t={t} i18nKey="modals.auth.login.recover-text">
|
||||||
In case you have forgotten your password, you can{' '}
|
In case you have forgotten your password, you can
|
||||||
<a onClick={handleRecoverAccount}>recover your account here.</a>
|
<a onClick={handleRecoverAccount}>recover your account here.</a>
|
||||||
</Trans>
|
</Trans>
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import { HowToReg } from '@mui/icons-material';
|
|||||||
import { Button, TextField } from '@mui/material';
|
import { Button, TextField } from '@mui/material';
|
||||||
import { CredentialResponse, GoogleLogin } from '@react-oauth/google';
|
import { CredentialResponse, GoogleLogin } from '@react-oauth/google';
|
||||||
import Joi from 'joi';
|
import Joi from 'joi';
|
||||||
import { isEmpty } from 'lodash';
|
import isEmpty from 'lodash/isEmpty';
|
||||||
import { Trans, useTranslation } from 'next-i18next';
|
import { Trans, useTranslation } from 'next-i18next';
|
||||||
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';
|
||||||
@ -81,14 +81,14 @@ const RegisterModal: React.FC = () => {
|
|||||||
|
|
||||||
const handleLoginWithGoogle = async (response: CredentialResponse) => {
|
const handleLoginWithGoogle = async (response: CredentialResponse) => {
|
||||||
if (response.credential) {
|
if (response.credential) {
|
||||||
await loginWithGoogleMutation({ credential: response.credential }, { onError: handleLoginWithGoogleError });
|
await loginWithGoogleMutation({ credential: response.credential }, { onError: handleGoogleLoginError });
|
||||||
|
|
||||||
handleClose();
|
handleClose();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleLoginWithGoogleError = () => {
|
const handleGoogleLoginError = () => {
|
||||||
toast("Please try logging in using email/password, or use another browser that supports Google's One Tap API.");
|
toast("Google doesn't seem to be responding, please try logging in using email/password instead.");
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -100,7 +100,7 @@ const RegisterModal: React.FC = () => {
|
|||||||
footerChildren={
|
footerChildren={
|
||||||
<div className="flex gap-4">
|
<div className="flex gap-4">
|
||||||
{!isEmpty(env('GOOGLE_CLIENT_ID')) && (
|
{!isEmpty(env('GOOGLE_CLIENT_ID')) && (
|
||||||
<GoogleLogin onSuccess={handleLoginWithGoogle} onError={handleLoginWithGoogleError} />
|
<GoogleLogin onSuccess={handleLoginWithGoogle} onError={handleGoogleLoginError} />
|
||||||
)}
|
)}
|
||||||
|
|
||||||
<Button type="submit" onClick={handleSubmit(onSubmit)} disabled={isLoading}>
|
<Button type="submit" onClick={handleSubmit(onSubmit)} disabled={isLoading}>
|
||||||
|
|||||||
161
client/modals/auth/UserProfileModal.tsx
Normal file
161
client/modals/auth/UserProfileModal.tsx
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
import { joiResolver } from '@hookform/resolvers/joi';
|
||||||
|
import { CrisisAlert, ManageAccounts } from '@mui/icons-material';
|
||||||
|
import { Button, Divider, TextField } from '@mui/material';
|
||||||
|
import Joi from 'joi';
|
||||||
|
import { useRouter } from 'next/router';
|
||||||
|
import { Trans, useTranslation } from 'next-i18next';
|
||||||
|
import { useEffect, useMemo, useState } from 'react';
|
||||||
|
import { Controller, useForm } from 'react-hook-form';
|
||||||
|
import { useMutation } from 'react-query';
|
||||||
|
|
||||||
|
import Avatar from '@/components/shared/Avatar';
|
||||||
|
import BaseModal from '@/components/shared/BaseModal';
|
||||||
|
import { deleteAccount, updateProfile, UpdateProfileParams } from '@/services/auth';
|
||||||
|
import { ServerError } from '@/services/axios';
|
||||||
|
import { useAppDispatch, useAppSelector } from '@/store/hooks';
|
||||||
|
import { setModalState } from '@/store/modal/modalSlice';
|
||||||
|
|
||||||
|
type FormData = {
|
||||||
|
name: string;
|
||||||
|
email: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
const defaultState: FormData = {
|
||||||
|
name: '',
|
||||||
|
email: '',
|
||||||
|
};
|
||||||
|
|
||||||
|
const schema = Joi.object({
|
||||||
|
name: Joi.string().required(),
|
||||||
|
email: Joi.string()
|
||||||
|
.email({ tlds: { allow: false } })
|
||||||
|
.required(),
|
||||||
|
});
|
||||||
|
|
||||||
|
const UserProfileModal = () => {
|
||||||
|
const router = useRouter();
|
||||||
|
|
||||||
|
const { t } = useTranslation();
|
||||||
|
|
||||||
|
const dispatch = useAppDispatch();
|
||||||
|
|
||||||
|
const [deleteText, setDeleteText] = useState<string>('');
|
||||||
|
const isDeleteTextValid = useMemo(() => deleteText.toLowerCase() === 'delete', [deleteText]);
|
||||||
|
|
||||||
|
const user = useAppSelector((state) => state.auth.user);
|
||||||
|
const { open: isOpen } = useAppSelector((state) => state.modal['auth.profile']);
|
||||||
|
|
||||||
|
const { mutateAsync: deleteAccountMutation } = useMutation<void, ServerError>(deleteAccount);
|
||||||
|
const { mutateAsync: updateProfileMutation } = useMutation<void, ServerError, UpdateProfileParams>(updateProfile);
|
||||||
|
|
||||||
|
const { reset, getFieldState, control, handleSubmit } = useForm<FormData>({
|
||||||
|
defaultValues: defaultState,
|
||||||
|
resolver: joiResolver(schema),
|
||||||
|
});
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (user && !getFieldState('name').isTouched && !getFieldState('email').isTouched) {
|
||||||
|
reset({ name: user.name, email: user.email });
|
||||||
|
}
|
||||||
|
}, [user]);
|
||||||
|
|
||||||
|
const handleClose = () => {
|
||||||
|
dispatch(setModalState({ modal: 'auth.profile', state: { open: false } }));
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleUpdate = handleSubmit(async (data) => {
|
||||||
|
handleClose();
|
||||||
|
await updateProfileMutation({ name: data.name });
|
||||||
|
});
|
||||||
|
|
||||||
|
const handleDelete = async () => {
|
||||||
|
await deleteAccountMutation();
|
||||||
|
handleClose();
|
||||||
|
|
||||||
|
router.push('/');
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<BaseModal isOpen={isOpen} handleClose={handleClose} heading="Your Account" icon={<ManageAccounts />}>
|
||||||
|
<div className="grid gap-4">
|
||||||
|
<form className="grid gap-4 xl:w-2/3">
|
||||||
|
<div className="flex items-center gap-4">
|
||||||
|
<Avatar interactive={false} />
|
||||||
|
|
||||||
|
<div className="grid flex-1 gap-1.5">
|
||||||
|
<Controller
|
||||||
|
name="name"
|
||||||
|
control={control}
|
||||||
|
render={({ field, fieldState }) => (
|
||||||
|
<TextField
|
||||||
|
autoFocus
|
||||||
|
label={t<string>('modals.auth.profile.form.name.label')}
|
||||||
|
error={!!fieldState.error}
|
||||||
|
helperText={fieldState.error?.message}
|
||||||
|
{...field}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<p className="pl-4 text-[10.25px] opacity-50">
|
||||||
|
<Trans t={t} i18nKey="modals.auth.profile.form.avatar.help-text">
|
||||||
|
You can update your profile picture on{' '}
|
||||||
|
<a href="https://gravatar.com/" target="_blank" rel="noreferrer">
|
||||||
|
Gravatar
|
||||||
|
</a>
|
||||||
|
</Trans>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<Controller
|
||||||
|
name="email"
|
||||||
|
control={control}
|
||||||
|
render={({ field, fieldState }) => (
|
||||||
|
<TextField
|
||||||
|
disabled
|
||||||
|
label={t<string>('modals.auth.profile.form.email.label')}
|
||||||
|
error={!!fieldState.error}
|
||||||
|
helperText={t<string>('modals.auth.profile.form.email.help-text')}
|
||||||
|
{...field}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<Button onClick={handleUpdate}>{t<string>('modals.auth.profile.actions.save')}</Button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<div className="my-2">
|
||||||
|
<Divider />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="flex items-center gap-2">
|
||||||
|
<CrisisAlert />
|
||||||
|
<h5 className="font-medium">{t<string>('modals.auth.profile.delete-account.heading')}</h5>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p className="text-xs opacity-75">
|
||||||
|
{t<string>('modals.auth.profile.delete-account.body', { keyword: 'delete' })}
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div className="flex max-w-xs flex-col gap-4">
|
||||||
|
<TextField
|
||||||
|
value={deleteText}
|
||||||
|
placeholder="Type 'delete' to confirm"
|
||||||
|
onChange={(e) => setDeleteText(e.target.value)}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<Button variant="contained" color="error" disabled={!isDeleteTextValid} onClick={handleDelete}>
|
||||||
|
{t<string>('modals.auth.profile.delete-account.actions.delete')}
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</BaseModal>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default UserProfileModal;
|
||||||
@ -1,7 +1,7 @@
|
|||||||
import { joiResolver } from '@hookform/resolvers/joi';
|
import { joiResolver } from '@hookform/resolvers/joi';
|
||||||
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
|
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
|
||||||
import { Button, TextField } from '@mui/material';
|
import { Button, TextField } from '@mui/material';
|
||||||
import { DatePicker } from '@mui/x-date-pickers';
|
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
|
||||||
import { Award, SectionPath } from '@reactive-resume/schema';
|
import { Award, SectionPath } from '@reactive-resume/schema';
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import Joi from 'joi';
|
import Joi from 'joi';
|
||||||
@ -128,21 +128,23 @@ const AwardModal: React.FC = () => {
|
|||||||
control={control}
|
control={control}
|
||||||
render={({ field, fieldState }) => (
|
render={({ field, fieldState }) => (
|
||||||
<DatePicker
|
<DatePicker
|
||||||
{...field}
|
|
||||||
openTo="year"
|
openTo="year"
|
||||||
|
inputRef={field.ref}
|
||||||
label={t<string>('builder.common.form.date.label')}
|
label={t<string>('builder.common.form.date.label')}
|
||||||
|
value={dayjs(field.value)}
|
||||||
views={['year', 'month', 'day']}
|
views={['year', 'month', 'day']}
|
||||||
onChange={(date: Date | null, keyboardInputValue: string | undefined) => {
|
slots={{
|
||||||
isEmpty(keyboardInputValue) && field.onChange('');
|
textField: (params) => (
|
||||||
date && dayjs(date).utc().isValid() && field.onChange(dayjs(date).utc().toISOString());
|
<TextField
|
||||||
|
{...params}
|
||||||
|
error={!!fieldState.error}
|
||||||
|
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
||||||
|
/>
|
||||||
|
),
|
||||||
|
}}
|
||||||
|
onChange={(date: dayjs.Dayjs | null) => {
|
||||||
|
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
|
||||||
}}
|
}}
|
||||||
renderInput={(params) => (
|
|
||||||
<TextField
|
|
||||||
{...params}
|
|
||||||
error={!!fieldState.error}
|
|
||||||
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { joiResolver } from '@hookform/resolvers/joi';
|
import { joiResolver } from '@hookform/resolvers/joi';
|
||||||
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
|
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
|
||||||
import { Button, TextField } from '@mui/material';
|
import { Button, TextField } from '@mui/material';
|
||||||
import { DatePicker } from '@mui/x-date-pickers';
|
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
|
||||||
import { Certificate, SectionPath } from '@reactive-resume/schema';
|
import { Certificate, SectionPath } from '@reactive-resume/schema';
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import Joi from 'joi';
|
import Joi from 'joi';
|
||||||
@ -128,21 +128,23 @@ const CertificateModal: React.FC = () => {
|
|||||||
control={control}
|
control={control}
|
||||||
render={({ field, fieldState }) => (
|
render={({ field, fieldState }) => (
|
||||||
<DatePicker
|
<DatePicker
|
||||||
{...field}
|
|
||||||
openTo="year"
|
openTo="year"
|
||||||
|
inputRef={field.ref}
|
||||||
label={t<string>('builder.common.form.date.label')}
|
label={t<string>('builder.common.form.date.label')}
|
||||||
|
value={dayjs(field.value)}
|
||||||
views={['year', 'month', 'day']}
|
views={['year', 'month', 'day']}
|
||||||
onChange={(date: Date | null, keyboardInputValue: string | undefined) => {
|
slots={{
|
||||||
isEmpty(keyboardInputValue) && field.onChange('');
|
textField: (params) => (
|
||||||
date && dayjs(date).utc().isValid() && field.onChange(dayjs(date).utc().toISOString());
|
<TextField
|
||||||
|
{...params}
|
||||||
|
error={!!fieldState.error}
|
||||||
|
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
||||||
|
/>
|
||||||
|
),
|
||||||
|
}}
|
||||||
|
onChange={(date: dayjs.Dayjs | null) => {
|
||||||
|
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
|
||||||
}}
|
}}
|
||||||
renderInput={(params) => (
|
|
||||||
<TextField
|
|
||||||
{...params}
|
|
||||||
error={!!fieldState.error}
|
|
||||||
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { joiResolver } from '@hookform/resolvers/joi';
|
import { joiResolver } from '@hookform/resolvers/joi';
|
||||||
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
|
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
|
||||||
import { Button, Slider, TextField } from '@mui/material';
|
import { Button, Slider, TextField } from '@mui/material';
|
||||||
import { DatePicker } from '@mui/x-date-pickers';
|
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
|
||||||
import { Custom } from '@reactive-resume/schema';
|
import { Custom } from '@reactive-resume/schema';
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import Joi from 'joi';
|
import Joi from 'joi';
|
||||||
@ -145,21 +145,23 @@ const CustomModal: React.FC = () => {
|
|||||||
control={control}
|
control={control}
|
||||||
render={({ field, fieldState }) => (
|
render={({ field, fieldState }) => (
|
||||||
<DatePicker
|
<DatePicker
|
||||||
{...field}
|
|
||||||
openTo="year"
|
openTo="year"
|
||||||
|
inputRef={field.ref}
|
||||||
label={t<string>('builder.common.form.start-date.label')}
|
label={t<string>('builder.common.form.start-date.label')}
|
||||||
|
value={dayjs(field.value)}
|
||||||
views={['year', 'month', 'day']}
|
views={['year', 'month', 'day']}
|
||||||
onChange={(date: Date | null, keyboardInputValue: string | undefined) => {
|
slots={{
|
||||||
isEmpty(keyboardInputValue) && field.onChange('');
|
textField: (params) => (
|
||||||
date && dayjs(date).utc().isValid() && field.onChange(dayjs(date).utc().toISOString());
|
<TextField
|
||||||
|
{...params}
|
||||||
|
error={!!fieldState.error}
|
||||||
|
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
||||||
|
/>
|
||||||
|
),
|
||||||
|
}}
|
||||||
|
onChange={(date: dayjs.Dayjs | null) => {
|
||||||
|
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
|
||||||
}}
|
}}
|
||||||
renderInput={(params) => (
|
|
||||||
<TextField
|
|
||||||
{...params}
|
|
||||||
error={!!fieldState.error}
|
|
||||||
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
@ -169,21 +171,23 @@ const CustomModal: React.FC = () => {
|
|||||||
control={control}
|
control={control}
|
||||||
render={({ field, fieldState }) => (
|
render={({ field, fieldState }) => (
|
||||||
<DatePicker
|
<DatePicker
|
||||||
{...field}
|
|
||||||
openTo="year"
|
openTo="year"
|
||||||
|
inputRef={field.ref}
|
||||||
label={t<string>('builder.common.form.end-date.label')}
|
label={t<string>('builder.common.form.end-date.label')}
|
||||||
|
value={dayjs(field.value)}
|
||||||
views={['year', 'month', 'day']}
|
views={['year', 'month', 'day']}
|
||||||
onChange={(date: Date | null, keyboardInputValue: string | undefined) => {
|
slots={{
|
||||||
isEmpty(keyboardInputValue) && field.onChange('');
|
textField: (params) => (
|
||||||
date && dayjs(date).utc().isValid() && field.onChange(dayjs(date).utc().toISOString());
|
<TextField
|
||||||
|
{...params}
|
||||||
|
error={!!fieldState.error}
|
||||||
|
helperText={fieldState.error?.message || t<string>('builder.common.form.end-date.help-text')}
|
||||||
|
/>
|
||||||
|
),
|
||||||
|
}}
|
||||||
|
onChange={(date: dayjs.Dayjs | null) => {
|
||||||
|
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
|
||||||
}}
|
}}
|
||||||
renderInput={(params) => (
|
|
||||||
<TextField
|
|
||||||
{...params}
|
|
||||||
error={!!fieldState.error}
|
|
||||||
helperText={fieldState.error?.message || 'Leave this field blank, if still present'}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { joiResolver } from '@hookform/resolvers/joi';
|
import { joiResolver } from '@hookform/resolvers/joi';
|
||||||
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
|
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
|
||||||
import { Button, TextField } from '@mui/material';
|
import { Button, TextField } from '@mui/material';
|
||||||
import { DatePicker } from '@mui/x-date-pickers';
|
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
|
||||||
import { Education, SectionPath } from '@reactive-resume/schema';
|
import { Education, SectionPath } from '@reactive-resume/schema';
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import Joi from 'joi';
|
import Joi from 'joi';
|
||||||
@ -167,21 +167,23 @@ const EducationModal: React.FC = () => {
|
|||||||
control={control}
|
control={control}
|
||||||
render={({ field, fieldState }) => (
|
render={({ field, fieldState }) => (
|
||||||
<DatePicker
|
<DatePicker
|
||||||
{...field}
|
|
||||||
openTo="year"
|
openTo="year"
|
||||||
|
inputRef={field.ref}
|
||||||
label={t<string>('builder.common.form.start-date.label')}
|
label={t<string>('builder.common.form.start-date.label')}
|
||||||
|
value={dayjs(field.value)}
|
||||||
views={['year', 'month', 'day']}
|
views={['year', 'month', 'day']}
|
||||||
onChange={(date: Date | null, keyboardInputValue: string | undefined) => {
|
slots={{
|
||||||
isEmpty(keyboardInputValue) && field.onChange('');
|
textField: (params) => (
|
||||||
date && dayjs(date).utc().isValid() && field.onChange(dayjs(date).utc().toISOString());
|
<TextField
|
||||||
|
{...params}
|
||||||
|
error={!!fieldState.error}
|
||||||
|
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
||||||
|
/>
|
||||||
|
),
|
||||||
|
}}
|
||||||
|
onChange={(date: dayjs.Dayjs | null) => {
|
||||||
|
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
|
||||||
}}
|
}}
|
||||||
renderInput={(params) => (
|
|
||||||
<TextField
|
|
||||||
{...params}
|
|
||||||
error={!!fieldState.error}
|
|
||||||
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
@ -191,21 +193,23 @@ const EducationModal: React.FC = () => {
|
|||||||
control={control}
|
control={control}
|
||||||
render={({ field, fieldState }) => (
|
render={({ field, fieldState }) => (
|
||||||
<DatePicker
|
<DatePicker
|
||||||
{...field}
|
|
||||||
openTo="year"
|
openTo="year"
|
||||||
|
inputRef={field.ref}
|
||||||
label={t<string>('builder.common.form.end-date.label')}
|
label={t<string>('builder.common.form.end-date.label')}
|
||||||
|
value={dayjs(field.value)}
|
||||||
views={['year', 'month', 'day']}
|
views={['year', 'month', 'day']}
|
||||||
onChange={(date: Date | null, keyboardInputValue: string | undefined) => {
|
slots={{
|
||||||
isEmpty(keyboardInputValue) && field.onChange('');
|
textField: (params) => (
|
||||||
date && dayjs(date).utc().isValid() && field.onChange(dayjs(date).utc().toISOString());
|
<TextField
|
||||||
|
{...params}
|
||||||
|
error={!!fieldState.error}
|
||||||
|
helperText={fieldState.error?.message || t<string>('builder.common.form.end-date.help-text')}
|
||||||
|
/>
|
||||||
|
),
|
||||||
|
}}
|
||||||
|
onChange={(date: dayjs.Dayjs | null) => {
|
||||||
|
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
|
||||||
}}
|
}}
|
||||||
renderInput={(params) => (
|
|
||||||
<TextField
|
|
||||||
{...params}
|
|
||||||
error={!!fieldState.error}
|
|
||||||
helperText={fieldState.error?.message || t<string>('builder.common.form.end-date.help-text')}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { joiResolver } from '@hookform/resolvers/joi';
|
import { joiResolver } from '@hookform/resolvers/joi';
|
||||||
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
|
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
|
||||||
import { Button, TextField } from '@mui/material';
|
import { Button, TextField } from '@mui/material';
|
||||||
import { DatePicker } from '@mui/x-date-pickers';
|
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
|
||||||
import { Project, SectionPath } from '@reactive-resume/schema';
|
import { Project, SectionPath } from '@reactive-resume/schema';
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import Joi from 'joi';
|
import Joi from 'joi';
|
||||||
@ -137,21 +137,23 @@ const ProjectModal: React.FC = () => {
|
|||||||
control={control}
|
control={control}
|
||||||
render={({ field, fieldState }) => (
|
render={({ field, fieldState }) => (
|
||||||
<DatePicker
|
<DatePicker
|
||||||
{...field}
|
|
||||||
openTo="year"
|
openTo="year"
|
||||||
|
inputRef={field.ref}
|
||||||
label={t<string>('builder.common.form.start-date.label')}
|
label={t<string>('builder.common.form.start-date.label')}
|
||||||
|
value={dayjs(field.value)}
|
||||||
views={['year', 'month', 'day']}
|
views={['year', 'month', 'day']}
|
||||||
onChange={(date: Date | null, keyboardInputValue: string | undefined) => {
|
slots={{
|
||||||
isEmpty(keyboardInputValue) && field.onChange('');
|
textField: (params) => (
|
||||||
date && dayjs(date).utc().isValid() && field.onChange(dayjs(date).utc().toISOString());
|
<TextField
|
||||||
|
{...params}
|
||||||
|
error={!!fieldState.error}
|
||||||
|
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
||||||
|
/>
|
||||||
|
),
|
||||||
|
}}
|
||||||
|
onChange={(date: dayjs.Dayjs | null) => {
|
||||||
|
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
|
||||||
}}
|
}}
|
||||||
renderInput={(params) => (
|
|
||||||
<TextField
|
|
||||||
{...params}
|
|
||||||
error={!!fieldState.error}
|
|
||||||
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
@ -161,21 +163,23 @@ const ProjectModal: React.FC = () => {
|
|||||||
control={control}
|
control={control}
|
||||||
render={({ field, fieldState }) => (
|
render={({ field, fieldState }) => (
|
||||||
<DatePicker
|
<DatePicker
|
||||||
{...field}
|
|
||||||
openTo="year"
|
openTo="year"
|
||||||
|
inputRef={field.ref}
|
||||||
label={t<string>('builder.common.form.end-date.label')}
|
label={t<string>('builder.common.form.end-date.label')}
|
||||||
|
value={dayjs(field.value)}
|
||||||
views={['year', 'month', 'day']}
|
views={['year', 'month', 'day']}
|
||||||
onChange={(date: Date | null, keyboardInputValue: string | undefined) => {
|
slots={{
|
||||||
isEmpty(keyboardInputValue) && field.onChange('');
|
textField: (params) => (
|
||||||
date && dayjs(date).utc().isValid() && field.onChange(dayjs(date).utc().toISOString());
|
<TextField
|
||||||
|
{...params}
|
||||||
|
error={!!fieldState.error}
|
||||||
|
helperText={fieldState.error?.message || t<string>('builder.common.form.end-date.help-text')}
|
||||||
|
/>
|
||||||
|
),
|
||||||
|
}}
|
||||||
|
onChange={(date: dayjs.Dayjs | null) => {
|
||||||
|
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
|
||||||
}}
|
}}
|
||||||
renderInput={(params) => (
|
|
||||||
<TextField
|
|
||||||
{...params}
|
|
||||||
error={!!fieldState.error}
|
|
||||||
helperText={fieldState.error?.message || 'Leave this field blank, if still present'}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { joiResolver } from '@hookform/resolvers/joi';
|
import { joiResolver } from '@hookform/resolvers/joi';
|
||||||
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
|
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
|
||||||
import { Button, TextField } from '@mui/material';
|
import { Button, TextField } from '@mui/material';
|
||||||
import { DatePicker } from '@mui/x-date-pickers';
|
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
|
||||||
import { Publication, SectionPath } from '@reactive-resume/schema';
|
import { Publication, SectionPath } from '@reactive-resume/schema';
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import Joi from 'joi';
|
import Joi from 'joi';
|
||||||
@ -128,21 +128,23 @@ const PublicationModal: React.FC = () => {
|
|||||||
control={control}
|
control={control}
|
||||||
render={({ field, fieldState }) => (
|
render={({ field, fieldState }) => (
|
||||||
<DatePicker
|
<DatePicker
|
||||||
{...field}
|
|
||||||
openTo="year"
|
openTo="year"
|
||||||
|
inputRef={field.ref}
|
||||||
label={t<string>('builder.common.form.date.label')}
|
label={t<string>('builder.common.form.date.label')}
|
||||||
|
value={dayjs(field.value)}
|
||||||
views={['year', 'month', 'day']}
|
views={['year', 'month', 'day']}
|
||||||
onChange={(date: Date | null, keyboardInputValue: string | undefined) => {
|
slots={{
|
||||||
isEmpty(keyboardInputValue) && field.onChange('');
|
textField: (params) => (
|
||||||
date && dayjs(date).utc().isValid() && field.onChange(dayjs(date).utc().toISOString());
|
<TextField
|
||||||
|
{...params}
|
||||||
|
error={!!fieldState.error}
|
||||||
|
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
||||||
|
/>
|
||||||
|
),
|
||||||
|
}}
|
||||||
|
onChange={(date: dayjs.Dayjs | null) => {
|
||||||
|
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
|
||||||
}}
|
}}
|
||||||
renderInput={(params) => (
|
|
||||||
<TextField
|
|
||||||
{...params}
|
|
||||||
error={!!fieldState.error}
|
|
||||||
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { joiResolver } from '@hookform/resolvers/joi';
|
import { joiResolver } from '@hookform/resolvers/joi';
|
||||||
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
|
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
|
||||||
import { Button, TextField } from '@mui/material';
|
import { Button, TextField } from '@mui/material';
|
||||||
import { DatePicker } from '@mui/x-date-pickers';
|
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
|
||||||
import { SectionPath, Volunteer } from '@reactive-resume/schema';
|
import { SectionPath, Volunteer } from '@reactive-resume/schema';
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import Joi from 'joi';
|
import Joi from 'joi';
|
||||||
@ -134,21 +134,23 @@ const VolunteerModal: React.FC = () => {
|
|||||||
control={control}
|
control={control}
|
||||||
render={({ field, fieldState }) => (
|
render={({ field, fieldState }) => (
|
||||||
<DatePicker
|
<DatePicker
|
||||||
{...field}
|
|
||||||
openTo="year"
|
openTo="year"
|
||||||
|
inputRef={field.ref}
|
||||||
label={t<string>('builder.common.form.start-date.label')}
|
label={t<string>('builder.common.form.start-date.label')}
|
||||||
|
value={dayjs(field.value)}
|
||||||
views={['year', 'month', 'day']}
|
views={['year', 'month', 'day']}
|
||||||
onChange={(date: Date | null, keyboardInputValue: string | undefined) => {
|
slots={{
|
||||||
isEmpty(keyboardInputValue) && field.onChange('');
|
textField: (params) => (
|
||||||
date && dayjs(date).utc().isValid() && field.onChange(dayjs(date).utc().toISOString());
|
<TextField
|
||||||
|
{...params}
|
||||||
|
error={!!fieldState.error}
|
||||||
|
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
||||||
|
/>
|
||||||
|
),
|
||||||
|
}}
|
||||||
|
onChange={(date: dayjs.Dayjs | null) => {
|
||||||
|
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
|
||||||
}}
|
}}
|
||||||
renderInput={(params) => (
|
|
||||||
<TextField
|
|
||||||
{...params}
|
|
||||||
error={!!fieldState.error}
|
|
||||||
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
@ -158,21 +160,23 @@ const VolunteerModal: React.FC = () => {
|
|||||||
control={control}
|
control={control}
|
||||||
render={({ field, fieldState }) => (
|
render={({ field, fieldState }) => (
|
||||||
<DatePicker
|
<DatePicker
|
||||||
{...field}
|
|
||||||
openTo="year"
|
openTo="year"
|
||||||
|
inputRef={field.ref}
|
||||||
label={t<string>('builder.common.form.end-date.label')}
|
label={t<string>('builder.common.form.end-date.label')}
|
||||||
|
value={dayjs(field.value)}
|
||||||
views={['year', 'month', 'day']}
|
views={['year', 'month', 'day']}
|
||||||
onChange={(date: Date | null, keyboardInputValue: string | undefined) => {
|
slots={{
|
||||||
isEmpty(keyboardInputValue) && field.onChange('');
|
textField: (params) => (
|
||||||
date && dayjs(date).utc().isValid() && field.onChange(dayjs(date).utc().toISOString());
|
<TextField
|
||||||
|
{...params}
|
||||||
|
error={!!fieldState.error}
|
||||||
|
helperText={fieldState.error?.message || t<string>('builder.common.form.end-date.help-text')}
|
||||||
|
/>
|
||||||
|
),
|
||||||
|
}}
|
||||||
|
onChange={(date: dayjs.Dayjs | null) => {
|
||||||
|
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
|
||||||
}}
|
}}
|
||||||
renderInput={(params) => (
|
|
||||||
<TextField
|
|
||||||
{...params}
|
|
||||||
error={!!fieldState.error}
|
|
||||||
helperText={fieldState.error?.message || 'Leave this field blank, if still present'}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { joiResolver } from '@hookform/resolvers/joi';
|
import { joiResolver } from '@hookform/resolvers/joi';
|
||||||
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
|
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
|
||||||
import { Button, TextField } from '@mui/material';
|
import { Button, TextField } from '@mui/material';
|
||||||
import { DatePicker } from '@mui/x-date-pickers';
|
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
|
||||||
import { WorkExperience } from '@reactive-resume/schema';
|
import { WorkExperience } from '@reactive-resume/schema';
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import Joi from 'joi';
|
import Joi from 'joi';
|
||||||
@ -56,8 +56,20 @@ const WorkModal: React.FC = () => {
|
|||||||
|
|
||||||
const isEditMode = useMemo(() => !!item, [item]);
|
const isEditMode = useMemo(() => !!item, [item]);
|
||||||
|
|
||||||
const addText = useMemo(() => t<string>('builder.common.actions.add', { token: heading }), [t, heading]);
|
const addText = useMemo(
|
||||||
const editText = useMemo(() => t<string>('builder.common.actions.edit', { token: heading }), [t, heading]);
|
() =>
|
||||||
|
t<string>('builder.common.actions.add', {
|
||||||
|
token: t<string>(`builder.leftSidebar.${path}.heading`, { defaultValue: heading }),
|
||||||
|
}),
|
||||||
|
[t, heading]
|
||||||
|
);
|
||||||
|
const editText = useMemo(
|
||||||
|
() =>
|
||||||
|
t<string>('builder.common.actions.edit', {
|
||||||
|
token: t<string>(`builder.leftSidebar.${path}.heading`, { defaultValue: heading }),
|
||||||
|
}),
|
||||||
|
[t, heading]
|
||||||
|
);
|
||||||
|
|
||||||
const { reset, control, handleSubmit } = useForm<FormData>({
|
const { reset, control, handleSubmit } = useForm<FormData>({
|
||||||
defaultValues: defaultState,
|
defaultValues: defaultState,
|
||||||
@ -107,7 +119,7 @@ const WorkModal: React.FC = () => {
|
|||||||
<TextField
|
<TextField
|
||||||
required
|
required
|
||||||
autoFocus
|
autoFocus
|
||||||
label={t<string>('builder.common.form.name.label')}
|
label={t<string>('builder.leftSidebar.sections.experience.form.name.label')}
|
||||||
error={!!fieldState.error}
|
error={!!fieldState.error}
|
||||||
helperText={fieldState.error?.message}
|
helperText={fieldState.error?.message}
|
||||||
{...field}
|
{...field}
|
||||||
@ -134,21 +146,23 @@ const WorkModal: React.FC = () => {
|
|||||||
control={control}
|
control={control}
|
||||||
render={({ field, fieldState }) => (
|
render={({ field, fieldState }) => (
|
||||||
<DatePicker
|
<DatePicker
|
||||||
{...field}
|
|
||||||
openTo="year"
|
openTo="year"
|
||||||
|
inputRef={field.ref}
|
||||||
label={t<string>('builder.common.form.start-date.label')}
|
label={t<string>('builder.common.form.start-date.label')}
|
||||||
|
value={dayjs(field.value)}
|
||||||
views={['year', 'month', 'day']}
|
views={['year', 'month', 'day']}
|
||||||
onChange={(date: Date | null, keyboardInputValue: string | undefined) => {
|
slots={{
|
||||||
isEmpty(keyboardInputValue) && field.onChange('');
|
textField: (params) => (
|
||||||
date && dayjs(date).utc().isValid() && field.onChange(dayjs(date).utc().toISOString());
|
<TextField
|
||||||
|
{...params}
|
||||||
|
error={!!fieldState.error}
|
||||||
|
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
||||||
|
/>
|
||||||
|
),
|
||||||
|
}}
|
||||||
|
onChange={(date: dayjs.Dayjs | null) => {
|
||||||
|
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
|
||||||
}}
|
}}
|
||||||
renderInput={(params) => (
|
|
||||||
<TextField
|
|
||||||
{...params}
|
|
||||||
error={!!fieldState.error}
|
|
||||||
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
@ -158,21 +172,23 @@ const WorkModal: React.FC = () => {
|
|||||||
control={control}
|
control={control}
|
||||||
render={({ field, fieldState }) => (
|
render={({ field, fieldState }) => (
|
||||||
<DatePicker
|
<DatePicker
|
||||||
{...field}
|
|
||||||
openTo="year"
|
openTo="year"
|
||||||
|
inputRef={field.ref}
|
||||||
label={t<string>('builder.common.form.end-date.label')}
|
label={t<string>('builder.common.form.end-date.label')}
|
||||||
|
value={dayjs(field.value)}
|
||||||
views={['year', 'month', 'day']}
|
views={['year', 'month', 'day']}
|
||||||
onChange={(date: Date | null, keyboardInputValue: string | undefined) => {
|
slots={{
|
||||||
isEmpty(keyboardInputValue) && field.onChange('');
|
textField: (params) => (
|
||||||
date && dayjs(date).utc().isValid() && field.onChange(dayjs(date).utc().toISOString());
|
<TextField
|
||||||
|
{...params}
|
||||||
|
error={!!fieldState.error}
|
||||||
|
helperText={fieldState.error?.message || t<string>('builder.common.form.end-date.help-text')}
|
||||||
|
/>
|
||||||
|
),
|
||||||
|
}}
|
||||||
|
onChange={(date: dayjs.Dayjs | null) => {
|
||||||
|
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
|
||||||
}}
|
}}
|
||||||
renderInput={(params) => (
|
|
||||||
<TextField
|
|
||||||
{...params}
|
|
||||||
error={!!fieldState.error}
|
|
||||||
helperText={fieldState.error?.message || t<string>('builder.common.form.end-date.help-text')}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -6,7 +6,6 @@ import Joi from 'joi';
|
|||||||
import { useTranslation } from 'next-i18next';
|
import { useTranslation } from 'next-i18next';
|
||||||
import { useEffect } from 'react';
|
import { useEffect } from 'react';
|
||||||
import { Controller, useForm } from 'react-hook-form';
|
import { Controller, useForm } from 'react-hook-form';
|
||||||
import toast from 'react-hot-toast';
|
|
||||||
import { useMutation } from 'react-query';
|
import { useMutation } from 'react-query';
|
||||||
|
|
||||||
import BaseModal from '@/components/shared/BaseModal';
|
import BaseModal from '@/components/shared/BaseModal';
|
||||||
@ -66,15 +65,10 @@ const CreateResumeModal: React.FC = () => {
|
|||||||
}, [name, setValue]);
|
}, [name, setValue]);
|
||||||
|
|
||||||
const onSubmit = async ({ name, slug, isPublic }: FormData) => {
|
const onSubmit = async ({ name, slug, isPublic }: FormData) => {
|
||||||
try {
|
await mutateAsync({ name, slug, public: isPublic });
|
||||||
await mutateAsync({ name, slug, public: isPublic });
|
await queryClient.invalidateQueries(RESUMES_QUERY);
|
||||||
|
|
||||||
await queryClient.invalidateQueries(RESUMES_QUERY);
|
handleClose();
|
||||||
|
|
||||||
handleClose();
|
|
||||||
} catch (error: any) {
|
|
||||||
toast.error(error.message);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleClose = () => {
|
const handleClose = () => {
|
||||||
|
|||||||
@ -68,8 +68,8 @@ const ImportExternalModal: React.FC = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
await mutateAsync({ integration, file });
|
await mutateAsync({ integration, file });
|
||||||
|
|
||||||
queryClient.invalidateQueries(RESUMES_QUERY);
|
queryClient.invalidateQueries(RESUMES_QUERY);
|
||||||
|
|
||||||
handleClose();
|
handleClose();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import ForgotPasswordModal from './auth/ForgotPasswordModal';
|
|||||||
import LoginModal from './auth/LoginModal';
|
import LoginModal from './auth/LoginModal';
|
||||||
import RegisterModal from './auth/RegisterModal';
|
import RegisterModal from './auth/RegisterModal';
|
||||||
import ResetPasswordModal from './auth/ResetPasswordModal';
|
import ResetPasswordModal from './auth/ResetPasswordModal';
|
||||||
|
import UserProfileModal from './auth/UserProfileModal';
|
||||||
import AwardModal from './builder/sections/AwardModal';
|
import AwardModal from './builder/sections/AwardModal';
|
||||||
import CertificateModal from './builder/sections/CertificateModal';
|
import CertificateModal from './builder/sections/CertificateModal';
|
||||||
import CustomModal from './builder/sections/CustomModal';
|
import CustomModal from './builder/sections/CustomModal';
|
||||||
@ -49,6 +50,7 @@ const ModalWrapper: React.FC = () => {
|
|||||||
<RegisterModal />
|
<RegisterModal />
|
||||||
<ForgotPasswordModal />
|
<ForgotPasswordModal />
|
||||||
<ResetPasswordModal />
|
<ResetPasswordModal />
|
||||||
|
<UserProfileModal />
|
||||||
|
|
||||||
{/* Dashboard */}
|
{/* Dashboard */}
|
||||||
<CreateResumeModal />
|
<CreateResumeModal />
|
||||||
|
|||||||
@ -35,6 +35,7 @@ const i18nConfig = {
|
|||||||
'or',
|
'or',
|
||||||
'pl',
|
'pl',
|
||||||
'pt',
|
'pt',
|
||||||
|
'pt-BR',
|
||||||
'ro',
|
'ro',
|
||||||
'ru',
|
'ru',
|
||||||
'sr',
|
'sr',
|
||||||
@ -47,6 +48,7 @@ const i18nConfig = {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
nsSeparator: '.',
|
nsSeparator: '.',
|
||||||
|
returnNull: false,
|
||||||
localePath: path.resolve('./public/locales'),
|
localePath: path.resolve('./public/locales'),
|
||||||
ns: ['common', 'modals', 'landing', 'dashboard', 'builder'],
|
ns: ['common', 'modals', 'landing', 'dashboard', 'builder'],
|
||||||
};
|
};
|
||||||
|
|||||||
@ -9,75 +9,74 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@beam-australia/react-env": "^3.1.1",
|
"@beam-australia/react-env": "^3.1.1",
|
||||||
"@date-io/dayjs": "^2.16.0",
|
"@emotion/css": "^11.10.6",
|
||||||
"@emotion/css": "^11.10.5",
|
"@emotion/react": "^11.10.6",
|
||||||
"@emotion/react": "^11.10.5",
|
"@emotion/styled": "^11.10.6",
|
||||||
"@emotion/styled": "^11.10.5",
|
"@hello-pangea/dnd": "^16.2.0",
|
||||||
"@hello-pangea/dnd": "^16.0.1",
|
"@hookform/resolvers": "3.1.0",
|
||||||
"@hookform/resolvers": "2.9.10",
|
"@monaco-editor/react": "^4.5.0",
|
||||||
"@monaco-editor/react": "^4.4.6",
|
"@mui/icons-material": "^5.11.16",
|
||||||
"@mui/icons-material": "^5.10.9",
|
"@mui/lab": "^5.0.0-alpha.127",
|
||||||
"@mui/lab": "^5.0.0-alpha.107",
|
"@mui/material": "^5.12.1",
|
||||||
"@mui/material": "^5.10.13",
|
"@mui/system": "^5.12.1",
|
||||||
"@mui/system": "^5.10.13",
|
"@mui/x-date-pickers": "6.2.1",
|
||||||
"@mui/x-date-pickers": "5.0.8",
|
"@react-oauth/google": "^0.10.0",
|
||||||
"@next/env": "^13.0.3",
|
"@reduxjs/toolkit": "^1.9.5",
|
||||||
"@react-oauth/google": "^0.4.0",
|
"axios": "^1.3.6",
|
||||||
"@reduxjs/toolkit": "^1.9.0",
|
|
||||||
"axios": "^1.1.3",
|
|
||||||
"clsx": "^1.2.1",
|
"clsx": "^1.2.1",
|
||||||
"dayjs": "^1.11.6",
|
"dayjs": "^1.11.7",
|
||||||
"downloadjs": "^1.4.7",
|
"downloadjs": "^1.4.7",
|
||||||
"joi": "^17.7.0",
|
"joi": "^17.9.1",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"md5-hex": "^4.0.0",
|
"md5-hex": "^4.0.0",
|
||||||
"monaco-editor": "^0.34.1",
|
"monaco-editor": "^0.37.1",
|
||||||
"nanoid": "^3.3.4",
|
"nanoid": "3.3.4",
|
||||||
"next": "13.0.3",
|
"next": "13.3.0",
|
||||||
"next-i18next": "^12.1.0",
|
"next-i18next": "^13.2.2",
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
"react-colorful": "^5.6.1",
|
"react-colorful": "^5.6.1",
|
||||||
"react-dnd": "16.0.1",
|
"react-dnd": "16.0.1",
|
||||||
"react-dnd-html5-backend": "16.0.1",
|
"react-dnd-html5-backend": "16.0.1",
|
||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
"react-hook-form": "^7.39.3",
|
"react-hook-form": "^7.43.9",
|
||||||
"react-hot-toast": "2.4.0",
|
"react-hot-toast": "2.4.0",
|
||||||
"react-icons": "^4.6.0",
|
"react-icons": "^4.8.0",
|
||||||
"react-markdown": "^8.0.3",
|
"react-markdown": "^8.0.7",
|
||||||
"react-query": "^3.39.2",
|
"react-query": "^3.39.3",
|
||||||
"react-redux": "^8.0.5",
|
"react-redux": "^8.0.5",
|
||||||
"react-zoom-pan-pinch": "^2.1.3",
|
"react-zoom-pan-pinch": "^3.0.7",
|
||||||
"redux": "^4.2.0",
|
"redux": "^4.2.1",
|
||||||
"redux-persist": "^6.0.0",
|
"redux-persist": "^6.0.0",
|
||||||
"redux-saga": "^1.2.1",
|
"redux-saga": "^1.2.3",
|
||||||
"redux-undo": "^1.0.1",
|
"redux-undo": "^1.0.1",
|
||||||
|
"rehype-katex": "^6.0.2",
|
||||||
"remark-gfm": "^3.0.1",
|
"remark-gfm": "^3.0.1",
|
||||||
"sharp": "^0.31.2",
|
"remark-math": "^5.1.1",
|
||||||
|
"sharp": "^0.32.0",
|
||||||
"uuid": "^9.0.0",
|
"uuid": "^9.0.0",
|
||||||
"webfontloader": "^1.6.28"
|
"webfontloader": "^1.6.28"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.20.2",
|
"@babel/core": "^7.21.4",
|
||||||
"@reactive-resume/schema": "workspace:*",
|
"@reactive-resume/schema": "workspace:*",
|
||||||
"eslint-plugin-unused-imports": "^2.0.0",
|
"@tailwindcss/typography": "^0.5.9",
|
||||||
"@tailwindcss/typography": "^0.5.8",
|
|
||||||
"@types/downloadjs": "^1.4.3",
|
"@types/downloadjs": "^1.4.3",
|
||||||
"@types/lodash": "^4.14.188",
|
"@types/lodash": "^4.14.194",
|
||||||
"@types/node": "^18.11.9",
|
"@types/node": "^18.15.12",
|
||||||
"@types/react": "^18.0.25",
|
"@types/react": "^18.0.37",
|
||||||
"@types/react-dom": "^18.0.8",
|
"@types/react-dom": "^18.0.11",
|
||||||
"@types/react-redux": "^7.1.24",
|
"@types/react-redux": "^7.1.25",
|
||||||
"@types/tailwindcss": "^3.0.11",
|
"@types/uuid": "^9.0.1",
|
||||||
"@types/uuid": "^8.3.4",
|
|
||||||
"@types/webfontloader": "^1.6.35",
|
"@types/webfontloader": "^1.6.35",
|
||||||
"autoprefixer": "^10.4.13",
|
"autoprefixer": "^10.4.14",
|
||||||
"csstype": "^3.1.1",
|
"csstype": "^3.1.2",
|
||||||
"eslint-config-next": "^13.0.3",
|
"eslint-config-next": "^13.3.0",
|
||||||
"eslint-plugin-tailwindcss": "^3.6.2",
|
"eslint-plugin-tailwindcss": "^3.11.0",
|
||||||
"next-sitemap": "^3.1.31",
|
"eslint-plugin-unused-imports": "^2.0.0",
|
||||||
"postcss": "^8.4.19",
|
"next-sitemap": "^4.0.7",
|
||||||
"sass": "^1.56.1",
|
"postcss": "^8.4.23",
|
||||||
"tailwindcss": "^3.2.4",
|
"sass": "^1.62.0",
|
||||||
"typescript": "^4.8.4"
|
"tailwindcss": "^3.3.1",
|
||||||
|
"typescript": "^5.0.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,6 +15,7 @@ import toast from 'react-hot-toast';
|
|||||||
import { useMutation, useQuery } from 'react-query';
|
import { useMutation, useQuery } from 'react-query';
|
||||||
|
|
||||||
import Page from '@/components/build/Center/Page';
|
import Page from '@/components/build/Center/Page';
|
||||||
|
import { DEFAULT_ERROR_MESSAGE } from '@/constants/index';
|
||||||
import { ServerError } from '@/services/axios';
|
import { ServerError } from '@/services/axios';
|
||||||
import { printResumeAsPdf, PrintResumeAsPdfParams } from '@/services/printer';
|
import { printResumeAsPdf, PrintResumeAsPdfParams } from '@/services/printer';
|
||||||
import { fetchResumeByIdentifier } from '@/services/resume';
|
import { fetchResumeByIdentifier } from '@/services/resume';
|
||||||
@ -61,10 +62,12 @@ const Preview: NextPage<Props> = ({ username, slug, resume: initialData }) => {
|
|||||||
}, [dispatch, initialData]);
|
}, [dispatch, initialData]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!isEmpty(resume) && router.locale !== resume.metadata.locale) {
|
const locale = get(resume, 'metadata.locale', 'en');
|
||||||
|
|
||||||
|
if (!isEmpty(resume) && router.locale !== locale) {
|
||||||
const { pathname, asPath, query } = router;
|
const { pathname, asPath, query } = router;
|
||||||
|
|
||||||
router.push({ pathname, query }, asPath, { locale: resume.metadata.locale });
|
router.push({ pathname, query }, asPath, { locale });
|
||||||
}
|
}
|
||||||
}, [resume, router]);
|
}, [resume, router]);
|
||||||
|
|
||||||
@ -103,7 +106,7 @@ const Preview: NextPage<Props> = ({ username, slug, resume: initialData }) => {
|
|||||||
|
|
||||||
download(url);
|
download(url);
|
||||||
} catch {
|
} catch {
|
||||||
toast.error('Something went wrong, please try again later.');
|
toast.error(DEFAULT_ERROR_MESSAGE);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -27,7 +27,7 @@ type Props = {
|
|||||||
|
|
||||||
export const getServerSideProps: GetServerSideProps<Props | Promise<Props>, QueryParams> = async ({
|
export const getServerSideProps: GetServerSideProps<Props | Promise<Props>, QueryParams> = async ({
|
||||||
query,
|
query,
|
||||||
locale,
|
locale = 'en',
|
||||||
}) => {
|
}) => {
|
||||||
const { username, slug, secretKey } = query as QueryParams;
|
const { username, slug, secretKey } = query as QueryParams;
|
||||||
|
|
||||||
@ -35,7 +35,7 @@ export const getServerSideProps: GetServerSideProps<Props | Promise<Props>, Quer
|
|||||||
if (isEmpty(secretKey)) throw new Error('There is no secret key!');
|
if (isEmpty(secretKey)) throw new Error('There is no secret key!');
|
||||||
|
|
||||||
const resume = await fetchResumeByIdentifier({ username, slug, options: { secretKey } });
|
const resume = await fetchResumeByIdentifier({ username, slug, options: { secretKey } });
|
||||||
const displayLocale = resume.metadata.locale || locale || 'en';
|
const displayLocale = get(resume, 'metadata.locale') ?? locale;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
props: {
|
props: {
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import '@/styles/globals.scss';
|
import '@/styles/globals.scss';
|
||||||
|
|
||||||
import env from '@beam-australia/react-env';
|
import env from '@beam-australia/react-env';
|
||||||
import DayjsAdapter from '@date-io/dayjs';
|
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
|
||||||
import { LocalizationProvider } from '@mui/x-date-pickers';
|
import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
|
||||||
import { GoogleOAuthProvider } from '@react-oauth/google';
|
import { GoogleOAuthProvider } from '@react-oauth/google';
|
||||||
import type { AppProps } from 'next/app';
|
import type { AppProps } from 'next/app';
|
||||||
import Head from 'next/head';
|
import Head from 'next/head';
|
||||||
@ -21,7 +21,7 @@ import WrapperRegistry from '@/wrappers/index';
|
|||||||
const App = ({ Component, pageProps }: AppProps): JSX.Element => (
|
const App = ({ Component, pageProps }: AppProps): JSX.Element => (
|
||||||
<>
|
<>
|
||||||
<Head>
|
<Head>
|
||||||
<title>Reactive Resume</title>
|
<title>Reactive Resume | A free and open source resume builder</title>
|
||||||
|
|
||||||
<meta
|
<meta
|
||||||
name="description"
|
name="description"
|
||||||
@ -32,7 +32,7 @@ const App = ({ Component, pageProps }: AppProps): JSX.Element => (
|
|||||||
</Head>
|
</Head>
|
||||||
|
|
||||||
<ReduxProvider store={store}>
|
<ReduxProvider store={store}>
|
||||||
<LocalizationProvider dateAdapter={DayjsAdapter}>
|
<LocalizationProvider dateAdapter={AdapterDayjs}>
|
||||||
<PersistGate loading={null} persistor={persistor}>
|
<PersistGate loading={null} persistor={persistor}>
|
||||||
<GoogleOAuthProvider clientId={env('GOOGLE_CLIENT_ID')}>
|
<GoogleOAuthProvider clientId={env('GOOGLE_CLIENT_ID')}>
|
||||||
<QueryClientProvider client={queryClient}>
|
<QueryClientProvider client={queryClient}>
|
||||||
|
|||||||
@ -1,15 +1,69 @@
|
|||||||
import { NextPage } from 'next';
|
import { NextPage } from 'next';
|
||||||
import NextDocument, { DocumentContext, Head, Html, Main, NextScript } from 'next/document';
|
import NextDocument, { DocumentContext, Head, Html, Main, NextScript } from 'next/document';
|
||||||
|
import Script from 'next/script';
|
||||||
|
|
||||||
const Document: NextPage = () => (
|
const Document: NextPage = () => (
|
||||||
<Html>
|
<Html lang="en">
|
||||||
<Head />
|
<Head>
|
||||||
|
<Script
|
||||||
|
id="google-tag-manager"
|
||||||
|
type="text/javascript"
|
||||||
|
strategy="afterInteractive"
|
||||||
|
dangerouslySetInnerHTML={{
|
||||||
|
__html: `(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','GTM-M9DK4S4');`,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<Script
|
||||||
|
id="logo-schema"
|
||||||
|
type="application/ld+json"
|
||||||
|
strategy="afterInteractive"
|
||||||
|
dangerouslySetInnerHTML={{
|
||||||
|
__html: `{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "Organization",
|
||||||
|
"url": "https://rxresu.me",
|
||||||
|
"logo": "https://rxresu.me/images/logos/logo.svg"
|
||||||
|
}`,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<Script
|
||||||
|
id="software-application-schema"
|
||||||
|
type="application/ld+json"
|
||||||
|
strategy="afterInteractive"
|
||||||
|
dangerouslySetInnerHTML={{
|
||||||
|
__html: `{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "SoftwareApplication",
|
||||||
|
"name": "Reactive Resume",
|
||||||
|
"operatingSystem": "Windows, macOS, Linux, Android, iOS",
|
||||||
|
"applicationCategory": "BrowserApplication",
|
||||||
|
"aggregateRating": {
|
||||||
|
"@type": "AggregateRating",
|
||||||
|
"ratingValue": "5",
|
||||||
|
"ratingCount": "11394"
|
||||||
|
},
|
||||||
|
"offers": {
|
||||||
|
"@type": "Offer",
|
||||||
|
"price": "0"
|
||||||
|
}
|
||||||
|
}`,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<Main />
|
<Main />
|
||||||
<NextScript />
|
<NextScript />
|
||||||
|
|
||||||
<script src="/__ENV.js" />
|
<script src="/__ENV.js" />
|
||||||
|
|
||||||
|
<noscript
|
||||||
|
dangerouslySetInnerHTML={{
|
||||||
|
__html: `<iframe src="https://www.googletagmanager.com/ns.html?id=GTM-M9DK4S4" height="0" width="0" style="display:none;visibility:hidden"></iframe>`,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
</body>
|
</body>
|
||||||
</Html>
|
</Html>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -20,7 +20,7 @@ import { useAppDispatch, useAppSelector } from '@/store/hooks';
|
|||||||
import { setModalState } from '@/store/modal/modalSlice';
|
import { setModalState } from '@/store/modal/modalSlice';
|
||||||
import styles from '@/styles/pages/Home.module.scss';
|
import styles from '@/styles/pages/Home.module.scss';
|
||||||
|
|
||||||
import { DIGITALOCEAN_URL, DOCS_URL, DONATION_URL, GITHUB_URL } from '../constants';
|
import { DIGITALOCEAN_URL, DOCS_URL, DONATION_URL, GITHUB_URL, REDDIT_URL } from '../constants';
|
||||||
|
|
||||||
export const getStaticProps: GetStaticProps = async ({ locale = 'en' }) => ({
|
export const getStaticProps: GetStaticProps = async ({ locale = 'en' }) => ({
|
||||||
props: {
|
props: {
|
||||||
@ -177,6 +177,12 @@ const Home: NextPage = () => {
|
|||||||
</Button>
|
</Button>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
<a href={REDDIT_URL} target="_blank" rel="noreferrer">
|
||||||
|
<Button variant="text" startIcon={<LinkIcon />}>
|
||||||
|
{t<string>('landing.links.links.reddit')}
|
||||||
|
</Button>
|
||||||
|
</a>
|
||||||
|
|
||||||
<a href={DONATION_URL} target="_blank" rel="noreferrer">
|
<a href={DONATION_URL} target="_blank" rel="noreferrer">
|
||||||
<Button variant="text" startIcon={<LinkIcon />}>
|
<Button variant="text" startIcon={<LinkIcon />}>
|
||||||
{t<string>('landing.links.links.donate')}
|
{t<string>('landing.links.links.donate')}
|
||||||
|
|||||||
@ -11,7 +11,6 @@ import Link from 'next/link';
|
|||||||
import { useRouter } from 'next/router';
|
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 { useMutation, useQuery } from 'react-query';
|
import { useMutation, useQuery } from 'react-query';
|
||||||
|
|
||||||
import Page from '@/components/build/Center/Page';
|
import Page from '@/components/build/Center/Page';
|
||||||
@ -69,17 +68,13 @@ const Preview: NextPage<Props> = ({ shortId }) => {
|
|||||||
const layout: string[][][] = get(resume, 'metadata.layout', []);
|
const layout: string[][][] = get(resume, 'metadata.layout', []);
|
||||||
|
|
||||||
const handleDownload = async () => {
|
const handleDownload = async () => {
|
||||||
try {
|
const url = await mutateAsync({
|
||||||
const url = await mutateAsync({
|
username: resume.user.username,
|
||||||
username: resume.user.username,
|
slug: resume.slug,
|
||||||
slug: resume.slug,
|
lastUpdated: dayjs(resume.updatedAt).unix().toString(),
|
||||||
lastUpdated: dayjs(resume.updatedAt).unix().toString(),
|
});
|
||||||
});
|
|
||||||
|
|
||||||
download(url);
|
download(url);
|
||||||
} catch {
|
|
||||||
toast.error('Something went wrong, please try again later.');
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
"actions": {
|
"actions": {
|
||||||
"add": "አዲስ {{token}} ጨምር",
|
"add": "አዲስ {{token}} ጨምር",
|
||||||
"delete": "{{token}} አጥፋ",
|
"delete": "{{token}} አጥፋ",
|
||||||
|
"duplicate": "የተባዛ ክፍል",
|
||||||
"edit": "{{token}} አዘምን"
|
"edit": "{{token}} አዘምን"
|
||||||
},
|
},
|
||||||
"columns": {
|
"columns": {
|
||||||
@ -80,13 +81,13 @@
|
|||||||
"center-artboard": "መሃል የሰዕል ማሳያ",
|
"center-artboard": "መሃል የሰዕል ማሳያ",
|
||||||
"copy-link": "የስራ ልምድ ሰነዱን ሊንክ ቅዳ",
|
"copy-link": "የስራ ልምድ ሰነዱን ሊንክ ቅዳ",
|
||||||
"export-pdf": "PDF አውጣ",
|
"export-pdf": "PDF አውጣ",
|
||||||
|
"redo": "ድገም",
|
||||||
"toggle-orientation": "የገጽ አቀማመጥን ቀያይር",
|
"toggle-orientation": "የገጽ አቀማመጥን ቀያይር",
|
||||||
"toggle-page-break-line": "የገጽ መግቻ መስመርን ቀያይር",
|
"toggle-page-break-line": "የገጽ መግቻ መስመርን ቀያይር",
|
||||||
"toggle-sidebars": "የጎን ክፍሎችን ቀይር",
|
"toggle-sidebars": "የጎን ክፍሎችን ቀይር",
|
||||||
"zoom-in": "አቅርብ",
|
|
||||||
"zoom-out": "አሳንስ",
|
|
||||||
"undo": "ቀልብስ",
|
"undo": "ቀልብስ",
|
||||||
"redo": "ድገም"
|
"zoom-in": "አቅርብ",
|
||||||
|
"zoom-out": "አሳንስ"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"header": {
|
"header": {
|
||||||
@ -114,6 +115,9 @@
|
|||||||
"actions": {
|
"actions": {
|
||||||
"photo-filters": "የፎቶ ማጣሪያዎች"
|
"photo-filters": "የፎቶ ማጣሪያዎች"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "የትውልድ ቀን"
|
||||||
|
},
|
||||||
"heading": "መሰረታዊ ነገሮች",
|
"heading": "መሰረታዊ ነገሮች",
|
||||||
"headline": {
|
"headline": {
|
||||||
"label": "ርዕስ"
|
"label": "ርዕስ"
|
||||||
@ -121,9 +125,6 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "ሙሉ ስም"
|
"label": "ሙሉ ስም"
|
||||||
},
|
},
|
||||||
"birthdate": {
|
|
||||||
"label": "የትውልድ ቀን"
|
|
||||||
},
|
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
@ -174,6 +175,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"experience": {
|
||||||
|
"form": {
|
||||||
|
"name": {
|
||||||
|
"label": "Company Name"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"location": {
|
"location": {
|
||||||
"address": {
|
"address": {
|
||||||
"label": "አድራሻ"
|
"label": "አድራሻ"
|
||||||
@ -264,14 +272,15 @@
|
|||||||
"button": "GitHub ጉዳዮች",
|
"button": "GitHub ጉዳዮች",
|
||||||
"heading": "ችግሮች? የባህሪ ጥያቄዎች?"
|
"heading": "ችግሮች? የባህሪ ጥያቄዎች?"
|
||||||
},
|
},
|
||||||
|
"docs": "ሰነዶች",
|
||||||
"donate": {
|
"donate": {
|
||||||
"body": "Reactive Resumeን መጠቀም ከወደዱ እባክዎን መተግበሪያው እንዲሰራ እና ያለ ማስታወቂያ ሁሌም በነፃ እንዲቀጥል በተቻለዎት መጠን ለመለገስ ያስቡበት።",
|
"body": "Reactive Resumeን መጠቀም ከወደዱ እባክዎን መተግበሪያው እንዲሰራ እና ያለ ማስታወቂያ ሁሌም በነፃ እንዲቀጥል በተቻለዎት መጠን ለመለገስ ያስቡበት።",
|
||||||
"button": "ቡና ይጋብዙኝ",
|
"button": "ቡና ይጋብዙኝ",
|
||||||
"heading": "ለ Reactive Resume ይለግሱ"
|
"heading": "ለ Reactive Resume ይለግሱ"
|
||||||
},
|
},
|
||||||
"github": "የምንጭ ኮድ",
|
"github": "የምንጭ ኮድ",
|
||||||
"docs": "ሰነዶች",
|
"heading": "አገናኞች",
|
||||||
"heading": "አገናኞች"
|
"reddit": "Reddit"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"global": {
|
"global": {
|
||||||
@ -290,14 +299,14 @@
|
|||||||
},
|
},
|
||||||
"heading": "ቅንብሮች",
|
"heading": "ቅንብሮች",
|
||||||
"page": {
|
"page": {
|
||||||
"format": {
|
|
||||||
"primary": "የወረቀት መጠን",
|
|
||||||
"secondary": "ከቆመበት ቀጥል ገጾችዎ ልኬቶችን ይወስናል"
|
|
||||||
},
|
|
||||||
"break-line": {
|
"break-line": {
|
||||||
"primary": "መስመር መቁረጫ",
|
"primary": "መስመር መቁረጫ",
|
||||||
"secondary": "የA4 ገጽ ቁመትን ለመለየት በሁሉም ገጾች ላይ መስመር አሳይ"
|
"secondary": "የA4 ገጽ ቁመትን ለመለየት በሁሉም ገጾች ላይ መስመር አሳይ"
|
||||||
},
|
},
|
||||||
|
"format": {
|
||||||
|
"primary": "የወረቀት መጠን",
|
||||||
|
"secondary": "ከቆመበት ቀጥል ገጾችዎ ልኬቶችን ይወስናል"
|
||||||
|
},
|
||||||
"heading": "ገጽ",
|
"heading": "ገጽ",
|
||||||
"orientation": {
|
"orientation": {
|
||||||
"disabled": "አንድ ገጽ ብቻ ሲኖር ምንም ተጽእኖ የለውም",
|
"disabled": "አንድ ገጽ ብቻ ሲኖር ምንም ተጽእኖ የለውም",
|
||||||
|
|||||||
@ -20,23 +20,24 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"heading": "አገናኞች",
|
"heading": "አገናኞች",
|
||||||
"links": {
|
"links": {
|
||||||
|
"docs": "ሰነዶች",
|
||||||
"donate": "ይለግሱ",
|
"donate": "ይለግሱ",
|
||||||
"github": "የምንጭ ኮድ",
|
"github": "የምንጭ ኮድ",
|
||||||
"docs": "ሰነዶች",
|
|
||||||
"privacy": "የግላዊነት መመሪያ",
|
"privacy": "የግላዊነት መመሪያ",
|
||||||
|
"reddit": "Reddit",
|
||||||
"service": "የአገልግሎት ውሎች"
|
"service": "የአገልግሎት ውሎች"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"screenshots": {
|
"screenshots": {
|
||||||
"heading": "የገጽ እይታዎች"
|
"heading": "የገጽ እይታዎች"
|
||||||
},
|
},
|
||||||
"testimonials": {
|
|
||||||
"heading": "ምስክሮች",
|
|
||||||
"body": "ጥሩም ይሁን መጥፎ፣ ስለ Reactive Resume እና ለእርስዎ እንዴት እንደነበረ አስተያየትዎን መስማት እፈልጋለሁ።<br/>በአለም ዙሪያ በተጠቃሚዎች የተላኩ አንዳንድ መልዕክቶች እነዚሁና",
|
|
||||||
"contact": "በዚህ በኩል ልታገኙኝ <1>ኢሜል</1> ትችላላችሁ ወይም <3>በድረ-ገጽ</3> ላይ ባለው የእውቂያ ቅጽ ማግኘት ይችላሉ።"
|
|
||||||
},
|
|
||||||
"summary": {
|
"summary": {
|
||||||
"body": "Reactive Resume የእርስዎን የስራ ታሪክ የመፍጠር፣ የማዘመን እና የማጋራት መደበኛ ተግባራትን እንደ 1 2 3 ቀላል ለማድረግ የተሰራ ነፃ እና በነጻ የሚገኝ የስራ ልምድ ሰነድ መገንቢያ ነው። በዚህ መገልገያ የተለያዩ የስራ ልምድ ሰነዶችን በመስራት፣ ከቀጣሪዎች ወይም ከጓደኞች ጋር በማስፈንጠሪያ ማጋራት እና እንደ PDF ማተም ፣ ሁሉንም በነጻ ፣ ምንም ማስታወቂያ ሳይኖር ፣ ምንም ክትትል ሳይደረግ ፣ የመረጃዎን ትክክለኛነት እና ግላዊነት ተጠብቆ ማከናወን ይችላሉ።",
|
"body": "Reactive Resume የእርስዎን የስራ ታሪክ የመፍጠር፣ የማዘመን እና የማጋራት መደበኛ ተግባራትን እንደ 1 2 3 ቀላል ለማድረግ የተሰራ ነፃ እና በነጻ የሚገኝ የስራ ልምድ ሰነድ መገንቢያ ነው። በዚህ መገልገያ የተለያዩ የስራ ልምድ ሰነዶችን በመስራት፣ ከቀጣሪዎች ወይም ከጓደኞች ጋር በማስፈንጠሪያ ማጋራት እና እንደ PDF ማተም ፣ ሁሉንም በነጻ ፣ ምንም ማስታወቂያ ሳይኖር ፣ ምንም ክትትል ሳይደረግ ፣ የመረጃዎን ትክክለኛነት እና ግላዊነት ተጠብቆ ማከናወን ይችላሉ።",
|
||||||
"heading": "ማጠቃለያ"
|
"heading": "ማጠቃለያ"
|
||||||
|
},
|
||||||
|
"testimonials": {
|
||||||
|
"body": "ጥሩም ይሁን መጥፎ፣ ስለ Reactive Resume እና ለእርስዎ እንዴት እንደነበረ አስተያየትዎን መስማት እፈልጋለሁ።<br/>በአለም ዙሪያ በተጠቃሚዎች የተላኩ አንዳንድ መልዕክቶች እነዚሁና",
|
||||||
|
"contact": "በዚህ በኩል ልታገኙኝ <1>ኢሜል</1> ትችላላችሁ ወይም <3>በድረ-ገጽ</3> ላይ ባለው የእውቂያ ቅጽ ማግኘት ይችላሉ።",
|
||||||
|
"heading": "ምስክሮች"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -71,6 +71,31 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"heading": "የይለፍ ቃልዎን ዳግም ያስጀምሩ"
|
"heading": "የይለፍ ቃልዎን ዳግም ያስጀምሩ"
|
||||||
|
},
|
||||||
|
"profile": {
|
||||||
|
"heading": "መለያህ",
|
||||||
|
"form": {
|
||||||
|
"avatar": {
|
||||||
|
"help-text": "የመገለጫ ሥዕልህን በ<1>ግራቫታር ማዘመን ትችላለህ</1>"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"label": "ሙሉ ስም"
|
||||||
|
},
|
||||||
|
"email": {
|
||||||
|
"label": "የ ኢሜል አድራሻ",
|
||||||
|
"help-text": "በአሁኑ ጊዜ የኢሜል አድራሻዎን ማዘመን አይቻልም፣ እባክዎ ይልቁንስ አዲስ መለያ ይፍጠሩ።"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"delete-account": {
|
||||||
|
"heading": "መለያ እና ውሂብ ሰርዝ",
|
||||||
|
"body": "መለያህን፣ ዳታህን እና ሁሉንም ከቆመበት ቀጥል ለመሰረዝ በጽሑፍ ሳጥኑ ውስጥ \"{{keyword}}\" ተይብ እና ቁልፉን ተጫን። ይህ የማይቀለበስ እርምጃ መሆኑን እና ውሂብዎን እንደገና ማምጣት እንደማይቻል እባክዎ ልብ ይበሉ።",
|
||||||
|
"actions": {
|
||||||
|
"delete": "መለያ ሰርዝ"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"save": "ለውጦችን አስቀምጥ"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
"actions": {
|
"actions": {
|
||||||
"add": "إضافة {{token}} جديدة",
|
"add": "إضافة {{token}} جديدة",
|
||||||
"delete": "حذف {{token}}",
|
"delete": "حذف {{token}}",
|
||||||
|
"duplicate": "قسم مكرر",
|
||||||
"edit": "تحرير {{token}}"
|
"edit": "تحرير {{token}}"
|
||||||
},
|
},
|
||||||
"columns": {
|
"columns": {
|
||||||
@ -80,13 +81,13 @@
|
|||||||
"center-artboard": "لوحة الوسط",
|
"center-artboard": "لوحة الوسط",
|
||||||
"copy-link": "انسخ الرابط للسيرة الذاتية",
|
"copy-link": "انسخ الرابط للسيرة الذاتية",
|
||||||
"export-pdf": "تصدير PDF",
|
"export-pdf": "تصدير PDF",
|
||||||
|
"redo": "إعادة",
|
||||||
"toggle-orientation": "تبديل اتجاه الصفحة",
|
"toggle-orientation": "تبديل اتجاه الصفحة",
|
||||||
"toggle-page-break-line": "تبديل سطر الصفحة",
|
"toggle-page-break-line": "تبديل سطر الصفحة",
|
||||||
"toggle-sidebars": "تبديل الشريط الجانبي",
|
"toggle-sidebars": "تبديل الشريط الجانبي",
|
||||||
"zoom-in": "تكبير",
|
|
||||||
"zoom-out": "تصغير",
|
|
||||||
"undo": "الغاء التحميل",
|
"undo": "الغاء التحميل",
|
||||||
"redo": "إعادة"
|
"zoom-in": "تكبير",
|
||||||
|
"zoom-out": "تصغير"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"header": {
|
"header": {
|
||||||
@ -114,6 +115,9 @@
|
|||||||
"actions": {
|
"actions": {
|
||||||
"photo-filters": "فلاتر الصور"
|
"photo-filters": "فلاتر الصور"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "تاريخ الميلاد"
|
||||||
|
},
|
||||||
"heading": "الأساسيات",
|
"heading": "الأساسيات",
|
||||||
"headline": {
|
"headline": {
|
||||||
"label": "العنوان الرئيسي"
|
"label": "العنوان الرئيسي"
|
||||||
@ -121,9 +125,6 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "الاسم الكامل"
|
"label": "الاسم الكامل"
|
||||||
},
|
},
|
||||||
"birthdate": {
|
|
||||||
"label": "تاريخ الميلاد"
|
|
||||||
},
|
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
@ -174,6 +175,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"experience": {
|
||||||
|
"form": {
|
||||||
|
"name": {
|
||||||
|
"label": "Company Name"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"location": {
|
"location": {
|
||||||
"address": {
|
"address": {
|
||||||
"label": "العنوان"
|
"label": "العنوان"
|
||||||
@ -264,14 +272,15 @@
|
|||||||
"button": "صفحة المشاكل على \"GitHub\"",
|
"button": "صفحة المشاكل على \"GitHub\"",
|
||||||
"heading": "خلل برمجي؟ طلب وظائف ومميزات مخصصة؟"
|
"heading": "خلل برمجي؟ طلب وظائف ومميزات مخصصة؟"
|
||||||
},
|
},
|
||||||
|
"docs": "توثيق",
|
||||||
"donate": {
|
"donate": {
|
||||||
"body": "إذا أعجبك استخدام Resctive Resume ، فالرجاء التفكير في التبرع بأكبر قدر ممكن من أجل الحفاظ على استمرار التطبيق وتشغيله ، بدون إعلانات وبشكل مجاني إلى الأبد.",
|
"body": "إذا أعجبك استخدام Resctive Resume ، فالرجاء التفكير في التبرع بأكبر قدر ممكن من أجل الحفاظ على استمرار التطبيق وتشغيله ، بدون إعلانات وبشكل مجاني إلى الأبد.",
|
||||||
"button": "إشتر لي قهوة",
|
"button": "إشتر لي قهوة",
|
||||||
"heading": "تبرع الى Reactive Resume"
|
"heading": "تبرع الى Reactive Resume"
|
||||||
},
|
},
|
||||||
"github": "الشفرة المصدرية",
|
"github": "الشفرة المصدرية",
|
||||||
"docs": "توثيق",
|
"heading": "الروابط",
|
||||||
"heading": "الروابط"
|
"reddit": "رديت"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"global": {
|
"global": {
|
||||||
@ -290,14 +299,14 @@
|
|||||||
},
|
},
|
||||||
"heading": "الإعدادات",
|
"heading": "الإعدادات",
|
||||||
"page": {
|
"page": {
|
||||||
"format": {
|
|
||||||
"primary": "حجم الورق",
|
|
||||||
"secondary": "تحدد أبعاد صفحات سيرتك الذاتية"
|
|
||||||
},
|
|
||||||
"break-line": {
|
"break-line": {
|
||||||
"primary": "خط فاصل",
|
"primary": "خط فاصل",
|
||||||
"secondary": "اعرض خط في كل الصفحات لتحديد ارتفاع صفحة A4"
|
"secondary": "اعرض خط في كل الصفحات لتحديد ارتفاع صفحة A4"
|
||||||
},
|
},
|
||||||
|
"format": {
|
||||||
|
"primary": "حجم الورق",
|
||||||
|
"secondary": "تحدد أبعاد صفحات سيرتك الذاتية"
|
||||||
|
},
|
||||||
"heading": "صفحة",
|
"heading": "صفحة",
|
||||||
"orientation": {
|
"orientation": {
|
||||||
"disabled": "ليس له تأثير عندما تكون هناك صفحة واحدة فقط",
|
"disabled": "ليس له تأثير عندما تكون هناك صفحة واحدة فقط",
|
||||||
|
|||||||
@ -20,23 +20,24 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"heading": "الروابط",
|
"heading": "الروابط",
|
||||||
"links": {
|
"links": {
|
||||||
|
"docs": "توثيق",
|
||||||
"donate": "تبرّع",
|
"donate": "تبرّع",
|
||||||
"github": "الشفرة المصدرية",
|
"github": "الشفرة المصدرية",
|
||||||
"docs": "توثيق",
|
|
||||||
"privacy": "سياسة الخصوصية",
|
"privacy": "سياسة الخصوصية",
|
||||||
|
"reddit": "رديت",
|
||||||
"service": "شروط الإستخدام"
|
"service": "شروط الإستخدام"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"screenshots": {
|
"screenshots": {
|
||||||
"heading": "لقطات الشاشة"
|
"heading": "لقطات الشاشة"
|
||||||
},
|
},
|
||||||
"testimonials": {
|
|
||||||
"heading": "الآراء والتقييمات",
|
|
||||||
"body": "سواء أكان ذلك جيدًا أم سيئًا ، أود أن أسمع رأيك في \"السيرة الذاتية التفاعلية\" وكيف كانت التجربة بالنسبة لك.<br/>فيما يلي بعض الرسائل المرسلة بواسطة مستخدمين من جميع أنحاء العالم.",
|
|
||||||
"contact": "يمكنك التواصل معي من خلال <1> بريدي الإلكتروني</1> أو من خلال نموذج الاتصال الموجود على <3> موقع الويب الخاص بي</3>."
|
|
||||||
},
|
|
||||||
"summary": {
|
"summary": {
|
||||||
"body": "Reactive Resume هو منشئ سيرة ذاتية مجاني ومفتوح المصدر تم إنشاؤه لجعل المهام الروتينية لإنشاء وتحديث ومشاركة سيرتك الذاتية سهلة مثل 1 و 2 و 3. باستخدام هذا التطبيق ، يمكنك إنشاء سيرة ذاتية متعددة ومشاركتها مع جهات التوظيف أو الأصدقاء من خلال رابط فريد وطباعته كملف PDF ، كل ذلك مجانًا ، بدون إعلانات ، بدون تتبع ، دون فقدان سلامة وخصوصية بياناتك.",
|
"body": "Reactive Resume هو منشئ سيرة ذاتية مجاني ومفتوح المصدر تم إنشاؤه لجعل المهام الروتينية لإنشاء وتحديث ومشاركة سيرتك الذاتية سهلة مثل 1 و 2 و 3. باستخدام هذا التطبيق ، يمكنك إنشاء سيرة ذاتية متعددة ومشاركتها مع جهات التوظيف أو الأصدقاء من خلال رابط فريد وطباعته كملف PDF ، كل ذلك مجانًا ، بدون إعلانات ، بدون تتبع ، دون فقدان سلامة وخصوصية بياناتك.",
|
||||||
"heading": "الملخص"
|
"heading": "الملخص"
|
||||||
|
},
|
||||||
|
"testimonials": {
|
||||||
|
"body": "سواء أكان ذلك جيدًا أم سيئًا ، أود أن أسمع رأيك في \"السيرة الذاتية التفاعلية\" وكيف كانت التجربة بالنسبة لك.<br/>فيما يلي بعض الرسائل المرسلة بواسطة مستخدمين من جميع أنحاء العالم.",
|
||||||
|
"contact": "يمكنك التواصل معي من خلال <1> بريدي الإلكتروني</1> أو من خلال نموذج الاتصال الموجود على <3> موقع الويب الخاص بي</3>.",
|
||||||
|
"heading": "الآراء والتقييمات"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -71,6 +71,31 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"heading": "إعادة تعيين كلمة المرور الخاصة بك"
|
"heading": "إعادة تعيين كلمة المرور الخاصة بك"
|
||||||
|
},
|
||||||
|
"profile": {
|
||||||
|
"heading": "الحساب الخاص بك",
|
||||||
|
"form": {
|
||||||
|
"avatar": {
|
||||||
|
"help-text": "يمكنك تحديث صورة ملفك الشخصي على <1> Gravatar</1>"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"label": "الاسم الكامل"
|
||||||
|
},
|
||||||
|
"email": {
|
||||||
|
"label": "عنوان البريد الإلكتروني",
|
||||||
|
"help-text": "لا يمكن تحديث عنوان بريدك الإلكتروني في الوقت الحالي ، يرجى إنشاء حساب جديد بدلاً من ذلك."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"delete-account": {
|
||||||
|
"heading": "حذف الحساب والبيانات",
|
||||||
|
"body": "لحذف حسابك وبياناتك وجميع سيرتك الذاتية ، اكتب \"{{keyword}}\" في مربع النص وانقر على الزر. يرجى ملاحظة أن هذا إجراء لا رجوع فيه ولا يمكن استرداد بياناتك مرة أخرى.",
|
||||||
|
"actions": {
|
||||||
|
"delete": "حذف الحساب"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"save": "حفظ التغييرات"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
"actions": {
|
"actions": {
|
||||||
"add": "Добави нов {{token}}",
|
"add": "Добави нов {{token}}",
|
||||||
"delete": "Изтрий {{token}}",
|
"delete": "Изтрий {{token}}",
|
||||||
|
"duplicate": "Дублиран раздел",
|
||||||
"edit": "Редакция на {{token}}"
|
"edit": "Редакция на {{token}}"
|
||||||
},
|
},
|
||||||
"columns": {
|
"columns": {
|
||||||
@ -80,13 +81,13 @@
|
|||||||
"center-artboard": "Централна табла",
|
"center-artboard": "Централна табла",
|
||||||
"copy-link": "Копирай линка в резюмето",
|
"copy-link": "Копирай линка в резюмето",
|
||||||
"export-pdf": "Експорт в PDF",
|
"export-pdf": "Експорт в PDF",
|
||||||
|
"redo": "Redo",
|
||||||
"toggle-orientation": "Превключване на ориентацията на страницата",
|
"toggle-orientation": "Превключване на ориентацията на страницата",
|
||||||
"toggle-page-break-line": "Линия за прекъсване на страницата",
|
"toggle-page-break-line": "Линия за прекъсване на страницата",
|
||||||
"toggle-sidebars": "Включване на страничната лента",
|
"toggle-sidebars": "Включване на страничната лента",
|
||||||
"zoom-in": "Увеличи",
|
|
||||||
"zoom-out": "Намали",
|
|
||||||
"undo": "Отмяна на",
|
"undo": "Отмяна на",
|
||||||
"redo": "Redo"
|
"zoom-in": "Увеличи",
|
||||||
|
"zoom-out": "Намали"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"header": {
|
"header": {
|
||||||
@ -114,6 +115,9 @@
|
|||||||
"actions": {
|
"actions": {
|
||||||
"photo-filters": "Филтри за снимата"
|
"photo-filters": "Филтри за снимата"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "Дата на раждане"
|
||||||
|
},
|
||||||
"heading": "Основни",
|
"heading": "Основни",
|
||||||
"headline": {
|
"headline": {
|
||||||
"label": "Заглавие"
|
"label": "Заглавие"
|
||||||
@ -121,9 +125,6 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "Пълно име"
|
"label": "Пълно име"
|
||||||
},
|
},
|
||||||
"birthdate": {
|
|
||||||
"label": "Дата на раждане"
|
|
||||||
},
|
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
@ -174,6 +175,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"experience": {
|
||||||
|
"form": {
|
||||||
|
"name": {
|
||||||
|
"label": "Company Name"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"location": {
|
"location": {
|
||||||
"address": {
|
"address": {
|
||||||
"label": "Адрес"
|
"label": "Адрес"
|
||||||
@ -264,14 +272,15 @@
|
|||||||
"button": "GitHub общност",
|
"button": "GitHub общност",
|
||||||
"heading": "Бъгове? Искания за функции?"
|
"heading": "Бъгове? Искания за функции?"
|
||||||
},
|
},
|
||||||
|
"docs": "Документация",
|
||||||
"donate": {
|
"donate": {
|
||||||
"body": "Ако ви е харесало да използвате Reactive Resume, моля, помислете дали да не дарите колкото можете повече за поддръжка на приложението, без реклами и безплатно завинаги.",
|
"body": "Ако ви е харесало да използвате Reactive Resume, моля, помислете дали да не дарите колкото можете повече за поддръжка на приложението, без реклами и безплатно завинаги.",
|
||||||
"button": "Почерпете ме с кафе",
|
"button": "Почерпете ме с кафе",
|
||||||
"heading": "Направи дарение и подкрепи Reactive Resume"
|
"heading": "Направи дарение и подкрепи Reactive Resume"
|
||||||
},
|
},
|
||||||
"github": "Програмен код",
|
"github": "Програмен код",
|
||||||
"docs": "Документация",
|
"heading": "Връзки",
|
||||||
"heading": "Връзки"
|
"reddit": "Reddit"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"global": {
|
"global": {
|
||||||
@ -290,14 +299,14 @@
|
|||||||
},
|
},
|
||||||
"heading": "Настройки",
|
"heading": "Настройки",
|
||||||
"page": {
|
"page": {
|
||||||
"format": {
|
|
||||||
"primary": "Размер на хартията",
|
|
||||||
"secondary": "Определя размерите на вашите страници с автобиография"
|
|
||||||
},
|
|
||||||
"break-line": {
|
"break-line": {
|
||||||
"primary": "Линия на прекъсване",
|
"primary": "Линия на прекъсване",
|
||||||
"secondary": "Показване на линия на всички страници за обозначаване на височината на страница A4"
|
"secondary": "Показване на линия на всички страници за обозначаване на височината на страница A4"
|
||||||
},
|
},
|
||||||
|
"format": {
|
||||||
|
"primary": "Размер на хартията",
|
||||||
|
"secondary": "Определя размерите на вашите страници с автобиография"
|
||||||
|
},
|
||||||
"heading": "Страница",
|
"heading": "Страница",
|
||||||
"orientation": {
|
"orientation": {
|
||||||
"disabled": "Няма ефект, когато има само една страница",
|
"disabled": "Няма ефект, когато има само една страница",
|
||||||
|
|||||||
@ -20,23 +20,24 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"heading": "Връзки",
|
"heading": "Връзки",
|
||||||
"links": {
|
"links": {
|
||||||
|
"docs": "Документация",
|
||||||
"donate": "Дарение",
|
"donate": "Дарение",
|
||||||
"github": "Програмен код",
|
"github": "Програмен код",
|
||||||
"docs": "Документация",
|
|
||||||
"privacy": "Политика за поверителност",
|
"privacy": "Политика за поверителност",
|
||||||
|
"reddit": "Reddit",
|
||||||
"service": "Условия на ползване"
|
"service": "Условия на ползване"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"screenshots": {
|
"screenshots": {
|
||||||
"heading": "Екранни снимки"
|
"heading": "Екранни снимки"
|
||||||
},
|
},
|
||||||
"testimonials": {
|
|
||||||
"heading": "Препоръки",
|
|
||||||
"body": "Позитивно или негативно, ще се радвам да чуя мнението ви за Reactive Resume и какъв е вашия опитът.<br/>Ето някои от съобщенията, изпратени от потребители по целия свят.",
|
|
||||||
"contact": "Можете да се свържете с мен чрез <1>моя имейл</1> или чрез формата за контакт на <3>моя уебсайт</3> ."
|
|
||||||
},
|
|
||||||
"summary": {
|
"summary": {
|
||||||
"body": "Reactive Resume е безплатен инструмент за създаване на автобиография/CV с отворен код, който е създаден, за да улесни обикновените задачи за създаване, актуализиране и споделяне на вашата автобиография като 1, 2, 3. С това приложение можете да създавате множество автобиографии, да ги споделяте директно със специалистите по подбор на персонал или приятели чрез уникална връзка, както и ги отпечатате като PDF. Всичко е безплатно, без реклами, без проследяване, без да губите целостта и поверителността на вашите данни.",
|
"body": "Reactive Resume е безплатен инструмент за създаване на автобиография/CV с отворен код, който е създаден, за да улесни обикновените задачи за създаване, актуализиране и споделяне на вашата автобиография като 1, 2, 3. С това приложение можете да създавате множество автобиографии, да ги споделяте директно със специалистите по подбор на персонал или приятели чрез уникална връзка, както и ги отпечатате като PDF. Всичко е безплатно, без реклами, без проследяване, без да губите целостта и поверителността на вашите данни.",
|
||||||
"heading": "Обобщение"
|
"heading": "Обобщение"
|
||||||
|
},
|
||||||
|
"testimonials": {
|
||||||
|
"body": "Позитивно или негативно, ще се радвам да чуя мнението ви за Reactive Resume и какъв е вашия опитът.<br/>Ето някои от съобщенията, изпратени от потребители по целия свят.",
|
||||||
|
"contact": "Можете да се свържете с мен чрез <1>моя имейл</1> или чрез формата за контакт на <3>моя уебсайт</3> .",
|
||||||
|
"heading": "Препоръки"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -71,6 +71,31 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"heading": "Нулиране на паролата"
|
"heading": "Нулиране на паролата"
|
||||||
|
},
|
||||||
|
"profile": {
|
||||||
|
"heading": "Вашата сметка",
|
||||||
|
"form": {
|
||||||
|
"avatar": {
|
||||||
|
"help-text": "Можете да актуализирате профилната си снимка в <1>Gravatar</1>"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"label": "Пълно име"
|
||||||
|
},
|
||||||
|
"email": {
|
||||||
|
"label": "Имейл адрес",
|
||||||
|
"help-text": "В момента не е възможно да актуализирате своя имейл адрес, моля, създайте нов акаунт вместо това."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"delete-account": {
|
||||||
|
"heading": "Изтриване на акаунт и данни",
|
||||||
|
"body": "За да изтриете своя акаунт, вашите данни и всички ваши автобиографии, въведете \"{{keyword}}\" в текстовото поле и щракнете върху бутона. Моля, имайте предвид, че това е необратимо действие и вашите данни не могат да бъдат извлечени отново.",
|
||||||
|
"actions": {
|
||||||
|
"delete": "Изтриване на акаунт"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"save": "Запазите промените"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
"actions": {
|
"actions": {
|
||||||
"add": "নতুন {{token}} যোগ করুন",
|
"add": "নতুন {{token}} যোগ করুন",
|
||||||
"delete": "{{token}} মুছুন৷",
|
"delete": "{{token}} মুছুন৷",
|
||||||
|
"duplicate": "সদৃশ বিভাগ",
|
||||||
"edit": "{{token}} সম্পাদনা করুন"
|
"edit": "{{token}} সম্পাদনা করুন"
|
||||||
},
|
},
|
||||||
"columns": {
|
"columns": {
|
||||||
@ -80,13 +81,13 @@
|
|||||||
"center-artboard": "কেন্দ্র আর্টবোর্ড",
|
"center-artboard": "কেন্দ্র আর্টবোর্ড",
|
||||||
"copy-link": "রিজিউমে লিঙ্ক কপি করুন",
|
"copy-link": "রিজিউমে লিঙ্ক কপি করুন",
|
||||||
"export-pdf": "পিডিএফ আকারে পাঠান",
|
"export-pdf": "পিডিএফ আকারে পাঠান",
|
||||||
|
"redo": "আবার করুন",
|
||||||
"toggle-orientation": "পৃষ্ঠা ওরিয়েন্টেশন টগল করুন",
|
"toggle-orientation": "পৃষ্ঠা ওরিয়েন্টেশন টগল করুন",
|
||||||
"toggle-page-break-line": "পৃষ্ঠা বিরতি লাইন টগল করুন",
|
"toggle-page-break-line": "পৃষ্ঠা বিরতি লাইন টগল করুন",
|
||||||
"toggle-sidebars": "সাইডবার টগল করুন",
|
"toggle-sidebars": "সাইডবার টগল করুন",
|
||||||
"zoom-in": "বড় কর",
|
|
||||||
"zoom-out": "ছোট করা",
|
|
||||||
"undo": "পূর্বাবস্থায় ফেরান",
|
"undo": "পূর্বাবস্থায় ফেরান",
|
||||||
"redo": "আবার করুন"
|
"zoom-in": "বড় কর",
|
||||||
|
"zoom-out": "ছোট করা"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"header": {
|
"header": {
|
||||||
@ -114,6 +115,9 @@
|
|||||||
"actions": {
|
"actions": {
|
||||||
"photo-filters": "ফটো ফিল্টার"
|
"photo-filters": "ফটো ফিল্টার"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "জন্ম তারিখ"
|
||||||
|
},
|
||||||
"heading": "মৌলিক",
|
"heading": "মৌলিক",
|
||||||
"headline": {
|
"headline": {
|
||||||
"label": "শিরোনাম"
|
"label": "শিরোনাম"
|
||||||
@ -121,9 +125,6 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "পূর্ণ নাম"
|
"label": "পূর্ণ নাম"
|
||||||
},
|
},
|
||||||
"birthdate": {
|
|
||||||
"label": "জন্ম তারিখ"
|
|
||||||
},
|
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
@ -174,6 +175,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"experience": {
|
||||||
|
"form": {
|
||||||
|
"name": {
|
||||||
|
"label": "কোম্পানির নাম"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"location": {
|
"location": {
|
||||||
"address": {
|
"address": {
|
||||||
"label": "ঠিকানা"
|
"label": "ঠিকানা"
|
||||||
@ -264,14 +272,15 @@
|
|||||||
"button": "Github ইস্যু তালিকা",
|
"button": "Github ইস্যু তালিকা",
|
||||||
"heading": "বাগ? বৈশিষ্ট্য অনুরোধ?"
|
"heading": "বাগ? বৈশিষ্ট্য অনুরোধ?"
|
||||||
},
|
},
|
||||||
|
"docs": "ডকুমেন্টেশন",
|
||||||
"donate": {
|
"donate": {
|
||||||
"body": "আপনি যদি প্রতিক্রিয়াশীল জীবনবৃত্তান্ত ব্যবহার করতে পছন্দ করেন, অনুগ্রহ করে বিজ্ঞাপন ছাড়া এবং চিরতরে বিনামূল্যে অ্যাপটিকে চালু ও চালু রাখার জন্য যতটা সম্ভব দান করার কথা বিবেচনা করুন।",
|
"body": "আপনি যদি প্রতিক্রিয়াশীল জীবনবৃত্তান্ত ব্যবহার করতে পছন্দ করেন, অনুগ্রহ করে বিজ্ঞাপন ছাড়া এবং চিরতরে বিনামূল্যে অ্যাপটিকে চালু ও চালু রাখার জন্য যতটা সম্ভব দান করার কথা বিবেচনা করুন।",
|
||||||
"button": "আমাকে একটা কফি কিনে দাও",
|
"button": "আমাকে একটা কফি কিনে দাও",
|
||||||
"heading": "Reactive Resume -তে দান করুন"
|
"heading": "Reactive Resume -তে দান করুন"
|
||||||
},
|
},
|
||||||
"github": "সোর্স কোড",
|
"github": "সোর্স কোড",
|
||||||
"docs": "ডকুমেন্টেশন",
|
"heading": "লিঙ্ক",
|
||||||
"heading": "লিঙ্ক"
|
"reddit": "রেডডিট"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"global": {
|
"global": {
|
||||||
@ -290,14 +299,14 @@
|
|||||||
},
|
},
|
||||||
"heading": "সেটিংস",
|
"heading": "সেটিংস",
|
||||||
"page": {
|
"page": {
|
||||||
"format": {
|
|
||||||
"primary": "কাগজের আকার",
|
|
||||||
"secondary": "আপনার জীবনবৃত্তান্ত পৃষ্ঠাগুলির মাত্রা নির্ধারণ করে"
|
|
||||||
},
|
|
||||||
"break-line": {
|
"break-line": {
|
||||||
"primary": "লাইন ভেঙ্গে ফেলুন",
|
"primary": "লাইন ভেঙ্গে ফেলুন",
|
||||||
"secondary": "একটি A4 পৃষ্ঠার উচ্চতা চিহ্নিত করতে সমস্ত পৃষ্ঠায় একটি লাইন দেখান৷"
|
"secondary": "একটি A4 পৃষ্ঠার উচ্চতা চিহ্নিত করতে সমস্ত পৃষ্ঠায় একটি লাইন দেখান৷"
|
||||||
},
|
},
|
||||||
|
"format": {
|
||||||
|
"primary": "কাগজের আকার",
|
||||||
|
"secondary": "আপনার জীবনবৃত্তান্ত পৃষ্ঠাগুলির মাত্রা নির্ধারণ করে"
|
||||||
|
},
|
||||||
"heading": "পাতা",
|
"heading": "পাতা",
|
||||||
"orientation": {
|
"orientation": {
|
||||||
"disabled": "শুধুমাত্র একটি পৃষ্ঠা থাকলে কোন প্রভাব নেই",
|
"disabled": "শুধুমাত্র একটি পৃষ্ঠা থাকলে কোন প্রভাব নেই",
|
||||||
|
|||||||
@ -20,23 +20,24 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"heading": "লিঙ্ক",
|
"heading": "লিঙ্ক",
|
||||||
"links": {
|
"links": {
|
||||||
|
"docs": "ডকুমেন্টেশন",
|
||||||
"donate": "দান করুন",
|
"donate": "দান করুন",
|
||||||
"github": "সোর্স কোড",
|
"github": "সোর্স কোড",
|
||||||
"docs": "ডকুমেন্টেশন",
|
|
||||||
"privacy": "গোপনীয়তা নীতি",
|
"privacy": "গোপনীয়তা নীতি",
|
||||||
|
"reddit": "রেডডিট",
|
||||||
"service": "সেবা পাবার শর্ত"
|
"service": "সেবা পাবার শর্ত"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"screenshots": {
|
"screenshots": {
|
||||||
"heading": "স্ক্রিনশট"
|
"heading": "স্ক্রিনশট"
|
||||||
},
|
},
|
||||||
"testimonials": {
|
|
||||||
"heading": "প্রশংসাপত্র",
|
|
||||||
"body": "ভাল বা খারাপ, আমি প্রতিক্রিয়াশীল জীবনবৃত্তান্ত সম্পর্কে আপনার মতামত এবং আপনার জন্য অভিজ্ঞতা কেমন হয়েছে তা জানতে চাই।<br/>এখানে বিশ্বজুড়ে ব্যবহারকারীদের পাঠানো কিছু বার্তা রয়েছে৷",
|
|
||||||
"contact": "আপনি <1>আমার ইমেল</1> বা <3>আমার ওয়েবসাইট</3>-এ যোগাযোগ ফর্মের মাধ্যমে আমার সাথে যোগাযোগ করতে পারেন।"
|
|
||||||
},
|
|
||||||
"summary": {
|
"summary": {
|
||||||
"body": "Reactive Resume হল একটি বিনামূল্যের এবং ওপেন সোর্স জীবনবৃত্তান্ত নির্মাতা যা আপনার জীবনবৃত্তান্ত তৈরি, আপডেট এবং শেয়ার করার জাগতিক কাজগুলিকে 1, 2, 3 এর মতো সহজ করে তুলতে তৈরি করা হয়েছে৷ এই অ্যাপটির মাধ্যমে, আপনি একাধিক জীবনবৃত্তান্ত তৈরি করতে পারেন, নিয়োগকারীদের বা বন্ধুদের সাথে শেয়ার করতে পারেন৷ একটি অনন্য লিঙ্কের মাধ্যমে এবং আপনার ডেটার অখণ্ডতা এবং গোপনীয়তা হারানো ছাড়াই বিনামূল্যে, কোনও বিজ্ঞাপন, কোনও ট্র্যাকিং ছাড়াই একটি পিডিএফ হিসাবে মুদ্রণ করুন।",
|
"body": "Reactive Resume হল একটি বিনামূল্যের এবং ওপেন সোর্স জীবনবৃত্তান্ত নির্মাতা যা আপনার জীবনবৃত্তান্ত তৈরি, আপডেট এবং শেয়ার করার জাগতিক কাজগুলিকে 1, 2, 3 এর মতো সহজ করে তুলতে তৈরি করা হয়েছে৷ এই অ্যাপটির মাধ্যমে, আপনি একাধিক জীবনবৃত্তান্ত তৈরি করতে পারেন, নিয়োগকারীদের বা বন্ধুদের সাথে শেয়ার করতে পারেন৷ একটি অনন্য লিঙ্কের মাধ্যমে এবং আপনার ডেটার অখণ্ডতা এবং গোপনীয়তা হারানো ছাড়াই বিনামূল্যে, কোনও বিজ্ঞাপন, কোনও ট্র্যাকিং ছাড়াই একটি পিডিএফ হিসাবে মুদ্রণ করুন।",
|
||||||
"heading": "সারসংক্ষেপ"
|
"heading": "সারসংক্ষেপ"
|
||||||
|
},
|
||||||
|
"testimonials": {
|
||||||
|
"body": "ভাল বা খারাপ, আমি প্রতিক্রিয়াশীল জীবনবৃত্তান্ত সম্পর্কে আপনার মতামত এবং আপনার জন্য অভিজ্ঞতা কেমন হয়েছে তা জানতে চাই।<br/>এখানে বিশ্বজুড়ে ব্যবহারকারীদের পাঠানো কিছু বার্তা রয়েছে৷",
|
||||||
|
"contact": "আপনি <1>আমার ইমেল</1> বা <3>আমার ওয়েবসাইট</3>-এ যোগাযোগ ফর্মের মাধ্যমে আমার সাথে যোগাযোগ করতে পারেন।",
|
||||||
|
"heading": "প্রশংসাপত্র"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -71,6 +71,31 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"heading": "আপনার পাসওয়ার্ডটি রিসেট করুন"
|
"heading": "আপনার পাসওয়ার্ডটি রিসেট করুন"
|
||||||
|
},
|
||||||
|
"profile": {
|
||||||
|
"heading": "আপনার অ্যাকাউন্ট",
|
||||||
|
"form": {
|
||||||
|
"avatar": {
|
||||||
|
"help-text": "আপনি <1>Gravatar-এ আপনার প্রোফাইল ছবি আপডেট করতে পারেন</1>"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"label": "পুরো নাম"
|
||||||
|
},
|
||||||
|
"email": {
|
||||||
|
"label": "ইমেইল ঠিকানা",
|
||||||
|
"help-text": "এই মুহূর্তে আপনার ইমেল ঠিকানা আপডেট করা সম্ভব নয়, এর পরিবর্তে একটি নতুন অ্যাকাউন্ট তৈরি করুন।"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"delete-account": {
|
||||||
|
"heading": "অ্যাকাউন্ট এবং ডেটা মুছুন",
|
||||||
|
"body": "আপনার অ্যাকাউন্ট, আপনার ডেটা এবং আপনার সমস্ত জীবনবৃত্তান্ত মুছে ফেলতে, পাঠ্যবক্সে \"{{keyword}}\" টাইপ করুন এবং বোতামে ক্লিক করুন৷ দয়া করে মনে রাখবেন এটি একটি অপরিবর্তনীয় ক্রিয়া এবং আপনার ডেটা আবার পুনরুদ্ধার করা যাবে না।",
|
||||||
|
"actions": {
|
||||||
|
"delete": "হিসাব মুছে ফেলা"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"save": "পরিবর্তনগুলোর সংরক্ষন"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
"actions": {
|
"actions": {
|
||||||
"add": "Afegeix nou {{token}}",
|
"add": "Afegeix nou {{token}}",
|
||||||
"delete": "Suprimeix {{token}}",
|
"delete": "Suprimeix {{token}}",
|
||||||
|
"duplicate": "Secció duplicada",
|
||||||
"edit": "Edita {{token}}"
|
"edit": "Edita {{token}}"
|
||||||
},
|
},
|
||||||
"columns": {
|
"columns": {
|
||||||
@ -80,13 +81,13 @@
|
|||||||
"center-artboard": "Centrar tauler de dibuix",
|
"center-artboard": "Centrar tauler de dibuix",
|
||||||
"copy-link": "Copia l'enllaç al currículum",
|
"copy-link": "Copia l'enllaç al currículum",
|
||||||
"export-pdf": "Exporta com a PDF",
|
"export-pdf": "Exporta com a PDF",
|
||||||
|
"redo": "Refer",
|
||||||
"toggle-orientation": "Commuta l'orientació de la pàgina",
|
"toggle-orientation": "Commuta l'orientació de la pàgina",
|
||||||
"toggle-page-break-line": "Commuta la línia de salt de pàgina",
|
"toggle-page-break-line": "Commuta la línia de salt de pàgina",
|
||||||
"toggle-sidebars": "Mostra o oculta la barra lateral",
|
"toggle-sidebars": "Mostra o oculta la barra lateral",
|
||||||
"zoom-in": "Amplia",
|
|
||||||
"zoom-out": "Allunya",
|
|
||||||
"undo": "Desfer",
|
"undo": "Desfer",
|
||||||
"redo": "Refer"
|
"zoom-in": "Amplia",
|
||||||
|
"zoom-out": "Allunya"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"header": {
|
"header": {
|
||||||
@ -114,6 +115,9 @@
|
|||||||
"actions": {
|
"actions": {
|
||||||
"photo-filters": "Filtres fotogràfics"
|
"photo-filters": "Filtres fotogràfics"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "Data de naixement"
|
||||||
|
},
|
||||||
"heading": "Bàsics",
|
"heading": "Bàsics",
|
||||||
"headline": {
|
"headline": {
|
||||||
"label": "Títol"
|
"label": "Títol"
|
||||||
@ -121,9 +125,6 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "Nom complet"
|
"label": "Nom complet"
|
||||||
},
|
},
|
||||||
"birthdate": {
|
|
||||||
"label": "Data de naixement"
|
|
||||||
},
|
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
@ -174,6 +175,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"experience": {
|
||||||
|
"form": {
|
||||||
|
"name": {
|
||||||
|
"label": "Company Name"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"location": {
|
"location": {
|
||||||
"address": {
|
"address": {
|
||||||
"label": "Adreça"
|
"label": "Adreça"
|
||||||
@ -264,14 +272,15 @@
|
|||||||
"button": "Problemes de GitHub",
|
"button": "Problemes de GitHub",
|
||||||
"heading": "Errors? Sol·licituds de funcions?"
|
"heading": "Errors? Sol·licituds de funcions?"
|
||||||
},
|
},
|
||||||
|
"docs": "Documentació",
|
||||||
"donate": {
|
"donate": {
|
||||||
"body": "Si us ha agradat utilitzar Reactive Resume, considereu donar tant com pugueu per mantenir l'aplicació en funcionament, sense anuncis i gratuïta per sempre.",
|
"body": "Si us ha agradat utilitzar Reactive Resume, considereu donar tant com pugueu per mantenir l'aplicació en funcionament, sense anuncis i gratuïta per sempre.",
|
||||||
"button": "Compra'm un cafè",
|
"button": "Compra'm un cafè",
|
||||||
"heading": "Dona a Reactive Curriculum vitae"
|
"heading": "Dona a Reactive Curriculum vitae"
|
||||||
},
|
},
|
||||||
"github": "Codi font",
|
"github": "Codi font",
|
||||||
"docs": "Documentació",
|
"heading": "Enllaços",
|
||||||
"heading": "Enllaços"
|
"reddit": "Reddit"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"global": {
|
"global": {
|
||||||
@ -290,14 +299,14 @@
|
|||||||
},
|
},
|
||||||
"heading": "Configuració",
|
"heading": "Configuració",
|
||||||
"page": {
|
"page": {
|
||||||
"format": {
|
|
||||||
"primary": "Mida del paper",
|
|
||||||
"secondary": "Determina les dimensions de les pàgines del vostre currículum"
|
|
||||||
},
|
|
||||||
"break-line": {
|
"break-line": {
|
||||||
"primary": "Línia de trencament",
|
"primary": "Línia de trencament",
|
||||||
"secondary": "Mostra una línia a totes les pàgines per marcar l'alçada d'una pàgina A4"
|
"secondary": "Mostra una línia a totes les pàgines per marcar l'alçada d'una pàgina A4"
|
||||||
},
|
},
|
||||||
|
"format": {
|
||||||
|
"primary": "Mida del paper",
|
||||||
|
"secondary": "Determina les dimensions de les pàgines del vostre currículum"
|
||||||
|
},
|
||||||
"heading": "Pàgina",
|
"heading": "Pàgina",
|
||||||
"orientation": {
|
"orientation": {
|
||||||
"disabled": "No té efecte quan només hi ha una pàgina",
|
"disabled": "No té efecte quan només hi ha una pàgina",
|
||||||
|
|||||||
@ -20,23 +20,24 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"heading": "Enllaços",
|
"heading": "Enllaços",
|
||||||
"links": {
|
"links": {
|
||||||
|
"docs": "Documentació",
|
||||||
"donate": "Donar",
|
"donate": "Donar",
|
||||||
"github": "Codi font",
|
"github": "Codi font",
|
||||||
"docs": "Documentació",
|
|
||||||
"privacy": "Política de privacitat",
|
"privacy": "Política de privacitat",
|
||||||
|
"reddit": "Reddit",
|
||||||
"service": "Termes del servei"
|
"service": "Termes del servei"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"screenshots": {
|
"screenshots": {
|
||||||
"heading": "Captures de pantalla"
|
"heading": "Captures de pantalla"
|
||||||
},
|
},
|
||||||
"testimonials": {
|
|
||||||
"heading": "Testimonis",
|
|
||||||
"body": "Bo o dolent, m'encantaria saber la teva opinió sobre Reactive Curriculum vitae i com ha estat l'experiència per a tu.<br/>Aquests són alguns dels missatges enviats pels usuaris de tot el món.",
|
|
||||||
"contact": "Podeu posar-vos en contacte amb mi mitjançant <1>el meu correu electrònic</1> o mitjançant el formulari de contacte al <3>el meu lloc web</3> ."
|
|
||||||
},
|
|
||||||
"summary": {
|
"summary": {
|
||||||
"body": "Reactive Resume és un creador de currículums gratuït i de codi obert que s'ha creat per fer que les tasques mundanes de crear, actualitzar i compartir el vostre currículum siguin tan fàcils com 1, 2, 3. Amb aquesta aplicació, podeu crear diversos currículums, compartir-los amb reclutadors o amics. mitjançant un enllaç únic i imprimiu-lo com a PDF, tot de franc, sense anuncis, sense seguiment, sense perdre la integritat i la privadesa de les vostres dades.",
|
"body": "Reactive Resume és un creador de currículums gratuït i de codi obert que s'ha creat per fer que les tasques mundanes de crear, actualitzar i compartir el vostre currículum siguin tan fàcils com 1, 2, 3. Amb aquesta aplicació, podeu crear diversos currículums, compartir-los amb reclutadors o amics. mitjançant un enllaç únic i imprimiu-lo com a PDF, tot de franc, sense anuncis, sense seguiment, sense perdre la integritat i la privadesa de les vostres dades.",
|
||||||
"heading": "Resum"
|
"heading": "Resum"
|
||||||
|
},
|
||||||
|
"testimonials": {
|
||||||
|
"body": "Bo o dolent, m'encantaria saber la teva opinió sobre Reactive Curriculum vitae i com ha estat l'experiència per a tu.<br/>Aquests són alguns dels missatges enviats pels usuaris de tot el món.",
|
||||||
|
"contact": "Podeu posar-vos en contacte amb mi mitjançant <1>el meu correu electrònic</1> o mitjançant el formulari de contacte al <3>el meu lloc web</3> .",
|
||||||
|
"heading": "Testimonis"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -71,6 +71,31 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"heading": "Restablir la contrasenya"
|
"heading": "Restablir la contrasenya"
|
||||||
|
},
|
||||||
|
"profile": {
|
||||||
|
"heading": "El teu compte",
|
||||||
|
"form": {
|
||||||
|
"avatar": {
|
||||||
|
"help-text": "Pots actualitzar la teva foto de perfil a <1>Gravatar</1>"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"label": "Nom complet"
|
||||||
|
},
|
||||||
|
"email": {
|
||||||
|
"label": "Correu electrònic",
|
||||||
|
"help-text": "No és possible actualitzar la vostra adreça de correu electrònic en aquest moment, si us plau, creeu un compte nou."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"delete-account": {
|
||||||
|
"heading": "Suprimeix el compte i les dades",
|
||||||
|
"body": "Per eliminar el vostre compte, les vostres dades i tots els vostres currículums, escriviu \"{{keyword}}\" al quadre de text i feu clic al botó. Tingueu en compte que aquesta és una acció irreversible i que les vostres dades no es poden recuperar de nou.",
|
||||||
|
"actions": {
|
||||||
|
"delete": "Esborrar compte"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"save": "Guardar canvis"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
"actions": {
|
"actions": {
|
||||||
"add": "Přidat nový {{token}}",
|
"add": "Přidat nový {{token}}",
|
||||||
"delete": "Odstranit {{token}}",
|
"delete": "Odstranit {{token}}",
|
||||||
|
"duplicate": "Duplicitní sekce",
|
||||||
"edit": "Upravit {{token}}"
|
"edit": "Upravit {{token}}"
|
||||||
},
|
},
|
||||||
"columns": {
|
"columns": {
|
||||||
@ -80,13 +81,13 @@
|
|||||||
"center-artboard": "Vycentrovat Artboard",
|
"center-artboard": "Vycentrovat Artboard",
|
||||||
"copy-link": "Kopírovat odkaz na životopis",
|
"copy-link": "Kopírovat odkaz na životopis",
|
||||||
"export-pdf": "Exportovat PDF",
|
"export-pdf": "Exportovat PDF",
|
||||||
|
"redo": "Přepracovat",
|
||||||
"toggle-orientation": "Přepnout orientaci stránky",
|
"toggle-orientation": "Přepnout orientaci stránky",
|
||||||
"toggle-page-break-line": "Přepnout řádek zalomení stránky",
|
"toggle-page-break-line": "Přepnout řádek zalomení stránky",
|
||||||
"toggle-sidebars": "Přepnout boční panely",
|
"toggle-sidebars": "Přepnout boční panely",
|
||||||
"zoom-in": "Přiblížit",
|
|
||||||
"zoom-out": "Oddálit",
|
|
||||||
"undo": "Zrušit",
|
"undo": "Zrušit",
|
||||||
"redo": "Přepracovat"
|
"zoom-in": "Přiblížit",
|
||||||
|
"zoom-out": "Oddálit"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"header": {
|
"header": {
|
||||||
@ -114,6 +115,9 @@
|
|||||||
"actions": {
|
"actions": {
|
||||||
"photo-filters": "Foto filtry"
|
"photo-filters": "Foto filtry"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "Datum narození"
|
||||||
|
},
|
||||||
"heading": "Základy",
|
"heading": "Základy",
|
||||||
"headline": {
|
"headline": {
|
||||||
"label": "Titulek"
|
"label": "Titulek"
|
||||||
@ -121,9 +125,6 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "Celé jméno"
|
"label": "Celé jméno"
|
||||||
},
|
},
|
||||||
"birthdate": {
|
|
||||||
"label": "Datum narození"
|
|
||||||
},
|
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
@ -174,6 +175,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"experience": {
|
||||||
|
"form": {
|
||||||
|
"name": {
|
||||||
|
"label": "Company Name"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"location": {
|
"location": {
|
||||||
"address": {
|
"address": {
|
||||||
"label": "Adresa"
|
"label": "Adresa"
|
||||||
@ -264,14 +272,15 @@
|
|||||||
"button": "Hlášení chyb GitHub",
|
"button": "Hlášení chyb GitHub",
|
||||||
"heading": "Chyby? Požadavky na funkce?"
|
"heading": "Chyby? Požadavky na funkce?"
|
||||||
},
|
},
|
||||||
|
"docs": "Dokumentace",
|
||||||
"donate": {
|
"donate": {
|
||||||
"body": "Pokud se vám líbilo používání Reactive Resume, zvažte prosím darování co největší částky na udržení aplikace v provozu, bez reklam a navždy zdarma.",
|
"body": "Pokud se vám líbilo používání Reactive Resume, zvažte prosím darování co největší částky na udržení aplikace v provozu, bez reklam a navždy zdarma.",
|
||||||
"button": "Kupte mi kávu",
|
"button": "Kupte mi kávu",
|
||||||
"heading": "Přispějte na Reactive Resume"
|
"heading": "Přispějte na Reactive Resume"
|
||||||
},
|
},
|
||||||
"github": "Zdrojový kód",
|
"github": "Zdrojový kód",
|
||||||
"docs": "Dokumentace",
|
"heading": "Odkazy",
|
||||||
"heading": "Odkazy"
|
"reddit": "Reddit"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"global": {
|
"global": {
|
||||||
@ -290,14 +299,14 @@
|
|||||||
},
|
},
|
||||||
"heading": "Nastavení",
|
"heading": "Nastavení",
|
||||||
"page": {
|
"page": {
|
||||||
"format": {
|
|
||||||
"primary": "Velikost papíru",
|
|
||||||
"secondary": "Určuje rozměry stránek vašeho životopisu"
|
|
||||||
},
|
|
||||||
"break-line": {
|
"break-line": {
|
||||||
"primary": "Nový řádek",
|
"primary": "Nový řádek",
|
||||||
"secondary": "Zobrazit čáru na všech stránkách pro označení výšky stránky A4"
|
"secondary": "Zobrazit čáru na všech stránkách pro označení výšky stránky A4"
|
||||||
},
|
},
|
||||||
|
"format": {
|
||||||
|
"primary": "Velikost papíru",
|
||||||
|
"secondary": "Určuje rozměry stránek vašeho životopisu"
|
||||||
|
},
|
||||||
"heading": "Stránka",
|
"heading": "Stránka",
|
||||||
"orientation": {
|
"orientation": {
|
||||||
"disabled": "Nemá žádný efekt, pokud existuje pouze jedna stránka",
|
"disabled": "Nemá žádný efekt, pokud existuje pouze jedna stránka",
|
||||||
|
|||||||
@ -20,23 +20,24 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"heading": "Odkazy",
|
"heading": "Odkazy",
|
||||||
"links": {
|
"links": {
|
||||||
|
"docs": "Dokumentace",
|
||||||
"donate": "Darovat",
|
"donate": "Darovat",
|
||||||
"github": "Zdrojový kód",
|
"github": "Zdrojový kód",
|
||||||
"docs": "Dokumentace",
|
|
||||||
"privacy": "Zásady ochrany osobních údajů",
|
"privacy": "Zásady ochrany osobních údajů",
|
||||||
|
"reddit": "Reddit",
|
||||||
"service": "Podmínky služby"
|
"service": "Podmínky služby"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"screenshots": {
|
"screenshots": {
|
||||||
"heading": "Snímky obrazovky"
|
"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": {
|
"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.",
|
"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"
|
"heading": "souhrn"
|
||||||
|
},
|
||||||
|
"testimonials": {
|
||||||
|
"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> .",
|
||||||
|
"heading": "Posudky"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -71,6 +71,31 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"heading": "Obnovit heslo"
|
"heading": "Obnovit heslo"
|
||||||
|
},
|
||||||
|
"profile": {
|
||||||
|
"heading": "Váš účet",
|
||||||
|
"form": {
|
||||||
|
"avatar": {
|
||||||
|
"help-text": "Svůj profilový obrázek si můžete aktualizovat na <1>Gravatar</1>"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"label": "Celé jméno"
|
||||||
|
},
|
||||||
|
"email": {
|
||||||
|
"label": "Emailová adresa",
|
||||||
|
"help-text": "V tuto chvíli není možné aktualizovat vaši e-mailovou adresu, vytvořte si místo toho nový účet."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"delete-account": {
|
||||||
|
"heading": "Smazat účet a data",
|
||||||
|
"body": "Chcete-li smazat svůj účet, data a všechny své životopisy, zadejte do textového pole „{{keyword}}“ a klikněte na tlačítko. Upozorňujeme, že se jedná o nevratnou akci a vaše data nelze znovu získat.",
|
||||||
|
"actions": {
|
||||||
|
"delete": "Smazat účet"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"save": "Uložit změny"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
"actions": {
|
"actions": {
|
||||||
"add": "Tilføj ny {{token}}",
|
"add": "Tilføj ny {{token}}",
|
||||||
"delete": "Slet {{token}}",
|
"delete": "Slet {{token}}",
|
||||||
|
"duplicate": "Dublet afsnit",
|
||||||
"edit": "Rediger {{token}}"
|
"edit": "Rediger {{token}}"
|
||||||
},
|
},
|
||||||
"columns": {
|
"columns": {
|
||||||
@ -80,13 +81,13 @@
|
|||||||
"center-artboard": "Centrer tegnebræt",
|
"center-artboard": "Centrer tegnebræt",
|
||||||
"copy-link": "Kopier link til CV",
|
"copy-link": "Kopier link til CV",
|
||||||
"export-pdf": "Eksporter PDF",
|
"export-pdf": "Eksporter PDF",
|
||||||
|
"redo": "Redo",
|
||||||
"toggle-orientation": "Skift sideorientering",
|
"toggle-orientation": "Skift sideorientering",
|
||||||
"toggle-page-break-line": "Skift sideskiftlinje",
|
"toggle-page-break-line": "Skift sideskiftlinje",
|
||||||
"toggle-sidebars": "Sidebjælke til/fra",
|
"toggle-sidebars": "Sidebjælke til/fra",
|
||||||
"zoom-in": "Zoom ind",
|
|
||||||
"zoom-out": "Zoom ud",
|
|
||||||
"undo": "Fortryd",
|
"undo": "Fortryd",
|
||||||
"redo": "Redo"
|
"zoom-in": "Zoom ind",
|
||||||
|
"zoom-out": "Zoom ud"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"header": {
|
"header": {
|
||||||
@ -114,6 +115,9 @@
|
|||||||
"actions": {
|
"actions": {
|
||||||
"photo-filters": "Fotofiltre"
|
"photo-filters": "Fotofiltre"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "Fødselsdato"
|
||||||
|
},
|
||||||
"heading": "Grundlæggende",
|
"heading": "Grundlæggende",
|
||||||
"headline": {
|
"headline": {
|
||||||
"label": "Overskrift"
|
"label": "Overskrift"
|
||||||
@ -121,9 +125,6 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "Fulde navn"
|
"label": "Fulde navn"
|
||||||
},
|
},
|
||||||
"birthdate": {
|
|
||||||
"label": "Fødselsdato"
|
|
||||||
},
|
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
@ -174,6 +175,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"experience": {
|
||||||
|
"form": {
|
||||||
|
"name": {
|
||||||
|
"label": "Company Name"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"location": {
|
"location": {
|
||||||
"address": {
|
"address": {
|
||||||
"label": "Adresse"
|
"label": "Adresse"
|
||||||
@ -264,14 +272,15 @@
|
|||||||
"button": "GitHub-problemer",
|
"button": "GitHub-problemer",
|
||||||
"heading": "Fejl? Ønsker til en ny funktion?"
|
"heading": "Fejl? Ønsker til en ny funktion?"
|
||||||
},
|
},
|
||||||
|
"docs": "Dokumentation",
|
||||||
"donate": {
|
"donate": {
|
||||||
"body": "Hvis du kunne lide at bruge Reactive Resume, bedes du overveje at donere så meget som muligt til formålet med at holde appen oppe og køre, uden annoncer og gratis for evigt.",
|
"body": "Hvis du kunne lide at bruge Reactive Resume, bedes du overveje at donere så meget som muligt til formålet med at holde appen oppe og køre, uden annoncer og gratis for evigt.",
|
||||||
"button": "Købe mig en kop kaffe",
|
"button": "Købe mig en kop kaffe",
|
||||||
"heading": "Donér til Reactive Resume"
|
"heading": "Donér til Reactive Resume"
|
||||||
},
|
},
|
||||||
"github": "Kildekode",
|
"github": "Kildekode",
|
||||||
"docs": "Dokumentation",
|
"heading": "Links",
|
||||||
"heading": "Links"
|
"reddit": "Reddit"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"global": {
|
"global": {
|
||||||
@ -290,14 +299,14 @@
|
|||||||
},
|
},
|
||||||
"heading": "Indstillinger",
|
"heading": "Indstillinger",
|
||||||
"page": {
|
"page": {
|
||||||
"format": {
|
|
||||||
"primary": "Papirstørrelse",
|
|
||||||
"secondary": "Bestemmer dimensionerne på dine CV-sider"
|
|
||||||
},
|
|
||||||
"break-line": {
|
"break-line": {
|
||||||
"primary": "Brudlinje",
|
"primary": "Brudlinje",
|
||||||
"secondary": "Vis en streg på alle sider for at markere højden på en A4-side"
|
"secondary": "Vis en streg på alle sider for at markere højden på en A4-side"
|
||||||
},
|
},
|
||||||
|
"format": {
|
||||||
|
"primary": "Papirstørrelse",
|
||||||
|
"secondary": "Bestemmer dimensionerne på dine CV-sider"
|
||||||
|
},
|
||||||
"heading": "Side",
|
"heading": "Side",
|
||||||
"orientation": {
|
"orientation": {
|
||||||
"disabled": "Har ingen effekt, når der kun er én side",
|
"disabled": "Har ingen effekt, når der kun er én side",
|
||||||
|
|||||||
@ -8,35 +8,36 @@
|
|||||||
"features": {
|
"features": {
|
||||||
"heading": "Funktioner",
|
"heading": "Funktioner",
|
||||||
"list": {
|
"list": {
|
||||||
"ads": "Ingen reklamer.",
|
"ads": "Ingen reklamer",
|
||||||
"export": "Eksporter dit CV til JSON- eller PDF-format",
|
"export": "Eksporter dit CV til JSON- eller PDF-format",
|
||||||
"free": "Gratis for evigt",
|
"free": "Gratis for evigt",
|
||||||
"import": "Importer data fra LinkedIn, JSON CV",
|
"import": "Importer data fra LinkedIn, JSON CV",
|
||||||
"languages": "Tilgængelig på flere sprog",
|
"languages": "Tilgængelig på flere sprog",
|
||||||
"more": "Og meget flere spændende funktioner, <1>læs alt om det her</1>",
|
"more": "Og mange flere spændende funktioner, <1>læs alt om det her</1>",
|
||||||
"tracking": "Ingen brugersporing"
|
"tracking": "Ingen brugersporing"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"links": {
|
"links": {
|
||||||
"heading": "Links",
|
"heading": "Links",
|
||||||
"links": {
|
"links": {
|
||||||
|
"docs": "Dokumentation",
|
||||||
"donate": "Donér",
|
"donate": "Donér",
|
||||||
"github": "Kildekode",
|
"github": "Kildekode",
|
||||||
"docs": "Dokumentation",
|
|
||||||
"privacy": "Fortrolighedspolitik",
|
"privacy": "Fortrolighedspolitik",
|
||||||
|
"reddit": "Reddit",
|
||||||
"service": "Servicevilkår"
|
"service": "Servicevilkår"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"screenshots": {
|
"screenshots": {
|
||||||
"heading": "Skærmbilleder"
|
"heading": "Skærmbilleder"
|
||||||
},
|
},
|
||||||
"testimonials": {
|
|
||||||
"heading": "Udtalelser",
|
|
||||||
"body": "Godt eller dårligt, jeg ville elske at høre din mening om Reactive Resume og hvordan oplevelsen har været for dig.<br/>Her er nogle af de beskeder, der er sendt af brugere over hele verden.",
|
|
||||||
"contact": "Du kan kontakte mig via <1>min e-mail</1> eller gennem kontaktformularen på <3>min hjemmeside</3> ."
|
|
||||||
},
|
|
||||||
"summary": {
|
"summary": {
|
||||||
"body": "Reactive Resume er en gratis og open source CV-bygger, der er bygget til at gøre de hverdagsagtige opgaver med at oprette, opdatere og dele dit CV så lette som 1, 2, 3. Med denne app kan du oprette flere CV'er, dele dem med rekrutterere eller venner gennem et unikt link og udskriv det som en PDF, helt gratis, ingen annoncer, ingen sporing, uden at miste integriteten og fortroligheden af dine data.",
|
"body": "Reactive Resume er en gratis og open source CV-bygger, der er bygget til at gøre de hverdagsagtige opgaver med at oprette, opdatere og dele dit CV så lette som 1, 2, 3. Med denne app kan du oprette flere CV'er, dele dem med rekrutterere eller venner gennem et unikt link og udskriv det som en PDF, helt gratis, ingen annoncer, ingen sporing, uden at miste integriteten og fortroligheden af dine data.",
|
||||||
"heading": "Opsummering"
|
"heading": "Opsummering"
|
||||||
|
},
|
||||||
|
"testimonials": {
|
||||||
|
"body": "Godt eller dårligt, jeg ville elske at høre din mening om Reactive Resume og hvordan oplevelsen har været for dig.<br/>Her er nogle af de beskeder, der er sendt af brugere over hele verden.",
|
||||||
|
"contact": "Du kan kontakte mig via <1>min e-mail</1> eller gennem kontaktformularen på <3>min hjemmeside</3> .",
|
||||||
|
"heading": "Udtalelser"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -71,6 +71,31 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"heading": "Nulstil din adgangskode"
|
"heading": "Nulstil din adgangskode"
|
||||||
|
},
|
||||||
|
"profile": {
|
||||||
|
"heading": "Din konto",
|
||||||
|
"form": {
|
||||||
|
"avatar": {
|
||||||
|
"help-text": "Du kan opdatere dit profilbillede på <1>Gravatar</1>"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"label": "Fulde navn"
|
||||||
|
},
|
||||||
|
"email": {
|
||||||
|
"label": "Email adresse",
|
||||||
|
"help-text": "Det er ikke muligt at opdatere din e-mailadresse i øjeblikket, opret en ny konto i stedet for."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"delete-account": {
|
||||||
|
"heading": "Slet konto og data",
|
||||||
|
"body": "For at slette din konto, dine data og alle dine CV'er skal du skrive \"{{keyword}}\" i tekstboksen og klikke på knappen. Bemærk venligst, at dette er en uigenkaldelig handling, og dine data kan ikke genfindes.",
|
||||||
|
"actions": {
|
||||||
|
"delete": "Slet konto"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"save": "Gem ændringer"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
|
|||||||
@ -1,9 +1,10 @@
|
|||||||
{
|
{
|
||||||
"common": {
|
"common": {
|
||||||
"actions": {
|
"actions": {
|
||||||
"add": "Neue {{token}} hinzufügen",
|
"add": "{{token}} hinzufügen",
|
||||||
"delete": "Löschen {{token}}",
|
"delete": "{{token}} löschen",
|
||||||
"edit": "Bearbeiten {{token}}"
|
"duplicate": "Abschnitt duplizieren",
|
||||||
|
"edit": "{{token}} bearbeiten"
|
||||||
},
|
},
|
||||||
"columns": {
|
"columns": {
|
||||||
"heading": "Spalten",
|
"heading": "Spalten",
|
||||||
@ -17,10 +18,10 @@
|
|||||||
"label": "Beschreibung"
|
"label": "Beschreibung"
|
||||||
},
|
},
|
||||||
"email": {
|
"email": {
|
||||||
"label": "E-Mail Adresse"
|
"label": "E-Mail-Adresse"
|
||||||
},
|
},
|
||||||
"end-date": {
|
"end-date": {
|
||||||
"help-text": "Dieses Feld leer lassen, wenn noch vorhanden",
|
"help-text": "Dieses Feld leer lassen, wenn dieser Eintrag noch kein Enddatum hat.",
|
||||||
"label": "Enddatum"
|
"label": "Enddatum"
|
||||||
},
|
},
|
||||||
"keywords": {
|
"keywords": {
|
||||||
@ -69,7 +70,7 @@
|
|||||||
"empty-text": "Diese Liste ist leer."
|
"empty-text": "Diese Liste ist leer."
|
||||||
},
|
},
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"delete-item": "Sind Sie sicher, dass Sie dieses Element löschen möchten? Dies ist eine unumkehrbare Aktion.",
|
"delete-item": "Sind Sie sicher, dass Sie dieses Element löschen möchten? Dies lässt sich nicht rückgängig machen.",
|
||||||
"delete-section": "Abschnitt löschen",
|
"delete-section": "Abschnitt löschen",
|
||||||
"rename-section": "Abschnitt umbenennen",
|
"rename-section": "Abschnitt umbenennen",
|
||||||
"toggle-visibility": "Sichtbarkeit umschalten"
|
"toggle-visibility": "Sichtbarkeit umschalten"
|
||||||
@ -80,13 +81,13 @@
|
|||||||
"center-artboard": "Artboard zentrieren",
|
"center-artboard": "Artboard zentrieren",
|
||||||
"copy-link": "Link zum Lebenslauf kopieren",
|
"copy-link": "Link zum Lebenslauf kopieren",
|
||||||
"export-pdf": "PDF exportieren",
|
"export-pdf": "PDF exportieren",
|
||||||
|
"redo": "Wiederholen",
|
||||||
"toggle-orientation": "Seitenausrichtung umschalten",
|
"toggle-orientation": "Seitenausrichtung umschalten",
|
||||||
"toggle-page-break-line": "Pausenzeile umschalten",
|
"toggle-page-break-line": "Pausenzeile umschalten",
|
||||||
"toggle-sidebars": "Seitenleisten umschalten",
|
"toggle-sidebars": "Seitenleisten umschalten",
|
||||||
"zoom-in": "Vergrößern",
|
|
||||||
"zoom-out": "Verkleinern",
|
|
||||||
"undo": "Rückgängig machen",
|
"undo": "Rückgängig machen",
|
||||||
"redo": "Redo"
|
"zoom-in": "Vergrößern",
|
||||||
|
"zoom-out": "Verkleinern"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"header": {
|
"header": {
|
||||||
@ -96,8 +97,8 @@
|
|||||||
"rename": "Umbenennen",
|
"rename": "Umbenennen",
|
||||||
"share-link": "Link teilen",
|
"share-link": "Link teilen",
|
||||||
"tooltips": {
|
"tooltips": {
|
||||||
"delete": "Sind Sie sicher, dass Sie diesen Lebenslauf löschen möchten? Dies ist eine unumkehrbare Aktion.",
|
"delete": "Sind Sie sicher, dass Sie diesen Lebenslauf löschen möchten? Dies lässt sich nicht rückgängig machen.",
|
||||||
"share-link": "Du musst die Sichtbarkeit deines Lebenslaufs in die Öffentlichkeit ändern, um ihn für andere sichtbar zu machen."
|
"share-link": "Sie müssen die Sichtbarkeit Ihres Lebenslaufs in Öffentlich ändern, um ihn für andere sichtbar zu machen."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -106,7 +107,7 @@
|
|||||||
"awards": {
|
"awards": {
|
||||||
"form": {
|
"form": {
|
||||||
"awarder": {
|
"awarder": {
|
||||||
"label": "Auszeichnung"
|
"label": "Auszeichner"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -114,20 +115,20 @@
|
|||||||
"actions": {
|
"actions": {
|
||||||
"photo-filters": "Fotofilter"
|
"photo-filters": "Fotofilter"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "Geburtsdatum"
|
||||||
|
},
|
||||||
"heading": "Grundlagen",
|
"heading": "Grundlagen",
|
||||||
"headline": {
|
"headline": {
|
||||||
"label": "Überschrift"
|
"label": "Überschrift"
|
||||||
},
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"label": "Voller Name"
|
"label": "Vollständiger Name"
|
||||||
},
|
|
||||||
"birthdate": {
|
|
||||||
"label": "Geburtsdatum"
|
|
||||||
},
|
},
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
"label": "Grenze"
|
"label": "Rahmen"
|
||||||
},
|
},
|
||||||
"grayscale": {
|
"grayscale": {
|
||||||
"label": "Graustufen"
|
"label": "Graustufen"
|
||||||
@ -158,13 +159,13 @@
|
|||||||
"education": {
|
"education": {
|
||||||
"form": {
|
"form": {
|
||||||
"area-study": {
|
"area-study": {
|
||||||
"label": "Studienbereich"
|
"label": "Studienfach"
|
||||||
},
|
},
|
||||||
"courses": {
|
"courses": {
|
||||||
"label": "Kurse"
|
"label": "Kurse"
|
||||||
},
|
},
|
||||||
"degree": {
|
"degree": {
|
||||||
"label": "Grad"
|
"label": "Abschluss"
|
||||||
},
|
},
|
||||||
"grade": {
|
"grade": {
|
||||||
"label": "Note"
|
"label": "Note"
|
||||||
@ -174,9 +175,16 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"experience": {
|
||||||
|
"form": {
|
||||||
|
"name": {
|
||||||
|
"label": "Company Name"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"location": {
|
"location": {
|
||||||
"address": {
|
"address": {
|
||||||
"label": "Adresse"
|
"label": "Straße"
|
||||||
},
|
},
|
||||||
"city": {
|
"city": {
|
||||||
"label": "Stadt"
|
"label": "Stadt"
|
||||||
@ -184,12 +192,12 @@
|
|||||||
"country": {
|
"country": {
|
||||||
"label": "Land"
|
"label": "Land"
|
||||||
},
|
},
|
||||||
"heading": "Standort",
|
"heading": "Anschrift",
|
||||||
"postal-code": {
|
"postal-code": {
|
||||||
"label": "Postleitzahl"
|
"label": "Postleitzahl"
|
||||||
},
|
},
|
||||||
"region": {
|
"region": {
|
||||||
"label": "Region"
|
"label": "Bundesland"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"profiles": {
|
"profiles": {
|
||||||
@ -201,7 +209,7 @@
|
|||||||
"label": "Benutzername"
|
"label": "Benutzername"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"heading": "Profiles",
|
"heading": "Soziale Netzwerke",
|
||||||
"heading_one": "Profil"
|
"heading_one": "Profil"
|
||||||
},
|
},
|
||||||
"publications": {
|
"publications": {
|
||||||
@ -239,16 +247,16 @@
|
|||||||
"heading": "Exportieren",
|
"heading": "Exportieren",
|
||||||
"json": {
|
"json": {
|
||||||
"primary": "JSON",
|
"primary": "JSON",
|
||||||
"secondary": "Laden Sie eine JSON-Version Ihres Lebenslaufs herunter, die Sie wieder in Reaktives Lebenslauf importieren können."
|
"secondary": "Laden Sie eine JSON-Version Ihres Lebenslaufs herunter, die Sie wieder in Reactive Resume importieren können."
|
||||||
},
|
},
|
||||||
"pdf": {
|
"pdf": {
|
||||||
"loading": {
|
"loading": {
|
||||||
"primary": "PDF wird erstellt",
|
"primary": "PDF wird erstellt",
|
||||||
"secondary": "Bitte warten Sie, wenn Ihr PDF generiert wird, dies kann bis zu 15 Sekunden dauern."
|
"secondary": "Bitte warten Sie, während Ihr PDF generiert wird. Dies kann bis zu 15 Sekunden dauern."
|
||||||
},
|
},
|
||||||
"normal": {
|
"normal": {
|
||||||
"primary": "PDF",
|
"primary": "PDF",
|
||||||
"secondary": "Laden Sie sich ein PDF Ihres Lebenslaufs herunter, das Sie ausdrucken und an Ihren Traumjob senden können. Diese Datei kann nicht zur weiteren Bearbeitung importiert werden."
|
"secondary": "Laden Sie sich ein PDF Ihres Lebenslaufs herunter, dass Sie ausdrucken oder an Ihren Traumarbeitgeber senden können. Diese Datei kann nicht zur weiteren Bearbeitung importiert werden."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -260,60 +268,61 @@
|
|||||||
},
|
},
|
||||||
"links": {
|
"links": {
|
||||||
"bugs-features": {
|
"bugs-features": {
|
||||||
"body": "Hält Sie etwas davon ab, einen Lebenslauf zu erstellen? Oder haben Sie eine tolle Idee, die Sie hinzufügen möchten? Erhöhen Sie einen Eintrag auf GitHub, um loszulegen.",
|
"body": "Sind Sie bei der Erstellung Ihres Lebenslaufs auf ein Problem gestoßen? Oder haben Sie eine tolle Idee, die Sie hinzufügen möchten? Erstellen Sie ein Ticket auf GitHub.",
|
||||||
"button": "GitHub Themen",
|
"button": "GitHub Themen",
|
||||||
"heading": "Fehler? Feature-Anfragen?"
|
"heading": "Fehler? Verbesserungsvorschläge?"
|
||||||
},
|
},
|
||||||
|
"docs": "Dokumentation",
|
||||||
"donate": {
|
"donate": {
|
||||||
"body": "Wenn Ihnen Reactive Resume gefallen hat, denken Sie bitte darüber nach, so viel wie möglich zu spenden, damit die App für immer kostenlos und werbefrei bleibt.",
|
"body": "Sollte Ihnen Reactive Resume gefallen, möchte ich Sie bitten, etwas zu spenden, damit die App für immer kostenlos und werbefrei bleibt.",
|
||||||
"button": "Kaufe mir einen Kaffee",
|
"button": "Kaufe mir einen Kaffee",
|
||||||
"heading": "Spenden an Reaktives Lebenslauf"
|
"heading": "Spenden Sie an Reactive Resume."
|
||||||
},
|
},
|
||||||
"github": "Quellcode",
|
"github": "Quellcode",
|
||||||
"docs": "Dokumentation",
|
"heading": "Links",
|
||||||
"heading": "Links"
|
"reddit": "Reddit"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"global": {
|
"global": {
|
||||||
"date": {
|
"date": {
|
||||||
"primary": "Datum",
|
"primary": "Datum",
|
||||||
"secondary": "Datumsformat für die gesamte App"
|
"secondary": "Datumsformat für die gesamte App."
|
||||||
},
|
},
|
||||||
"heading": "Globale",
|
"heading": "Globale",
|
||||||
"language": {
|
"language": {
|
||||||
"primary": "Sprache",
|
"primary": "Sprache",
|
||||||
"secondary": "Sprache anzeigen, die in der gesamten App verwendet wird"
|
"secondary": "Anzeigesprache, die in der gesamten App verwendet wird."
|
||||||
},
|
},
|
||||||
"theme": {
|
"theme": {
|
||||||
"primary": "Thema"
|
"primary": "App Design"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"heading": "Einstellungen",
|
"heading": "Einstellungen",
|
||||||
"page": {
|
"page": {
|
||||||
"format": {
|
|
||||||
"primary": "Papier größe",
|
|
||||||
"secondary": "Legt die Abmessungen Ihrer Lebenslaufseiten fest"
|
|
||||||
},
|
|
||||||
"break-line": {
|
"break-line": {
|
||||||
"primary": "Linie anhalten",
|
"primary": "Seitenumbruch anzeigen",
|
||||||
"secondary": "Zeile auf allen Seiten anzeigen, um die Höhe einer A4-Seite zu markieren"
|
"secondary": "Zeigt den Seitenumbruch als Linie auf allen Seiten an."
|
||||||
|
},
|
||||||
|
"format": {
|
||||||
|
"primary": "Papiergröße",
|
||||||
|
"secondary": "Legt die Seitenabmessungen Ihres Lebenslaufs fest."
|
||||||
},
|
},
|
||||||
"heading": "Seite",
|
"heading": "Seite",
|
||||||
"orientation": {
|
"orientation": {
|
||||||
"disabled": "Hat keine Auswirkung, wenn nur eine Seite vorhanden ist",
|
"disabled": "Hat keine Auswirkung, wenn nur eine Seite vorhanden ist.",
|
||||||
"primary": "Ausrichtung",
|
"primary": "Ausrichtung",
|
||||||
"secondary": "Ob Seiten horizontal oder vertikal angezeigt werden sollen"
|
"secondary": "Legt fest, ob Seiten horizontal oder vertikal angezeigt werden sollen."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"resume": {
|
"resume": {
|
||||||
"heading": "Lebenslauf",
|
"heading": "Lebenslauf",
|
||||||
"reset": {
|
"reset": {
|
||||||
"primary": "Alles zurücksetzen",
|
"primary": "Alles zurücksetzen",
|
||||||
"secondary": "Zu viele Fehler gemacht? Klicken Sie hier, um alle Änderungen zurückzusetzen und bei Null zu beginnen. Sei vorsichtig, diese Aktion kann nicht rückgängig gemacht werden."
|
"secondary": "Zu viele Fehler gemacht? Klicken Sie hier, um alle Änderungen zurückzusetzen und von vorne zu beginnen. Vorsicht! Diese Aktion kann nicht rückgängig gemacht werden."
|
||||||
},
|
},
|
||||||
"sample": {
|
"sample": {
|
||||||
"primary": "Beispieldaten laden",
|
"primary": "Beispieldaten laden",
|
||||||
"secondary": "Nicht sicher, wo man anfangen soll? Klicken Sie hier, um ein paar Beispieldaten zu laden, um zu sehen, wie ein vollständiger Lebenslauf aussieht."
|
"secondary": "Sie sind nicht sicher, wo Sie anfangen sollen? Klicken Sie hier, um Beispieldaten zu laden. So können Sie sich ansehen, wie ein vollständiger Lebenslauf aussieht."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -323,8 +332,8 @@
|
|||||||
"label": "Kurze URL bevorzugen"
|
"label": "Kurze URL bevorzugen"
|
||||||
},
|
},
|
||||||
"visibility": {
|
"visibility": {
|
||||||
"subtitle": "Erlaube jemandem mit einem Link deinen Lebenslauf anzusehen",
|
"subtitle": "Erlaubt jedem, dem Sie diesen Link schicken, Ihren Lebenslauf anzusehen.",
|
||||||
"title": "Öffentlich"
|
"title": "Öffentlich zugänglich"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"templates": {
|
"templates": {
|
||||||
@ -333,16 +342,16 @@
|
|||||||
"theme": {
|
"theme": {
|
||||||
"form": {
|
"form": {
|
||||||
"background": {
|
"background": {
|
||||||
"label": "Hintergrund"
|
"label": "Hintergrundfarbe"
|
||||||
},
|
},
|
||||||
"primary": {
|
"primary": {
|
||||||
"label": "Primär"
|
"label": "Primärfarbe"
|
||||||
},
|
},
|
||||||
"text": {
|
"text": {
|
||||||
"label": "Text"
|
"label": "Textfarbe"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"heading": "Thema"
|
"heading": "Lebenslauf Design"
|
||||||
},
|
},
|
||||||
"typography": {
|
"typography": {
|
||||||
"form": {
|
"form": {
|
||||||
|
|||||||
@ -13,14 +13,14 @@
|
|||||||
"help-text": "Dieser Abschnitt unterstützt <1>Markdown</1> Formatierung."
|
"help-text": "Dieser Abschnitt unterstützt <1>Markdown</1> Formatierung."
|
||||||
},
|
},
|
||||||
"date": {
|
"date": {
|
||||||
"present": "Gegenwärtig"
|
"present": "Heute"
|
||||||
},
|
},
|
||||||
"subtitle": "Ein freier und Open-Source-Lebenslauf-Builder.",
|
"subtitle": "Ein kostenloser Open Source Lebenslauf-Baukasten.",
|
||||||
"title": "Reaktives Lebenslauf",
|
"title": "Reactive Resume",
|
||||||
"toast": {
|
"toast": {
|
||||||
"error": {
|
"error": {
|
||||||
"upload-file-size": "Bitte laden Sie nur Dateien unter 2 Megabytes hoch.",
|
"upload-file-size": "Bitte laden Sie nur Dateien unter 2 Megabytes hoch.",
|
||||||
"upload-photo-size": "Bitte laden Sie nur Fotos unter 2 Megabytes hoch, vorzugsweise quadratisch."
|
"upload-photo-size": "Bitte laden Sie nur Fotos unter 2 Megabytes hoch, am besten in einem quadratischen Format."
|
||||||
},
|
},
|
||||||
"success": {
|
"success": {
|
||||||
"resume-link-copied": "Ein Link zu deinem Lebenslauf wurde in deine Zwischenablage kopiert."
|
"resume-link-copied": "Ein Link zu deinem Lebenslauf wurde in deine Zwischenablage kopiert."
|
||||||
|
|||||||
@ -1,25 +1,25 @@
|
|||||||
{
|
{
|
||||||
"create-resume": {
|
"create-resume": {
|
||||||
"subtitle": "Bei Null anfangen",
|
"subtitle": "Mit einem leeren Lebenslauf starten",
|
||||||
"title": "Neuen Lebenslauf erstellen"
|
"title": "Neuen Lebenslauf erstellen"
|
||||||
},
|
},
|
||||||
"import-external": {
|
"import-external": {
|
||||||
"subtitle": "LinkedIn, JSON Resume, Reaktives Lebenslauf",
|
"subtitle": "LinkedIn, JSON Lebenslauf, Reactive Resume",
|
||||||
"title": "Aus externen Quellen importieren"
|
"title": "Aus externer Quelle importieren"
|
||||||
},
|
},
|
||||||
"resume": {
|
"resume": {
|
||||||
"menu": {
|
"menu": {
|
||||||
"delete": "Löschen",
|
"delete": "Löschen",
|
||||||
"duplicate": "Duplikat",
|
"duplicate": "Duplizieren",
|
||||||
"open": "Öffnen",
|
"open": "Öffnen",
|
||||||
"rename": "Umbenennen",
|
"rename": "Umbenennen",
|
||||||
"share-link": "Einen Link teilen",
|
"share-link": "Link teilen",
|
||||||
"tooltips": {
|
"tooltips": {
|
||||||
"delete": "Möchten Sie diesen Lebenslauf wirklich löschen? Dies ist eine irreversible Aktion.",
|
"delete": "Möchten Sie diesen Lebenslauf wirklich löschen? Dies lässt sich nicht rückgängig machen.",
|
||||||
"share-link": "Sie müssen die Sichtbarkeit Ihres Lebenslaufs auf öffentlich ändern, um ihn für andere sichtbar zu machen."
|
"share-link": "Sie müssen die Sichtbarkeit Ihres Lebenslaufs auf öffentlich ändern, um ihn für andere sichtbar zu machen."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"timestamp": "Zuletzt vor {{timestamp}} aktualisiert"
|
"timestamp": "Zuletzt vor {{timestamp}} geändert."
|
||||||
},
|
},
|
||||||
"title": "Dashboard"
|
"title": "Dashboard"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"actions": {
|
"actions": {
|
||||||
"app": "Gehe zu App",
|
"app": "Gehe zur App",
|
||||||
"login": "Anmelden",
|
"login": "Anmelden",
|
||||||
"logout": "Ausloggen",
|
"logout": "Ausloggen",
|
||||||
"register": "Registrieren"
|
"register": "Registrieren"
|
||||||
@ -9,34 +9,35 @@
|
|||||||
"heading": "Eigenschaften",
|
"heading": "Eigenschaften",
|
||||||
"list": {
|
"list": {
|
||||||
"ads": "Keine Werbung",
|
"ads": "Keine Werbung",
|
||||||
"export": "Exportieren Sie Ihren Lebenslauf in JSON oder PDF Format",
|
"export": "Exportieren Sie Ihren Lebenslauf als JSON oder PDF Format",
|
||||||
"free": "Frei, für immer",
|
"free": "Kostenlos, für immer",
|
||||||
"import": "Importiere Daten von LinkedIn, JSON Lebenslauf",
|
"import": "Importieren Sie Ihre Daten von LinkedIn oder als JSON Lebenslauf",
|
||||||
"languages": "In mehreren Sprachen zugänglich",
|
"languages": "In mehreren Sprachen verfügbar",
|
||||||
"more": "Und viel mehr aufregende Features, <1>lesen Sie alles hier</1>",
|
"more": "Und viele weitere aufregende Features. <1>Hier gibt es mehr informationen (in englischer Sprache)</1>",
|
||||||
"tracking": "Keine Benutzerverfolgung"
|
"tracking": "Kein Benutzertracking"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"links": {
|
"links": {
|
||||||
"heading": "Verknüpfungen",
|
"heading": "Verknüpfungen",
|
||||||
"links": {
|
"links": {
|
||||||
|
"docs": "Dokumentation",
|
||||||
"donate": "Spenden",
|
"donate": "Spenden",
|
||||||
"github": "Quellcode",
|
"github": "Quellcode",
|
||||||
"docs": "Dokumentation",
|
|
||||||
"privacy": "Datenschutzerklärung",
|
"privacy": "Datenschutzerklärung",
|
||||||
|
"reddit": "Reddit",
|
||||||
"service": "Nutzungsbedingungen"
|
"service": "Nutzungsbedingungen"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"screenshots": {
|
"screenshots": {
|
||||||
"heading": "Screenshots"
|
"heading": "Screenshots"
|
||||||
},
|
},
|
||||||
"testimonials": {
|
|
||||||
"heading": "Referenzen",
|
|
||||||
"body": "Gut oder schlecht, ich würde gerne Ihre Meinung über Reactive Resume und wie die Erfahrung war für Sie.<br/>Hier sind einige der Nachrichten, die von Benutzern auf der ganzen Welt gesendet werden.",
|
|
||||||
"contact": "Du kannst mich über <1>meine E-Mail</1> oder über das Kontaktformular auf <3>meiner Website</3>erreichen."
|
|
||||||
},
|
|
||||||
"summary": {
|
"summary": {
|
||||||
"body": "Reaktives Lebenslauf ist ein freier und Open-Source-Lebenslauf-Builder, der gebaut wurde, um die weltlichen Aufgaben zu machen, zu erstellen, Aktualisieren und teilen Sie Ihren Lebenslauf so einfach wie 1, 2, 3. Mit dieser App kannst du mehrere Bewerbungen erstellen, sie mit Recruitern oder Freunden über einen einzigartigen Link teilen und sie als PDF ausdrucken. alle kostenlos, keine Werbung, keine Verfolgung, ohne die Integrität und Privatsphäre Ihrer Daten zu verlieren.",
|
"body": "Reactive Resume ist ein kostenloser Open Source Lebenslauf-Builder, der gebaut wurde, um die langweilige Aufgabe einen Lebenslauf zu erstellen, aktuell zu halten und zu teilen so einfach wie möglich zu machen. Mit dieser App können Sie mehrere Lebensläufe erstellen, sie mit Recruitern oder Freunden über einen einzigartigen Link teilen und als PDF exportieren. Kostenlos, ohne Werbung, kein Tracking, ohne die Integrität und Privatsphäre Ihrer Daten zu verlieren.",
|
||||||
"heading": "Zusammenfassung"
|
"heading": "Zusammenfassung"
|
||||||
|
},
|
||||||
|
"testimonials": {
|
||||||
|
"body": "Egal ob gut oder schlecht - ich würde gerne Ihre Meinung über Reactive Resume hören und welche Erfahrungen Sie gemacht haben.<br/>Hier sind einige der Nachrichten, die mir von Benutzern auf der ganzen Welt zugesandt wurden.",
|
||||||
|
"contact": "Sie können mich über <1>meine E-Mail</1> oder über das Kontaktformular auf <3>meiner Website</3> erreichen.",
|
||||||
|
"heading": "Referenzen"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,16 +2,16 @@
|
|||||||
"auth": {
|
"auth": {
|
||||||
"forgot-password": {
|
"forgot-password": {
|
||||||
"actions": {
|
"actions": {
|
||||||
"send-email": "Passwort zurücksetzen E-Mail senden"
|
"send-email": "Passwort zurücksetzen E-Mail senden."
|
||||||
},
|
},
|
||||||
"body": "Geben Sie einfach die E-Mail-Adresse ein, die mit dem Konto verknüpft ist, das Sie wiederherstellen möchten.",
|
"body": "Geben Sie die E-Mail-Adresse des Benutzerkontos ein, dass Sie wiederherstellen möchten.",
|
||||||
"form": {
|
"form": {
|
||||||
"email": {
|
"email": {
|
||||||
"label": "E-Mail-Addresse"
|
"label": "E-Mail-Adresse"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"heading": "Passwort vergessen?",
|
"heading": "Passwort vergessen?",
|
||||||
"help-text": "Wenn das Konto existiert, erhalten Sie eine E-Mail mit einem Link zum Zurücksetzen Ihres Passworts."
|
"help-text": "Sollte das Konto existieren, erhalten Sie eine E-Mail mit einem Link zum Zurücksetzen des Passworts."
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
"actions": {
|
"actions": {
|
||||||
@ -24,12 +24,12 @@
|
|||||||
},
|
},
|
||||||
"username": {
|
"username": {
|
||||||
"help-text": "Sie können auch Ihre E-Mail-Adresse eingeben",
|
"help-text": "Sie können auch Ihre E-Mail-Adresse eingeben",
|
||||||
"label": "Nutzername"
|
"label": "Benutzername"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"heading": "Bei Ihrem Konto anmelden",
|
"heading": "Bei Ihrem Konto anmelden",
|
||||||
"recover-text": "Falls Sie Ihr Passwort vergessen haben, können Sie <1>Ihr Konto wiederherstellen</1> hier einrichten.",
|
"recover-text": "Falls Sie Ihr Passwort vergessen haben, können Sie es <1>hier zurücksetzen</1>.",
|
||||||
"register-text": "Wenn Sie keinen haben, können Sie hier <1>ein Konto erstellen</1> anlegen."
|
"register-text": "Sollten Sie kein Benutzerkonto haben, können Sie <1>hier ein Konto anlegen</1>."
|
||||||
},
|
},
|
||||||
"register": {
|
"register": {
|
||||||
"actions": {
|
"actions": {
|
||||||
@ -42,7 +42,7 @@
|
|||||||
"label": "Passwort bestätigen"
|
"label": "Passwort bestätigen"
|
||||||
},
|
},
|
||||||
"email": {
|
"email": {
|
||||||
"label": "E-Mail-Addresse"
|
"label": "E-Mail-Adresse"
|
||||||
},
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"label": "Vollständiger Name"
|
"label": "Vollständiger Name"
|
||||||
@ -71,6 +71,31 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"heading": "Passwort zurücksetzen"
|
"heading": "Passwort zurücksetzen"
|
||||||
|
},
|
||||||
|
"profile": {
|
||||||
|
"heading": "Ihr Benutzerkonto",
|
||||||
|
"form": {
|
||||||
|
"avatar": {
|
||||||
|
"help-text": "Sie können Ihr Profilbild auf <1>Gravatar</1> aktualisieren"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"label": "Vollständiger Name"
|
||||||
|
},
|
||||||
|
"email": {
|
||||||
|
"label": "E-Mail-Adresse",
|
||||||
|
"help-text": "Im Moment ist es nicht möglich, Ihre E-Mail-Adresse zu aktualisieren. Bitte erstellen Sie stattdessen ein neues Konto."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"delete-account": {
|
||||||
|
"heading": "Konto und Daten löschen",
|
||||||
|
"body": "Um Ihr Konto, Ihre Daten und alle Ihre Lebensläufe zu löschen, geben Sie „{{keyword}}“ in das Textfeld ein und klicken Sie auf die Schaltfläche. Bitte beachten Sie, dass dies ein irreversibler Vorgang ist und Ihre Daten nicht wiederhergestellt werden können.",
|
||||||
|
"actions": {
|
||||||
|
"delete": "Account löschen"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"save": "Änderungen speichern"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
@ -87,7 +112,7 @@
|
|||||||
"label": "Ist öffentlich zugänglich?"
|
"label": "Ist öffentlich zugänglich?"
|
||||||
},
|
},
|
||||||
"slug": {
|
"slug": {
|
||||||
"label": "Slug"
|
"label": "URL-Segment"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"heading": "Neuen Lebenslauf erstellen"
|
"heading": "Neuen Lebenslauf erstellen"
|
||||||
@ -98,14 +123,14 @@
|
|||||||
"actions": {
|
"actions": {
|
||||||
"upload-json": "JSON hochladen"
|
"upload-json": "JSON hochladen"
|
||||||
},
|
},
|
||||||
"body": "Wenn du einen <1>validierten JSON Resume</1> bereit hast, kannst du damit deine Entwicklung auf reaktiven Resume beschleunigen. Klicken Sie auf den Button unten und laden Sie eine gültige JSON-Datei hoch, um zu beginnen.",
|
"body": "Wenn du einen <1>validierten JSON Lebenslauf</1> bereit hast, kannst du damit deine Entwicklung auf Reactive Resume beschleunigen. Klicken Sie auf den Button unten und laden Sie eine gültige JSON-Datei hoch, um zu beginnen.",
|
||||||
"heading": "Import vom JSON-Lebenslauf"
|
"heading": "Import vom JSON-Lebenslauf"
|
||||||
},
|
},
|
||||||
"linkedin": {
|
"linkedin": {
|
||||||
"actions": {
|
"actions": {
|
||||||
"upload-archive": "ZIP-Archiv hochladen"
|
"upload-archive": "ZIP-Archiv hochladen"
|
||||||
},
|
},
|
||||||
"body": "Sie können Zeit sparen, indem Sie Ihre Daten aus LinkedIn exportieren und sie zum automatischen Ausfüllen von Feldern auf Reaktives Lebenslauf verwenden. Gehen Sie zum Abschnitt <1>Datenschutz </1> auf LinkedIn und fordern Sie ein Archiv Ihrer Daten an. Sobald diese verfügbar sind, laden Sie die ZIP-Datei unten hoch.",
|
"body": "Sie können Zeit sparen, indem Sie Ihre Daten aus LinkedIn exportieren und sie zum automatischen Ausfüllen von Feldern auf Reactive Resume verwenden. Gehen Sie zum Abschnitt <1>Datenschutz </1> auf LinkedIn und fordern Sie ein Archiv Ihrer Daten an. Sobald diese verfügbar sind, laden Sie die ZIP-Datei unten hoch.",
|
||||||
"heading": "Aus LinkedIn importieren"
|
"heading": "Aus LinkedIn importieren"
|
||||||
},
|
},
|
||||||
"reactive-resume": {
|
"reactive-resume": {
|
||||||
@ -114,7 +139,7 @@
|
|||||||
"upload-json-v2": "Laden Sie JSON von v2 hoch"
|
"upload-json-v2": "Laden Sie JSON von v2 hoch"
|
||||||
},
|
},
|
||||||
"body": "Wenn Sie eine JSON haben, die mit der aktuellen Version von Reactive Resume exportiert wurde, können Sie sie hier wieder importieren, um wieder eine bearbeitbare Version zu erhalten.",
|
"body": "Wenn Sie eine JSON haben, die mit der aktuellen Version von Reactive Resume exportiert wurde, können Sie sie hier wieder importieren, um wieder eine bearbeitbare Version zu erhalten.",
|
||||||
"heading": "Import vom Reaktives Lebenslauf"
|
"heading": "Import von Reactive Resume"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"rename-resume": {
|
"rename-resume": {
|
||||||
@ -126,7 +151,7 @@
|
|||||||
"label": "Name"
|
"label": "Name"
|
||||||
},
|
},
|
||||||
"slug": {
|
"slug": {
|
||||||
"label": "Slug"
|
"label": "URL-Segment"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"heading": "Lebenslauf umbenennen"
|
"heading": "Lebenslauf umbenennen"
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
"actions": {
|
"actions": {
|
||||||
"add": "Προσθήκη νέου {{token}}",
|
"add": "Προσθήκη νέου {{token}}",
|
||||||
"delete": "Διαγραφή {{token}}",
|
"delete": "Διαγραφή {{token}}",
|
||||||
|
"duplicate": "Διπλότυπο τμήμα",
|
||||||
"edit": "Επεξεργασία {{token}}"
|
"edit": "Επεξεργασία {{token}}"
|
||||||
},
|
},
|
||||||
"columns": {
|
"columns": {
|
||||||
@ -80,13 +81,13 @@
|
|||||||
"center-artboard": "Κεντράρισμα πίνακα",
|
"center-artboard": "Κεντράρισμα πίνακα",
|
||||||
"copy-link": "Αντιγραφή συνδέσμου στο βιογραφικό",
|
"copy-link": "Αντιγραφή συνδέσμου στο βιογραφικό",
|
||||||
"export-pdf": "Εξαγωγή σε PDF",
|
"export-pdf": "Εξαγωγή σε PDF",
|
||||||
|
"redo": "Redo",
|
||||||
"toggle-orientation": "Εναλλαγή προσανατολισμού σελίδας",
|
"toggle-orientation": "Εναλλαγή προσανατολισμού σελίδας",
|
||||||
"toggle-page-break-line": "Εναλλαγή γραμμής αλλαγής σελίδας",
|
"toggle-page-break-line": "Εναλλαγή γραμμής αλλαγής σελίδας",
|
||||||
"toggle-sidebars": "Εναλλαγή πλευρικών γραμμών",
|
"toggle-sidebars": "Εναλλαγή πλευρικών γραμμών",
|
||||||
"zoom-in": "Μεγέθυνση",
|
|
||||||
"zoom-out": "Σμίκρυνση",
|
|
||||||
"undo": "Αναίρεση",
|
"undo": "Αναίρεση",
|
||||||
"redo": "Redo"
|
"zoom-in": "Μεγέθυνση",
|
||||||
|
"zoom-out": "Σμίκρυνση"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"header": {
|
"header": {
|
||||||
@ -114,6 +115,9 @@
|
|||||||
"actions": {
|
"actions": {
|
||||||
"photo-filters": "Φίλτρα φωτογραφιών"
|
"photo-filters": "Φίλτρα φωτογραφιών"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "Ημερομηνια γεννησης"
|
||||||
|
},
|
||||||
"heading": "Βασικά",
|
"heading": "Βασικά",
|
||||||
"headline": {
|
"headline": {
|
||||||
"label": "Επικεφαλίδα"
|
"label": "Επικεφαλίδα"
|
||||||
@ -121,9 +125,6 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "Ονοματεπώνυμο"
|
"label": "Ονοματεπώνυμο"
|
||||||
},
|
},
|
||||||
"birthdate": {
|
|
||||||
"label": "Ημερομηνια γεννησης"
|
|
||||||
},
|
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
@ -174,6 +175,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"experience": {
|
||||||
|
"form": {
|
||||||
|
"name": {
|
||||||
|
"label": "Company Name"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"location": {
|
"location": {
|
||||||
"address": {
|
"address": {
|
||||||
"label": "Διεύθυνση"
|
"label": "Διεύθυνση"
|
||||||
@ -264,14 +272,15 @@
|
|||||||
"button": "Σφάλματα GitHub",
|
"button": "Σφάλματα GitHub",
|
||||||
"heading": "Σφάλματα; Αιτήματα δυνατοτήτων;"
|
"heading": "Σφάλματα; Αιτήματα δυνατοτήτων;"
|
||||||
},
|
},
|
||||||
|
"docs": "Τεκμηρίωση",
|
||||||
"donate": {
|
"donate": {
|
||||||
"body": "Αν σας άρεσε να χρησιμοποιείτε το Reactive Resume, σκεφτείτε το ενδεχόμενο να δωρίσετε όσο το δυνατόν περισσότερα για τον σκοπό της διατήρησης και λειτουργίας της εφαρμογής, χωρίς διαφημίσεις και δωρεάν για πάντα.",
|
"body": "Αν σας άρεσε να χρησιμοποιείτε το Reactive Resume, σκεφτείτε το ενδεχόμενο να δωρίσετε όσο το δυνατόν περισσότερα για τον σκοπό της διατήρησης και λειτουργίας της εφαρμογής, χωρίς διαφημίσεις και δωρεάν για πάντα.",
|
||||||
"button": "Κεράστε με ένα καφεδάκι",
|
"button": "Κεράστε με ένα καφεδάκι",
|
||||||
"heading": "Κάντε δωρεά στο Reactive βιογραφικό"
|
"heading": "Κάντε δωρεά στο Reactive βιογραφικό"
|
||||||
},
|
},
|
||||||
"github": "Πηγαίος κώδικας",
|
"github": "Πηγαίος κώδικας",
|
||||||
"docs": "Τεκμηρίωση",
|
"heading": "Σύνδεσμοι",
|
||||||
"heading": "Σύνδεσμοι"
|
"reddit": "Reddit"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"global": {
|
"global": {
|
||||||
@ -290,14 +299,14 @@
|
|||||||
},
|
},
|
||||||
"heading": "Ρυθμίσεις",
|
"heading": "Ρυθμίσεις",
|
||||||
"page": {
|
"page": {
|
||||||
"format": {
|
|
||||||
"primary": "Μέγεθος χαρτιού",
|
|
||||||
"secondary": "Καθορίζει τις διαστάσεις των σελίδων του βιογραφικού σας"
|
|
||||||
},
|
|
||||||
"break-line": {
|
"break-line": {
|
||||||
"primary": "Γραμμή διακοπής",
|
"primary": "Γραμμή διακοπής",
|
||||||
"secondary": "Εμφάνιση μιας γραμμής σε όλες τις σελίδες για να επισημάνετε το ύψος μιας σελίδας Α4"
|
"secondary": "Εμφάνιση μιας γραμμής σε όλες τις σελίδες για να επισημάνετε το ύψος μιας σελίδας Α4"
|
||||||
},
|
},
|
||||||
|
"format": {
|
||||||
|
"primary": "Μέγεθος χαρτιού",
|
||||||
|
"secondary": "Καθορίζει τις διαστάσεις των σελίδων του βιογραφικού σας"
|
||||||
|
},
|
||||||
"heading": "Σελίδα",
|
"heading": "Σελίδα",
|
||||||
"orientation": {
|
"orientation": {
|
||||||
"disabled": "Δεν έχει αποτέλεσμα όταν υπάρχει μόνο μία σελίδα",
|
"disabled": "Δεν έχει αποτέλεσμα όταν υπάρχει μόνο μία σελίδα",
|
||||||
|
|||||||
@ -20,23 +20,24 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"heading": "Σύνδεσμοι",
|
"heading": "Σύνδεσμοι",
|
||||||
"links": {
|
"links": {
|
||||||
|
"docs": "Τεκμηρίωση",
|
||||||
"donate": "Δωρεά",
|
"donate": "Δωρεά",
|
||||||
"github": "Πηγαίος Κώδικας",
|
"github": "Πηγαίος Κώδικας",
|
||||||
"docs": "Τεκμηρίωση",
|
|
||||||
"privacy": "Πολιτική Απορρήτου",
|
"privacy": "Πολιτική Απορρήτου",
|
||||||
|
"reddit": "Reddit",
|
||||||
"service": "Όρους παροχής υπηρεσιών"
|
"service": "Όρους παροχής υπηρεσιών"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"screenshots": {
|
"screenshots": {
|
||||||
"heading": "Στιγμιότυπα οθόνης"
|
"heading": "Στιγμιότυπα οθόνης"
|
||||||
},
|
},
|
||||||
"testimonials": {
|
|
||||||
"heading": "Αναφορές",
|
|
||||||
"body": "Καλή ή κακή, θα ήθελα πολύ να ακούσω τη γνώμη σας για το Reactive Resume και πώς ήταν η εμπειρία σας.<br/>Ακολουθούν μερικά από τα μηνύματα που έστειλαν χρήστες από όλο τον κόσμο.",
|
|
||||||
"contact": "Μπορείτε να επικοινωνήσετε μαζί μου μέσω <1>του email μου</1> ή μέσω της φόρμας επικοινωνίας στην <3>ιστοσελίδα μου</3>."
|
|
||||||
},
|
|
||||||
"summary": {
|
"summary": {
|
||||||
"body": "Το Reactive Resume είναι ένας δωρεάν κατασκευαστής βιογραφικών σημειωμάτων ανοικτού κώδικα που έχει δημιουργηθεί για να κάνει τις καθημερινές εργασίες δημιουργίας, ενημέρωσης και κοινοποίησης του βιογραφικού σας σημειώματος τόσο εύκολες όσο το 1, 2, 3. Με αυτή την εφαρμογή, μπορείτε να δημιουργήσετε πολλαπλά βιογραφικά, να τα μοιραστείτε με τους υπεύθυνους προσλήψεων ή τους φίλους σας μέσω ενός μοναδικού συνδέσμου και να τα εκτυπώσετε σε μορφή PDF, και όλα αυτά δωρεάν, χωρίς διαφημίσεις, χωρίς παρακολούθηση, χωρίς να χάσετε την ακεραιότητα και το απόρρητο των δεδομένων σας.",
|
"body": "Το Reactive Resume είναι ένας δωρεάν κατασκευαστής βιογραφικών σημειωμάτων ανοικτού κώδικα που έχει δημιουργηθεί για να κάνει τις καθημερινές εργασίες δημιουργίας, ενημέρωσης και κοινοποίησης του βιογραφικού σας σημειώματος τόσο εύκολες όσο το 1, 2, 3. Με αυτή την εφαρμογή, μπορείτε να δημιουργήσετε πολλαπλά βιογραφικά, να τα μοιραστείτε με τους υπεύθυνους προσλήψεων ή τους φίλους σας μέσω ενός μοναδικού συνδέσμου και να τα εκτυπώσετε σε μορφή PDF, και όλα αυτά δωρεάν, χωρίς διαφημίσεις, χωρίς παρακολούθηση, χωρίς να χάσετε την ακεραιότητα και το απόρρητο των δεδομένων σας.",
|
||||||
"heading": "Σύνοψη"
|
"heading": "Σύνοψη"
|
||||||
|
},
|
||||||
|
"testimonials": {
|
||||||
|
"body": "Καλή ή κακή, θα ήθελα πολύ να ακούσω τη γνώμη σας για το Reactive Resume και πώς ήταν η εμπειρία σας.<br/>Ακολουθούν μερικά από τα μηνύματα που έστειλαν χρήστες από όλο τον κόσμο.",
|
||||||
|
"contact": "Μπορείτε να επικοινωνήσετε μαζί μου μέσω <1>του email μου</1> ή μέσω της φόρμας επικοινωνίας στην <3>ιστοσελίδα μου</3>.",
|
||||||
|
"heading": "Αναφορές"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -71,6 +71,31 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"heading": "Επαναφορά του κωδικού πρόσβασής σας"
|
"heading": "Επαναφορά του κωδικού πρόσβασής σας"
|
||||||
|
},
|
||||||
|
"profile": {
|
||||||
|
"heading": "Του λογαριασμού σας",
|
||||||
|
"form": {
|
||||||
|
"avatar": {
|
||||||
|
"help-text": "Μπορείτε να ενημερώσετε την εικόνα του προφίλ σας στο <1>Gravatar</1>"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"label": "Πλήρες όνομα"
|
||||||
|
},
|
||||||
|
"email": {
|
||||||
|
"label": "Διεύθυνση ηλεκτρονικού ταχυδρομείου",
|
||||||
|
"help-text": "Δεν είναι δυνατό να ενημερώσετε τη διεύθυνση email σας αυτήν τη στιγμή, δημιουργήστε έναν νέο λογαριασμό."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"delete-account": {
|
||||||
|
"heading": "Διαγραφή λογαριασμού και δεδομένων",
|
||||||
|
"body": "Για να διαγράψετε τον λογαριασμό σας, τα δεδομένα σας και όλα τα βιογραφικά σας, πληκτρολογήστε \"{{keyword}}\" στο πλαίσιο κειμένου και κάντε κλικ στο κουμπί. Λάβετε υπόψη ότι αυτή είναι μια μη αναστρέψιμη ενέργεια και τα δεδομένα σας δεν μπορούν να ανακτηθούν ξανά.",
|
||||||
|
"actions": {
|
||||||
|
"delete": "Διαγραφή λογαριασμού"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"save": "Αποθήκευσε τις αλλαγές"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
|
|||||||
@ -3,8 +3,8 @@
|
|||||||
"actions": {
|
"actions": {
|
||||||
"add": "Add New {{token}}",
|
"add": "Add New {{token}}",
|
||||||
"delete": "Delete {{token}}",
|
"delete": "Delete {{token}}",
|
||||||
"edit": "Edit {{token}}",
|
"duplicate": "Duplicate Section",
|
||||||
"duplicate": "Duplicate Section"
|
"edit": "Edit {{token}}"
|
||||||
},
|
},
|
||||||
"columns": {
|
"columns": {
|
||||||
"heading": "Columns",
|
"heading": "Columns",
|
||||||
@ -81,13 +81,13 @@
|
|||||||
"center-artboard": "Center Artboard",
|
"center-artboard": "Center Artboard",
|
||||||
"copy-link": "Copy Link to Resume",
|
"copy-link": "Copy Link to Resume",
|
||||||
"export-pdf": "Export PDF",
|
"export-pdf": "Export PDF",
|
||||||
|
"redo": "Redo",
|
||||||
"toggle-orientation": "Toggle Page Orientation",
|
"toggle-orientation": "Toggle Page Orientation",
|
||||||
"toggle-page-break-line": "Toggle Page Break Line",
|
"toggle-page-break-line": "Toggle Page Break Line",
|
||||||
"toggle-sidebars": "Toggle Sidebars",
|
"toggle-sidebars": "Toggle Sidebars",
|
||||||
"zoom-in": "Zoom In",
|
|
||||||
"zoom-out": "Zoom Out",
|
|
||||||
"undo": "Undo",
|
"undo": "Undo",
|
||||||
"redo": "Redo"
|
"zoom-in": "Zoom In",
|
||||||
|
"zoom-out": "Zoom Out"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"header": {
|
"header": {
|
||||||
@ -115,6 +115,9 @@
|
|||||||
"actions": {
|
"actions": {
|
||||||
"photo-filters": "Photo Filters"
|
"photo-filters": "Photo Filters"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "Date of Birth"
|
||||||
|
},
|
||||||
"heading": "Basics",
|
"heading": "Basics",
|
||||||
"headline": {
|
"headline": {
|
||||||
"label": "Headline"
|
"label": "Headline"
|
||||||
@ -122,9 +125,6 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "Full Name"
|
"label": "Full Name"
|
||||||
},
|
},
|
||||||
"birthdate": {
|
|
||||||
"label": "Date of Birth"
|
|
||||||
},
|
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
@ -175,6 +175,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"experience": {
|
||||||
|
"form": {
|
||||||
|
"name": {
|
||||||
|
"label": "Company Name"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"location": {
|
"location": {
|
||||||
"address": {
|
"address": {
|
||||||
"label": "Address"
|
"label": "Address"
|
||||||
@ -265,14 +272,15 @@
|
|||||||
"button": "GitHub Issues",
|
"button": "GitHub Issues",
|
||||||
"heading": "Bugs? Feature Requests?"
|
"heading": "Bugs? Feature Requests?"
|
||||||
},
|
},
|
||||||
|
"docs": "Documentation",
|
||||||
"donate": {
|
"donate": {
|
||||||
"body": "If you liked using Reactive Resume, please consider donating as much as you can to the cause of keeping the app up and running, without ads and free forever.",
|
"body": "If you liked using Reactive Resume, please consider donating as much as you can to the cause of keeping the app up and running, without ads and free forever.",
|
||||||
"button": "Buy me a coffee",
|
"button": "Buy me a coffee",
|
||||||
"heading": "Donate to Reactive Resume"
|
"heading": "Donate to Reactive Resume"
|
||||||
},
|
},
|
||||||
"github": "Source Code",
|
"github": "Source Code",
|
||||||
"docs": "Documentation",
|
"heading": "Links",
|
||||||
"heading": "Links"
|
"reddit": "Reddit"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"global": {
|
"global": {
|
||||||
@ -291,14 +299,14 @@
|
|||||||
},
|
},
|
||||||
"heading": "Settings",
|
"heading": "Settings",
|
||||||
"page": {
|
"page": {
|
||||||
"format": {
|
|
||||||
"primary": "Paper Size",
|
|
||||||
"secondary": "Determines the dimensions of your resume pages"
|
|
||||||
},
|
|
||||||
"break-line": {
|
"break-line": {
|
||||||
"primary": "Break Line",
|
"primary": "Break Line",
|
||||||
"secondary": "Show a line on all pages to mark the height of an A4 page"
|
"secondary": "Show a line on all pages to mark the height of an A4 page"
|
||||||
},
|
},
|
||||||
|
"format": {
|
||||||
|
"primary": "Paper Size",
|
||||||
|
"secondary": "Determines the dimensions of your resume pages"
|
||||||
|
},
|
||||||
"heading": "Page",
|
"heading": "Page",
|
||||||
"orientation": {
|
"orientation": {
|
||||||
"disabled": "Has no effect when there is only one page",
|
"disabled": "Has no effect when there is only one page",
|
||||||
|
|||||||
@ -20,23 +20,24 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"heading": "Links",
|
"heading": "Links",
|
||||||
"links": {
|
"links": {
|
||||||
|
"docs": "Documentation",
|
||||||
"donate": "Donate",
|
"donate": "Donate",
|
||||||
"github": "Source Code",
|
"github": "Source Code",
|
||||||
"docs": "Documentation",
|
|
||||||
"privacy": "Privacy Policy",
|
"privacy": "Privacy Policy",
|
||||||
|
"reddit": "Reddit",
|
||||||
"service": "Terms of Service"
|
"service": "Terms of Service"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"screenshots": {
|
"screenshots": {
|
||||||
"heading": "Screenshots"
|
"heading": "Screenshots"
|
||||||
},
|
},
|
||||||
"testimonials": {
|
|
||||||
"heading": "Testimonials",
|
|
||||||
"body": "Good or bad, I would love to hear your opinion on Reactive Resume and how the experience has been for you.<br/>Here are some of the messages sent in by users across the world.",
|
|
||||||
"contact": "You can reach out to me through <1>my email</1> or through the contact form on <3>my website</3>."
|
|
||||||
},
|
|
||||||
"summary": {
|
"summary": {
|
||||||
"body": "Reactive Resume is a free and open source resume builder that's built to make the mundane tasks of creating, updating and sharing your resume as easy as 1, 2, 3. With this app, you can create multiple resumes, share them with recruiters or friends through a unique link and print it as a PDF, all for free, no ads, no tracking, without losing the integrity and privacy of your data.",
|
"body": "Reactive Resume is a free and open source resume builder that's built to make the mundane tasks of creating, updating and sharing your resume as easy as 1, 2, 3. With this app, you can create multiple resumes, share them with recruiters or friends through a unique link and print it as a PDF, all for free, no ads, no tracking, without losing the integrity and privacy of your data.",
|
||||||
"heading": "Summary"
|
"heading": "Summary"
|
||||||
|
},
|
||||||
|
"testimonials": {
|
||||||
|
"body": "Good or bad, I would love to hear your opinion on Reactive Resume and how the experience has been for you.<br/>Here are some of the messages sent in by users across the world.",
|
||||||
|
"contact": "You can reach out to me through <1>my email</1> or through the contact form on <3>my website</3>.",
|
||||||
|
"heading": "Testimonials"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -71,6 +71,31 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"heading": "Reset your password"
|
"heading": "Reset your password"
|
||||||
|
},
|
||||||
|
"profile": {
|
||||||
|
"heading": "Your Account",
|
||||||
|
"form": {
|
||||||
|
"avatar": {
|
||||||
|
"help-text": "You can update your profile picture on <1>Gravatar</1>"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"label": "Full Name"
|
||||||
|
},
|
||||||
|
"email": {
|
||||||
|
"label": "Email Address",
|
||||||
|
"help-text": "It is not possible to update your email address at the moment, please create a new account instead."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"delete-account": {
|
||||||
|
"heading": "Delete Account and Data",
|
||||||
|
"body": "To delete your account, your data and all your resumes, type \"{{keyword}}\" into the textbox and click on the button. Please note that this is an irreversible action and your data cannot be retrieved again.",
|
||||||
|
"actions": {
|
||||||
|
"delete": "Delete Account"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"save": "Save Changes"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
"actions": {
|
"actions": {
|
||||||
"add": "Agregar nuevo {{token}}",
|
"add": "Agregar nuevo {{token}}",
|
||||||
"delete": "Eliminar {{token}}",
|
"delete": "Eliminar {{token}}",
|
||||||
|
"duplicate": "Duplicar sección",
|
||||||
"edit": "Editar {{token}}"
|
"edit": "Editar {{token}}"
|
||||||
},
|
},
|
||||||
"columns": {
|
"columns": {
|
||||||
@ -80,13 +81,13 @@
|
|||||||
"center-artboard": "Centrar Tablero",
|
"center-artboard": "Centrar Tablero",
|
||||||
"copy-link": "Copiar enlace al currículum",
|
"copy-link": "Copiar enlace al currículum",
|
||||||
"export-pdf": "Exportar PDF",
|
"export-pdf": "Exportar PDF",
|
||||||
|
"redo": "Rehacer",
|
||||||
"toggle-orientation": "Cambiar la orientación de la página",
|
"toggle-orientation": "Cambiar la orientación de la página",
|
||||||
"toggle-page-break-line": "Alternar línea de salto de página",
|
"toggle-page-break-line": "Alternar línea de salto de página",
|
||||||
"toggle-sidebars": "Ocultar/mostrar barra lateral",
|
"toggle-sidebars": "Ocultar/mostrar barra lateral",
|
||||||
"zoom-in": "Acercar",
|
|
||||||
"zoom-out": "Alejar",
|
|
||||||
"undo": "Deshacer",
|
"undo": "Deshacer",
|
||||||
"redo": "Rehacer"
|
"zoom-in": "Acercar",
|
||||||
|
"zoom-out": "Alejar"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"header": {
|
"header": {
|
||||||
@ -114,6 +115,9 @@
|
|||||||
"actions": {
|
"actions": {
|
||||||
"photo-filters": "Filtro de fotos"
|
"photo-filters": "Filtro de fotos"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "Fecha de cumpleaños"
|
||||||
|
},
|
||||||
"heading": "Información básica",
|
"heading": "Información básica",
|
||||||
"headline": {
|
"headline": {
|
||||||
"label": "Titular"
|
"label": "Titular"
|
||||||
@ -121,9 +125,6 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "Nombre Completo"
|
"label": "Nombre Completo"
|
||||||
},
|
},
|
||||||
"birthdate": {
|
|
||||||
"label": "Fecha de cumpleaños"
|
|
||||||
},
|
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
@ -174,6 +175,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"experience": {
|
||||||
|
"form": {
|
||||||
|
"name": {
|
||||||
|
"label": "Company Name"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"location": {
|
"location": {
|
||||||
"address": {
|
"address": {
|
||||||
"label": "Dirección"
|
"label": "Dirección"
|
||||||
@ -264,14 +272,15 @@
|
|||||||
"button": "Propuesta de GitHub",
|
"button": "Propuesta de GitHub",
|
||||||
"heading": "¿Errores? ¿Solicitud de características?"
|
"heading": "¿Errores? ¿Solicitud de características?"
|
||||||
},
|
},
|
||||||
|
"docs": "Documentación",
|
||||||
"donate": {
|
"donate": {
|
||||||
"body": "Si le gustó usar Reactive Resume, considere donar lo que pueda a la causa de mantener la aplicación en funcionamiento, sin anuncios y gratis para siempre.",
|
"body": "Si le gustó usar Reactive Resume, considere donar lo que pueda a la causa de mantener la aplicación en funcionamiento, sin anuncios y gratis para siempre.",
|
||||||
"button": "Invítame a un café",
|
"button": "Invítame a un café",
|
||||||
"heading": "Donar a Reactive Resume"
|
"heading": "Donar a Reactive Resume"
|
||||||
},
|
},
|
||||||
"github": "Código Fuente",
|
"github": "Código Fuente",
|
||||||
"docs": "Documentación",
|
"heading": "Enlaces",
|
||||||
"heading": "Enlaces"
|
"reddit": "Reddit"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"global": {
|
"global": {
|
||||||
@ -290,14 +299,14 @@
|
|||||||
},
|
},
|
||||||
"heading": "Preferencias",
|
"heading": "Preferencias",
|
||||||
"page": {
|
"page": {
|
||||||
"format": {
|
|
||||||
"primary": "Tamaño de papel",
|
|
||||||
"secondary": "Determina las dimensiones de las páginas de tu currículum."
|
|
||||||
},
|
|
||||||
"break-line": {
|
"break-line": {
|
||||||
"primary": "Linea de separación",
|
"primary": "Linea de separación",
|
||||||
"secondary": "Mostrar una línea en todas las páginas para marcar la altura de una página A4"
|
"secondary": "Mostrar una línea en todas las páginas para marcar la altura de una página A4"
|
||||||
},
|
},
|
||||||
|
"format": {
|
||||||
|
"primary": "Tamaño de papel",
|
||||||
|
"secondary": "Determina las dimensiones de las páginas de tu currículum."
|
||||||
|
},
|
||||||
"heading": "Página",
|
"heading": "Página",
|
||||||
"orientation": {
|
"orientation": {
|
||||||
"disabled": "No tiene efecto cuando solo hay una página",
|
"disabled": "No tiene efecto cuando solo hay una página",
|
||||||
|
|||||||
@ -12,7 +12,7 @@
|
|||||||
"delete": "Borrar",
|
"delete": "Borrar",
|
||||||
"duplicate": "Duplicar",
|
"duplicate": "Duplicar",
|
||||||
"open": "Abrir",
|
"open": "Abrir",
|
||||||
"rename": "Rebautizar",
|
"rename": "Renombrar",
|
||||||
"share-link": "Compartir enlace",
|
"share-link": "Compartir enlace",
|
||||||
"tooltips": {
|
"tooltips": {
|
||||||
"delete": "¿Está seguro de que desea eliminar este currículum? Esta es una acción irreversible.",
|
"delete": "¿Está seguro de que desea eliminar este currículum? Esta es una acción irreversible.",
|
||||||
|
|||||||
@ -20,23 +20,24 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"heading": "Enlaces",
|
"heading": "Enlaces",
|
||||||
"links": {
|
"links": {
|
||||||
|
"docs": "Documentación",
|
||||||
"donate": "Donar",
|
"donate": "Donar",
|
||||||
"github": "Código fuente",
|
"github": "Código fuente",
|
||||||
"docs": "Documentación",
|
|
||||||
"privacy": "Política de Privacidad",
|
"privacy": "Política de Privacidad",
|
||||||
|
"reddit": "Reddit",
|
||||||
"service": "Términos de Servicio"
|
"service": "Términos de Servicio"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"screenshots": {
|
"screenshots": {
|
||||||
"heading": "Capturas de pantalla"
|
"heading": "Capturas de pantalla"
|
||||||
},
|
},
|
||||||
"testimonials": {
|
|
||||||
"heading": "Opiniones",
|
|
||||||
"body": "Bueno o malo, me encantaría saber tu opinión sobre Reactive Resume y cómo ha sido la experiencia para ti.<br/>Estos son algunos de los mensajes enviados por usuarios de todo el mundo.",
|
|
||||||
"contact": "Puedes comunicarte conmigo a través de <1>mi correo electrónico</1> o a través del formulario de contacto en <3>mi sitio web</3>."
|
|
||||||
},
|
|
||||||
"summary": {
|
"summary": {
|
||||||
"body": "Reactive Resume es un generador de currículums gratuito y de código abierto que está diseñado para hacer que las tareas mundanas de crear, actualizar y compartir su currículum sean tan fáciles como 1, 2, 3. Con esta aplicación, puede crear múltiples currículums, compartirlos con reclutadores o amigos a través de un enlace único e imprímalo como PDF, todo gratis, sin anuncios, sin seguimiento, sin perder la integridad y privacidad de sus datos.",
|
"body": "Reactive Resume es un generador de currículums gratuito y de código abierto que está diseñado para hacer que las tareas mundanas de crear, actualizar y compartir su currículum sean tan fáciles como 1, 2, 3. Con esta aplicación, puede crear múltiples currículums, compartirlos con reclutadores o amigos a través de un enlace único e imprímalo como PDF, todo gratis, sin anuncios, sin seguimiento, sin perder la integridad y privacidad de sus datos.",
|
||||||
"heading": "Resumen"
|
"heading": "Resumen"
|
||||||
|
},
|
||||||
|
"testimonials": {
|
||||||
|
"body": "Bueno o malo, me encantaría saber tu opinión sobre Reactive Resume y cómo ha sido la experiencia para ti.<br/>Estos son algunos de los mensajes enviados por usuarios de todo el mundo.",
|
||||||
|
"contact": "Puedes comunicarte conmigo a través de <1>mi correo electrónico</1> o a través del formulario de contacto en <3>mi sitio web</3>.",
|
||||||
|
"heading": "Opiniones"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -71,6 +71,31 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"heading": "Restablecer tu contraseña"
|
"heading": "Restablecer tu contraseña"
|
||||||
|
},
|
||||||
|
"profile": {
|
||||||
|
"heading": "Tu cuenta",
|
||||||
|
"form": {
|
||||||
|
"avatar": {
|
||||||
|
"help-text": "Puedes actualizar tu foto de perfil en <1>Gravatar</1>"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"label": "Nombre Completo"
|
||||||
|
},
|
||||||
|
"email": {
|
||||||
|
"label": "Correo electrónico",
|
||||||
|
"help-text": "No es posible actualizar tu dirección de correo electrónico en este momento, por favor crea una nueva cuenta en su lugar."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"delete-account": {
|
||||||
|
"heading": "Eliminar cuenta y datos",
|
||||||
|
"body": "Para eliminar su cuenta, sus datos y todos sus currículums, escriba \"{{keyword}}\" en el cuadro de texto y haga clic en el botón. Tenga en cuenta que esta es una acción irreversible y sus datos no se pueden recuperar nuevamente.",
|
||||||
|
"actions": {
|
||||||
|
"delete": "Eliminar Cuenta"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"save": "Guardar cambios"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
"actions": {
|
"actions": {
|
||||||
"add": "{{token}} جدید اضافه کنید",
|
"add": "{{token}} جدید اضافه کنید",
|
||||||
"delete": "حذف {{token}}",
|
"delete": "حذف {{token}}",
|
||||||
|
"duplicate": "بخش تکراری",
|
||||||
"edit": "ویرایش {{token}}"
|
"edit": "ویرایش {{token}}"
|
||||||
},
|
},
|
||||||
"columns": {
|
"columns": {
|
||||||
@ -80,13 +81,13 @@
|
|||||||
"center-artboard": "قرار دادن صفحه در مرکز",
|
"center-artboard": "قرار دادن صفحه در مرکز",
|
||||||
"copy-link": "کپی کردن لینک رزومه",
|
"copy-link": "کپی کردن لینک رزومه",
|
||||||
"export-pdf": "خروجی PDF",
|
"export-pdf": "خروجی PDF",
|
||||||
|
"redo": "دوباره انجام دهید",
|
||||||
"toggle-orientation": "تغییر وضعیت جهتگیری صفحه",
|
"toggle-orientation": "تغییر وضعیت جهتگیری صفحه",
|
||||||
"toggle-page-break-line": "تغییر وضعیت خط شکست صفحه",
|
"toggle-page-break-line": "تغییر وضعیت خط شکست صفحه",
|
||||||
"toggle-sidebars": "باز/بسته کردن نوار کنار صفحه",
|
"toggle-sidebars": "باز/بسته کردن نوار کنار صفحه",
|
||||||
"zoom-in": "بزرگنمایی",
|
|
||||||
"zoom-out": "کوچکنمایی",
|
|
||||||
"undo": "واگرد",
|
"undo": "واگرد",
|
||||||
"redo": "دوباره انجام دهید"
|
"zoom-in": "بزرگنمایی",
|
||||||
|
"zoom-out": "کوچکنمایی"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"header": {
|
"header": {
|
||||||
@ -114,6 +115,9 @@
|
|||||||
"actions": {
|
"actions": {
|
||||||
"photo-filters": "فیلترهای تصویر"
|
"photo-filters": "فیلترهای تصویر"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "تاریخ تولد"
|
||||||
|
},
|
||||||
"heading": "موارد پایه",
|
"heading": "موارد پایه",
|
||||||
"headline": {
|
"headline": {
|
||||||
"label": "سرصفحه"
|
"label": "سرصفحه"
|
||||||
@ -121,9 +125,6 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "نام کامل"
|
"label": "نام کامل"
|
||||||
},
|
},
|
||||||
"birthdate": {
|
|
||||||
"label": "تاریخ تولد"
|
|
||||||
},
|
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
@ -174,6 +175,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"experience": {
|
||||||
|
"form": {
|
||||||
|
"name": {
|
||||||
|
"label": "Company Name"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"location": {
|
"location": {
|
||||||
"address": {
|
"address": {
|
||||||
"label": "نشانی"
|
"label": "نشانی"
|
||||||
@ -264,14 +272,15 @@
|
|||||||
"button": "GitHub Issues",
|
"button": "GitHub Issues",
|
||||||
"heading": "باگها؟ درخواست ویژگی جدید؟"
|
"heading": "باگها؟ درخواست ویژگی جدید؟"
|
||||||
},
|
},
|
||||||
|
"docs": "مستندات",
|
||||||
"donate": {
|
"donate": {
|
||||||
"body": "اگر استفاده از Reactive Resume را دوست داشتید، لطفاً تا جایی که می توانید کمک مالی کنید تا برنامه را بدون تبلیغات و برای همیشه رایگان نگه دارید.",
|
"body": "اگر استفاده از Reactive Resume را دوست داشتید، لطفاً تا جایی که می توانید کمک مالی کنید تا برنامه را بدون تبلیغات و برای همیشه رایگان نگه دارید.",
|
||||||
"button": "برای من یک قهوه بخر",
|
"button": "برای من یک قهوه بخر",
|
||||||
"heading": "کمک مالی به Reactive Resume"
|
"heading": "کمک مالی به Reactive Resume"
|
||||||
},
|
},
|
||||||
"github": "کد منبع",
|
"github": "کد منبع",
|
||||||
"docs": "مستندات",
|
"heading": "لینکها",
|
||||||
"heading": "لینکها"
|
"reddit": "ردیت"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"global": {
|
"global": {
|
||||||
@ -290,14 +299,14 @@
|
|||||||
},
|
},
|
||||||
"heading": "تنظیمات",
|
"heading": "تنظیمات",
|
||||||
"page": {
|
"page": {
|
||||||
"format": {
|
|
||||||
"primary": "اندازه کاغذ",
|
|
||||||
"secondary": "ابعاد صفحات رزومه شما را تعیین می کند"
|
|
||||||
},
|
|
||||||
"break-line": {
|
"break-line": {
|
||||||
"primary": "خط شکست",
|
"primary": "خط شکست",
|
||||||
"secondary": "برای مشخص کردن ارتفاع صفحه A4 یک خط در همه صفحات نشان داده شود"
|
"secondary": "برای مشخص کردن ارتفاع صفحه A4 یک خط در همه صفحات نشان داده شود"
|
||||||
},
|
},
|
||||||
|
"format": {
|
||||||
|
"primary": "اندازه کاغذ",
|
||||||
|
"secondary": "ابعاد صفحات رزومه شما را تعیین می کند"
|
||||||
|
},
|
||||||
"heading": "صفحه",
|
"heading": "صفحه",
|
||||||
"orientation": {
|
"orientation": {
|
||||||
"disabled": "زمانی که تنها یک صفحه وجود دارد، تاثیری ندارد",
|
"disabled": "زمانی که تنها یک صفحه وجود دارد، تاثیری ندارد",
|
||||||
|
|||||||
@ -20,23 +20,24 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"heading": "لینکها",
|
"heading": "لینکها",
|
||||||
"links": {
|
"links": {
|
||||||
|
"docs": "مستندات",
|
||||||
"donate": "حمایت مالی",
|
"donate": "حمایت مالی",
|
||||||
"github": "کد منبع",
|
"github": "کد منبع",
|
||||||
"docs": "مستندات",
|
|
||||||
"privacy": "حریم خصوصی",
|
"privacy": "حریم خصوصی",
|
||||||
|
"reddit": "ردیت",
|
||||||
"service": "شرایط سرویسدهی"
|
"service": "شرایط سرویسدهی"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"screenshots": {
|
"screenshots": {
|
||||||
"heading": "اسکرینشاتها"
|
"heading": "اسکرینشاتها"
|
||||||
},
|
},
|
||||||
"testimonials": {
|
|
||||||
"heading": "نظرات کاربران",
|
|
||||||
"body": "خوب یا بد، من دوست دارم نظر شما را در مورد Reactive Resume و اینکه تجربه کار با آن برای شما چگونه بوده است را بدانم.<br/>تعدادی از پیام های ارسال شده توسط کاربران در سراسر جهان را اینجا میبینید.",
|
|
||||||
"contact": "میتوانید از طریق <1>ایمیل من</1> یا فرم تماس در <3>وبسایت من</3> با من در ارتباط باشید."
|
|
||||||
},
|
|
||||||
"summary": {
|
"summary": {
|
||||||
"body": "Reactive Resume یک رزومه ساز رایگان و متنباز است که برای ایجاد، به روز رسانی و به اشتراک گذاری رزومه شما به آسانی شمردن ۱، ۲، ۳ ساخته شده است. با این برنامه، می توانید چندین رزومه ایجاد کنید و آنها را با کارفرماها یا دوستان از طریق یک لینک منحصر به فرد و چاپ آن به صورت PDF، همه به صورت رایگان، بدون تبلیغات، بدون ردیابی، بدون از دست دادن امنیت و حریم خصوصی داده های شما، به اشتراک بگذارید.",
|
"body": "Reactive Resume یک رزومه ساز رایگان و متنباز است که برای ایجاد، به روز رسانی و به اشتراک گذاری رزومه شما به آسانی شمردن ۱، ۲، ۳ ساخته شده است. با این برنامه، می توانید چندین رزومه ایجاد کنید و آنها را با کارفرماها یا دوستان از طریق یک لینک منحصر به فرد و چاپ آن به صورت PDF، همه به صورت رایگان، بدون تبلیغات، بدون ردیابی، بدون از دست دادن امنیت و حریم خصوصی داده های شما، به اشتراک بگذارید.",
|
||||||
"heading": "درباره من"
|
"heading": "درباره من"
|
||||||
|
},
|
||||||
|
"testimonials": {
|
||||||
|
"body": "خوب یا بد، من دوست دارم نظر شما را در مورد Reactive Resume و اینکه تجربه کار با آن برای شما چگونه بوده است را بدانم.<br/>تعدادی از پیام های ارسال شده توسط کاربران در سراسر جهان را اینجا میبینید.",
|
||||||
|
"contact": "میتوانید از طریق <1>ایمیل من</1> یا فرم تماس در <3>وبسایت من</3> با من در ارتباط باشید.",
|
||||||
|
"heading": "نظرات کاربران"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -71,6 +71,31 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"heading": "بازنشانی رمز عبور"
|
"heading": "بازنشانی رمز عبور"
|
||||||
|
},
|
||||||
|
"profile": {
|
||||||
|
"heading": "حساب شما",
|
||||||
|
"form": {
|
||||||
|
"avatar": {
|
||||||
|
"help-text": "می توانید عکس نمایه خود را در <1>Gravatar به روز کنید</1>"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"label": "نام و نام خانوادگی"
|
||||||
|
},
|
||||||
|
"email": {
|
||||||
|
"label": "آدرس ایمیل",
|
||||||
|
"help-text": "در حال حاضر امکان به روز رسانی آدرس ایمیل شما وجود ندارد، لطفا به جای آن یک حساب کاربری جدید ایجاد کنید."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"delete-account": {
|
||||||
|
"heading": "حذف حساب و داده",
|
||||||
|
"body": "برای حذف اکانت، اطلاعات و تمام رزومه های خود، \"{{keyword}}\" را در کادر متنی تایپ کرده و روی دکمه کلیک کنید. لطفاً توجه داشته باشید که این یک اقدام غیرقابل برگشت است و اطلاعات شما دوباره قابل بازیابی نیست.",
|
||||||
|
"actions": {
|
||||||
|
"delete": "حذف حساب کاربری"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"save": "ذخیره تغییرات"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
"actions": {
|
"actions": {
|
||||||
"add": "Lisää uusi",
|
"add": "Lisää uusi",
|
||||||
"delete": "Poista",
|
"delete": "Poista",
|
||||||
|
"duplicate": "Kopioi osio",
|
||||||
"edit": "Muokkaa"
|
"edit": "Muokkaa"
|
||||||
},
|
},
|
||||||
"columns": {
|
"columns": {
|
||||||
@ -80,13 +81,13 @@
|
|||||||
"center-artboard": "Keskitä Kuvataulu",
|
"center-artboard": "Keskitä Kuvataulu",
|
||||||
"copy-link": "Kopioi linkki ansioluetteloon",
|
"copy-link": "Kopioi linkki ansioluetteloon",
|
||||||
"export-pdf": "Vie PDF",
|
"export-pdf": "Vie PDF",
|
||||||
|
"redo": "Redo",
|
||||||
"toggle-orientation": "Vaihda sivun suunta",
|
"toggle-orientation": "Vaihda sivun suunta",
|
||||||
"toggle-page-break-line": "Vaihda sivunvaihtoviivaa",
|
"toggle-page-break-line": "Vaihda sivunvaihtoviivaa",
|
||||||
"toggle-sidebars": "Vaihda Sivupalkkeja",
|
"toggle-sidebars": "Vaihda Sivupalkkeja",
|
||||||
"zoom-in": "Suurenna",
|
|
||||||
"zoom-out": "Pienennä",
|
|
||||||
"undo": "Kumoa",
|
"undo": "Kumoa",
|
||||||
"redo": "Redo"
|
"zoom-in": "Suurenna",
|
||||||
|
"zoom-out": "Pienennä"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"header": {
|
"header": {
|
||||||
@ -114,6 +115,9 @@
|
|||||||
"actions": {
|
"actions": {
|
||||||
"photo-filters": "Valokuvasuodattimet"
|
"photo-filters": "Valokuvasuodattimet"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "Syntymäaika"
|
||||||
|
},
|
||||||
"heading": "Perustiedot",
|
"heading": "Perustiedot",
|
||||||
"headline": {
|
"headline": {
|
||||||
"label": "Otsikko"
|
"label": "Otsikko"
|
||||||
@ -121,9 +125,6 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "Koko nimi"
|
"label": "Koko nimi"
|
||||||
},
|
},
|
||||||
"birthdate": {
|
|
||||||
"label": "Syntymäaika"
|
|
||||||
},
|
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
@ -174,6 +175,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"experience": {
|
||||||
|
"form": {
|
||||||
|
"name": {
|
||||||
|
"label": "Company Name"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"location": {
|
"location": {
|
||||||
"address": {
|
"address": {
|
||||||
"label": "Osoite"
|
"label": "Osoite"
|
||||||
@ -264,14 +272,15 @@
|
|||||||
"button": "GitHub Issues",
|
"button": "GitHub Issues",
|
||||||
"heading": "Bugeja? Ominaisuuspyyntöjä?"
|
"heading": "Bugeja? Ominaisuuspyyntöjä?"
|
||||||
},
|
},
|
||||||
|
"docs": "Dokumentaatio",
|
||||||
"donate": {
|
"donate": {
|
||||||
"body": "Jos pidit Reactive Resume -sovelluksen käytöstä, harkitse lahjoitusta niin paljon kuin voit, jotta sovellus pysyy toiminnassa ilman mainoksia ja ikuisesti ilmaisena.",
|
"body": "Jos pidit Reactive Resume -sovelluksen käytöstä, harkitse lahjoitusta niin paljon kuin voit, jotta sovellus pysyy toiminnassa ilman mainoksia ja ikuisesti ilmaisena.",
|
||||||
"button": "Osta minulle kahvi",
|
"button": "Osta minulle kahvi",
|
||||||
"heading": "Lahjoita Reaktiiviselle ansioluettelolle"
|
"heading": "Lahjoita Reaktiiviselle ansioluettelolle"
|
||||||
},
|
},
|
||||||
"github": "Lähdekoodi",
|
"github": "Lähdekoodi",
|
||||||
"docs": "Dokumentaatio",
|
"heading": "Linkit",
|
||||||
"heading": "Linkit"
|
"reddit": "Reddit"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"global": {
|
"global": {
|
||||||
@ -290,14 +299,14 @@
|
|||||||
},
|
},
|
||||||
"heading": "Asetukset",
|
"heading": "Asetukset",
|
||||||
"page": {
|
"page": {
|
||||||
"format": {
|
|
||||||
"primary": "Paperikoko",
|
|
||||||
"secondary": "Määrittää ansioluettelosi sivujen mitat"
|
|
||||||
},
|
|
||||||
"break-line": {
|
"break-line": {
|
||||||
"primary": "Katkoviiva",
|
"primary": "Katkoviiva",
|
||||||
"secondary": "Näytä viiva kaikilla sivuilla A4-sivun korkeuden merkitsemiseksi"
|
"secondary": "Näytä viiva kaikilla sivuilla A4-sivun korkeuden merkitsemiseksi"
|
||||||
},
|
},
|
||||||
|
"format": {
|
||||||
|
"primary": "Paperikoko",
|
||||||
|
"secondary": "Määrittää ansioluettelosi sivujen mitat"
|
||||||
|
},
|
||||||
"heading": "Sivu",
|
"heading": "Sivu",
|
||||||
"orientation": {
|
"orientation": {
|
||||||
"disabled": "Ei vaikuta, kun sivuja on vain yksi",
|
"disabled": "Ei vaikuta, kun sivuja on vain yksi",
|
||||||
|
|||||||
@ -20,23 +20,24 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"heading": "Linkit",
|
"heading": "Linkit",
|
||||||
"links": {
|
"links": {
|
||||||
|
"docs": "Dokumentaatio",
|
||||||
"donate": "Lahjoita",
|
"donate": "Lahjoita",
|
||||||
"github": "Lähdekoodi",
|
"github": "Lähdekoodi",
|
||||||
"docs": "Dokumentaatio",
|
|
||||||
"privacy": "Tietosuojakäytäntö",
|
"privacy": "Tietosuojakäytäntö",
|
||||||
|
"reddit": "Reddit",
|
||||||
"service": "Käyttöehdot"
|
"service": "Käyttöehdot"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"screenshots": {
|
"screenshots": {
|
||||||
"heading": "Kuvakaappaukset"
|
"heading": "Kuvakaappaukset"
|
||||||
},
|
},
|
||||||
"testimonials": {
|
|
||||||
"heading": "Asiakaskokemuksia",
|
|
||||||
"body": "Hyvä tai huono, haluaisin kuulla mielipiteesi Reactive Resume -ohjelmasta ja siitä, millainen kokemus sinulla on ollut.<br/>Seuraavassa on muutamia käyttäjien eri puolilta maailmaa lähettämiä viestejä.",
|
|
||||||
"contact": "Voit ottaa minuun yhteyttä <1>sähköpostitse</1> tai <3>verkkosivustoni</3> yhteydenottolomakkeen kautta."
|
|
||||||
},
|
|
||||||
"summary": {
|
"summary": {
|
||||||
"body": "Reactive Resume on ilmainen ja avoimen lähdekoodin ansioluettelon rakentaja, jonka tarkoituksena on tehdä ansioluettelon luomisesta, päivittämisestä ja jakamisesta helppoa kuin 1, 2, 3. Tämän sovelluksen avulla voit luoda useita ansioluetteloita, jakaa ne rekrytoijien tai ystävien kanssa yksilöllisen linkin kautta ja tulostaa ne PDF-muodossa, ja kaikki tämä ilmaiseksi, ilman mainoksia, ilman seurantaa ja menettämättä tietojesi eheyttä ja yksityisyyttä.",
|
"body": "Reactive Resume on ilmainen ja avoimen lähdekoodin ansioluettelon rakentaja, jonka tarkoituksena on tehdä ansioluettelon luomisesta, päivittämisestä ja jakamisesta helppoa kuin 1, 2, 3. Tämän sovelluksen avulla voit luoda useita ansioluetteloita, jakaa ne rekrytoijien tai ystävien kanssa yksilöllisen linkin kautta ja tulostaa ne PDF-muodossa, ja kaikki tämä ilmaiseksi, ilman mainoksia, ilman seurantaa ja menettämättä tietojesi eheyttä ja yksityisyyttä.",
|
||||||
"heading": "Yhteenveto"
|
"heading": "Yhteenveto"
|
||||||
|
},
|
||||||
|
"testimonials": {
|
||||||
|
"body": "Hyvä tai huono, haluaisin kuulla mielipiteesi Reactive Resume -ohjelmasta ja siitä, millainen kokemus sinulla on ollut.<br/>Seuraavassa on muutamia käyttäjien eri puolilta maailmaa lähettämiä viestejä.",
|
||||||
|
"contact": "Voit ottaa minuun yhteyttä <1>sähköpostitse</1> tai <3>verkkosivustoni</3> yhteydenottolomakkeen kautta.",
|
||||||
|
"heading": "Asiakaskokemuksia"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -71,6 +71,31 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"heading": "Palauta salasanasi"
|
"heading": "Palauta salasanasi"
|
||||||
|
},
|
||||||
|
"profile": {
|
||||||
|
"heading": "Tilisi",
|
||||||
|
"form": {
|
||||||
|
"avatar": {
|
||||||
|
"help-text": "Voit päivittää profiilikuvasi <1>Gravatarissa</1>"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"label": "Koko nimi"
|
||||||
|
},
|
||||||
|
"email": {
|
||||||
|
"label": "Sähköpostiosoite",
|
||||||
|
"help-text": "Sähköpostiosoitettasi ei voi tällä hetkellä päivittää, luo sen sijaan uusi tili."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"delete-account": {
|
||||||
|
"heading": "Poista tili ja tiedot",
|
||||||
|
"body": "Poistaaksesi tilisi, tietosi ja kaikki ansioluettelosi, kirjoita \"{{keyword}}\" tekstiruutuun ja napsauta painiketta. Huomaa, että tämä on peruuttamaton toimenpide, eikä tietojasi voi noutaa uudelleen.",
|
||||||
|
"actions": {
|
||||||
|
"delete": "Poista tili"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"save": "Tallenna muutokset"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
"actions": {
|
"actions": {
|
||||||
"add": "Ajouter un/une {{token}}",
|
"add": "Ajouter un/une {{token}}",
|
||||||
"delete": "Supprimer {{token}}",
|
"delete": "Supprimer {{token}}",
|
||||||
|
"duplicate": "Dupliquer la section",
|
||||||
"edit": "Éditer {{token}}"
|
"edit": "Éditer {{token}}"
|
||||||
},
|
},
|
||||||
"columns": {
|
"columns": {
|
||||||
@ -63,7 +64,7 @@
|
|||||||
"list": {
|
"list": {
|
||||||
"actions": {
|
"actions": {
|
||||||
"delete": "Supprimer",
|
"delete": "Supprimer",
|
||||||
"duplicate": "Dédoubler",
|
"duplicate": "Dupliquer",
|
||||||
"edit": "Éditer"
|
"edit": "Éditer"
|
||||||
},
|
},
|
||||||
"empty-text": "Cette liste est vide."
|
"empty-text": "Cette liste est vide."
|
||||||
@ -80,19 +81,19 @@
|
|||||||
"center-artboard": "Centrer l'affichage",
|
"center-artboard": "Centrer l'affichage",
|
||||||
"copy-link": "Copier le lien vers le CV",
|
"copy-link": "Copier le lien vers le CV",
|
||||||
"export-pdf": "Exporter en PDF",
|
"export-pdf": "Exporter en PDF",
|
||||||
|
"redo": "Refaire",
|
||||||
"toggle-orientation": "Basculer l'orientation de la page",
|
"toggle-orientation": "Basculer l'orientation de la page",
|
||||||
"toggle-page-break-line": "Afficher/cacher l'indicateur de saut de page",
|
"toggle-page-break-line": "Afficher/cacher l'indicateur de saut de page",
|
||||||
"toggle-sidebars": "Afficher/cacher les barres latérales",
|
"toggle-sidebars": "Afficher/cacher les barres latérales",
|
||||||
"zoom-in": "Zoomer",
|
|
||||||
"zoom-out": "Dézoomer",
|
|
||||||
"undo": "Défaire",
|
"undo": "Défaire",
|
||||||
"redo": "Refaire"
|
"zoom-in": "Zoomer",
|
||||||
|
"zoom-out": "Dézoomer"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"header": {
|
"header": {
|
||||||
"menu": {
|
"menu": {
|
||||||
"delete": "Supprimer",
|
"delete": "Supprimer",
|
||||||
"duplicate": "Dédoubler",
|
"duplicate": "Dupliquer",
|
||||||
"rename": "Renommer",
|
"rename": "Renommer",
|
||||||
"share-link": "Partager un lien",
|
"share-link": "Partager un lien",
|
||||||
"tooltips": {
|
"tooltips": {
|
||||||
@ -112,7 +113,10 @@
|
|||||||
},
|
},
|
||||||
"basics": {
|
"basics": {
|
||||||
"actions": {
|
"actions": {
|
||||||
"photo-filters": "Filtres pour la photo"
|
"photo-filters": "Filtres photo"
|
||||||
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "Date de naissance"
|
||||||
},
|
},
|
||||||
"heading": "Informations de base",
|
"heading": "Informations de base",
|
||||||
"headline": {
|
"headline": {
|
||||||
@ -121,9 +125,6 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "Nom complet"
|
"label": "Nom complet"
|
||||||
},
|
},
|
||||||
"birthdate": {
|
|
||||||
"label": "Date de naissance"
|
|
||||||
},
|
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
@ -174,6 +175,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"experience": {
|
||||||
|
"form": {
|
||||||
|
"name": {
|
||||||
|
"label": "Company Name"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"location": {
|
"location": {
|
||||||
"address": {
|
"address": {
|
||||||
"label": "Adresse"
|
"label": "Adresse"
|
||||||
@ -244,11 +252,11 @@
|
|||||||
"pdf": {
|
"pdf": {
|
||||||
"loading": {
|
"loading": {
|
||||||
"primary": "Génération du PDF",
|
"primary": "Génération du PDF",
|
||||||
"secondary": "Veuillez patienter pendant que votre PDF est généré, cela peut prendre jusqu'à 15 secondes."
|
"secondary": "Merci de patienter que votre PDF soit généré, cela peut prendre jusqu'à 15 secondes."
|
||||||
},
|
},
|
||||||
"normal": {
|
"normal": {
|
||||||
"primary": "PDF",
|
"primary": "PDF",
|
||||||
"secondary": "Téléchargez un PDF de votre CV que vous pourrez imprimer et envoyer à l'emploi de vos rêves. Ce fichier ne peut pas être réimporté pour être modifié ultérieurement."
|
"secondary": "Télécharger au format PDF votre CV, à imprimer et envoyer à l'offre d'emploi de vos rêves. Ce fichier ne peut pas être réimporté pour être modifié ultérieurement."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -260,18 +268,19 @@
|
|||||||
},
|
},
|
||||||
"links": {
|
"links": {
|
||||||
"bugs-features": {
|
"bugs-features": {
|
||||||
"body": "Quelque chose vous a empêché de rédiger un CV ? Ou vous avez une idée géniale à ajouter ? Créez une issue sur GitHub pour commencer.",
|
"body": "Quelque chose vous a empêché de faire un CV ? Vous avez une idée géniale à ajouter ? Créez une issue sur GitHub dès maintenant.",
|
||||||
"button": "Issues GitHub",
|
"button": "Issues GitHub",
|
||||||
"heading": "Bogues ? Demandes de fonctionnalités ?"
|
"heading": "Bogues ? Demandes de fonctionnalités ?"
|
||||||
},
|
},
|
||||||
|
"docs": "Documentation",
|
||||||
"donate": {
|
"donate": {
|
||||||
"body": "Si vous avez aimé utiliser Reactive Resume, pensez à donner comme vous le pouvez pour que l'application reste disponible, gratuite et sans publicité pour toujours.",
|
"body": "Si vous avez aimé utiliser Reactive Resume, merci d'envisager de faire un don pour que l'application puisse rester disponible, gratuite et sans publicité pour toujours.",
|
||||||
"button": "Offrez-moi un café",
|
"button": "Offrez-moi un café",
|
||||||
"heading": "Faire un don à Reactive Resume"
|
"heading": "Faire un don à Reactive Resume"
|
||||||
},
|
},
|
||||||
"github": "Code source",
|
"github": "Code source",
|
||||||
"docs": "Documentation",
|
"heading": "Liens",
|
||||||
"heading": "Liens"
|
"reddit": "Reddit"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"global": {
|
"global": {
|
||||||
@ -290,17 +299,17 @@
|
|||||||
},
|
},
|
||||||
"heading": "Paramètres",
|
"heading": "Paramètres",
|
||||||
"page": {
|
"page": {
|
||||||
|
"break-line": {
|
||||||
|
"primary": "Indicateur de changement de page",
|
||||||
|
"secondary": "Affiche une ligne sur toutes les pages pour marquer la hauteur d'une feuille A4"
|
||||||
|
},
|
||||||
"format": {
|
"format": {
|
||||||
"primary": "Taille de papier",
|
"primary": "Taille de papier",
|
||||||
"secondary": "Détermine les dimensions de vos pages de CV"
|
"secondary": "Détermine les dimensions de vos pages de CV"
|
||||||
},
|
},
|
||||||
"break-line": {
|
|
||||||
"primary": "Indicateur de changement de page",
|
|
||||||
"secondary": "Afficher une ligne sur toutes les pages pour marquer la hauteur d'une feuille A4"
|
|
||||||
},
|
|
||||||
"heading": "Page",
|
"heading": "Page",
|
||||||
"orientation": {
|
"orientation": {
|
||||||
"disabled": "N'a aucun effet lorsqu'il n'y a qu'une seule page",
|
"disabled": "Aucun effet lorsqu'il n'y a qu'une seule page",
|
||||||
"primary": "Orientation",
|
"primary": "Orientation",
|
||||||
"secondary": "Afficher les pages horizontalement ou verticalement"
|
"secondary": "Afficher les pages horizontalement ou verticalement"
|
||||||
}
|
}
|
||||||
@ -308,22 +317,22 @@
|
|||||||
"resume": {
|
"resume": {
|
||||||
"heading": "CV",
|
"heading": "CV",
|
||||||
"reset": {
|
"reset": {
|
||||||
"primary": "Tout remettre à zéro",
|
"primary": "Remise à zéro",
|
||||||
"secondary": "Vous avez fait trop d'erreurs ? Cliquez ici pour réinitialiser toutes les modifications et repartir de zéro. Attention, cette action ne peut pas être annulée."
|
"secondary": "Vous avez fait trop d'erreurs ? Cliquez ici pour réinitialiser toutes les modifications et repartir de zéro. Attention, cette action ne peut pas être annulée."
|
||||||
},
|
},
|
||||||
"sample": {
|
"sample": {
|
||||||
"primary": "Charger les données de démo",
|
"primary": "Charger un exemple de données",
|
||||||
"secondary": "Vous ne savez pas par où commencer ? Cliquez ici pour charger quelques exemples de données afin de voir à quoi ressemble un CV complet."
|
"secondary": "Vous ne savez pas par où commencer ? Cliquez-ici pour charger un exemple de données afin de voir à quoi ressemble un CV complet."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sharing": {
|
"sharing": {
|
||||||
"heading": "Partage",
|
"heading": "Partager",
|
||||||
"short-url": {
|
"short-url": {
|
||||||
"label": "Préférer une URL courte"
|
"label": "URL courte préférée"
|
||||||
},
|
},
|
||||||
"visibility": {
|
"visibility": {
|
||||||
"subtitle": "Permettre à toute personne ayant un lien de consulter votre CV",
|
"subtitle": "Permettre de consulter votre CV à toute personne ayant un lien",
|
||||||
"title": "Public"
|
"title": "Public"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -353,7 +362,7 @@
|
|||||||
"label": "Taille de la police"
|
"label": "Taille de la police"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"heading": "Typographie",
|
"heading": "Polices",
|
||||||
"widgets": {
|
"widgets": {
|
||||||
"body": {
|
"body": {
|
||||||
"label": "Contenu"
|
"label": "Contenu"
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
"date": {
|
"date": {
|
||||||
"present": "Présent"
|
"present": "Présent"
|
||||||
},
|
},
|
||||||
"subtitle": "Un constructeur de CV gratuit et open source.",
|
"subtitle": "Un créateur de CV gratuit et open source.",
|
||||||
"title": "Reactive Resume",
|
"title": "Reactive Resume",
|
||||||
"toast": {
|
"toast": {
|
||||||
"error": {
|
"error": {
|
||||||
|
|||||||
@ -5,12 +5,12 @@
|
|||||||
},
|
},
|
||||||
"import-external": {
|
"import-external": {
|
||||||
"subtitle": "LinkedIn, JSON Resume, Reactive Resume",
|
"subtitle": "LinkedIn, JSON Resume, Reactive Resume",
|
||||||
"title": "Importer de sources externes"
|
"title": "Importer à partir de sources externes"
|
||||||
},
|
},
|
||||||
"resume": {
|
"resume": {
|
||||||
"menu": {
|
"menu": {
|
||||||
"delete": "Supprimer",
|
"delete": "Supprimer",
|
||||||
"duplicate": "Dédoubler",
|
"duplicate": "Dupliquer",
|
||||||
"open": "Ouvrir",
|
"open": "Ouvrir",
|
||||||
"rename": "Renommer",
|
"rename": "Renommer",
|
||||||
"share-link": "Partager un lien",
|
"share-link": "Partager un lien",
|
||||||
|
|||||||
@ -20,23 +20,24 @@
|
|||||||
"links": {
|
"links": {
|
||||||
"heading": "Liens",
|
"heading": "Liens",
|
||||||
"links": {
|
"links": {
|
||||||
|
"docs": "Documentation",
|
||||||
"donate": "Faire un don",
|
"donate": "Faire un don",
|
||||||
"github": "Code source",
|
"github": "Code source",
|
||||||
"docs": "Documentation",
|
|
||||||
"privacy": "Politique de confidentialité",
|
"privacy": "Politique de confidentialité",
|
||||||
|
"reddit": "Reddit",
|
||||||
"service": "Conditions d'utilisation"
|
"service": "Conditions d'utilisation"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"screenshots": {
|
"screenshots": {
|
||||||
"heading": "Captures d'écran"
|
"heading": "Captures d'écran"
|
||||||
},
|
},
|
||||||
"testimonials": {
|
|
||||||
"heading": "Témoignages",
|
|
||||||
"body": "Bonne ou mauvaiss, j'aimerais entendre votre opinion sur Reactive Resume et comment l'expérience a été pour vous.<br/>Voici quelques-uns des messages envoyés par des utilisateurs du monde entier.",
|
|
||||||
"contact": "Vous pouvez me contacter via <1>mon e-mail</1> ou via le formulaire de contact de <3>mon site web</3>."
|
|
||||||
},
|
|
||||||
"summary": {
|
"summary": {
|
||||||
"body": "Reactive Resume est un générateur de CV gratuit et open source, conçu pour rendre les tâches banales de création, de mise à jour et de partage de votre CV aussi faciles que de compter jusqu'à 3. Avec cette application, vous pouvez créer plusieurs CVs, les partager avec des recruteurs ou des amis par le biais d'un lien unique et les imprimer au format PDF, le tout gratuitement, sans publicité, sans pistage, et sans perdre l'intégrité et la confidentialité de vos données.",
|
"body": "Reactive Resume est un générateur de CV gratuit et open source, conçu pour rendre les tâches banales de création, de mise à jour et de partage de votre CV aussi faciles que de compter jusqu'à 3. Avec cette application, vous pouvez créer plusieurs CVs, les partager avec des recruteurs ou des amis par le biais d'un lien unique et les imprimer au format PDF, le tout gratuitement, sans publicité, sans pistage, et sans perdre l'intégrité et la confidentialité de vos données.",
|
||||||
"heading": "Résumé"
|
"heading": "Résumé"
|
||||||
|
},
|
||||||
|
"testimonials": {
|
||||||
|
"body": "Bon ou mauvais, je souhaiterais avoir votre avis sur Reactive Resume et l'expérience que vous en avez-eu.<br/>Voici quelques-uns des messages envoyés par des utilisateurs du monde entier.",
|
||||||
|
"contact": "Vous pouvez me contacter via <1>mon e-mail</1> ou via le formulaire de contact de <3>mon site web</3>.",
|
||||||
|
"heading": "Témoignages"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -71,6 +71,31 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"heading": "Réinitialiser votre mot de passe"
|
"heading": "Réinitialiser votre mot de passe"
|
||||||
|
},
|
||||||
|
"profile": {
|
||||||
|
"heading": "Votre compte",
|
||||||
|
"form": {
|
||||||
|
"avatar": {
|
||||||
|
"help-text": "Vous pouvez mettre à jour votre photo de profil sur <1>Gravatar</1>"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"label": "Nom complet"
|
||||||
|
},
|
||||||
|
"email": {
|
||||||
|
"label": "Email",
|
||||||
|
"help-text": "Il n'est pas possible de mettre à jour votre adresse e-mail pour le moment, merci de créer un nouveau compte à la place."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"delete-account": {
|
||||||
|
"heading": "Supprimer le compte et effacer les données",
|
||||||
|
"body": "Pour supprimer votre compte, vos données et tous vos CV, tapez \"{{keyword}}\" dans la zone de texte et cliquez sur le bouton. Veuillez noter qu'il s'agit d'une action irréversible et que vos données ne pourront plus être récupérées.",
|
||||||
|
"actions": {
|
||||||
|
"delete": "Supprimer le compte"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"save": "Enregistrer les Modifications"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
@ -110,10 +135,10 @@
|
|||||||
},
|
},
|
||||||
"reactive-resume": {
|
"reactive-resume": {
|
||||||
"actions": {
|
"actions": {
|
||||||
"upload-json": "Mettre en ligne un JSON",
|
"upload-json": "Importer un JSON",
|
||||||
"upload-json-v2": "Télécharger JSON à partir de la v2"
|
"upload-json-v2": "Importer un JSON v2 ou plus"
|
||||||
},
|
},
|
||||||
"body": "Si vous avez un JSON qui a été exporté avec la version actuelle de Reactive Resume, vous pouvez le réimporter ici pour obtenir à nouveau une version modifiable.",
|
"body": "Si vous avez un JSON qui a été exporté avec la version actuelle de Reactive Resume, vous pouvez le réimporter ici pour l'éditer à nouveau.",
|
||||||
"heading": "Importer depuis Reactive Resume"
|
"heading": "Importer depuis Reactive Resume"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -1,13 +1,14 @@
|
|||||||
{
|
{
|
||||||
"common": {
|
"common": {
|
||||||
"actions": {
|
"actions": {
|
||||||
"add": "הוסף חדש{{token}}",
|
"add": "הוספת {{token}} חדש",
|
||||||
"delete": "מחק{{token}}",
|
"delete": "מחיקת {{token}}",
|
||||||
"edit": "ערוך{{token}}"
|
"duplicate": "שכפול מקטע",
|
||||||
|
"edit": "עריכת {{token}}"
|
||||||
},
|
},
|
||||||
"columns": {
|
"columns": {
|
||||||
"heading": "טורים",
|
"heading": "עמודות",
|
||||||
"tooltip": "שנה את מספר הטורים"
|
"tooltip": "החלפת כמות העמודות"
|
||||||
},
|
},
|
||||||
"form": {
|
"form": {
|
||||||
"date": {
|
"date": {
|
||||||
@ -17,10 +18,10 @@
|
|||||||
"label": "תיאור"
|
"label": "תיאור"
|
||||||
},
|
},
|
||||||
"email": {
|
"email": {
|
||||||
"label": "כתובת דוא\"ל"
|
"label": "כתובת דוא״ל"
|
||||||
},
|
},
|
||||||
"end-date": {
|
"end-date": {
|
||||||
"help-text": "השאר שדה זה ריק, אם אתה עדיין נמצא שם",
|
"help-text": "יש להשאיר שדה זה ריק, אם זה המקום הנוכחי",
|
||||||
"label": "תאריך סיום"
|
"label": "תאריך סיום"
|
||||||
},
|
},
|
||||||
"keywords": {
|
"keywords": {
|
||||||
@ -39,16 +40,16 @@
|
|||||||
"label": "מספר טלפון"
|
"label": "מספר טלפון"
|
||||||
},
|
},
|
||||||
"position": {
|
"position": {
|
||||||
"label": "תפקיד בעבודה"
|
"label": "תפקיד"
|
||||||
},
|
},
|
||||||
"start-date": {
|
"start-date": {
|
||||||
"label": "תאריך התחלה"
|
"label": "תאריך התחלה"
|
||||||
},
|
},
|
||||||
"subtitle": {
|
"subtitle": {
|
||||||
"label": "תת כותרת"
|
"label": "תת־כותרת"
|
||||||
},
|
},
|
||||||
"summary": {
|
"summary": {
|
||||||
"label": "סיכום"
|
"label": "תקציר"
|
||||||
},
|
},
|
||||||
"title": {
|
"title": {
|
||||||
"label": "כותרת"
|
"label": "כותרת"
|
||||||
@ -58,7 +59,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"glossary": {
|
"glossary": {
|
||||||
"page": "דף"
|
"page": "עמוד"
|
||||||
},
|
},
|
||||||
"list": {
|
"list": {
|
||||||
"actions": {
|
"actions": {
|
||||||
@ -66,38 +67,38 @@
|
|||||||
"duplicate": "שכפול",
|
"duplicate": "שכפול",
|
||||||
"edit": "עריכה"
|
"edit": "עריכה"
|
||||||
},
|
},
|
||||||
"empty-text": "הרשימה ריקה!"
|
"empty-text": "הרשימה ריקה."
|
||||||
},
|
},
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"delete-item": "האם אתה בטוח שברצונך להסיר פריט זה? זה בלתי הפיך.",
|
"delete-item": "למחוק את הפריט? זו פעולה בלתי הפיכה.",
|
||||||
"delete-section": "מחיקת קטע",
|
"delete-section": "מחיקת מקטע",
|
||||||
"rename-section": "שנה את שם הקטע",
|
"rename-section": "שינוי שם המקטע",
|
||||||
"toggle-visibility": "שנה מצב נראות"
|
"toggle-visibility": "החלפת מצב חשיפה"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"controller": {
|
"controller": {
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"center-artboard": "משטח יצירה מרכזי",
|
"center-artboard": "מרכוז משטח היצירה",
|
||||||
"copy-link": "העתק קישור לקורות חיים",
|
"copy-link": "העתקת קישור לקורות חיים",
|
||||||
"export-pdf": "ייצא PDF",
|
"export-pdf": "ייצוא PDF",
|
||||||
"toggle-orientation": "כיוון דף הבית",
|
"redo": "ביצוע חוזר",
|
||||||
"toggle-page-break-line": "החלף את קו מעבר עמוד",
|
"toggle-orientation": "החלפת כיוון הדף",
|
||||||
"toggle-sidebars": "החלף את סרגלי הצד",
|
"toggle-page-break-line": "החלפת קו מעבר עמוד",
|
||||||
"zoom-in": "הגדל",
|
"toggle-sidebars": "החלפת מצב סרגלי הצד",
|
||||||
"zoom-out": "הקטן",
|
"undo": "ביטול",
|
||||||
"undo": "לבטל",
|
"zoom-in": "הגדלה",
|
||||||
"redo": "לַעֲשׂוֹת שׁוּב"
|
"zoom-out": "הקטנה"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"header": {
|
"header": {
|
||||||
"menu": {
|
"menu": {
|
||||||
"delete": "מחיקה",
|
"delete": "מחיקה",
|
||||||
"duplicate": "שכפל",
|
"duplicate": "שכפול",
|
||||||
"rename": "שנה שם",
|
"rename": "שינוי שם",
|
||||||
"share-link": "שתף קישור",
|
"share-link": "שיתוף קישור",
|
||||||
"tooltips": {
|
"tooltips": {
|
||||||
"delete": "האם אתה בטוח שברצונך להסיר תכונה זו? זה בלתי הפיך.",
|
"delete": "להסיר קורות חיים אלה? זה בלתי הפיך.",
|
||||||
"share-link": "עליך לשנות את החשיפה של קורות החיים שלך לציבור כדי להפוך אותם לגלויים לאחרים."
|
"share-link": "עליך לשנות את החשיפה של קורות החיים שלך לציבורית כדי שיהיו זמינים לאחרים."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -114,16 +115,16 @@
|
|||||||
"actions": {
|
"actions": {
|
||||||
"photo-filters": "מסנן תמונות"
|
"photo-filters": "מסנן תמונות"
|
||||||
},
|
},
|
||||||
"heading": "בסיסי",
|
"birthdate": {
|
||||||
|
"label": "תאריך לידה"
|
||||||
|
},
|
||||||
|
"heading": "יסודות",
|
||||||
"headline": {
|
"headline": {
|
||||||
"label": "כותרת"
|
"label": "כותרת ראשית"
|
||||||
},
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"label": "שם מלא"
|
"label": "שם מלא"
|
||||||
},
|
},
|
||||||
"birthdate": {
|
|
||||||
"label": "תאריך לידה"
|
|
||||||
},
|
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
@ -135,7 +136,7 @@
|
|||||||
"heading": "אפקטים"
|
"heading": "אפקטים"
|
||||||
},
|
},
|
||||||
"shape": {
|
"shape": {
|
||||||
"heading": "צוּרָה"
|
"heading": "צורה"
|
||||||
},
|
},
|
||||||
"size": {
|
"size": {
|
||||||
"heading": "גודל (בפיקסלים)"
|
"heading": "גודל (בפיקסלים)"
|
||||||
@ -143,8 +144,8 @@
|
|||||||
},
|
},
|
||||||
"photo-upload": {
|
"photo-upload": {
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"remove": "הסר תמונה",
|
"remove": "הסרת תמונה",
|
||||||
"upload": "העלה תמונה"
|
"upload": "העלאת תמונה"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -158,19 +159,26 @@
|
|||||||
"education": {
|
"education": {
|
||||||
"form": {
|
"form": {
|
||||||
"area-study": {
|
"area-study": {
|
||||||
"label": "תחום לימוד"
|
"label": "תחום לימודים"
|
||||||
},
|
},
|
||||||
"courses": {
|
"courses": {
|
||||||
"label": "קורסים"
|
"label": "קורסים"
|
||||||
},
|
},
|
||||||
"degree": {
|
"degree": {
|
||||||
"label": "תוֹאַר"
|
"label": "תואר"
|
||||||
},
|
},
|
||||||
"grade": {
|
"grade": {
|
||||||
"label": "כיתה"
|
"label": "ציון"
|
||||||
},
|
},
|
||||||
"institution": {
|
"institution": {
|
||||||
"label": "מוֹסָד"
|
"label": "מוסד"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"experience": {
|
||||||
|
"form": {
|
||||||
|
"name": {
|
||||||
|
"label": "Company Name"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -179,7 +187,7 @@
|
|||||||
"label": "כתובת"
|
"label": "כתובת"
|
||||||
},
|
},
|
||||||
"city": {
|
"city": {
|
||||||
"label": "עִיר"
|
"label": "עיר"
|
||||||
},
|
},
|
||||||
"country": {
|
"country": {
|
||||||
"label": "מדינה"
|
"label": "מדינה"
|
||||||
@ -195,19 +203,19 @@
|
|||||||
"profiles": {
|
"profiles": {
|
||||||
"form": {
|
"form": {
|
||||||
"network": {
|
"network": {
|
||||||
"label": "רֶשֶׁת"
|
"label": "רשת"
|
||||||
},
|
},
|
||||||
"username": {
|
"username": {
|
||||||
"label": "שם משתמש"
|
"label": "שם משתמש"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"heading": "פרופילים",
|
"heading": "פרופילים",
|
||||||
"heading_one": "פּרוֹפִיל"
|
"heading_one": "פרופיל"
|
||||||
},
|
},
|
||||||
"publications": {
|
"publications": {
|
||||||
"form": {
|
"form": {
|
||||||
"publisher": {
|
"publisher": {
|
||||||
"label": "מוֹצִיא לָאוֹר"
|
"label": "הוצאה לאור"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -219,12 +227,12 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"section": {
|
"section": {
|
||||||
"heading": "סָעִיף"
|
"heading": "מקטע"
|
||||||
},
|
},
|
||||||
"volunteer": {
|
"volunteer": {
|
||||||
"form": {
|
"form": {
|
||||||
"organization": {
|
"organization": {
|
||||||
"label": "אִרגוּן"
|
"label": "ארגון"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -236,69 +244,70 @@
|
|||||||
"heading": "CSS מותאם אישית"
|
"heading": "CSS מותאם אישית"
|
||||||
},
|
},
|
||||||
"export": {
|
"export": {
|
||||||
"heading": "יְצוּא",
|
"heading": "ייצוא",
|
||||||
"json": {
|
"json": {
|
||||||
"primary": "JSON",
|
"primary": "JSON",
|
||||||
"secondary": "הורד גירסת JSON של קורות החיים שלך שניתן לייבא חזרה אל קורות חיים ריאקטיביים."
|
"secondary": "הורדת גרסת JSON של קורות החיים שלך שניתן לייבא בחזרה לקורות חיים מסתגלים."
|
||||||
},
|
},
|
||||||
"pdf": {
|
"pdf": {
|
||||||
"loading": {
|
"loading": {
|
||||||
"primary": "יצירת PDF",
|
"primary": "נוצר PDF",
|
||||||
"secondary": "המתן עם יצירת ה-PDF שלך, זה עשוי להימשך עד 15 שניות."
|
"secondary": "נא להמתין בזמן יצירת ה־PDF שלך, הפעולה עשויה לארוך עד 15 שניות."
|
||||||
},
|
},
|
||||||
"normal": {
|
"normal": {
|
||||||
"primary": "PDF",
|
"primary": "PDF",
|
||||||
"secondary": "הורד קובץ PDF של קורות החיים שלך שתוכל להדפיס ולשלוח לעבודת החלומות שלך. לא ניתן לייבא קובץ זה בחזרה לעריכה נוספת."
|
"secondary": "הורדת PDF של קורות החיים שלך שניתן להדפיס ולשלוח לטובת משרת החלומות שלך. אי אפשר לייבא את הקובץ הזה בחזרה להמשך עריכה."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"layout": {
|
"layout": {
|
||||||
"heading": "מַעֲרָך",
|
"heading": "פריסה",
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"reset-layout": "אפס פריסה"
|
"reset-layout": "איפוס פריסה"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"links": {
|
"links": {
|
||||||
"bugs-features": {
|
"bugs-features": {
|
||||||
"body": "משהו מונע ממך לעשות קורות חיים? או שיש לכם רעיון מדהים להוסיף? העלה בעיה ב-GitHub כדי להתחיל.",
|
"body": "משהו מונע ממך ליצור קורות חיים? או שיש לך רעיון מדהים להוסיף? צריך רק לתעד בעיה ב־GitHub כדי להתחיל.",
|
||||||
"button": "בעיות GitHub",
|
"button": "בעיות ב־GitHub",
|
||||||
"heading": "באגים? בקשות לתכונה?"
|
"heading": "תקלות? בקשות ליכולות?"
|
||||||
},
|
},
|
||||||
|
"docs": "תיעוד",
|
||||||
"donate": {
|
"donate": {
|
||||||
"body": "אם אהבתם להשתמש בקורות חיים ריאקטיביים, אנא שקול לתרום ככל שתוכל למען שמירה על האפליקציה ופועלת, ללא פרסומות ובחינם לנצח.",
|
"body": "אם אהבת להשתמש בקורות חיים מסתגלים, נא לשקול לתרום ככל שניתן כדי לשמור על היישום חי ובועט, ללא פרסומות ובחינם לנצח.",
|
||||||
"button": "תקנה לי קפה",
|
"button": "קנו לי קפה",
|
||||||
"heading": "תרומה לקורות חיים ריאקטיביים"
|
"heading": "תרומה לקורות חיים מסתגלים"
|
||||||
},
|
},
|
||||||
"github": "קוד מקור",
|
"github": "קוד מקור",
|
||||||
"docs": "תיעוד",
|
"heading": "קישורים",
|
||||||
"heading": "קישורים"
|
"reddit": "רדיט"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"global": {
|
"global": {
|
||||||
"date": {
|
"date": {
|
||||||
"primary": "תַאֲרִיך",
|
"primary": "תאריך",
|
||||||
"secondary": "פורמט תאריך לשימוש בכל האפליקציה"
|
"secondary": "תבנית תאריך לשימוש בכל היישום"
|
||||||
},
|
},
|
||||||
"heading": "גלוֹבָּלִי",
|
"heading": "גלובלית",
|
||||||
"language": {
|
"language": {
|
||||||
"primary": "שפה",
|
"primary": "שפה",
|
||||||
"secondary": "שפת תצוגה לשימוש בכל האפליקציה"
|
"secondary": "שפת התצוגה של היישום"
|
||||||
},
|
},
|
||||||
"theme": {
|
"theme": {
|
||||||
"primary": "ערכת נושא"
|
"primary": "ערכת עיצוב"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"heading": "הגדרות",
|
"heading": "הגדרות",
|
||||||
"page": {
|
"page": {
|
||||||
|
"break-line": {
|
||||||
|
"primary": "קו מעבר",
|
||||||
|
"secondary": "להציג קו בכל הדפים כדי לסמן את גובהו של דף A4"
|
||||||
|
},
|
||||||
"format": {
|
"format": {
|
||||||
"primary": "גודל נייר",
|
"primary": "גודל נייר",
|
||||||
"secondary": "קובע את הממדים של דפי קורות החיים שלך"
|
"secondary": "קובע את הממדים של דפי קורות החיים שלך"
|
||||||
},
|
},
|
||||||
"break-line": {
|
"heading": "עמוד",
|
||||||
"primary": "קו עצירה",
|
|
||||||
"secondary": "הצג קו בכל הדפים כדי לסמן את גובהו של דף A4"
|
|
||||||
},
|
|
||||||
"heading": "דף",
|
|
||||||
"orientation": {
|
"orientation": {
|
||||||
"disabled": "אין השפעה כשיש רק עמוד אחד",
|
"disabled": "אין השפעה כשיש רק עמוד אחד",
|
||||||
"primary": "כיוון",
|
"primary": "כיוון",
|
||||||
@ -308,23 +317,23 @@
|
|||||||
"resume": {
|
"resume": {
|
||||||
"heading": "קורות חיים",
|
"heading": "קורות חיים",
|
||||||
"reset": {
|
"reset": {
|
||||||
"primary": "אפס הכל",
|
"primary": "איפוס של הכול",
|
||||||
"secondary": "עשית יותר מדי טעויות? לחץ כאן כדי לאפס את כל השינויים ולהתחיל מאפס. היזהר, פעולה זו לא ניתנת לביטול."
|
"secondary": "עשית יותר מדי טעויות? לחיצה כאן תאפס את כל השינויים ותאפשר לך להתחיל מחדש. כדאי לשים לב, זאת פעולה בלתי הפיכה."
|
||||||
},
|
},
|
||||||
"sample": {
|
"sample": {
|
||||||
"primary": "טען נתונים לדוגמה",
|
"primary": "טעינת נתונים לדוגמה",
|
||||||
"secondary": "לא בטוחים מאיפה להתחיל? לחץ כאן כדי לטעון כמה נתונים לדוגמה כדי לראות איך קורות חיים מלאים נראים."
|
"secondary": "לא ברור לך מאיפה להתחיל? לחיצה כאן תטען נתונים לדוגמה כדי לראות איך נראים קורות חיים שלמים."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sharing": {
|
"sharing": {
|
||||||
"heading": "שיתוף",
|
"heading": "שיתוף",
|
||||||
"short-url": {
|
"short-url": {
|
||||||
"label": "העדף כתובת URL קצרה"
|
"label": "להעדיף כתובת מקוצרת"
|
||||||
},
|
},
|
||||||
"visibility": {
|
"visibility": {
|
||||||
"subtitle": "אפשר לכל מי שיש לו קישור לראות את קורות החיים שלך",
|
"subtitle": "לאפשר לכל מי שיש קישור לראות את קורות החיים שלך",
|
||||||
"title": "גלוי לכול"
|
"title": "ציבורי"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"templates": {
|
"templates": {
|
||||||
@ -342,15 +351,15 @@
|
|||||||
"label": "טקסט"
|
"label": "טקסט"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"heading": "ערכת נושא"
|
"heading": "ערכת עיצוב"
|
||||||
},
|
},
|
||||||
"typography": {
|
"typography": {
|
||||||
"form": {
|
"form": {
|
||||||
"font-family": {
|
"font-family": {
|
||||||
"label": "משפחת גופן"
|
"label": "משפחת גופנים"
|
||||||
},
|
},
|
||||||
"font-size": {
|
"font-size": {
|
||||||
"label": "גודל גופן"
|
"label": "גודל כתב"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"heading": "טיפוגרפיה",
|
"heading": "טיפוגרפיה",
|
||||||
@ -359,7 +368,7 @@
|
|||||||
"label": "גוף"
|
"label": "גוף"
|
||||||
},
|
},
|
||||||
"headings": {
|
"headings": {
|
||||||
"label": "כותרת"
|
"label": "כותרות"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,28 +2,28 @@
|
|||||||
"avatar": {
|
"avatar": {
|
||||||
"menu": {
|
"menu": {
|
||||||
"greeting": "שלום",
|
"greeting": "שלום",
|
||||||
"logout": "התנתק/י"
|
"logout": "יציאה"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"footer": {
|
"footer": {
|
||||||
"credit": "פרויקט תשוקה מאת <1>אמרות פילאי</1>",
|
"credit": "מיזם שהוא התשוקה של <1>אמרות פילאי</1>",
|
||||||
"license": "על ידי הקהילה, עבור הקהילה."
|
"license": "על ידי הקהילה, עבור הקהילה."
|
||||||
},
|
},
|
||||||
"markdown": {
|
"markdown": {
|
||||||
"help-text": "סעיף זה תומך ב-<1>markdown</1> עיצוב."
|
"help-text": "סעיף זה תומך בעיצוב <1>Markdown</1>."
|
||||||
},
|
},
|
||||||
"date": {
|
"date": {
|
||||||
"present": "הווה"
|
"present": "הווה"
|
||||||
},
|
},
|
||||||
"subtitle": "בונה קורות חיים חינמי ובקוד פתוח.",
|
"subtitle": "בונה קורות חיים חינמי ובקוד פתוח.",
|
||||||
"title": "קורות חיים תגובתיים",
|
"title": "קורות חיים מסתגלים",
|
||||||
"toast": {
|
"toast": {
|
||||||
"error": {
|
"error": {
|
||||||
"upload-file-size": "נא להעלות רק קבצים מתחת ל-2 מגה בייט.",
|
"upload-file-size": "נא להעלות רק קבצים קטנים מ־2 מגהבתים.",
|
||||||
"upload-photo-size": "נא להעלות רק תמונות מתחת ל-2 מגה בייט, רצוי מרובע."
|
"upload-photo-size": "נא להעלות רק תמונות מתחת ל־2 מגהבתים, רצוי מרובעות."
|
||||||
},
|
},
|
||||||
"success": {
|
"success": {
|
||||||
"resume-link-copied": "קישור לקורות החיים שלך הועתק ללוח."
|
"resume-link-copied": "הקישור לקורות החיים שלך הועתק ללוח הגזירים."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,25 +1,25 @@
|
|||||||
{
|
{
|
||||||
"create-resume": {
|
"create-resume": {
|
||||||
"subtitle": "להתחיל מאפס",
|
"subtitle": "התחלה מאפס",
|
||||||
"title": "צור קורות חיים חדשים"
|
"title": "יצירת קורות חיים חדשים"
|
||||||
},
|
},
|
||||||
"import-external": {
|
"import-external": {
|
||||||
"subtitle": "לינקדאין, קורות חיים של JSON, קורות חיים ריאקטיביים",
|
"subtitle": "לינקדאין, קורות חיים ב־JSON, קורות חיים מסתגלים",
|
||||||
"title": "ייבוא ממקורות חיצוניים"
|
"title": "ייבוא ממקורות חיצוניים"
|
||||||
},
|
},
|
||||||
"resume": {
|
"resume": {
|
||||||
"menu": {
|
"menu": {
|
||||||
"delete": "מחיקה",
|
"delete": "מחיקה",
|
||||||
"duplicate": "שכפל",
|
"duplicate": "שכפול",
|
||||||
"open": "פתוח",
|
"open": "פתיחה",
|
||||||
"rename": "שנה שם",
|
"rename": "שינוי שם",
|
||||||
"share-link": "שתף קישור",
|
"share-link": "שיתוף קישור",
|
||||||
"tooltips": {
|
"tooltips": {
|
||||||
"delete": "האם אתה בטוח שברצונך להסיר תכונה זו? זה בלתי הפיך.",
|
"delete": "להסיר קורות חיים אלה? זה בלתי הפיך.",
|
||||||
"share-link": "עליך לשנות את החשיפה של קורות החיים שלך לציבורי כדי להפוך אותם לגלויים לאחרים."
|
"share-link": "עליך לשנות את החשיפה של קורות החיים שלך לציבורית כדי שיהיו זמינים לאחרים."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"timestamp": "עודכן לאחרונה {{timestamp}}"
|
"timestamp": "עודכן לאחרונה לפני {{timestamp}}"
|
||||||
},
|
},
|
||||||
"title": "לוּחַ מַחווָנִים"
|
"title": "לוח בקרה"
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user