mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2025-11-10 04:22:27 +10:00
Compare commits
78 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a037a091e7 | |||
| f3a4c17cb4 | |||
| f06f7ad2e5 | |||
| aab2e5c8a9 | |||
| 4318dbe762 | |||
| ae3ff274ee | |||
| 164403c495 | |||
| 8595c92fb7 | |||
| 8f75f32f88 | |||
| 0d44189a5f | |||
| cd16a6d360 | |||
| 7b795bfaa4 | |||
| 8f78d47661 | |||
| 0b5e5a2ece | |||
| 9eade9514c | |||
| d744e06e96 | |||
| 9657c199d2 | |||
| 2dbe737b73 | |||
| f624699efa | |||
| e46f473754 | |||
| 767f4bf4bc | |||
| 1c5d025c15 | |||
| 8de8d89290 | |||
| 83662122a5 | |||
| 126482a760 | |||
| b04c22a27b | |||
| 63f88a3d1c | |||
| bd519db14f | |||
| a49aa42176 | |||
| 1a382db4d9 | |||
| c68f75dc8c | |||
| c12de0c013 | |||
| 4cafaf306a | |||
| 0238cf18a5 | |||
| 2f6072a7ba | |||
| 55dd2c5925 | |||
| a3e25f87fa | |||
| 9e82ea11c3 | |||
| 62fd63e41f | |||
| b91c175352 | |||
| 898e2314fc | |||
| bca2aa2fe5 | |||
| 427fdb717a | |||
| ee5b0187e2 | |||
| 94d05f33b4 | |||
| 35fe4e2774 | |||
| 317901a4d2 | |||
| 350ffcbc43 | |||
| 2c074a96c8 | |||
| 79f140b2d0 | |||
| 649c655ad5 | |||
| d5284a90d1 | |||
| bd18c53ab8 | |||
| 704c1ab7d4 | |||
| 1dbd7f221e | |||
| e1a47ffbe2 | |||
| 2add629970 | |||
| a48fcd9c97 | |||
| df7b00cb2c | |||
| 27fc939101 | |||
| 7c574d17e4 | |||
| 86a105f5a5 | |||
| 327bcc2b32 | |||
| a6cbd85010 | |||
| 371b820923 | |||
| 1d47fd0267 | |||
| 276fc95bb0 | |||
| 34c8861321 | |||
| 780b782579 | |||
| 9daa99fd5b | |||
| 76b3aa29cf | |||
| 25d4913fab | |||
| 0efeff3a4f | |||
| f56089925e | |||
| 5afae08f20 | |||
| 4bf114dfd6 | |||
| 23a3c2e624 | |||
| 71862f4354 |
12
.github/workflows/docker-build-push.yml
vendored
12
.github/workflows/docker-build-push.yml
vendored
@ -18,20 +18,20 @@ jobs:
|
|||||||
run: echo ::set-output name=tag::${GITHUB_REF#refs/*/}
|
run: echo ::set-output name=tag::${GITHUB_REF#refs/*/}
|
||||||
|
|
||||||
- name: Login to Docker Hub
|
- name: Login to Docker Hub
|
||||||
uses: docker/login-action@v1.14.1
|
uses: docker/login-action@v2.0.0
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
|
||||||
- name: Login to GitHub Container Registry
|
- name: Login to GitHub Container Registry
|
||||||
uses: docker/login-action@v1.14.1
|
uses: docker/login-action@v2.0.0
|
||||||
with:
|
with:
|
||||||
registry: ghcr.io
|
registry: ghcr.io
|
||||||
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 Client Image
|
||||||
uses: docker/build-push-action@v2.10.0
|
uses: docker/build-push-action@v3.0.0
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
push: true
|
push: true
|
||||||
@ -55,20 +55,20 @@ jobs:
|
|||||||
run: echo ::set-output name=tag::${GITHUB_REF#refs/*/}
|
run: echo ::set-output name=tag::${GITHUB_REF#refs/*/}
|
||||||
|
|
||||||
- name: Login to Docker Hub
|
- name: Login to Docker Hub
|
||||||
uses: docker/login-action@v1.14.1
|
uses: docker/login-action@v2.0.0
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
|
||||||
- name: Login to GitHub Container Registry
|
- name: Login to GitHub Container Registry
|
||||||
uses: docker/login-action@v1.14.1
|
uses: docker/login-action@v2.0.0
|
||||||
with:
|
with:
|
||||||
registry: ghcr.io
|
registry: ghcr.io
|
||||||
username: $GITHUB_REPOSITORY_OWNER
|
username: $GITHUB_REPOSITORY_OWNER
|
||||||
password: ${{ secrets.GH_TOKEN }}
|
password: ${{ secrets.GH_TOKEN }}
|
||||||
|
|
||||||
- name: Build and Push Server Image
|
- name: Build and Push Server Image
|
||||||
uses: docker/build-push-action@v2.10.0
|
uses: docker/build-push-action@v3.0.0
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
push: true
|
push: true
|
||||||
|
|||||||
43
CHANGELOG.md
43
CHANGELOG.md
@ -2,6 +2,49 @@
|
|||||||
|
|
||||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
||||||
|
|
||||||
|
### [3.4.6](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.4.5...v3.4.6) (2022-06-19)
|
||||||
|
|
||||||
|
## [3.6.0](https://github.com/dvd741-a/Reactive-Resume/compare/v3.3.4...v3.6.0) (2022-06-05)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **all:** upgrade to v3.4.0 ([87d381f](https://github.com/dvd741-a/Reactive-Resume/commit/87d381fe8eab9ca4624df5de6e8b9ab18a072b67))
|
||||||
|
* **i18n:** add Hungrarian (Magyar) language ([35fe4e2](https://github.com/dvd741-a/Reactive-Resume/commit/35fe4e27744b6f7325b25db2cf3b626ed8598623))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **i18n:** fix language mismatch in exported pdf ([62fd63e](https://github.com/dvd741-a/Reactive-Resume/commit/62fd63e41fe10fba843a40fb08191f5944f2b2fc))
|
||||||
|
* **typeorm:** update typeorm to latest 0.2.x for secpatch ([5bdb92b](https://github.com/dvd741-a/Reactive-Resume/commit/5bdb92b1cff9e56879f9bbf31801d6554a00a8d5))
|
||||||
|
|
||||||
|
## [3.5.0](https://github.com/dvd741-a/Reactive-Resume/compare/v3.3.4...v3.5.0) (2022-06-05)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **all:** upgrade to v3.4.0 ([87d381f](https://github.com/dvd741-a/Reactive-Resume/commit/87d381fe8eab9ca4624df5de6e8b9ab18a072b67))
|
||||||
|
* **i18n:** add Hungrarian (Magyar) language ([35fe4e2](https://github.com/dvd741-a/Reactive-Resume/commit/35fe4e27744b6f7325b25db2cf3b626ed8598623))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **i18n:** fix language mismatch in exported pdf ([62fd63e](https://github.com/dvd741-a/Reactive-Resume/commit/62fd63e41fe10fba843a40fb08191f5944f2b2fc))
|
||||||
|
* **typeorm:** update typeorm to latest 0.2.x for secpatch ([5bdb92b](https://github.com/dvd741-a/Reactive-Resume/commit/5bdb92b1cff9e56879f9bbf31801d6554a00a8d5))
|
||||||
|
|
||||||
|
### [3.4.5](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.4.4...v3.4.5) (2022-05-24)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **i18n:** fix language mismatch in exported pdf ([62fd63e](https://github.com/AmruthPillai/Reactive-Resume/commit/62fd63e41fe10fba843a40fb08191f5944f2b2fc))
|
||||||
|
|
||||||
|
## [3.4.4](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.4.3...v3.4.4) (2022-05-02)
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **i18n:** add Hungrarian (Magyar) language ([35fe4e2](https://github.com/AmruthPillai/Reactive-Resume/commit/35fe4e27744b6f7325b25db2cf3b626ed8598623))
|
||||||
|
|
||||||
### [3.4.3](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.4.2...v3.4.3) (2022-05-01)
|
### [3.4.3](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.4.2...v3.4.3) (2022-05-01)
|
||||||
|
|
||||||
### [3.4.2](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.4.1...v3.4.2) (2022-04-30)
|
### [3.4.2](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.4.1...v3.4.2) (2022-04-30)
|
||||||
|
|||||||
@ -64,11 +64,15 @@ You have complete control over what goes into your resume, how it looks, what co
|
|||||||
- French (Français)
|
- French (Français)
|
||||||
- German (Deutsch)
|
- German (Deutsch)
|
||||||
- Greek (Ελληνικά)
|
- Greek (Ελληνικά)
|
||||||
|
- Hebrew (Ivrit)
|
||||||
- Hindi (हिन्दी)
|
- Hindi (हिन्दी)
|
||||||
|
- Hungarian (Magyar)
|
||||||
|
- Indonesian (Bahasa Indonesia)
|
||||||
- Italian (Italiano)
|
- Italian (Italiano)
|
||||||
- Kannada (ಕನ್ನಡ)
|
- Kannada (ಕನ್ನಡ)
|
||||||
- Malayalam (മലയാളം)
|
- Malayalam (മലയാളം)
|
||||||
- Odia (ଓଡ଼ିଆ)
|
- Odia (ଓଡ଼ିଆ)
|
||||||
|
- Persian (Farsi)
|
||||||
- Polish (Polski)
|
- Polish (Polski)
|
||||||
- Portuguese (Português)
|
- Portuguese (Português)
|
||||||
- Russian (русский)
|
- Russian (русский)
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
plugins {
|
plugins {
|
||||||
id 'com.android.application' version '7.1.2' apply false
|
id 'com.android.application' version '7.1.2' apply false
|
||||||
id 'com.android.library' version '7.1.2' apply false
|
id 'com.android.library' version '7.1.2' apply false
|
||||||
id 'org.jetbrains.kotlin.android' version '1.6.21' apply false
|
id 'org.jetbrains.kotlin.android' version '1.7.0' apply false
|
||||||
}
|
}
|
||||||
|
|
||||||
task clean(type: Delete) {
|
task clean(type: Delete) {
|
||||||
|
|||||||
5
client/.gitignore
vendored
5
client/.gitignore
vendored
@ -36,4 +36,7 @@ yarn-error.log*
|
|||||||
*.tsbuildinfo
|
*.tsbuildinfo
|
||||||
|
|
||||||
# react-env
|
# react-env
|
||||||
__ENV.js
|
__ENV.js
|
||||||
|
|
||||||
|
# next-sitemap
|
||||||
|
sitemap*.xml
|
||||||
@ -14,12 +14,16 @@ export const languages: Language[] = [
|
|||||||
{ code: 'en', name: 'English' },
|
{ code: 'en', name: 'English' },
|
||||||
{ code: 'es', name: 'Spanish', localName: 'Español' },
|
{ code: 'es', name: 'Spanish', localName: 'Español' },
|
||||||
{ code: 'fr', name: 'French', localName: 'Français' },
|
{ code: 'fr', name: 'French', localName: 'Français' },
|
||||||
|
{ code: 'he', name: 'Hebrew', localName: 'Ivrit' },
|
||||||
{ code: 'hi', name: 'Hindi', localName: 'हिन्दी' },
|
{ code: 'hi', name: 'Hindi', localName: 'हिन्दी' },
|
||||||
|
{ code: 'hu', name: 'Hungarian', localName: 'Magyar' },
|
||||||
|
{ code: 'id', name: 'Indonesian', localName: 'Bahasa Indonesia' },
|
||||||
{ code: 'it', name: 'Italian', localName: 'Italiano' },
|
{ code: 'it', name: 'Italian', localName: 'Italiano' },
|
||||||
{ code: 'kn', name: 'Kannada', localName: 'ಕನ್ನಡ' },
|
{ code: 'kn', name: 'Kannada', localName: 'ಕನ್ನಡ' },
|
||||||
{ code: 'ml', name: 'Malayalam', localName: 'മലയാളം' },
|
{ code: 'ml', name: 'Malayalam', localName: 'മലയാളം' },
|
||||||
{ code: 'nl', name: 'Dutch', localName: 'Nederlands' },
|
{ code: 'nl', name: 'Dutch', localName: 'Nederlands' },
|
||||||
{ code: 'or', name: 'Odia', localName: 'ଓଡ଼ିଆ' },
|
{ code: 'or', name: 'Odia', localName: 'ଓଡ଼ିଆ' },
|
||||||
|
{ code: 'fa', name: 'Persian', localName: 'Farsi' },
|
||||||
{ code: 'pl', name: 'Polish', localName: 'Polski' },
|
{ code: 'pl', name: 'Polish', localName: 'Polski' },
|
||||||
{ code: 'pt', name: 'Portuguese', localName: 'Português' },
|
{ code: 'pt', name: 'Portuguese', localName: 'Português' },
|
||||||
{ code: 'ru', name: 'Russian', localName: 'русский' },
|
{ code: 'ru', name: 'Russian', localName: 'русский' },
|
||||||
|
|||||||
@ -6,19 +6,27 @@ const i18nConfig = {
|
|||||||
locales: [
|
locales: [
|
||||||
'ar',
|
'ar',
|
||||||
'bn',
|
'bn',
|
||||||
|
'cs',
|
||||||
'da',
|
'da',
|
||||||
'de',
|
'de',
|
||||||
|
'el',
|
||||||
'en',
|
'en',
|
||||||
'es',
|
'es',
|
||||||
|
'fa',
|
||||||
'fr',
|
'fr',
|
||||||
|
'he',
|
||||||
'hi',
|
'hi',
|
||||||
|
'hu',
|
||||||
|
'id',
|
||||||
'it',
|
'it',
|
||||||
'kn',
|
'kn',
|
||||||
'ml',
|
'ml',
|
||||||
'nl',
|
'nl',
|
||||||
|
'or',
|
||||||
'pl',
|
'pl',
|
||||||
'pt',
|
'pt',
|
||||||
'ru',
|
'ru',
|
||||||
|
'sv',
|
||||||
'ta',
|
'ta',
|
||||||
'tr',
|
'tr',
|
||||||
'vi',
|
'vi',
|
||||||
|
|||||||
@ -9,70 +9,74 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@beam-australia/react-env": "^3.1.1",
|
"@beam-australia/react-env": "^3.1.1",
|
||||||
|
"@date-io/dayjs": "^2.14.0",
|
||||||
"@emotion/css": "^11.9.0",
|
"@emotion/css": "^11.9.0",
|
||||||
"@emotion/react": "^11.9.0",
|
"@emotion/react": "^11.9.3",
|
||||||
"@emotion/styled": "^11.8.1",
|
"@emotion/styled": "^11.9.3",
|
||||||
"@hookform/resolvers": "2.8.8",
|
"@hookform/resolvers": "2.9.1",
|
||||||
"@monaco-editor/react": "^4.4.4",
|
"@monaco-editor/react": "^4.4.5",
|
||||||
"@mui/icons-material": "^5.6.2",
|
"@mui/icons-material": "^5.8.4",
|
||||||
"@mui/lab": "^5.0.0-alpha.79",
|
"@mui/lab": "^5.0.0-alpha.86",
|
||||||
"@mui/material": "^5.6.3",
|
"@mui/material": "^5.8.4",
|
||||||
"@reduxjs/toolkit": "^1.8.1",
|
"@mui/system": "^5.8.4",
|
||||||
|
"@mui/x-date-pickers": "5.0.0-alpha.6",
|
||||||
|
"@next/env": "^12.1.6",
|
||||||
|
"@reduxjs/toolkit": "^1.8.2",
|
||||||
"axios": "^0.27.2",
|
"axios": "^0.27.2",
|
||||||
"clsx": "^1.1.1",
|
"clsx": "^1.1.1",
|
||||||
"dayjs": "^1.11.1",
|
"dayjs": "^1.11.3",
|
||||||
"downloadjs": "^1.4.7",
|
"downloadjs": "^1.4.7",
|
||||||
"joi": "^17.6.0",
|
"joi": "^17.6.0",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"md5-hex": "^4.0.0",
|
"md5-hex": "^4.0.0",
|
||||||
"monaco-editor": "^0.33.0",
|
"monaco-editor": "^0.33.0",
|
||||||
"nanoid": "^3.3.3",
|
"nanoid": "^3.3.4",
|
||||||
"next": "12.1.5",
|
"next": "12.1.6",
|
||||||
"next-i18next": "^11.0.0",
|
"next-i18next": "^11.0.0",
|
||||||
"react": "17.0.2",
|
"react": "18.2.0",
|
||||||
"react-beautiful-dnd": "^13.1.0",
|
"react-beautiful-dnd": "^13.1.0",
|
||||||
"react-colorful": "^5.5.1",
|
"react-colorful": "^5.5.1",
|
||||||
"react-dnd": "15.1.2",
|
"react-dnd": "16.0.1",
|
||||||
"react-dnd-html5-backend": "15.1.3",
|
"react-dnd-html5-backend": "16.0.1",
|
||||||
"react-dom": "17.0.2",
|
"react-dom": "18.2.0",
|
||||||
"react-hook-form": "^7.30.0",
|
"react-hook-form": "^7.32.2",
|
||||||
"react-hot-toast": "2.2.0",
|
"react-hot-toast": "2.2.0",
|
||||||
"react-hotkeys-hook": "^3.4.4",
|
"react-hotkeys-hook": "^3.4.6",
|
||||||
"react-icons": "^4.3.1",
|
"react-icons": "^4.4.0",
|
||||||
"react-markdown": "^8.0.3",
|
"react-markdown": "^8.0.3",
|
||||||
"react-query": "^3.38.0",
|
"react-query": "^3.39.1",
|
||||||
"react-redux": "^8.0.1",
|
"react-redux": "^8.0.2",
|
||||||
"react-zoom-pan-pinch": "^2.1.3",
|
"react-zoom-pan-pinch": "^2.1.3",
|
||||||
"redux": "^4.2.0",
|
"redux": "^4.2.0",
|
||||||
"redux-persist": "^6.0.0",
|
"redux-persist": "^6.0.0",
|
||||||
"redux-saga": "^1.1.3",
|
"redux-saga": "^1.1.3",
|
||||||
"remark-gfm": "^3.0.1",
|
"remark-gfm": "^3.0.1",
|
||||||
"sharp": "^0.30.4",
|
"sharp": "^0.30.6",
|
||||||
"uuid": "^8.3.2",
|
"uuid": "^8.3.2",
|
||||||
"webfontloader": "^1.6.28"
|
"webfontloader": "^1.6.28"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.17.10",
|
"@babel/core": "^7.18.5",
|
||||||
"@reactive-resume/schema": "workspace:*",
|
"@reactive-resume/schema": "workspace:*",
|
||||||
"@tailwindcss/typography": "^0.5.2",
|
"@tailwindcss/typography": "^0.5.2",
|
||||||
"@types/downloadjs": "^1.4.3",
|
"@types/downloadjs": "^1.4.3",
|
||||||
"@types/lodash": "^4.14.182",
|
"@types/lodash": "^4.14.182",
|
||||||
"@types/node": "17.0.30",
|
"@types/node": "18.0.0",
|
||||||
"@types/react": "17.0.2",
|
"@types/react": "18.0.14",
|
||||||
"@types/react-beautiful-dnd": "^13.1.2",
|
"@types/react-beautiful-dnd": "^13.1.2",
|
||||||
"@types/react-redux": "^7.1.24",
|
"@types/react-redux": "^7.1.24",
|
||||||
"@types/tailwindcss": "^3.0.10",
|
"@types/tailwindcss": "^3.0.10",
|
||||||
"@types/uuid": "^8.3.4",
|
"@types/uuid": "^8.3.4",
|
||||||
"@types/webfontloader": "^1.6.34",
|
"@types/webfontloader": "^1.6.34",
|
||||||
"autoprefixer": "^10.4.5",
|
"autoprefixer": "^10.4.7",
|
||||||
"csstype": "^3.0.11",
|
"csstype": "^3.1.0",
|
||||||
"eslint": "^8.14.0",
|
"eslint": "^8.18.0",
|
||||||
"eslint-config-next": "12.1.5",
|
"eslint-config-next": "12.1.6",
|
||||||
"next-sitemap": "^2.5.20",
|
"next-sitemap": "^3.1.1",
|
||||||
"postcss": "^8.4.13",
|
"postcss": "^8.4.14",
|
||||||
"prettier": "^2.6.2",
|
"prettier": "^2.7.1",
|
||||||
"sass": "^1.51.0",
|
"sass": "^1.52.3",
|
||||||
"tailwindcss": "^3.0.24",
|
"tailwindcss": "^3.1.3",
|
||||||
"typescript": "^4.6.4"
|
"typescript": "^4.7.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -59,6 +59,14 @@ const Preview: NextPage<Props> = ({ username, slug, resume: initialData }) => {
|
|||||||
}
|
}
|
||||||
}, [dispatch, initialData]);
|
}, [dispatch, initialData]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (!isEmpty(resume) && router.locale !== resume.metadata.locale) {
|
||||||
|
const { pathname, asPath, query } = router;
|
||||||
|
|
||||||
|
router.push({ pathname, query }, asPath, { locale: resume.metadata.locale });
|
||||||
|
}
|
||||||
|
}, [resume, router]);
|
||||||
|
|
||||||
useQuery<Resume>(`resume/${username}/${slug}`, () => fetchResumeByIdentifier({ username, slug }), {
|
useQuery<Resume>(`resume/${username}/${slug}`, () => fetchResumeByIdentifier({ username, slug }), {
|
||||||
initialData,
|
initialData,
|
||||||
retry: false,
|
retry: false,
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import '@/styles/globals.scss';
|
import '@/styles/globals.scss';
|
||||||
|
|
||||||
import DateAdapter from '@mui/lab/AdapterDayjs';
|
import DayjsAdapter from '@date-io/dayjs';
|
||||||
import LocalizationProvider from '@mui/lab/LocalizationProvider';
|
import { LocalizationProvider } from '@mui/lab';
|
||||||
import type { AppProps } from 'next/app';
|
import type { AppProps } from 'next/app';
|
||||||
import Head from 'next/head';
|
import Head from 'next/head';
|
||||||
import Script from 'next/script';
|
import Script from 'next/script';
|
||||||
@ -32,7 +32,7 @@ const App: React.FC<AppProps> = ({ Component, pageProps }) => {
|
|||||||
</Head>
|
</Head>
|
||||||
|
|
||||||
<ReduxProvider store={store}>
|
<ReduxProvider store={store}>
|
||||||
<LocalizationProvider dateAdapter={DateAdapter}>
|
<LocalizationProvider dateAdapter={DayjsAdapter}>
|
||||||
<PersistGate loading={null} persistor={persistor}>
|
<PersistGate loading={null} persistor={persistor}>
|
||||||
<QueryClientProvider client={queryClient}>
|
<QueryClientProvider client={queryClient}>
|
||||||
<WrapperRegistry>
|
<WrapperRegistry>
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import get from 'lodash/get';
|
|||||||
import isEmpty from 'lodash/isEmpty';
|
import isEmpty from 'lodash/isEmpty';
|
||||||
import { GetServerSideProps, NextPage } from 'next';
|
import { GetServerSideProps, NextPage } from 'next';
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
|
import { useRouter } from 'next/router';
|
||||||
import { serverSideTranslations } from 'next-i18next/serverSideTranslations';
|
import { serverSideTranslations } from 'next-i18next/serverSideTranslations';
|
||||||
import { useEffect } from 'react';
|
import { useEffect } from 'react';
|
||||||
import toast from 'react-hot-toast';
|
import toast from 'react-hot-toast';
|
||||||
@ -35,6 +36,8 @@ export const getServerSideProps: GetServerSideProps<Props> = async ({ query, loc
|
|||||||
};
|
};
|
||||||
|
|
||||||
const Preview: NextPage<Props> = ({ shortId }) => {
|
const Preview: NextPage<Props> = ({ shortId }) => {
|
||||||
|
const router = useRouter();
|
||||||
|
|
||||||
const dispatch = useAppDispatch();
|
const dispatch = useAppDispatch();
|
||||||
|
|
||||||
const { data: resume } = useQuery<Resume>(`resume/${shortId}`, () => fetchResumeByShortId({ shortId }), {
|
const { data: resume } = useQuery<Resume>(`resume/${shortId}`, () => fetchResumeByShortId({ shortId }), {
|
||||||
@ -52,6 +55,14 @@ const Preview: NextPage<Props> = ({ shortId }) => {
|
|||||||
if (resume) dispatch(setResume(resume));
|
if (resume) dispatch(setResume(resume));
|
||||||
}, [resume, dispatch]);
|
}, [resume, dispatch]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (resume && !isEmpty(resume) && router.locale !== resume.metadata.locale) {
|
||||||
|
const { pathname, asPath, query } = router;
|
||||||
|
|
||||||
|
router.push({ pathname, query }, asPath, { locale: resume.metadata.locale });
|
||||||
|
}
|
||||||
|
}, [resume, router]);
|
||||||
|
|
||||||
if (!resume || isEmpty(resume)) return null;
|
if (!resume || isEmpty(resume)) return null;
|
||||||
|
|
||||||
const layout: string[][][] = get(resume, 'metadata.layout', []);
|
const layout: string[][][] = get(resume, 'metadata.layout', []);
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
{
|
{
|
||||||
"common": {
|
"common": {
|
||||||
"actions": {
|
"actions": {
|
||||||
"add": "إضافة {{فقرة}} جديدة",
|
"add": "إضافة {{token}} جديدة",
|
||||||
"delete": "حذة {{الفقرة}}",
|
"delete": "حذف {{token}}",
|
||||||
"edit": "تحرير {{الفقرة}}"
|
"edit": "تحرير {{token}}"
|
||||||
},
|
},
|
||||||
"columns": {
|
"columns": {
|
||||||
"heading": "الأعمدة",
|
"heading": "الأعمدة",
|
||||||
@ -24,13 +24,13 @@
|
|||||||
"label": "تاريخ الانتهاء"
|
"label": "تاريخ الانتهاء"
|
||||||
},
|
},
|
||||||
"keywords": {
|
"keywords": {
|
||||||
"label": "الكلمات الرئيسية"
|
"label": "الكلمات الدالة"
|
||||||
},
|
},
|
||||||
"level": {
|
"level": {
|
||||||
"label": "مستوى"
|
"label": "مستوى"
|
||||||
},
|
},
|
||||||
"levelNum": {
|
"levelNum": {
|
||||||
"label": "المستوى (Number)"
|
"label": "المستوى (العدد)"
|
||||||
},
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"label": "الاسم"
|
"label": "الاسم"
|
||||||
@ -42,7 +42,7 @@
|
|||||||
"label": "المنصب"
|
"label": "المنصب"
|
||||||
},
|
},
|
||||||
"start-date": {
|
"start-date": {
|
||||||
"label": "تاريخ البداية"
|
"label": "تاريخ البدء"
|
||||||
},
|
},
|
||||||
"subtitle": {
|
"subtitle": {
|
||||||
"label": "العنوان الفرعي"
|
"label": "العنوان الفرعي"
|
||||||
@ -119,6 +119,9 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "الاسم الكامل"
|
"label": "الاسم الكامل"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "تاريخ الميلاد"
|
||||||
|
},
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
|
|||||||
@ -119,6 +119,9 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "পূর্ণ নাম"
|
"label": "পূর্ণ নাম"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "জন্ম তারিখ"
|
||||||
|
},
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
|
|||||||
@ -119,6 +119,9 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "Celé jméno"
|
"label": "Celé jméno"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "Datum narození"
|
||||||
|
},
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
|
|||||||
29
client/public/locales/cs/common.json
Normal file
29
client/public/locales/cs/common.json
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"avatar": {
|
||||||
|
"menu": {
|
||||||
|
"greeting": "Dobrý den",
|
||||||
|
"logout": "Odhlásit se"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"footer": {
|
||||||
|
"credit": "Vášnivý projekt <1>Amrutha Pillaie</1>",
|
||||||
|
"license": "Od komunity, pro komunitu."
|
||||||
|
},
|
||||||
|
"markdown": {
|
||||||
|
"help-text": "Tato sekce podporuje <1>markdown</1> formátování."
|
||||||
|
},
|
||||||
|
"date": {
|
||||||
|
"present": "Současnost"
|
||||||
|
},
|
||||||
|
"subtitle": "Bezplatný a open source tvůrce životopisů.",
|
||||||
|
"title": "Reactive Resume",
|
||||||
|
"toast": {
|
||||||
|
"error": {
|
||||||
|
"upload-file-size": "Prosím nahrajte pouze soubory pod 2 megabajty.",
|
||||||
|
"upload-photo-size": "Nahrávejte prosím pouze fotografie o velikosti do 2 megabajtů, nejlépe čtvercové."
|
||||||
|
},
|
||||||
|
"success": {
|
||||||
|
"resume-link-copied": "Odkaz na váš životopis byl zkopírován do schránky."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
25
client/public/locales/cs/dashboard.json
Normal file
25
client/public/locales/cs/dashboard.json
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"create-resume": {
|
||||||
|
"subtitle": "Začít od začátku",
|
||||||
|
"title": "Vytvořit nový životopis"
|
||||||
|
},
|
||||||
|
"import-external": {
|
||||||
|
"subtitle": "LinkedIn, JSON Resume, Reactive Resume",
|
||||||
|
"title": "Importovat z externích zdrojů"
|
||||||
|
},
|
||||||
|
"resume": {
|
||||||
|
"menu": {
|
||||||
|
"delete": "Smazat",
|
||||||
|
"duplicate": "Duplikovat",
|
||||||
|
"open": "Otevřít",
|
||||||
|
"rename": "Přejmenovat",
|
||||||
|
"share-link": "Sdílet odkaz",
|
||||||
|
"tooltips": {
|
||||||
|
"delete": "Opravdu chcete smazat tento životopis? Toto je nevratná akce.",
|
||||||
|
"share-link": "Musíte změnit viditelnost svého životopisu na veřejnou, aby byl viditelný pro ostatní."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"timestamp": "Naposledy aktualizováno před {{timestamp}}"
|
||||||
|
},
|
||||||
|
"title": "Přístrojová deska"
|
||||||
|
}
|
||||||
41
client/public/locales/cs/landing.json
Normal file
41
client/public/locales/cs/landing.json
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"actions": {
|
||||||
|
"app": "Přejděte do aplikace",
|
||||||
|
"login": "Přihlásit se",
|
||||||
|
"logout": "Odhlásit se",
|
||||||
|
"register": "Registrovat"
|
||||||
|
},
|
||||||
|
"features": {
|
||||||
|
"heading": "Funkce",
|
||||||
|
"list": {
|
||||||
|
"ads": "Žádná reklama",
|
||||||
|
"export": "Exportujte svůj životopis do formátu JSON nebo PDF",
|
||||||
|
"free": "Zdarma, navždy",
|
||||||
|
"import": "Import dat z LinkedIn, JSON Resume",
|
||||||
|
"languages": "Dostupné ve více jazycích",
|
||||||
|
"more": "A mnohem více vzrušujících funkcí, <1>o tom si vše přečtěte zde</1>",
|
||||||
|
"tracking": "Žádné sledování uživatelů"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"links": {
|
||||||
|
"heading": "Odkazy",
|
||||||
|
"links": {
|
||||||
|
"donate": "Darovat",
|
||||||
|
"github": "Zdrojový kód",
|
||||||
|
"privacy": "Zásady ochrany osobních údajů",
|
||||||
|
"service": "Podmínky služby"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"screenshots": {
|
||||||
|
"heading": "Snímky obrazovky"
|
||||||
|
},
|
||||||
|
"testimonials": {
|
||||||
|
"heading": "Posudky",
|
||||||
|
"body": "Ať je to dobře nebo špatně, rád bych slyšel váš názor na Reactive Resume a jaké to bylo pro vás.<br/>Zde jsou některé zprávy zaslané uživateli z celého světa.",
|
||||||
|
"contact": "Můžete mě kontaktovat prostřednictvím <1>mého e-mailu</1> nebo prostřednictvím kontaktního formuláře na <3>mých webových stránkách</3> ."
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"body": "Reactive Resume je bezplatný a open source tvůrce životopisů, který je vytvořen tak, aby zjednodušil každodenní úkoly vytváření, aktualizace a sdílení vašeho životopisu jako 1, 2, 3. Pomocí této aplikace můžete vytvořit více životopisů a sdílet je s náboráři nebo přáteli. prostřednictvím jedinečného odkazu a vytiskněte si jej jako PDF, vše zdarma, bez reklam, bez sledování, bez ztráty integrity a soukromí vašich dat.",
|
||||||
|
"heading": "souhrn"
|
||||||
|
}
|
||||||
|
}
|
||||||
136
client/public/locales/cs/modals.json
Normal file
136
client/public/locales/cs/modals.json
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
{
|
||||||
|
"auth": {
|
||||||
|
"forgot-password": {
|
||||||
|
"actions": {
|
||||||
|
"send-email": "Odeslat e-mail pro obnovení hesla"
|
||||||
|
},
|
||||||
|
"body": "Stačí zadat e-mailovou adresu spojenou s účtem, který chcete obnovit.",
|
||||||
|
"form": {
|
||||||
|
"email": {
|
||||||
|
"label": "Emailová adresa"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "Zapomněli jste heslo?",
|
||||||
|
"help-text": "Pokud účet existuje, obdržíte e-mail s odkazem na resetování hesla."
|
||||||
|
},
|
||||||
|
"login": {
|
||||||
|
"actions": {
|
||||||
|
"login": "Přihlásit se",
|
||||||
|
"google": "Přihlaste se pomocí Google"
|
||||||
|
},
|
||||||
|
"body": "Zadejte prosím své uživatelské jméno a heslo spojené s vaším účtem, abyste se mohli přihlásit a získat přístup, spravovat a sdílet své životopisy.",
|
||||||
|
"form": {
|
||||||
|
"password": {
|
||||||
|
"label": "Heslo"
|
||||||
|
},
|
||||||
|
"username": {
|
||||||
|
"help-text": "Můžete také zadat svou e-mailovou adresu",
|
||||||
|
"label": "uživatelské jméno"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "Přihlaste se ke svému účtu",
|
||||||
|
"recover-text": "V případě, že jste zapomněli své heslo, můžete <1>obnovit svůj účet</1> tady.",
|
||||||
|
"register-text": "Pokud jej nemáte, můžete si <1>vytvořit účet</1> tady."
|
||||||
|
},
|
||||||
|
"register": {
|
||||||
|
"actions": {
|
||||||
|
"register": "Registrovat",
|
||||||
|
"google": "Zaregistrujte se u Google"
|
||||||
|
},
|
||||||
|
"body": "Chcete-li vytvořit účet, zadejte své osobní údaje.",
|
||||||
|
"form": {
|
||||||
|
"confirm-password": {
|
||||||
|
"label": "Potvrďte heslo"
|
||||||
|
},
|
||||||
|
"email": {
|
||||||
|
"label": "Emailová adresa"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"label": "Celé jméno"
|
||||||
|
},
|
||||||
|
"password": {
|
||||||
|
"label": "Heslo"
|
||||||
|
},
|
||||||
|
"username": {
|
||||||
|
"label": "uživatelské jméno"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "Vytvořit účet",
|
||||||
|
"loginText": "Pokud již máte účet, můžete se <1>přihlásit zde</1> ."
|
||||||
|
},
|
||||||
|
"reset-password": {
|
||||||
|
"actions": {
|
||||||
|
"set-password": "Nastavit nové heslo"
|
||||||
|
},
|
||||||
|
"body": "Zadejte nové heslo ke svému účtu.",
|
||||||
|
"form": {
|
||||||
|
"confirm-password": {
|
||||||
|
"label": "Potvrďte heslo"
|
||||||
|
},
|
||||||
|
"password": {
|
||||||
|
"label": "Heslo"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "Obnovit heslo"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"create-resume": {
|
||||||
|
"actions": {
|
||||||
|
"create-resume": "Vytvořit životopis"
|
||||||
|
},
|
||||||
|
"body": "Začněte budovat svůj životopis tím, že mu dáte jméno. Může to být odkaz na roli, o kterou se ucházíte, nebo jen na vaši oblíbenou svačinu.",
|
||||||
|
"form": {
|
||||||
|
"name": {
|
||||||
|
"label": "název"
|
||||||
|
},
|
||||||
|
"public": {
|
||||||
|
"label": "Je veřejně přístupný?"
|
||||||
|
},
|
||||||
|
"slug": {
|
||||||
|
"label": "Slimák"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "Vytvořte nový životopis"
|
||||||
|
},
|
||||||
|
"import-external": {
|
||||||
|
"heading": "Import z externích zdrojů",
|
||||||
|
"json-resume": {
|
||||||
|
"actions": {
|
||||||
|
"upload-json": "Nahrajte JSON"
|
||||||
|
},
|
||||||
|
"body": "Pokud máte <1>ověřený životopis JSON</1> připraven k použití, můžete jej použít k rychlému sledování svého vývoje na Reactive Resume. Začněte kliknutím na tlačítko níže a nahráním platného souboru JSON.",
|
||||||
|
"heading": "Import z obnovení JSON"
|
||||||
|
},
|
||||||
|
"linkedin": {
|
||||||
|
"actions": {
|
||||||
|
"upload-archive": "Nahrát archiv ZIP"
|
||||||
|
},
|
||||||
|
"body": "Můžete ušetřit čas tím, že exportujete svá data z LinkedIn a použijete je k automatickému vyplňování polí na Reactive Resume. Přejděte na <1>Ochrana osobních údajů</1> sekce na LinkedIn a vyžádejte si archiv vašich dat. Jakmile bude k dispozici, nahrajte níže uvedený soubor ZIP.",
|
||||||
|
"heading": "Import z LinkedIn"
|
||||||
|
},
|
||||||
|
"reactive-resume": {
|
||||||
|
"actions": {
|
||||||
|
"upload-json": "Nahrajte JSON",
|
||||||
|
"upload-json-v2": "Nahrajte JSON z v2"
|
||||||
|
},
|
||||||
|
"body": "Pokud máte JSON, který byl exportován s aktuální verzí Reactive Resume, můžete jej sem importovat zpět a znovu získat upravitelnou verzi.",
|
||||||
|
"heading": "Import z reaktivního obnovení"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"rename-resume": {
|
||||||
|
"actions": {
|
||||||
|
"rename-resume": "Přejmenovat Resume"
|
||||||
|
},
|
||||||
|
"form": {
|
||||||
|
"name": {
|
||||||
|
"label": "název"
|
||||||
|
},
|
||||||
|
"slug": {
|
||||||
|
"label": "Slimák"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "Přejmenujte svůj životopis"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -119,6 +119,9 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "Fulde navn"
|
"label": "Fulde navn"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "Fødselsdato"
|
||||||
|
},
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
|
|||||||
@ -119,6 +119,9 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "Voller Name"
|
"label": "Voller Name"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "Geburtsdatum"
|
||||||
|
},
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
|
|||||||
@ -119,6 +119,9 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "Ονοματεπώνυμο"
|
"label": "Ονοματεπώνυμο"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "Ημερομηνια γεννησης"
|
||||||
|
},
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
|
|||||||
@ -119,6 +119,9 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "Nombre Completo"
|
"label": "Nombre Completo"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "Fecha de cumpleaños"
|
||||||
|
},
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
|
|||||||
361
client/public/locales/fa/builder.json
Normal file
361
client/public/locales/fa/builder.json
Normal file
@ -0,0 +1,361 @@
|
|||||||
|
{
|
||||||
|
"common": {
|
||||||
|
"actions": {
|
||||||
|
"add": "{{token}} جدید اضافه کنید",
|
||||||
|
"delete": "حذف {{token}}",
|
||||||
|
"edit": "ویرایش {{token}}"
|
||||||
|
},
|
||||||
|
"columns": {
|
||||||
|
"heading": "ستونها",
|
||||||
|
"tooltip": "تغییر تعداد ستونها"
|
||||||
|
},
|
||||||
|
"form": {
|
||||||
|
"date": {
|
||||||
|
"label": "تاریخ"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"label": "توضیحات"
|
||||||
|
},
|
||||||
|
"email": {
|
||||||
|
"label": "آدرس ایمیل"
|
||||||
|
},
|
||||||
|
"end-date": {
|
||||||
|
"help-text": "اگر هنوز پایان نیافته، این قسمت را خالی بگذارید",
|
||||||
|
"label": "تاریخ پایان"
|
||||||
|
},
|
||||||
|
"keywords": {
|
||||||
|
"label": "کلمات کلیدی"
|
||||||
|
},
|
||||||
|
"level": {
|
||||||
|
"label": "سطح"
|
||||||
|
},
|
||||||
|
"levelNum": {
|
||||||
|
"label": "سطح (عدد)"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"label": "نام"
|
||||||
|
},
|
||||||
|
"phone": {
|
||||||
|
"label": "شماره تلفن"
|
||||||
|
},
|
||||||
|
"position": {
|
||||||
|
"label": "عنوان شغلی"
|
||||||
|
},
|
||||||
|
"start-date": {
|
||||||
|
"label": "تاریخ شروع"
|
||||||
|
},
|
||||||
|
"subtitle": {
|
||||||
|
"label": "عنوان فرعی"
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"label": "درباره من"
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"label": "عنوان"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"label": "وبسایت"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"glossary": {
|
||||||
|
"page": "صفحه"
|
||||||
|
},
|
||||||
|
"list": {
|
||||||
|
"actions": {
|
||||||
|
"delete": "حذف",
|
||||||
|
"duplicate": "کپی",
|
||||||
|
"edit": "ویرایش"
|
||||||
|
},
|
||||||
|
"empty-text": "این لیست خالی است."
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"delete-item": "آیا از حذف این مورد اطمینان دارید؟ این عمل غیرقابل برگشت است.",
|
||||||
|
"delete-section": "حذف بخش",
|
||||||
|
"rename-section": "تغییر نام بخش",
|
||||||
|
"toggle-visibility": "تغییر وضعیت نمایش"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"controller": {
|
||||||
|
"tooltip": {
|
||||||
|
"center-artboard": "قرار دادن صفحه در مرکز",
|
||||||
|
"copy-link": "کپی کردن لینک رزومه",
|
||||||
|
"export-pdf": "خروجی PDF",
|
||||||
|
"toggle-orientation": "تغییر وضعیت جهتگیری صفحه",
|
||||||
|
"toggle-page-break-line": "تغییر وضعیت خط شکست صفحه",
|
||||||
|
"toggle-sidebars": "باز/بسته کردن نوار کنار صفحه",
|
||||||
|
"zoom-in": "بزرگنمایی",
|
||||||
|
"zoom-out": "کوچکنمایی"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"header": {
|
||||||
|
"menu": {
|
||||||
|
"delete": "حذف",
|
||||||
|
"duplicate": "کپی",
|
||||||
|
"rename": "تغییر نام",
|
||||||
|
"share-link": "اشتراکگذاری لینک",
|
||||||
|
"tooltips": {
|
||||||
|
"delete": "آیا از حذف این رزومه اطمینان دارید؟ این عمل غیرقابل برگشت است.",
|
||||||
|
"share-link": "باید وضعیت نمایش رزومه خود را به عمومی تغییر دهید تا برای دیگران قابل مشاهده باشد."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"leftSidebar": {
|
||||||
|
"sections": {
|
||||||
|
"awards": {
|
||||||
|
"form": {
|
||||||
|
"awarder": {
|
||||||
|
"label": "اعطا کننده"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"basics": {
|
||||||
|
"actions": {
|
||||||
|
"photo-filters": "فیلترهای تصویر"
|
||||||
|
},
|
||||||
|
"heading": "موارد پایه",
|
||||||
|
"headline": {
|
||||||
|
"label": "سرصفحه"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"label": "نام کامل"
|
||||||
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "تاریخ تولد"
|
||||||
|
},
|
||||||
|
"photo-filters": {
|
||||||
|
"effects": {
|
||||||
|
"border": {
|
||||||
|
"label": "لبه"
|
||||||
|
},
|
||||||
|
"grayscale": {
|
||||||
|
"label": "سیاه و سفید"
|
||||||
|
},
|
||||||
|
"heading": "افکتها"
|
||||||
|
},
|
||||||
|
"shape": {
|
||||||
|
"heading": "شکل"
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"heading": "اندازه (بر حسب پیکسل)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"photo-upload": {
|
||||||
|
"tooltip": {
|
||||||
|
"remove": "حذف تصویر",
|
||||||
|
"upload": "آپلود تصویر"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"certifications": {
|
||||||
|
"form": {
|
||||||
|
"issuer": {
|
||||||
|
"label": "صادرکننده"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"education": {
|
||||||
|
"form": {
|
||||||
|
"area-study": {
|
||||||
|
"label": "رشته تحصیلی"
|
||||||
|
},
|
||||||
|
"courses": {
|
||||||
|
"label": "دورهها"
|
||||||
|
},
|
||||||
|
"degree": {
|
||||||
|
"label": "مدرک تحصیلی"
|
||||||
|
},
|
||||||
|
"grade": {
|
||||||
|
"label": "نمره"
|
||||||
|
},
|
||||||
|
"institution": {
|
||||||
|
"label": "مؤسسه"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"location": {
|
||||||
|
"address": {
|
||||||
|
"label": "نشانی"
|
||||||
|
},
|
||||||
|
"city": {
|
||||||
|
"label": "شهر"
|
||||||
|
},
|
||||||
|
"country": {
|
||||||
|
"label": "كشور"
|
||||||
|
},
|
||||||
|
"heading": "موقعیت مکانی",
|
||||||
|
"postal-code": {
|
||||||
|
"label": "کد پستی"
|
||||||
|
},
|
||||||
|
"region": {
|
||||||
|
"label": "منطقه"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"profiles": {
|
||||||
|
"form": {
|
||||||
|
"network": {
|
||||||
|
"label": "شبکه اجتماعی"
|
||||||
|
},
|
||||||
|
"username": {
|
||||||
|
"label": "نام کاربری"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "پروفایلها",
|
||||||
|
"heading_one": "پروفایل"
|
||||||
|
},
|
||||||
|
"publications": {
|
||||||
|
"form": {
|
||||||
|
"publisher": {
|
||||||
|
"label": "ناشر"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"references": {
|
||||||
|
"form": {
|
||||||
|
"relationship": {
|
||||||
|
"label": "نسبت"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"section": {
|
||||||
|
"heading": "بخش"
|
||||||
|
},
|
||||||
|
"volunteer": {
|
||||||
|
"form": {
|
||||||
|
"organization": {
|
||||||
|
"label": "سازمان"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"rightSidebar": {
|
||||||
|
"sections": {
|
||||||
|
"css": {
|
||||||
|
"heading": "CSS سفارشی"
|
||||||
|
},
|
||||||
|
"export": {
|
||||||
|
"heading": "خروجی",
|
||||||
|
"json": {
|
||||||
|
"primary": "JSON",
|
||||||
|
"secondary": "یک نسخه JSON از رزومه خود را دانلود کنید که میتواند دوباره در Reactive Resume بارگذاری شود."
|
||||||
|
},
|
||||||
|
"pdf": {
|
||||||
|
"loading": {
|
||||||
|
"primary": "در حال تولید PDF",
|
||||||
|
"secondary": "لطفاً منتظر بمانید تا PDF شما تولید شود، ممکن است تا ۱۵ ثانیه طول بکشد."
|
||||||
|
},
|
||||||
|
"normal": {
|
||||||
|
"primary": "PDF",
|
||||||
|
"secondary": "یک PDF از رزومه خود را دانلود کنید که میتوانید آن را چاپ کرده و به شغل رویایی خود ارسال کنید. این فایل را نمیتوان برای ویرایش بیشتر بارگذاری کرد."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"layout": {
|
||||||
|
"heading": "چیدمان",
|
||||||
|
"tooltip": {
|
||||||
|
"reset-layout": "بازنشانی چیدمان"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"links": {
|
||||||
|
"bugs-features": {
|
||||||
|
"body": "چیزی شما را از ایجاد رزومه باز میدارد؟ یا ایده جذابی برای اضافه کردن دارید؟ برای شروع یک issue در GitHub مطرح کنید.",
|
||||||
|
"button": "GitHub Issues",
|
||||||
|
"heading": "باگها؟ درخواست ویژگی جدید؟"
|
||||||
|
},
|
||||||
|
"donate": {
|
||||||
|
"body": "اگر استفاده از Reactive Resume را دوست داشتید، لطفاً تا جایی که می توانید کمک مالی کنید تا برنامه را بدون تبلیغات و برای همیشه رایگان نگه دارید.",
|
||||||
|
"button": "برای من یک قهوه بخر",
|
||||||
|
"heading": "کمک مالی به Reactive Resume"
|
||||||
|
},
|
||||||
|
"github": "کد منبع",
|
||||||
|
"heading": "لینکها"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"global": {
|
||||||
|
"date": {
|
||||||
|
"primary": "تاریخ",
|
||||||
|
"secondary": "فرمت تاریخ برای استفاده در سراسر برنامه"
|
||||||
|
},
|
||||||
|
"heading": "سراسری",
|
||||||
|
"language": {
|
||||||
|
"primary": "زبان",
|
||||||
|
"secondary": "زبان مورد نمایش برای استفاده از برنامه"
|
||||||
|
},
|
||||||
|
"theme": {
|
||||||
|
"primary": "پوسته"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "تنظیمات",
|
||||||
|
"page": {
|
||||||
|
"break-line": {
|
||||||
|
"primary": "خط شکست",
|
||||||
|
"secondary": "برای مشخص کردن ارتفاع صفحه A4 یک خط در همه صفحات نشان داده شود"
|
||||||
|
},
|
||||||
|
"heading": "صفحه",
|
||||||
|
"orientation": {
|
||||||
|
"disabled": "زمانی که تنها یک صفحه وجود دارد، تاثیری ندارد",
|
||||||
|
"primary": "جهتگیری",
|
||||||
|
"secondary": "اینکه صفحات به صورت عمودی یا افقی نمایش داده شوند"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"resume": {
|
||||||
|
"heading": "رزومه",
|
||||||
|
"reset": {
|
||||||
|
"primary": "بازنشانی همه چیز",
|
||||||
|
"secondary": "اشتباهات زیادی انجام دادید؟ اینجا کلیک کنید تا همه تغییرات بازنشانی شوند و از ابتدا شروع کنید. مراقب باشید، این عمل غیرقابل برگشت است."
|
||||||
|
},
|
||||||
|
"sample": {
|
||||||
|
"primary": "بارگیری دادههای نمونه",
|
||||||
|
"secondary": "نمیدانید از کجا شروع کنید؟برای اینکه تعدادی داده نمونه بارگیری شوند تا ببینید یک رزومه کامل به چه شکل است، اینجا کلیک کنید."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sharing": {
|
||||||
|
"heading": "اشتراکگذاری",
|
||||||
|
"short-url": {
|
||||||
|
"label": "انتخاب URL کوتاه"
|
||||||
|
},
|
||||||
|
"visibility": {
|
||||||
|
"subtitle": "هرکسی با این لینک بتواند رزومه شما را ببیند",
|
||||||
|
"title": "عمومی"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"templates": {
|
||||||
|
"heading": "قالبها"
|
||||||
|
},
|
||||||
|
"theme": {
|
||||||
|
"form": {
|
||||||
|
"background": {
|
||||||
|
"label": "پسزمینه"
|
||||||
|
},
|
||||||
|
"primary": {
|
||||||
|
"label": "اصلی"
|
||||||
|
},
|
||||||
|
"text": {
|
||||||
|
"label": "متن"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "پوسته"
|
||||||
|
},
|
||||||
|
"typography": {
|
||||||
|
"form": {
|
||||||
|
"font-family": {
|
||||||
|
"label": "نوع فونت"
|
||||||
|
},
|
||||||
|
"font-size": {
|
||||||
|
"label": "اندازه فونت"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "تایپوگرافی",
|
||||||
|
"widgets": {
|
||||||
|
"body": {
|
||||||
|
"label": "بدنه"
|
||||||
|
},
|
||||||
|
"headings": {
|
||||||
|
"label": "سرصفحهها"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
29
client/public/locales/fa/common.json
Normal file
29
client/public/locales/fa/common.json
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"avatar": {
|
||||||
|
"menu": {
|
||||||
|
"greeting": "سلام",
|
||||||
|
"logout": "خروج"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"footer": {
|
||||||
|
"credit": "پروژهای پرشور توسط <1>Amruth Pillai</1>",
|
||||||
|
"license": "ساختهشده توسط جامعه، برای جامعه."
|
||||||
|
},
|
||||||
|
"markdown": {
|
||||||
|
"help-text": "این بخش از <1>markdown</1> پشتیبانی میکند."
|
||||||
|
},
|
||||||
|
"date": {
|
||||||
|
"present": "امروز"
|
||||||
|
},
|
||||||
|
"subtitle": "یک رزومهساز رایگان و متنباز.",
|
||||||
|
"title": "Reactive Resume",
|
||||||
|
"toast": {
|
||||||
|
"error": {
|
||||||
|
"upload-file-size": "لطفا تنها فایلهایی با حجم کمتر از ۲ مگابایت آپلود کنید.",
|
||||||
|
"upload-photo-size": "لطفا تنها عکس هایی با حجم کمتر از 2 مگابایت و ترجیحا مربع آپلود کنید."
|
||||||
|
},
|
||||||
|
"success": {
|
||||||
|
"resume-link-copied": "لینک رزومه شما در کلیپبورد کپی شد."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
25
client/public/locales/fa/dashboard.json
Normal file
25
client/public/locales/fa/dashboard.json
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"create-resume": {
|
||||||
|
"subtitle": "از ابتدا شروع کنید",
|
||||||
|
"title": "ساخت رزومه جدید"
|
||||||
|
},
|
||||||
|
"import-external": {
|
||||||
|
"subtitle": "LinkedIn، JSON Resume، Reactive Resume",
|
||||||
|
"title": "وارد کردن از منابع خارجی"
|
||||||
|
},
|
||||||
|
"resume": {
|
||||||
|
"menu": {
|
||||||
|
"delete": "حذف",
|
||||||
|
"duplicate": "کپی",
|
||||||
|
"open": "باز کردن",
|
||||||
|
"rename": "تغییر نام",
|
||||||
|
"share-link": "اشتراکگذاری لینک",
|
||||||
|
"tooltips": {
|
||||||
|
"delete": "آیا از حذف این رزومه اطمینان دارید؟ این عمل غیرقابل برگشت است.",
|
||||||
|
"share-link": "باید وضعیت نمایش رزومه خود را به عمومی تغییر دهید تا برای دیگران قابل مشاهده باشد."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"timestamp": "آخرین بهروزرسانی {{timestamp}} قبل"
|
||||||
|
},
|
||||||
|
"title": "داشبورد"
|
||||||
|
}
|
||||||
41
client/public/locales/fa/landing.json
Normal file
41
client/public/locales/fa/landing.json
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"actions": {
|
||||||
|
"app": "رفتن به برنامه",
|
||||||
|
"login": "ورود",
|
||||||
|
"logout": "خروج",
|
||||||
|
"register": "ثبت نام"
|
||||||
|
},
|
||||||
|
"features": {
|
||||||
|
"heading": "ویژگیها",
|
||||||
|
"list": {
|
||||||
|
"ads": "بدون تبلیغات",
|
||||||
|
"export": "گرفتن خروجی از رزومه خود به فرمت JSON یا PDF",
|
||||||
|
"free": "رایگان، برای همیشه",
|
||||||
|
"import": "وارد کردن داده از LinkedIn، JSON Resume",
|
||||||
|
"languages": "قابل دسترسی به چندین زبان",
|
||||||
|
"more": "و تعداد زیادی ویژگی هیجان انگیز دیگر، <1>همهچیز را درباره آنها اینجا بخوانید</1>",
|
||||||
|
"tracking": "بدون ردیابی کاربر"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"links": {
|
||||||
|
"heading": "لینکها",
|
||||||
|
"links": {
|
||||||
|
"donate": "حمایت مالی",
|
||||||
|
"github": "کد منبع",
|
||||||
|
"privacy": "حریم خصوصی",
|
||||||
|
"service": "شرایط سرویسدهی"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"screenshots": {
|
||||||
|
"heading": "اسکرینشاتها"
|
||||||
|
},
|
||||||
|
"testimonials": {
|
||||||
|
"heading": "نظرات کاربران",
|
||||||
|
"body": "خوب یا بد، من دوست دارم نظر شما را در مورد Reactive Resume و اینکه تجربه کار با آن برای شما چگونه بوده است را بدانم.<br/>تعدادی از پیام های ارسال شده توسط کاربران در سراسر جهان را اینجا میبینید.",
|
||||||
|
"contact": "میتوانید از طریق <1>ایمیل من</1> یا فرم تماس در <3>وبسایت من</3> با من در ارتباط باشید."
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"body": "Reactive Resume یک رزومه ساز رایگان و متنباز است که برای ایجاد، به روز رسانی و به اشتراک گذاری رزومه شما به آسانی شمردن ۱، ۲، ۳ ساخته شده است. با این برنامه، می توانید چندین رزومه ایجاد کنید و آنها را با کارفرماها یا دوستان از طریق یک لینک منحصر به فرد و چاپ آن به صورت PDF، همه به صورت رایگان، بدون تبلیغات، بدون ردیابی، بدون از دست دادن امنیت و حریم خصوصی داده های شما، به اشتراک بگذارید.",
|
||||||
|
"heading": "درباره من"
|
||||||
|
}
|
||||||
|
}
|
||||||
136
client/public/locales/fa/modals.json
Normal file
136
client/public/locales/fa/modals.json
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
{
|
||||||
|
"auth": {
|
||||||
|
"forgot-password": {
|
||||||
|
"actions": {
|
||||||
|
"send-email": "ارسال ایمیل بازنشانی رمز عبور"
|
||||||
|
},
|
||||||
|
"body": "آدرس ایمیل حسابی را که می خواهید بازیابی کنید، وارد کنید.",
|
||||||
|
"form": {
|
||||||
|
"email": {
|
||||||
|
"label": "آدرس ایمیل"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "رمز عبور خود را فراموش کردهاید؟",
|
||||||
|
"help-text": "اگر حساب مورد نظر موجود باشد، یک ایمیل با لینک بازنشانی رمز عبور خود دریافت میکنید."
|
||||||
|
},
|
||||||
|
"login": {
|
||||||
|
"actions": {
|
||||||
|
"login": "ورود",
|
||||||
|
"google": "ورود با گوگل"
|
||||||
|
},
|
||||||
|
"body": "لطفا نام کاربری و رمز عبور مرتبط با حساب کاربری خود را وارد کنید تا وارد شوید و به رزومه خود دسترسی پیدا کنید، آن را مدیریت کنید و به اشتراک بگذارید.",
|
||||||
|
"form": {
|
||||||
|
"password": {
|
||||||
|
"label": "رمز عبور"
|
||||||
|
},
|
||||||
|
"username": {
|
||||||
|
"help-text": "همچنین می توانید آدرس ایمیل خود را وارد کنید",
|
||||||
|
"label": "نام کاربری"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "ورود به حساب کابری",
|
||||||
|
"recover-text": "در صورتی که رمز عبور خود را فراموش کردهاید، می توانید از اینجا <1>حساب خود را بازیابی کنید</1>.",
|
||||||
|
"register-text": "اگر حسابی ندارید، میتوانید از اینجا <1>یک حساب ایجاد کنید</1>."
|
||||||
|
},
|
||||||
|
"register": {
|
||||||
|
"actions": {
|
||||||
|
"register": "ثبت نام",
|
||||||
|
"google": "ثبت نام با گوگل"
|
||||||
|
},
|
||||||
|
"body": "لطفا برای ایجاد حساب کاربری، اطلاعات شخصی خود را وارد کنید.",
|
||||||
|
"form": {
|
||||||
|
"confirm-password": {
|
||||||
|
"label": "تکرار رمز عبور"
|
||||||
|
},
|
||||||
|
"email": {
|
||||||
|
"label": "آدرس ایمیل"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"label": "نام کامل"
|
||||||
|
},
|
||||||
|
"password": {
|
||||||
|
"label": "رمز عبور"
|
||||||
|
},
|
||||||
|
"username": {
|
||||||
|
"label": "نام کاربری"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "ایجاد حساب کاربری",
|
||||||
|
"loginText": "اکر حساب کاربری دارید، میتوانید از <1>اینجا</1> وارد شوید."
|
||||||
|
},
|
||||||
|
"reset-password": {
|
||||||
|
"actions": {
|
||||||
|
"set-password": "تعیین رمز عبور جدید"
|
||||||
|
},
|
||||||
|
"body": "یک رمز عبور جدید برای حساب خود وارد کنید.",
|
||||||
|
"form": {
|
||||||
|
"confirm-password": {
|
||||||
|
"label": "تکرار رمز عبور"
|
||||||
|
},
|
||||||
|
"password": {
|
||||||
|
"label": "رمز عبور"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "بازنشانی رمز عبور"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"create-resume": {
|
||||||
|
"actions": {
|
||||||
|
"create-resume": "ایجاد رزومه"
|
||||||
|
},
|
||||||
|
"body": "ساخت رزومه خود را با نامگذاری آن شروع کنید. این نام میتواند به سمتی که برای آن درخواست میکنید مرتبط باشد، یا میانوعده مورد علاقه شما باشد.",
|
||||||
|
"form": {
|
||||||
|
"name": {
|
||||||
|
"label": "نام"
|
||||||
|
},
|
||||||
|
"public": {
|
||||||
|
"label": "آیا به صورت عمومی قابل دسترسی است؟"
|
||||||
|
},
|
||||||
|
"slug": {
|
||||||
|
"label": "نام یکتا"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "ایجاد یک رزومه جدید"
|
||||||
|
},
|
||||||
|
"import-external": {
|
||||||
|
"heading": "وارد کردن از منابع خارجی",
|
||||||
|
"json-resume": {
|
||||||
|
"actions": {
|
||||||
|
"upload-json": "آپلود JSON"
|
||||||
|
},
|
||||||
|
"body": "اگر یک <1>JSON Resume معتبر</1> که آماده کار است، می توانید از آن برای پیگیری سریع توسعه خود در Reactive Resume استفاده کنید. روی دکمه زیر کلیک کنید و برای شروع یک فایل JSON معتبر آپلود کنید.",
|
||||||
|
"heading": "بارگذاری از JSON Resume"
|
||||||
|
},
|
||||||
|
"linkedin": {
|
||||||
|
"actions": {
|
||||||
|
"upload-archive": "آپلود آرشیو ZIP"
|
||||||
|
},
|
||||||
|
"body": "میتوانید با خروجی گرفتن از دادههای خود در LinkedIn و استفاده از آن برای پر کردن خودکار فیلدهای Reactive Resume در زمانصرفهجویی کنید. به بخش <1>Data Privacy</1> در LinkedIn بروید و یک آرشیو از دادههای خود را درخواست کنید. پس از در دسترس قرار گرفتن، فایل ZIP را در زیر آپلود کنید.",
|
||||||
|
"heading": "بارگذاری از LinkedIn"
|
||||||
|
},
|
||||||
|
"reactive-resume": {
|
||||||
|
"actions": {
|
||||||
|
"upload-json": "آپلود JSON",
|
||||||
|
"upload-json-v2": "آپلود JSON از ورژن ۲"
|
||||||
|
},
|
||||||
|
"body": "اگر یک فایل JSON دارید که با نسخه فعلی Reactive Resume خروجی گرفتهشده است، میتوانید آن را اینجا بارگذاری کنید تا دوباره نسخه قابل ویرایش دریافت کنید.",
|
||||||
|
"heading": "بارگذاری از Reactive Resume"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"rename-resume": {
|
||||||
|
"actions": {
|
||||||
|
"rename-resume": "تغییر نام رزومه"
|
||||||
|
},
|
||||||
|
"form": {
|
||||||
|
"name": {
|
||||||
|
"label": "نام"
|
||||||
|
},
|
||||||
|
"slug": {
|
||||||
|
"label": "نام یکتا"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "نام رزومه خود را تغییر دهید"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -119,6 +119,9 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "Nom complet"
|
"label": "Nom complet"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "Date de naissance"
|
||||||
|
},
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
|
|||||||
29
client/public/locales/he/common.json
Normal file
29
client/public/locales/he/common.json
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"avatar": {
|
||||||
|
"menu": {
|
||||||
|
"greeting": "שלום",
|
||||||
|
"logout": "התנתק/י"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"footer": {
|
||||||
|
"credit": "פרויקט תשוקה מאת <1>אמרות פילאי</1>",
|
||||||
|
"license": "על ידי הקהילה, עבור הקהילה."
|
||||||
|
},
|
||||||
|
"markdown": {
|
||||||
|
"help-text": "סעיף זה תומך ב-<1>markdown</1> עיצוב."
|
||||||
|
},
|
||||||
|
"date": {
|
||||||
|
"present": "הווה"
|
||||||
|
},
|
||||||
|
"subtitle": "בונה קורות חיים חינמי ובקוד פתוח.",
|
||||||
|
"title": "קורות חיים תגובתיים",
|
||||||
|
"toast": {
|
||||||
|
"error": {
|
||||||
|
"upload-file-size": "נא להעלות רק קבצים מתחת ל-2 מגה בייט.",
|
||||||
|
"upload-photo-size": "נא להעלות רק תמונות מתחת ל-2 מגה בייט, רצוי מרובע."
|
||||||
|
},
|
||||||
|
"success": {
|
||||||
|
"resume-link-copied": "קישור לקורות החיים שלך הועתק ללוח."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -119,6 +119,9 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "पूरा नाम"
|
"label": "पूरा नाम"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "जन्म की तारीख"
|
||||||
|
},
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
|
|||||||
361
client/public/locales/hu/builder.json
Normal file
361
client/public/locales/hu/builder.json
Normal file
@ -0,0 +1,361 @@
|
|||||||
|
{
|
||||||
|
"common": {
|
||||||
|
"actions": {
|
||||||
|
"add": "Új hozzáadása {{token}}",
|
||||||
|
"delete": "{{token}} törlése",
|
||||||
|
"edit": "{{token}} szerkesztése"
|
||||||
|
},
|
||||||
|
"columns": {
|
||||||
|
"heading": "Oszlopok",
|
||||||
|
"tooltip": "Az oszlopok számának módosítása"
|
||||||
|
},
|
||||||
|
"form": {
|
||||||
|
"date": {
|
||||||
|
"label": "Dátum"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"label": "Leírás"
|
||||||
|
},
|
||||||
|
"email": {
|
||||||
|
"label": "E-mail cím"
|
||||||
|
},
|
||||||
|
"end-date": {
|
||||||
|
"help-text": "Hagyja üresen ezt a mezőt, ha még mindig tart van",
|
||||||
|
"label": "Befejezés dátuma"
|
||||||
|
},
|
||||||
|
"keywords": {
|
||||||
|
"label": "Kulcsszavak"
|
||||||
|
},
|
||||||
|
"level": {
|
||||||
|
"label": "Szint"
|
||||||
|
},
|
||||||
|
"levelNum": {
|
||||||
|
"label": "Szint (szám)"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"label": "Név"
|
||||||
|
},
|
||||||
|
"phone": {
|
||||||
|
"label": "Telefonszám"
|
||||||
|
},
|
||||||
|
"position": {
|
||||||
|
"label": "Pozíció"
|
||||||
|
},
|
||||||
|
"start-date": {
|
||||||
|
"label": "Kezdés dátuma"
|
||||||
|
},
|
||||||
|
"subtitle": {
|
||||||
|
"label": "Felirat"
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"label": "Összegzés"
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"label": "Cím"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"label": "Honlap"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"glossary": {
|
||||||
|
"page": "Oldal"
|
||||||
|
},
|
||||||
|
"list": {
|
||||||
|
"actions": {
|
||||||
|
"delete": "Törlés",
|
||||||
|
"duplicate": "Duplikálás",
|
||||||
|
"edit": "Szerkesztés"
|
||||||
|
},
|
||||||
|
"empty-text": "Ez a lista üres."
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"delete-item": "Biztosan törli ezt az elemet? Ez egy visszafordíthatatlan művelet.",
|
||||||
|
"delete-section": "Szakasz törlése",
|
||||||
|
"rename-section": "Szakasz átnevezése",
|
||||||
|
"toggle-visibility": "Láthatóság váltása"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"controller": {
|
||||||
|
"tooltip": {
|
||||||
|
"center-artboard": "Központi rajztábla",
|
||||||
|
"copy-link": "Link másolása az önéletrajzba",
|
||||||
|
"export-pdf": "Exportálás PDF-be",
|
||||||
|
"toggle-orientation": "Oldaltájolás váltása",
|
||||||
|
"toggle-page-break-line": "Oldaltörés vonal váltása",
|
||||||
|
"toggle-sidebars": "Az oldalsávok váltása",
|
||||||
|
"zoom-in": "Nagyítás",
|
||||||
|
"zoom-out": "Kicsinyítés"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"header": {
|
||||||
|
"menu": {
|
||||||
|
"delete": "Törlés",
|
||||||
|
"duplicate": "Másolat",
|
||||||
|
"rename": "Átnevezés",
|
||||||
|
"share-link": "Link megosztása",
|
||||||
|
"tooltips": {
|
||||||
|
"delete": "Biztos, hogy törölni szeretné ezt az önéletrajzot? Ez egy visszafordíthatatlan művelet.",
|
||||||
|
"share-link": "Az önéletrajz láthatóságát nyilvánosra kell változtatnia, hogy mások számára is látható legyen."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"leftSidebar": {
|
||||||
|
"sections": {
|
||||||
|
"awards": {
|
||||||
|
"form": {
|
||||||
|
"awarder": {
|
||||||
|
"label": "Díjazó"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"basics": {
|
||||||
|
"actions": {
|
||||||
|
"photo-filters": "Fotószűrők"
|
||||||
|
},
|
||||||
|
"heading": "Alapok",
|
||||||
|
"headline": {
|
||||||
|
"label": "Címsor"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"label": "Teljes név"
|
||||||
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "Születési dátum"
|
||||||
|
},
|
||||||
|
"photo-filters": {
|
||||||
|
"effects": {
|
||||||
|
"border": {
|
||||||
|
"label": "Határ"
|
||||||
|
},
|
||||||
|
"grayscale": {
|
||||||
|
"label": "Szürkeárnyalatos"
|
||||||
|
},
|
||||||
|
"heading": "Hatások"
|
||||||
|
},
|
||||||
|
"shape": {
|
||||||
|
"heading": "Alak"
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"heading": "Méret (px-ben)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"photo-upload": {
|
||||||
|
"tooltip": {
|
||||||
|
"remove": "Fotó eltávolítása",
|
||||||
|
"upload": "Fénykép feltöltése"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"certifications": {
|
||||||
|
"form": {
|
||||||
|
"issuer": {
|
||||||
|
"label": "Kibocsátó"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"education": {
|
||||||
|
"form": {
|
||||||
|
"area-study": {
|
||||||
|
"label": "Tanulmányi terület"
|
||||||
|
},
|
||||||
|
"courses": {
|
||||||
|
"label": "Kurzusok"
|
||||||
|
},
|
||||||
|
"degree": {
|
||||||
|
"label": "Diploma"
|
||||||
|
},
|
||||||
|
"grade": {
|
||||||
|
"label": "Osztályzat"
|
||||||
|
},
|
||||||
|
"institution": {
|
||||||
|
"label": "Intézmény"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"location": {
|
||||||
|
"address": {
|
||||||
|
"label": "Cím"
|
||||||
|
},
|
||||||
|
"city": {
|
||||||
|
"label": "Település"
|
||||||
|
},
|
||||||
|
"country": {
|
||||||
|
"label": "Ország"
|
||||||
|
},
|
||||||
|
"heading": "Helyszín",
|
||||||
|
"postal-code": {
|
||||||
|
"label": "Irányítószám"
|
||||||
|
},
|
||||||
|
"region": {
|
||||||
|
"label": "Vidék"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"profiles": {
|
||||||
|
"form": {
|
||||||
|
"network": {
|
||||||
|
"label": "Hálózat"
|
||||||
|
},
|
||||||
|
"username": {
|
||||||
|
"label": "Felhasználónév"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "Profilok",
|
||||||
|
"heading_one": "Profil"
|
||||||
|
},
|
||||||
|
"publications": {
|
||||||
|
"form": {
|
||||||
|
"publisher": {
|
||||||
|
"label": "Kiadó"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"references": {
|
||||||
|
"form": {
|
||||||
|
"relationship": {
|
||||||
|
"label": "Kapcsolat"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"section": {
|
||||||
|
"heading": "Szakasz"
|
||||||
|
},
|
||||||
|
"volunteer": {
|
||||||
|
"form": {
|
||||||
|
"organization": {
|
||||||
|
"label": "Szervezet"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"rightSidebar": {
|
||||||
|
"sections": {
|
||||||
|
"css": {
|
||||||
|
"heading": "Egyedi CSS"
|
||||||
|
},
|
||||||
|
"export": {
|
||||||
|
"heading": "Exportálás",
|
||||||
|
"json": {
|
||||||
|
"primary": "JSON",
|
||||||
|
"secondary": "Töltse le önéletrajzának JSON-verzióját, amelyet vissza lehet importálni a Reactive Resume alkalmazásba."
|
||||||
|
},
|
||||||
|
"pdf": {
|
||||||
|
"loading": {
|
||||||
|
"primary": "PDF generálása",
|
||||||
|
"secondary": "Kérjük, várjon, amíg a PDF generálódik, ez akár 15 másodpercig is eltarthat."
|
||||||
|
},
|
||||||
|
"normal": {
|
||||||
|
"primary": "PDF",
|
||||||
|
"secondary": "Töltse le önéletrajzának PDF formátumát, amelyet kinyomtathat és elküldhet álmai munkahelyére. Ez a fájl nem importálható vissza további szerkesztéshez."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"layout": {
|
||||||
|
"heading": "Elrendezés",
|
||||||
|
"tooltip": {
|
||||||
|
"reset-layout": "Elrendezés visszaállítása"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"links": {
|
||||||
|
"bugs-features": {
|
||||||
|
"body": "Valami akadályozza az önéletrajz elkészítésében? Vagy van egy elképesztő ötlete az alkalmazáshoz? Hozzon létre egy Issue-t a GitHubon, hogy elkezdhessük.",
|
||||||
|
"button": "GitHub problémák",
|
||||||
|
"heading": "Hibák? Funkciókérés?"
|
||||||
|
},
|
||||||
|
"donate": {
|
||||||
|
"body": "Ha tetszett a Reactive Resume, kérjük, fontolja meg, hogy amennyit csak tud, adományozzon arra, hogy az alkalmazás folyamatosan működjön, hirdetések nélkül és örökké ingyenesen.",
|
||||||
|
"button": "Vegyél nekem egy kávét",
|
||||||
|
"heading": "Adományozzon a Reactive Resume-nak"
|
||||||
|
},
|
||||||
|
"github": "Forráskód",
|
||||||
|
"heading": "Linkek"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"global": {
|
||||||
|
"date": {
|
||||||
|
"primary": "Dátum",
|
||||||
|
"secondary": "Az alkalmazásban használható dátumformátum"
|
||||||
|
},
|
||||||
|
"heading": "Globális",
|
||||||
|
"language": {
|
||||||
|
"primary": "Nyelv",
|
||||||
|
"secondary": "Az alkalmazásban használható megjelenítési nyelv"
|
||||||
|
},
|
||||||
|
"theme": {
|
||||||
|
"primary": "Téma"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "Beállítások",
|
||||||
|
"page": {
|
||||||
|
"break-line": {
|
||||||
|
"primary": "Törésvonal",
|
||||||
|
"secondary": "Mutasson egy vonalat az összes oldalon, hogy megjelölje egy A4-es oldal magasságát"
|
||||||
|
},
|
||||||
|
"heading": "oldal",
|
||||||
|
"orientation": {
|
||||||
|
"disabled": "Nincs hatása, ha csak egy oldal van",
|
||||||
|
"primary": "Irányultság",
|
||||||
|
"secondary": "Az oldalak vízszintes vagy függőleges megjelenítése"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"resume": {
|
||||||
|
"heading": "Önéletrajz",
|
||||||
|
"reset": {
|
||||||
|
"primary": "Mindent visszaállít",
|
||||||
|
"secondary": "Túl sok hibát követett el? Kattintson ide az összes módosítás visszaállításához és a nulláról kezdéshez. Legyen óvatos, ezt a műveletet nem lehet visszafordítani."
|
||||||
|
},
|
||||||
|
"sample": {
|
||||||
|
"primary": "Példa adat betöltése",
|
||||||
|
"secondary": "Nem tudja hol kezdje? Kattintson ide néhány minta adat betöltéséhez, hogy megtudja, hogyan néz ki a teljes önéletrajz."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sharing": {
|
||||||
|
"heading": "Megosztás",
|
||||||
|
"short-url": {
|
||||||
|
"label": "Rövid URL-t részesítsen előnyben"
|
||||||
|
},
|
||||||
|
"visibility": {
|
||||||
|
"subtitle": "A link birtokában bárki megtekintheti önéletrajzát",
|
||||||
|
"title": "Nyilvános"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"templates": {
|
||||||
|
"heading": "Sablonok"
|
||||||
|
},
|
||||||
|
"theme": {
|
||||||
|
"form": {
|
||||||
|
"background": {
|
||||||
|
"label": "Háttér"
|
||||||
|
},
|
||||||
|
"primary": {
|
||||||
|
"label": "Elsődleges"
|
||||||
|
},
|
||||||
|
"text": {
|
||||||
|
"label": "Szöveg"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "Téma"
|
||||||
|
},
|
||||||
|
"typography": {
|
||||||
|
"form": {
|
||||||
|
"font-family": {
|
||||||
|
"label": "Betűkészlet"
|
||||||
|
},
|
||||||
|
"font-size": {
|
||||||
|
"label": "Betűméret"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "Tipográfia",
|
||||||
|
"widgets": {
|
||||||
|
"body": {
|
||||||
|
"label": "Test"
|
||||||
|
},
|
||||||
|
"headings": {
|
||||||
|
"label": "Címsorok"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
29
client/public/locales/hu/common.json
Normal file
29
client/public/locales/hu/common.json
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"avatar": {
|
||||||
|
"menu": {
|
||||||
|
"greeting": "Helló",
|
||||||
|
"logout": "Kijelentkezés"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"footer": {
|
||||||
|
"credit": "<1>Amruth Pillai szenvedélyes projektje</1>",
|
||||||
|
"license": "A közösség által, a közösségért."
|
||||||
|
},
|
||||||
|
"markdown": {
|
||||||
|
"help-text": "Ez a szakasz támogatja a <1>markdown</1> formázást."
|
||||||
|
},
|
||||||
|
"date": {
|
||||||
|
"present": "Ajándék"
|
||||||
|
},
|
||||||
|
"subtitle": "Ingyenes és nyílt forráskódú önéletrajzkészítő.",
|
||||||
|
"title": "Reactive Resume",
|
||||||
|
"toast": {
|
||||||
|
"error": {
|
||||||
|
"upload-file-size": "Kérjük, csak 2 megabájtnál kisebb fájlokat töltsön fel.",
|
||||||
|
"upload-photo-size": "Kérjük, csak 2 megabájt alatti, lehetőleg négyzet alakú képeket töltsön fel."
|
||||||
|
},
|
||||||
|
"success": {
|
||||||
|
"resume-link-copied": "Az önéletrajzának linkjét a vágólapra másoltuk."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
25
client/public/locales/hu/dashboard.json
Normal file
25
client/public/locales/hu/dashboard.json
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"create-resume": {
|
||||||
|
"subtitle": "Kezdjük a legelejéről",
|
||||||
|
"title": "Új önéletrajz létrehozása"
|
||||||
|
},
|
||||||
|
"import-external": {
|
||||||
|
"subtitle": "LinkedIn, JSON önéletrajz, reaktív önéletrajz",
|
||||||
|
"title": "Importálás külső forrásokból"
|
||||||
|
},
|
||||||
|
"resume": {
|
||||||
|
"menu": {
|
||||||
|
"delete": "Törlés",
|
||||||
|
"duplicate": "Másolat",
|
||||||
|
"open": "Nyisd ki",
|
||||||
|
"rename": "Átnevezés",
|
||||||
|
"share-link": "Link megosztása",
|
||||||
|
"tooltips": {
|
||||||
|
"delete": "Biztos, hogy törölni szeretné ezt az önéletrajzot? Ez egy visszafordíthatatlan művelet.",
|
||||||
|
"share-link": "Az önéletrajz láthatóságát nyilvánosra kell változtatnia, hogy mások számára is látható legyen."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"timestamp": "Utoljára frissítve {{timestamp}} ezelőtt"
|
||||||
|
},
|
||||||
|
"title": "Irányítópult"
|
||||||
|
}
|
||||||
41
client/public/locales/hu/landing.json
Normal file
41
client/public/locales/hu/landing.json
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"actions": {
|
||||||
|
"app": "Lépjen az App",
|
||||||
|
"login": "Belépés",
|
||||||
|
"logout": "Kijelentkezés",
|
||||||
|
"register": "Regisztráció"
|
||||||
|
},
|
||||||
|
"features": {
|
||||||
|
"heading": "Jellemzők",
|
||||||
|
"list": {
|
||||||
|
"ads": "Nincs reklám",
|
||||||
|
"export": "Exportálja önéletrajzát JSON vagy PDF formátumba",
|
||||||
|
"free": "Ingyenes, örökre",
|
||||||
|
"import": "Adatok importálása a LinkedInből, JSON Resume",
|
||||||
|
"languages": "Több nyelven is elérhető",
|
||||||
|
"more": "És még sok izgalmas funkció, <1>erről itt olvashat</1>",
|
||||||
|
"tracking": "Nincs felhasználói követés"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"links": {
|
||||||
|
"heading": "Linkek",
|
||||||
|
"links": {
|
||||||
|
"donate": "Adományoz",
|
||||||
|
"github": "Forráskód",
|
||||||
|
"privacy": "Adatvédelmi irányelvek",
|
||||||
|
"service": "Szolgáltatási feltételek"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"screenshots": {
|
||||||
|
"heading": "Képernyőképek"
|
||||||
|
},
|
||||||
|
"testimonials": {
|
||||||
|
"heading": "Beszámolók",
|
||||||
|
"body": "Jó vagy rossz, szeretném hallani a véleményét a Reactive Resume-ról, és arról, hogy milyen élményben volt része az Ön számára.<br/>Íme néhány üzenet a felhasználók által a világ minden tájáról küldött üzenetei közül.",
|
||||||
|
"contact": "Az <1>e-mail címemen keresztül elérhetsz</1> vagy a <3>webhelyemen található kapcsolatfelvételi űrlapon keresztül</3> ."
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"body": "A Reactive Resume egy ingyenes és nyílt forráskódú önéletrajz-készítő, amely az önéletrajz létrehozásának, frissítésének és megosztásának hétköznapi feladatait olyan egyszerűvé teszi, mint 1, 2, 3. Ezzel az alkalmazással több önéletrajzot hozhat létre, és megoszthatja azokat toborzókkal vagy barátaival. egy egyedi hivatkozáson keresztül, és nyomtassa ki PDF formátumban, mindezt ingyenesen, hirdetések nélkül, nyomon követés nélkül, anélkül, hogy elveszítené adatai sértetlenségét és magánéletét.",
|
||||||
|
"heading": "Összegzés"
|
||||||
|
}
|
||||||
|
}
|
||||||
136
client/public/locales/hu/modals.json
Normal file
136
client/public/locales/hu/modals.json
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
{
|
||||||
|
"auth": {
|
||||||
|
"forgot-password": {
|
||||||
|
"actions": {
|
||||||
|
"send-email": "Jelszó visszaállítása e-mail küldése"
|
||||||
|
},
|
||||||
|
"body": "Csak adja meg a helyreállítani kívánt fiókhoz társított e-mail címet.",
|
||||||
|
"form": {
|
||||||
|
"email": {
|
||||||
|
"label": "Email cím"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "Elfelejtette a jelszavát?",
|
||||||
|
"help-text": "Ha a fiók létezik, kap egy e-mailt a jelszó visszaállításához szükséges linkkel."
|
||||||
|
},
|
||||||
|
"login": {
|
||||||
|
"actions": {
|
||||||
|
"login": "Belépés",
|
||||||
|
"google": "Jelentkezzen be a Google-lal"
|
||||||
|
},
|
||||||
|
"body": "Kérjük, adja meg a fiókjához tartozó felhasználónevét és jelszavát a bejelentkezéshez, valamint önéletrajzainak eléréséhez, kezeléséhez és megosztásához.",
|
||||||
|
"form": {
|
||||||
|
"password": {
|
||||||
|
"label": "Jelszó"
|
||||||
|
},
|
||||||
|
"username": {
|
||||||
|
"help-text": "E-mail címét is megadhatja",
|
||||||
|
"label": "Felhasználónév"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "Jelentkezz be a fiókodba",
|
||||||
|
"recover-text": "Ha elfelejtette jelszavát, <1>visszaállíthatja fiókját</1> itt.",
|
||||||
|
"register-text": "Ha nem rendelkezik fiókkal, <1>létrehozhat egy fiókot</1> itt."
|
||||||
|
},
|
||||||
|
"register": {
|
||||||
|
"actions": {
|
||||||
|
"register": "Regisztráció",
|
||||||
|
"google": "Regisztráljon a Google-nál"
|
||||||
|
},
|
||||||
|
"body": "Kérjük, adja meg személyes adatait fiók létrehozásához.",
|
||||||
|
"form": {
|
||||||
|
"confirm-password": {
|
||||||
|
"label": "Jelszó megerősítése"
|
||||||
|
},
|
||||||
|
"email": {
|
||||||
|
"label": "E-mail cím"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"label": "Teljes név"
|
||||||
|
},
|
||||||
|
"password": {
|
||||||
|
"label": "Jelszó"
|
||||||
|
},
|
||||||
|
"username": {
|
||||||
|
"label": "Felhasználónév"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "Fiók létrehozása",
|
||||||
|
"loginText": "Ha már van fiókja, <1>itt bejelentkezhet</1> ."
|
||||||
|
},
|
||||||
|
"reset-password": {
|
||||||
|
"actions": {
|
||||||
|
"set-password": "Új jelszó beállítása"
|
||||||
|
},
|
||||||
|
"body": "Adjon meg egy új jelszót a fiókjához.",
|
||||||
|
"form": {
|
||||||
|
"confirm-password": {
|
||||||
|
"label": "Jelszó megerősítése"
|
||||||
|
},
|
||||||
|
"password": {
|
||||||
|
"label": "Jelszó"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "Jelszó visszaállítása"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"create-resume": {
|
||||||
|
"actions": {
|
||||||
|
"create-resume": "Önéletrajz létrehozása"
|
||||||
|
},
|
||||||
|
"body": "Kezdje el az önéletrajz felépítését azzal, hogy nevet ad neki. Ez utalhat a megpályázott szerepre, vagy egyszerűen csak a kedvenc nassolnivalójára.",
|
||||||
|
"form": {
|
||||||
|
"name": {
|
||||||
|
"label": "Név"
|
||||||
|
},
|
||||||
|
"public": {
|
||||||
|
"label": "Nyilvánosan elérhető?"
|
||||||
|
},
|
||||||
|
"slug": {
|
||||||
|
"label": "Meztelen csiga"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "Új önéletrajz létrehozása"
|
||||||
|
},
|
||||||
|
"import-external": {
|
||||||
|
"heading": "Importálás külső forrásokból",
|
||||||
|
"json-resume": {
|
||||||
|
"actions": {
|
||||||
|
"upload-json": "JSON feltöltése"
|
||||||
|
},
|
||||||
|
"body": "Ha <1>ellenőrzött JSON-önéletrajza van</1> használatra kész, segítségével felgyorsíthatja a Reactive Resume fejlesztését. Kattintson az alábbi gombra, és töltsön fel egy érvényes JSON-fájlt a kezdéshez.",
|
||||||
|
"heading": "Importálás a JSON-ból Folytatás"
|
||||||
|
},
|
||||||
|
"linkedin": {
|
||||||
|
"actions": {
|
||||||
|
"upload-archive": "Töltse fel a ZIP-archívumot"
|
||||||
|
},
|
||||||
|
"body": "Időt takaríthat meg, ha exportálja adatait a LinkedInből, és automatikusan kitölti a Reactive Resume mezőit. Nyissa meg az <1>Adatvédelem oldalt</1> szakaszt a LinkedIn-en, és kérje adatainak archiválását. Amint elérhető, töltse fel az alábbi ZIP-fájlt.",
|
||||||
|
"heading": "Importálás a LinkedIn-ből"
|
||||||
|
},
|
||||||
|
"reactive-resume": {
|
||||||
|
"actions": {
|
||||||
|
"upload-json": "JSON feltöltése",
|
||||||
|
"upload-json-v2": "JSON feltöltése v2-ből"
|
||||||
|
},
|
||||||
|
"body": "Ha van olyan JSON-ja, amelyet a Reactive Resume jelenlegi verziójával exportált, akkor ide visszaimportálhatja, hogy újra szerkeszthető változatot kapjon.",
|
||||||
|
"heading": "Importálás a Reactive Resume alkalmazásból"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"rename-resume": {
|
||||||
|
"actions": {
|
||||||
|
"rename-resume": "Önéletrajz átnevezése"
|
||||||
|
},
|
||||||
|
"form": {
|
||||||
|
"name": {
|
||||||
|
"label": "Név"
|
||||||
|
},
|
||||||
|
"slug": {
|
||||||
|
"label": "Meztelen csiga"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "Nevezze át önéletrajzát"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
361
client/public/locales/id/builder.json
Normal file
361
client/public/locales/id/builder.json
Normal file
@ -0,0 +1,361 @@
|
|||||||
|
{
|
||||||
|
"common": {
|
||||||
|
"actions": {
|
||||||
|
"add": "Tambah Baru {{token}}",
|
||||||
|
"delete": "Hapus {{token}}",
|
||||||
|
"edit": "Ubah {{token}}"
|
||||||
|
},
|
||||||
|
"columns": {
|
||||||
|
"heading": "Kolom",
|
||||||
|
"tooltip": "Ubah nomor kolom"
|
||||||
|
},
|
||||||
|
"form": {
|
||||||
|
"date": {
|
||||||
|
"label": "Tanggal"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"label": "Keterangan"
|
||||||
|
},
|
||||||
|
"email": {
|
||||||
|
"label": "Alamat Email"
|
||||||
|
},
|
||||||
|
"end-date": {
|
||||||
|
"help-text": "Biarkan kosong, Jika masih terbaru",
|
||||||
|
"label": "Tanggal Akhir"
|
||||||
|
},
|
||||||
|
"keywords": {
|
||||||
|
"label": "Kata Kunci"
|
||||||
|
},
|
||||||
|
"level": {
|
||||||
|
"label": "Tingkat"
|
||||||
|
},
|
||||||
|
"levelNum": {
|
||||||
|
"label": "Tingkat (Angka)"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"label": "Nama"
|
||||||
|
},
|
||||||
|
"phone": {
|
||||||
|
"label": "Nomor Telepon"
|
||||||
|
},
|
||||||
|
"position": {
|
||||||
|
"label": "Jabatan"
|
||||||
|
},
|
||||||
|
"start-date": {
|
||||||
|
"label": "Tanggal Mulai"
|
||||||
|
},
|
||||||
|
"subtitle": {
|
||||||
|
"label": "Sub Judul"
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"label": "Ringkasan"
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"label": "Judul"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"label": "Situs web"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"glossary": {
|
||||||
|
"page": "Halaman"
|
||||||
|
},
|
||||||
|
"list": {
|
||||||
|
"actions": {
|
||||||
|
"delete": "Hapus",
|
||||||
|
"duplicate": "Duplikat",
|
||||||
|
"edit": "Ubah"
|
||||||
|
},
|
||||||
|
"empty-text": "Daftar ini kosong."
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"delete-item": "Anda yakin ingin menghapus item ini? Tindakan ini tidak dapat dibatalkan.",
|
||||||
|
"delete-section": "Hapus Bagian",
|
||||||
|
"rename-section": "Ganti Nama Bagian",
|
||||||
|
"toggle-visibility": "Beralih Visibilitas"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"controller": {
|
||||||
|
"tooltip": {
|
||||||
|
"center-artboard": "Tengahkan Artboard",
|
||||||
|
"copy-link": "Salin Tautan ke Resume",
|
||||||
|
"export-pdf": "Ekspor PDF",
|
||||||
|
"toggle-orientation": "Beralih Orientasi Halaman",
|
||||||
|
"toggle-page-break-line": "Beralih Garis Pemisah Halaman",
|
||||||
|
"toggle-sidebars": "Beralih Sidebar",
|
||||||
|
"zoom-in": "Perbesar",
|
||||||
|
"zoom-out": "Perkecil"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"header": {
|
||||||
|
"menu": {
|
||||||
|
"delete": "Hapus",
|
||||||
|
"duplicate": "Duplikat",
|
||||||
|
"rename": "Ganti nama",
|
||||||
|
"share-link": "Bagikan tautan",
|
||||||
|
"tooltips": {
|
||||||
|
"delete": "Anda yakin ingin menghapus Resume ini? Tindakan ini tidak dapat dibatalkan.",
|
||||||
|
"share-link": "Anda perlu mengubah visibilitas resume Anda ke publik agar terlihat oleh orang lain."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"leftSidebar": {
|
||||||
|
"sections": {
|
||||||
|
"awards": {
|
||||||
|
"form": {
|
||||||
|
"awarder": {
|
||||||
|
"label": "Penghargaan"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"basics": {
|
||||||
|
"actions": {
|
||||||
|
"photo-filters": "Filter Foto"
|
||||||
|
},
|
||||||
|
"heading": "Dasar",
|
||||||
|
"headline": {
|
||||||
|
"label": "Judul"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"label": "Nama Lengkap"
|
||||||
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "Tanggal Lahir"
|
||||||
|
},
|
||||||
|
"photo-filters": {
|
||||||
|
"effects": {
|
||||||
|
"border": {
|
||||||
|
"label": "Batas"
|
||||||
|
},
|
||||||
|
"grayscale": {
|
||||||
|
"label": "Grayscale"
|
||||||
|
},
|
||||||
|
"heading": "Efek"
|
||||||
|
},
|
||||||
|
"shape": {
|
||||||
|
"heading": "Bentuk"
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"heading": "Besar (dalam px)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"photo-upload": {
|
||||||
|
"tooltip": {
|
||||||
|
"remove": "Hapus Foto",
|
||||||
|
"upload": "Unggah Foto"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"certifications": {
|
||||||
|
"form": {
|
||||||
|
"issuer": {
|
||||||
|
"label": "Penerbit"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"education": {
|
||||||
|
"form": {
|
||||||
|
"area-study": {
|
||||||
|
"label": "Area belajar"
|
||||||
|
},
|
||||||
|
"courses": {
|
||||||
|
"label": "Kursus"
|
||||||
|
},
|
||||||
|
"degree": {
|
||||||
|
"label": "Gelar"
|
||||||
|
},
|
||||||
|
"grade": {
|
||||||
|
"label": "Tingkatan"
|
||||||
|
},
|
||||||
|
"institution": {
|
||||||
|
"label": "Lembaga"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"location": {
|
||||||
|
"address": {
|
||||||
|
"label": "Alamat"
|
||||||
|
},
|
||||||
|
"city": {
|
||||||
|
"label": "Kota"
|
||||||
|
},
|
||||||
|
"country": {
|
||||||
|
"label": "Negara"
|
||||||
|
},
|
||||||
|
"heading": "Lokasi",
|
||||||
|
"postal-code": {
|
||||||
|
"label": "Kode Pos"
|
||||||
|
},
|
||||||
|
"region": {
|
||||||
|
"label": "Wilayah"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"profiles": {
|
||||||
|
"form": {
|
||||||
|
"network": {
|
||||||
|
"label": "Social Media"
|
||||||
|
},
|
||||||
|
"username": {
|
||||||
|
"label": "Nama Panggilan"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "Profil",
|
||||||
|
"heading_one": "Profil"
|
||||||
|
},
|
||||||
|
"publications": {
|
||||||
|
"form": {
|
||||||
|
"publisher": {
|
||||||
|
"label": "Penerbit"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"references": {
|
||||||
|
"form": {
|
||||||
|
"relationship": {
|
||||||
|
"label": "Hubungan"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"section": {
|
||||||
|
"heading": "Bagian"
|
||||||
|
},
|
||||||
|
"volunteer": {
|
||||||
|
"form": {
|
||||||
|
"organization": {
|
||||||
|
"label": "Organisasi"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"rightSidebar": {
|
||||||
|
"sections": {
|
||||||
|
"css": {
|
||||||
|
"heading": "Kostumisasi CSS"
|
||||||
|
},
|
||||||
|
"export": {
|
||||||
|
"heading": "Ekspor",
|
||||||
|
"json": {
|
||||||
|
"primary": "JSON",
|
||||||
|
"secondary": "Unduh versi JSON dari resume Anda yang dapat diimpor kembali ke Reactive Resume."
|
||||||
|
},
|
||||||
|
"pdf": {
|
||||||
|
"loading": {
|
||||||
|
"primary": "Membuat PDF",
|
||||||
|
"secondary": "Harap tunggu saat ini PDF Anda sedang dibuat, mungkin memerlukan waktu hingga 15 detik."
|
||||||
|
},
|
||||||
|
"normal": {
|
||||||
|
"primary": "PDF",
|
||||||
|
"secondary": "Unduh PDF dari resume Anda yang dapat Anda cetak dan kirimkan ke pekerjaan impian Anda. File ini tidak dapat diimpor kembali untuk pengeditan lanjutan."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"layout": {
|
||||||
|
"heading": "Tata Letak",
|
||||||
|
"tooltip": {
|
||||||
|
"reset-layout": "Atur ulang Layout"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"links": {
|
||||||
|
"bugs-features": {
|
||||||
|
"body": "Sesuatu menghentikan Anda dari membuat resume? Atau apakah Anda memiliki ide luar biasa untuk ditambahkan? Buat Issues di GitHub untuk memulai.",
|
||||||
|
"button": "Masalah GitHub",
|
||||||
|
"heading": "Bugs? Request Fitur?"
|
||||||
|
},
|
||||||
|
"donate": {
|
||||||
|
"body": "Jika Anda suka menggunakan Reactive Resume, harap pertimbangkan untuk donasi sebanyak mungkin untuk menjaga aplikasi tetap berjalan, tanpa iklan dan gratis selamanya.",
|
||||||
|
"button": "Belikan Saya Kopi",
|
||||||
|
"heading": "Donasi ke Reactive Resume"
|
||||||
|
},
|
||||||
|
"github": "Kode sumber",
|
||||||
|
"heading": "Link"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"global": {
|
||||||
|
"date": {
|
||||||
|
"primary": "Tanggal",
|
||||||
|
"secondary": "Format tanggal untuk digunakan di seluruh aplikasi"
|
||||||
|
},
|
||||||
|
"heading": "Global",
|
||||||
|
"language": {
|
||||||
|
"primary": "Bahasa",
|
||||||
|
"secondary": "Tampilkan bahasa untuk digunakan di seluruh aplikasi"
|
||||||
|
},
|
||||||
|
"theme": {
|
||||||
|
"primary": "Tema"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "Pengaturan",
|
||||||
|
"page": {
|
||||||
|
"break-line": {
|
||||||
|
"primary": "Break Line",
|
||||||
|
"secondary": "Tampilkan garis di semua halaman untuk menandai ketinggian halaman A4"
|
||||||
|
},
|
||||||
|
"heading": "Halaman",
|
||||||
|
"orientation": {
|
||||||
|
"disabled": "Tidak berpengaruh ketika hanya ada satu halaman",
|
||||||
|
"primary": "Orientasi",
|
||||||
|
"secondary": "Menampilkan halaman secara horizontal atau vertikal"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"resume": {
|
||||||
|
"heading": "Resume",
|
||||||
|
"reset": {
|
||||||
|
"primary": "Atur ulang Semuanya",
|
||||||
|
"secondary": "Membuat terlalu banyak kesalahan? Klik di sini untuk mengatur ulang semua perubahan dan memulai dari awal. Hati-hati, tindakan ini tidak dapat dibatalkan."
|
||||||
|
},
|
||||||
|
"sample": {
|
||||||
|
"primary": "Muat Data Sampel",
|
||||||
|
"secondary": "Tidak yakin harus mulai dari mana? Klik di sini untuk memuat beberapa contoh data untuk melihat bagaimana resume lengkap terlihat."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sharing": {
|
||||||
|
"heading": "Bagikan",
|
||||||
|
"short-url": {
|
||||||
|
"label": "Gunakan URL pendek"
|
||||||
|
},
|
||||||
|
"visibility": {
|
||||||
|
"subtitle": "Izinkan siapa pun yang memiliki tautan untuk melihat resume Anda",
|
||||||
|
"title": "Publik"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"templates": {
|
||||||
|
"heading": "Template"
|
||||||
|
},
|
||||||
|
"theme": {
|
||||||
|
"form": {
|
||||||
|
"background": {
|
||||||
|
"label": "Latar Belakang"
|
||||||
|
},
|
||||||
|
"primary": {
|
||||||
|
"label": "Utama"
|
||||||
|
},
|
||||||
|
"text": {
|
||||||
|
"label": "Teks"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "Tema"
|
||||||
|
},
|
||||||
|
"typography": {
|
||||||
|
"form": {
|
||||||
|
"font-family": {
|
||||||
|
"label": "Font Family"
|
||||||
|
},
|
||||||
|
"font-size": {
|
||||||
|
"label": "Besar Font"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "Tipografi",
|
||||||
|
"widgets": {
|
||||||
|
"body": {
|
||||||
|
"label": "Tubuh"
|
||||||
|
},
|
||||||
|
"headings": {
|
||||||
|
"label": "Judul"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
29
client/public/locales/id/common.json
Normal file
29
client/public/locales/id/common.json
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"avatar": {
|
||||||
|
"menu": {
|
||||||
|
"greeting": "Halo",
|
||||||
|
"logout": "Keluar"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"footer": {
|
||||||
|
"credit": "Sebuah passion project dari <1>Amruth Pillai</1>",
|
||||||
|
"license": "Dari komunitas, untuk komunitas."
|
||||||
|
},
|
||||||
|
"markdown": {
|
||||||
|
"help-text": "Bagian ini mendukung format <1>markdown</1>."
|
||||||
|
},
|
||||||
|
"date": {
|
||||||
|
"present": "Sekarang"
|
||||||
|
},
|
||||||
|
"subtitle": "Pembuat resume open source dan gratis.",
|
||||||
|
"title": "Reactive Resume",
|
||||||
|
"toast": {
|
||||||
|
"error": {
|
||||||
|
"upload-file-size": "Harap unggah hanya file di bawah 2 megabytes.",
|
||||||
|
"upload-photo-size": "Harap unggah hanya foto di bawah 2 megabytes, lebih baik jika persegi."
|
||||||
|
},
|
||||||
|
"success": {
|
||||||
|
"resume-link-copied": "Tautan ke resume Anda telah disalin ke papan klip Anda."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
25
client/public/locales/id/dashboard.json
Normal file
25
client/public/locales/id/dashboard.json
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"create-resume": {
|
||||||
|
"subtitle": "Mulai dari Awal",
|
||||||
|
"title": "Buat Resume Baru"
|
||||||
|
},
|
||||||
|
"import-external": {
|
||||||
|
"subtitle": "LinkedIn, JSON Resume, Reactive Resume",
|
||||||
|
"title": "Impor dari sumber luar"
|
||||||
|
},
|
||||||
|
"resume": {
|
||||||
|
"menu": {
|
||||||
|
"delete": "Hapus",
|
||||||
|
"duplicate": "Duplikasi",
|
||||||
|
"open": "Buka",
|
||||||
|
"rename": "Ganti Nama",
|
||||||
|
"share-link": "Bagikan link",
|
||||||
|
"tooltips": {
|
||||||
|
"delete": "Anda yakin ingin menghapus resume ini? Ini adalah tindakan yang tidak dapat dibatalkan.",
|
||||||
|
"share-link": "Anda perlu mengubah visibilitas resume Anda ke publik agar terlihat oleh orang lain."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"timestamp": "Terakhir diubah {{timestamp}} lalu"
|
||||||
|
},
|
||||||
|
"title": "Dasbor"
|
||||||
|
}
|
||||||
41
client/public/locales/id/landing.json
Normal file
41
client/public/locales/id/landing.json
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"actions": {
|
||||||
|
"app": "Buka Aplikasi",
|
||||||
|
"login": "Masuk",
|
||||||
|
"logout": "Keluar",
|
||||||
|
"register": "Registrasi"
|
||||||
|
},
|
||||||
|
"features": {
|
||||||
|
"heading": "Fitur",
|
||||||
|
"list": {
|
||||||
|
"ads": "Tanpa Iklan",
|
||||||
|
"export": "Ekspor resume Anda ke JSON atau format PDF",
|
||||||
|
"free": "Gratis, selamanya",
|
||||||
|
"import": "Impor data dari LinkedIn, JSON Resume",
|
||||||
|
"languages": "Dapat diakses dari berbagai bahasa",
|
||||||
|
"more": "Dan masih banyak lagi fitur menarik lainnya, <1>baca semuanya disini</1>",
|
||||||
|
"tracking": "Tanpa Pelacakan Pengguna"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"links": {
|
||||||
|
"heading": "Link",
|
||||||
|
"links": {
|
||||||
|
"donate": "Donasi",
|
||||||
|
"github": "Kode Sumber",
|
||||||
|
"privacy": "Kebijakan Pribadi",
|
||||||
|
"service": "Persyaratan Layanan"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"screenshots": {
|
||||||
|
"heading": "Screenshot"
|
||||||
|
},
|
||||||
|
"testimonials": {
|
||||||
|
"heading": "Testimoni",
|
||||||
|
"body": "Baik atau buruk, saya akan senang mendengar pendapat Anda tentang Reactive Resume dan bagaimana pengalamannya bagi Anda.<br/>Berikut adalah beberapa pesan yang dikirim oleh pengguna di seluruh dunia.",
|
||||||
|
"contact": "Anda dapat menghubungi saya melalui <1>email saya</1> atau melalui formulir kontak di <3>situs web saya</3>."
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"body": "Reactive Resume adalah pembuat resume gratis dan open source yang dibuat untuk membuat tugas-tugas lebih mudah seperti membuat, memperbarui, dan membagikan resume Anda semudah 1, 2, 3. Dengan aplikasi ini, Anda dapat membuat beberapa resume, membaginya dengan perekrut atau teman melalui tautan unik dan cetak sebagai PDF, semuanya gratis, tanpa iklan, tanpa pelacakan, tanpa kehilangan integritas dan privasi data Anda.",
|
||||||
|
"heading": "Ringkasan"
|
||||||
|
}
|
||||||
|
}
|
||||||
136
client/public/locales/id/modals.json
Normal file
136
client/public/locales/id/modals.json
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
{
|
||||||
|
"auth": {
|
||||||
|
"forgot-password": {
|
||||||
|
"actions": {
|
||||||
|
"send-email": "Kirim Reset Kata Sandi Email"
|
||||||
|
},
|
||||||
|
"body": "Cukup masukkan alamat email yang terkait dengan akun yang ingin Anda pulihkan.",
|
||||||
|
"form": {
|
||||||
|
"email": {
|
||||||
|
"label": "Alamat Email"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "Lupa Kata Sandi?",
|
||||||
|
"help-text": "Jika akun ada, Anda akan menerima email dengan tautan untuk mengatur ulang kata sandi Anda."
|
||||||
|
},
|
||||||
|
"login": {
|
||||||
|
"actions": {
|
||||||
|
"login": "Masuk",
|
||||||
|
"google": "Masuk dengan Google"
|
||||||
|
},
|
||||||
|
"body": "Silakan masukkan nama pengguna dan kata sandi Anda yang terkait dengan akun Anda untuk masuk dan mengakses, mengelola, dan membagikan resume Anda.",
|
||||||
|
"form": {
|
||||||
|
"password": {
|
||||||
|
"label": "kata Sandi"
|
||||||
|
},
|
||||||
|
"username": {
|
||||||
|
"help-text": "Anda juga dapat memasukkan alamat email Anda",
|
||||||
|
"label": "Nama Pengguna"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "Masuk ke akun Anda",
|
||||||
|
"recover-text": "Jika Anda lupa sandi, Anda dapat <1>memulihkan akun</1> di sini.",
|
||||||
|
"register-text": "Jika Anda tidak memilikinya, Anda dapat <1>membuat akun</1> di sini."
|
||||||
|
},
|
||||||
|
"register": {
|
||||||
|
"actions": {
|
||||||
|
"register": "Daftar",
|
||||||
|
"google": "Daftar dengan Google"
|
||||||
|
},
|
||||||
|
"body": "Silakan masukkan informasi pribadi Anda untuk membuat akun.",
|
||||||
|
"form": {
|
||||||
|
"confirm-password": {
|
||||||
|
"label": "Konfirmasi Sandi"
|
||||||
|
},
|
||||||
|
"email": {
|
||||||
|
"label": "Alamat Email"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"label": "Nama Lengkap"
|
||||||
|
},
|
||||||
|
"password": {
|
||||||
|
"label": "Kata Sandi"
|
||||||
|
},
|
||||||
|
"username": {
|
||||||
|
"label": "Nama Panggilan"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "Buat akun",
|
||||||
|
"loginText": "Jika Anda sudah memiliki akun, Anda dapat <1>masuk di sini</1>."
|
||||||
|
},
|
||||||
|
"reset-password": {
|
||||||
|
"actions": {
|
||||||
|
"set-password": "Ubah Kata Sandi Baru"
|
||||||
|
},
|
||||||
|
"body": "Masukkan kata sandi baru untuk akun Anda.",
|
||||||
|
"form": {
|
||||||
|
"confirm-password": {
|
||||||
|
"label": "Konfirmasi Sandi"
|
||||||
|
},
|
||||||
|
"password": {
|
||||||
|
"label": "Kata Sandi"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "Atur ulang kata sandi"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"create-resume": {
|
||||||
|
"actions": {
|
||||||
|
"create-resume": "Buat Resume"
|
||||||
|
},
|
||||||
|
"body": "Mulailah membangun resume Anda dengan memberinya nama. Bisa jadi mengacu pada peran yang Anda lamar, atau hanya cemilan favorit Anda.",
|
||||||
|
"form": {
|
||||||
|
"name": {
|
||||||
|
"label": "Nama"
|
||||||
|
},
|
||||||
|
"public": {
|
||||||
|
"label": "Apakah Dapat Diakses Publik?"
|
||||||
|
},
|
||||||
|
"slug": {
|
||||||
|
"label": "Slug"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "Buat resume baru"
|
||||||
|
},
|
||||||
|
"import-external": {
|
||||||
|
"heading": "Impor dari Sumber luar",
|
||||||
|
"json-resume": {
|
||||||
|
"actions": {
|
||||||
|
"upload-json": "Unggah JSON"
|
||||||
|
},
|
||||||
|
"body": "Jika Anda memiliki <1>JSON Resume yang divalidasi</1> yang siap digunakan, Anda dapat menggunakannya untuk mempercepat pengembangan Anda di Reactive Resume. Klik tombol di bawah dan unggah file JSON yang valid untuk memulai.",
|
||||||
|
"heading": "Impor dari JSON Resume"
|
||||||
|
},
|
||||||
|
"linkedin": {
|
||||||
|
"actions": {
|
||||||
|
"upload-archive": "Unggah berkas ZIP"
|
||||||
|
},
|
||||||
|
"body": "Anda dapat menghemat waktu dengan mengekspor data Anda dari LinkedIn dan menggunakannya untuk mengisi kolom secara otomatis di Reactive Resume. Buka bagian <1>Privasi Data</1> di LinkedIn dan minta arsip data Anda. Setelah tersedia, unggah file ZIP di bawah ini.",
|
||||||
|
"heading": "Impor dari LinkedIn"
|
||||||
|
},
|
||||||
|
"reactive-resume": {
|
||||||
|
"actions": {
|
||||||
|
"upload-json": "Unggah JSON",
|
||||||
|
"upload-json-v2": "Unggah JSON dari v2"
|
||||||
|
},
|
||||||
|
"body": "Jika Anda memiliki JSON yang diekspor dengan versi Reactive Resume saat ini, Anda dapat mengimpornya kembali ke sini untuk mendapatkan versi yang dapat diedit lagi.",
|
||||||
|
"heading": "Impor dari Reactive Resume"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"rename-resume": {
|
||||||
|
"actions": {
|
||||||
|
"rename-resume": "Ubah nama Resume"
|
||||||
|
},
|
||||||
|
"form": {
|
||||||
|
"name": {
|
||||||
|
"label": "Nama"
|
||||||
|
},
|
||||||
|
"slug": {
|
||||||
|
"label": "Slug"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heading": "Ubah nama resume Anda"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -119,6 +119,9 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "Nome e cognome"
|
"label": "Nome e cognome"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "Data di nascita"
|
||||||
|
},
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
|
|||||||
@ -119,6 +119,9 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "ಪೂರ್ಣ ಹೆಸರು"
|
"label": "ಪೂರ್ಣ ಹೆಸರು"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "ಹುಟ್ತಿದ ದಿನ"
|
||||||
|
},
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
|
|||||||
@ -119,6 +119,9 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "പൂർണ്ണമായ പേര്"
|
"label": "പൂർണ്ണമായ പേര്"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "ജനിച്ച ദിവസം"
|
||||||
|
},
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
|
|||||||
@ -119,6 +119,9 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "Volledige naam"
|
"label": "Volledige naam"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "Geboortedatum"
|
||||||
|
},
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
|
|||||||
@ -119,6 +119,9 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "ପୁରା ନାମ"
|
"label": "ପୁରା ନାମ"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "ଜନ୍ମଦିନ"
|
||||||
|
},
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
|
|||||||
@ -119,6 +119,9 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "Imię i nazwisko"
|
"label": "Imię i nazwisko"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "Data urodzenia"
|
||||||
|
},
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
|
|||||||
@ -119,6 +119,9 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "Nome Completo"
|
"label": "Nome Completo"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "Data de nascimento"
|
||||||
|
},
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
|
|||||||
@ -119,6 +119,9 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "ФИО"
|
"label": "ФИО"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "Дата рождения"
|
||||||
|
},
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
|
|||||||
@ -119,6 +119,9 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "Fullständigt namn"
|
"label": "Fullständigt namn"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "Födelsedatum"
|
||||||
|
},
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
|
|||||||
@ -119,6 +119,9 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "முழு பெயர்"
|
"label": "முழு பெயர்"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "பிறந்த தேதி"
|
||||||
|
},
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
|
|||||||
@ -119,6 +119,9 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "Ad Soyad"
|
"label": "Ad Soyad"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "Doğum tarihi"
|
||||||
|
},
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
|
|||||||
@ -119,6 +119,9 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "Họ và tên"
|
"label": "Họ và tên"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "Ngày sinh"
|
||||||
|
},
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
|
|||||||
@ -119,6 +119,9 @@
|
|||||||
"name": {
|
"name": {
|
||||||
"label": "全名"
|
"label": "全名"
|
||||||
},
|
},
|
||||||
|
"birthdate": {
|
||||||
|
"label": "出生日期"
|
||||||
|
},
|
||||||
"photo-filters": {
|
"photo-filters": {
|
||||||
"effects": {
|
"effects": {
|
||||||
"border": {
|
"border": {
|
||||||
|
|||||||
@ -1,43 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:mobile="http://www.google.com/schemas/sitemap-mobile/1.0" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
|
|
||||||
<url><loc>https://rxresu.me</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/meta/privacy</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/meta/service</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/ar/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/bn/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/da/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/de/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/es/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/fr/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/hi/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/it/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/kn/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/ml/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/nl/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/pl/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/pt/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/ru/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/ta/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/tr/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/vi/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/zh/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/ar</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/bn</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/da</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/de</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/es</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/fr</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/hi</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/it</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/kn</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/ml</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/nl</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/pl</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/pt</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/ru</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/ta</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/tr</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/vi</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
<url><loc>https://rxresu.me/zh</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-05-01T06:02:53.893Z</lastmod></url>
|
|
||||||
</urlset>
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
||||||
<sitemap><loc>https://rxresu.me/sitemap-0.xml</loc></sitemap>
|
|
||||||
</sitemapindex>
|
|
||||||
@ -9,6 +9,7 @@ import {
|
|||||||
FaHackerrank,
|
FaHackerrank,
|
||||||
FaInstagram,
|
FaInstagram,
|
||||||
FaLinkedinIn,
|
FaLinkedinIn,
|
||||||
|
FaMedium,
|
||||||
FaSkype,
|
FaSkype,
|
||||||
FaSoundcloud,
|
FaSoundcloud,
|
||||||
FaStackOverflow,
|
FaStackOverflow,
|
||||||
@ -30,6 +31,7 @@ const profileIconMap: Record<string, JSX.Element> = {
|
|||||||
hackerrank: <FaHackerrank />,
|
hackerrank: <FaHackerrank />,
|
||||||
instagram: <FaInstagram />,
|
instagram: <FaInstagram />,
|
||||||
linkedin: <FaLinkedinIn />,
|
linkedin: <FaLinkedinIn />,
|
||||||
|
medium: <FaMedium />,
|
||||||
skype: <FaSkype />,
|
skype: <FaSkype />,
|
||||||
soundcloud: <FaSoundcloud />,
|
soundcloud: <FaSoundcloud />,
|
||||||
stackoverflow: <FaStackOverflow />,
|
stackoverflow: <FaStackOverflow />,
|
||||||
|
|||||||
@ -18,8 +18,12 @@ const DateWrapper: React.FC<React.PropsWithChildren<unknown>> = ({ children }) =
|
|||||||
require('dayjs/locale/el');
|
require('dayjs/locale/el');
|
||||||
require('dayjs/locale/en');
|
require('dayjs/locale/en');
|
||||||
require('dayjs/locale/es');
|
require('dayjs/locale/es');
|
||||||
|
require('dayjs/locale/fa');
|
||||||
require('dayjs/locale/fr');
|
require('dayjs/locale/fr');
|
||||||
|
require('dayjs/locale/he');
|
||||||
require('dayjs/locale/hi');
|
require('dayjs/locale/hi');
|
||||||
|
require('dayjs/locale/hu');
|
||||||
|
require('dayjs/locale/id');
|
||||||
require('dayjs/locale/it');
|
require('dayjs/locale/it');
|
||||||
require('dayjs/locale/kn');
|
require('dayjs/locale/kn');
|
||||||
require('dayjs/locale/ml');
|
require('dayjs/locale/ml');
|
||||||
|
|||||||
@ -55,6 +55,7 @@ You have complete control over what goes into your resume, how it looks, what co
|
|||||||
- German (Deutsch)
|
- German (Deutsch)
|
||||||
- Greek (Ελληνικά)
|
- Greek (Ελληνικά)
|
||||||
- Hindi (हिन्दी)
|
- Hindi (हिन्दी)
|
||||||
|
- Hungarian (Magyar)
|
||||||
- Italian (Italiano)
|
- Italian (Italiano)
|
||||||
- Kannada (ಕನ್ನಡ)
|
- Kannada (ಕನ್ನಡ)
|
||||||
- Malayalam (മലയാളം)
|
- Malayalam (മലയാളം)
|
||||||
|
|||||||
@ -14,14 +14,14 @@
|
|||||||
"write-heading-ids": "docusaurus write-heading-ids"
|
"write-heading-ids": "docusaurus write-heading-ids"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@algolia/client-search": "^4.13.0",
|
"@algolia/client-search": "^4.13.1",
|
||||||
"@docusaurus/core": "2.0.0-beta.18",
|
"@docusaurus/core": "2.0.0-beta.21",
|
||||||
"@docusaurus/preset-classic": "2.0.0-beta.18",
|
"@docusaurus/preset-classic": "2.0.0-beta.21",
|
||||||
"@mdx-js/react": "1.6.22",
|
"@mdx-js/react": "2.1.2",
|
||||||
"clsx": "^1.1.1",
|
"clsx": "^1.1.1",
|
||||||
"prism-react-renderer": "^1.3.1",
|
"prism-react-renderer": "^1.3.3",
|
||||||
"react": "17.0.2",
|
"react": ">=16.13.1 <17.0.0 || >=17.0.0 <18.0.0",
|
||||||
"react-dom": "17.0.2"
|
"react-dom": ">=16.8.4 <17.0.0 || >=17.0.0 <18.0.0"
|
||||||
},
|
},
|
||||||
"browserslist": {
|
"browserslist": {
|
||||||
"production": [
|
"production": [
|
||||||
@ -36,6 +36,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/react": "17.0.2"
|
"@types/react": ">=16.8.0 <19.0.0",
|
||||||
|
"typescript": "^4.7.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
49813
package-lock.json
generated
Normal file
49813
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
21
package.json
21
package.json
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "reactive-resume",
|
"name": "reactive-resume",
|
||||||
"version": "3.4.3",
|
"version": "3.4.6",
|
||||||
"private": true,
|
"private": true,
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
"schema",
|
"schema",
|
||||||
@ -34,22 +34,25 @@
|
|||||||
"start": "env-cmd --silent concurrently --kill-others \"pnpm run start:*\""
|
"start": "env-cmd --silent concurrently --kill-others \"pnpm run start:*\""
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"concurrently": "^7.1.0",
|
"@aws-sdk/client-s3": "^3.113.0",
|
||||||
|
"@docusaurus/core": "^2.0.0-beta.21",
|
||||||
|
"@docusaurus/preset-classic": "^2.0.0-beta.21",
|
||||||
|
"concurrently": "^7.2.2",
|
||||||
"env-cmd": "^10.1.0"
|
"env-cmd": "^10.1.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@typescript-eslint/eslint-plugin": "^5.21.0",
|
"@typescript-eslint/eslint-plugin": "^5.28.0",
|
||||||
"@typescript-eslint/parser": "^5.21.0",
|
"@typescript-eslint/parser": "^5.28.0",
|
||||||
"cz-conventional-changelog": "^3.3.0",
|
"cz-conventional-changelog": "^3.3.0",
|
||||||
"eslint": "^8.14.0",
|
"eslint": "^8.18.0",
|
||||||
"eslint-config-prettier": "^8.5.0",
|
"eslint-config-prettier": "^8.5.0",
|
||||||
"eslint-plugin-import": "^2.26.0",
|
"eslint-plugin-import": "^2.26.0",
|
||||||
"eslint-plugin-prettier": "^4.0.0",
|
"eslint-plugin-prettier": "^4.0.0",
|
||||||
"eslint-plugin-simple-import-sort": "^7.0.0",
|
"eslint-plugin-simple-import-sort": "^7.0.0",
|
||||||
"eslint-plugin-unused-imports": "^2.0.0",
|
"eslint-plugin-unused-imports": "^2.0.0",
|
||||||
"husky": "^7.0.4",
|
"husky": "^8.0.1",
|
||||||
"prettier": "^2.6.2",
|
"prettier": "^2.7.1",
|
||||||
"standard-version": "^9.3.2",
|
"standard-version": "^9.5.0",
|
||||||
"typescript": "^4.6.4"
|
"typescript": "^4.7.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
6876
pnpm-lock.yaml
generated
6876
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@ -9,7 +9,7 @@
|
|||||||
"lint": "eslint --fix --ext .ts ./src"
|
"lint": "eslint --fix --ext .ts ./src"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"eslint": "^8.14.0",
|
"eslint": "^8.18.0",
|
||||||
"typescript": "^4.6.4"
|
"typescript": "^4.7.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -43,6 +43,8 @@ RUN pnpm install -F server --frozen-lockfile --prod
|
|||||||
|
|
||||||
COPY --from=builder /app/server/dist ./server/dist
|
COPY --from=builder /app/server/dist ./server/dist
|
||||||
|
|
||||||
|
VOLUME /app/server/dist/assets/uploads
|
||||||
|
|
||||||
EXPOSE 3100
|
EXPOSE 3100
|
||||||
|
|
||||||
ENV PORT 3100
|
ENV PORT 3100
|
||||||
|
|||||||
@ -10,62 +10,63 @@
|
|||||||
"lint": "eslint --fix --ext .ts ./src"
|
"lint": "eslint --fix --ext .ts ./src"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@aws-sdk/client-s3": "^3.81.0",
|
"@aws-sdk/client-s3": "^3.113.0",
|
||||||
"@nestjs/axios": "^0.0.7",
|
"@nestjs/axios": "^0.0.8",
|
||||||
"@nestjs/common": "^8.4.4",
|
"@nestjs/common": "^8.4.7",
|
||||||
"@nestjs/config": "^2.0.0",
|
"@nestjs/config": "^2.1.0",
|
||||||
"@nestjs/core": "^8.4.4",
|
"@nestjs/core": "^8.4.7",
|
||||||
"@nestjs/jwt": "^8.0.0",
|
"@nestjs/jwt": "^8.0.1",
|
||||||
"@nestjs/mapped-types": "^1.0.1",
|
"@nestjs/mapped-types": "^1.0.1",
|
||||||
"@nestjs/passport": "^8.2.1",
|
"@nestjs/passport": "^8.2.2",
|
||||||
"@nestjs/platform-express": "^8.4.4",
|
"@nestjs/platform-express": "^8.4.7",
|
||||||
"@nestjs/schedule": "^1.1.0",
|
"@nestjs/schedule": "^2.0.1",
|
||||||
"@nestjs/serve-static": "^2.2.2",
|
"@nestjs/serve-static": "^2.2.2",
|
||||||
"@nestjs/terminus": "^8.0.6",
|
"@nestjs/terminus": "^8.0.8",
|
||||||
"@nestjs/typeorm": "^8.0.3",
|
"@nestjs/typeorm": "^8.1.4",
|
||||||
"@sendgrid/mail": "^7.6.2",
|
"@sendgrid/mail": "^7.7.0",
|
||||||
"@types/passport": "^1.0.7",
|
"@types/passport": "^1.0.9",
|
||||||
"bcrypt": "^5.0.1",
|
"bcrypt": "^5.0.1",
|
||||||
"cache-manager": "^3.6.1",
|
"cache-manager": "^4.0.1",
|
||||||
"class-transformer": "^0.5.1",
|
"class-transformer": "^0.5.1",
|
||||||
"class-validator": "^0.13.2",
|
"class-validator": "^0.13.2",
|
||||||
"cookie-parser": "^1.4.6",
|
"cookie-parser": "^1.4.6",
|
||||||
"csvtojson": "^2.0.10",
|
"csvtojson": "^2.0.10",
|
||||||
"dayjs": "^1.11.1",
|
"dayjs": "^1.11.3",
|
||||||
"google-auth-library": "^8.0.2",
|
"google-auth-library": "^8.0.2",
|
||||||
"joi": "^17.6.0",
|
"joi": "^17.6.0",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"multer": "^1.4.4",
|
"multer": "^1.4.4",
|
||||||
"nanoid": "^3.3.3",
|
"nanoid": "^3.3.4",
|
||||||
"node-stream-zip": "^1.15.0",
|
"node-stream-zip": "^1.15.0",
|
||||||
"passport": "^0.5.2",
|
"passport": "^0.6.0",
|
||||||
"passport-jwt": "^4.0.0",
|
"passport-jwt": "^4.0.0",
|
||||||
"passport-local": "^1.0.0",
|
"passport-local": "^1.0.0",
|
||||||
"pdf-lib": "^1.17.1",
|
"pdf-lib": "^1.17.1",
|
||||||
"pg": "^8.7.3",
|
"pg": "^8.7.3",
|
||||||
"playwright-chromium": "^1.21.1",
|
"playwright-chromium": "^1.22.2",
|
||||||
"reflect-metadata": "^0.1.13",
|
"reflect-metadata": "^0.1.13",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"rxjs": "^7.5.5",
|
"rxjs": "^7.5.5",
|
||||||
"typeorm": "0.2.45",
|
"typeorm": "0.3.6",
|
||||||
"uuid": "^8.3.2"
|
"uuid": "^8.3.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@nestjs/cli": "^8.2.5",
|
"@nestjs/cli": "^8.2.6",
|
||||||
"@nestjs/schematics": "^8.0.10",
|
"@nestjs/schematics": "^8.0.11",
|
||||||
"@reactive-resume/schema": "workspace:*",
|
"@reactive-resume/schema": "workspace:*",
|
||||||
"@types/bcrypt": "^5.0.0",
|
"@types/bcrypt": "^5.0.0",
|
||||||
"@types/cookie-parser": "^1.4.3",
|
"@types/cookie-parser": "^1.4.3",
|
||||||
"@types/express": "^4.17.13",
|
"@types/express": "^4.17.13",
|
||||||
|
"@types/lodash": "^4.14.182",
|
||||||
"@types/multer": "^1.4.7",
|
"@types/multer": "^1.4.7",
|
||||||
"@types/node": "^17.0.30",
|
"@types/node": "^18.0.0",
|
||||||
"eslint": "^8.14.0",
|
"eslint": "^8.18.0",
|
||||||
"prettier": "^2.6.2",
|
"prettier": "^2.7.1",
|
||||||
"source-map-support": "^0.5.21",
|
"source-map-support": "^0.5.21",
|
||||||
"ts-loader": "^9.3.0",
|
"ts-loader": "^9.3.0",
|
||||||
"ts-node": "^10.7.0",
|
"ts-node": "^10.8.1",
|
||||||
"tsconfig-paths": "^3.14.1",
|
"tsconfig-paths": "^4.0.0",
|
||||||
"typescript": "^4.6.4",
|
"typescript": "^4.7.4",
|
||||||
"webpack": "^5.72.0"
|
"webpack": "^5.73.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,4 +7,5 @@ export default registerAs('storage', () => ({
|
|||||||
urlPrefix: process.env.STORAGE_URL_PREFIX,
|
urlPrefix: process.env.STORAGE_URL_PREFIX,
|
||||||
accessKey: process.env.STORAGE_ACCESS_KEY,
|
accessKey: process.env.STORAGE_ACCESS_KEY,
|
||||||
secretKey: process.env.STORAGE_SECRET_KEY,
|
secretKey: process.env.STORAGE_SECRET_KEY,
|
||||||
|
s3Enabled: process.env.STORAGE_S3_ENABLED,
|
||||||
}));
|
}));
|
||||||
|
|||||||
@ -35,8 +35,6 @@ export class ResumeController {
|
|||||||
@UseGuards(JwtAuthGuard)
|
@UseGuards(JwtAuthGuard)
|
||||||
@Get()
|
@Get()
|
||||||
async findAllByUser(@User('id') userId: number) {
|
async findAllByUser(@User('id') userId: number) {
|
||||||
console.log('findAllByUser', userId);
|
|
||||||
|
|
||||||
return this.resumeService.findAllByUser(userId);
|
return this.resumeService.findAllByUser(userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -3,6 +3,7 @@ import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
|
|||||||
import { ConfigService } from '@nestjs/config';
|
import { ConfigService } from '@nestjs/config';
|
||||||
import { InjectRepository } from '@nestjs/typeorm';
|
import { InjectRepository } from '@nestjs/typeorm';
|
||||||
import { Resume as ResumeSchema } from '@reactive-resume/schema';
|
import { Resume as ResumeSchema } from '@reactive-resume/schema';
|
||||||
|
import fs from 'fs';
|
||||||
import { pick, sample, set } from 'lodash';
|
import { pick, sample, set } from 'lodash';
|
||||||
import { nanoid } from 'nanoid';
|
import { nanoid } from 'nanoid';
|
||||||
import { extname } from 'path';
|
import { extname } from 'path';
|
||||||
@ -23,20 +24,24 @@ export const SHORT_ID_LENGTH = 8;
|
|||||||
@Injectable()
|
@Injectable()
|
||||||
export class ResumeService {
|
export class ResumeService {
|
||||||
private s3Client: S3Client;
|
private s3Client: S3Client;
|
||||||
|
private s3Enabled: boolean;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
@InjectRepository(Resume) private resumeRepository: Repository<Resume>,
|
@InjectRepository(Resume) private resumeRepository: Repository<Resume>,
|
||||||
private configService: ConfigService,
|
private configService: ConfigService,
|
||||||
private usersService: UsersService
|
private usersService: UsersService
|
||||||
) {
|
) {
|
||||||
this.s3Client = new S3({
|
this.s3Enabled = configService.get<string>('storage.s3Enabled') !== 'false';
|
||||||
endpoint: configService.get<string>('storage.endpoint'),
|
if (this.s3Enabled) {
|
||||||
region: configService.get<string>('storage.region'),
|
this.s3Client = new S3({
|
||||||
credentials: {
|
endpoint: configService.get<string>('storage.endpoint'),
|
||||||
accessKeyId: configService.get<string>('storage.accessKey'),
|
region: configService.get<string>('storage.region'),
|
||||||
secretAccessKey: configService.get<string>('storage.secretKey'),
|
credentials: {
|
||||||
},
|
accessKeyId: configService.get<string>('storage.accessKey'),
|
||||||
});
|
secretAccessKey: configService.get<string>('storage.secretKey'),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async create(createResumeDto: CreateResumeDto, userId: number) {
|
async create(createResumeDto: CreateResumeDto, userId: number) {
|
||||||
@ -103,11 +108,11 @@ export class ResumeService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
findAllByUser(userId: number) {
|
findAllByUser(userId: number) {
|
||||||
return this.resumeRepository.find({ user: { id: userId } });
|
return this.resumeRepository.find({ where: { user: { id: userId } } });
|
||||||
}
|
}
|
||||||
|
|
||||||
async findOne(id: number, userId?: number) {
|
async findOne(id: number, userId?: number) {
|
||||||
const resume = await this.resumeRepository.findOne(id);
|
const resume = await this.resumeRepository.findOne({ where: { id } });
|
||||||
|
|
||||||
if (!resume) {
|
if (!resume) {
|
||||||
throw new HttpException('The resume you are looking does not exist, or maybe never did?', HttpStatus.NOT_FOUND);
|
throw new HttpException('The resume you are looking does not exist, or maybe never did?', HttpStatus.NOT_FOUND);
|
||||||
@ -124,7 +129,7 @@ export class ResumeService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async findOneByShortId(shortId: string, userId?: number, secretKey?: string) {
|
async findOneByShortId(shortId: string, userId?: number, secretKey?: string) {
|
||||||
const resume = await this.resumeRepository.findOne({ shortId });
|
const resume = await this.resumeRepository.findOne({ where: { shortId } });
|
||||||
|
|
||||||
if (!resume) {
|
if (!resume) {
|
||||||
throw new HttpException('The resume you are looking does not exist, or maybe never did?', HttpStatus.NOT_FOUND);
|
throw new HttpException('The resume you are looking does not exist, or maybe never did?', HttpStatus.NOT_FOUND);
|
||||||
@ -142,7 +147,7 @@ export class ResumeService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async findOneByIdentifier(username: string, slug: string, userId?: number, secretKey?: string) {
|
async findOneByIdentifier(username: string, slug: string, userId?: number, secretKey?: string) {
|
||||||
const resume = await this.resumeRepository.findOne({ user: { username }, slug });
|
const resume = await this.resumeRepository.findOne({ where: { user: { username }, slug } });
|
||||||
|
|
||||||
if (!resume) {
|
if (!resume) {
|
||||||
throw new HttpException('The resume you are looking does not exist, or maybe never did?', HttpStatus.NOT_FOUND);
|
throw new HttpException('The resume you are looking does not exist, or maybe never did?', HttpStatus.NOT_FOUND);
|
||||||
@ -230,40 +235,62 @@ export class ResumeService {
|
|||||||
async uploadPhoto(id: number, userId: number, file: Express.Multer.File) {
|
async uploadPhoto(id: number, userId: number, file: Express.Multer.File) {
|
||||||
const resume = await this.findOne(id, userId);
|
const resume = await this.findOne(id, userId);
|
||||||
|
|
||||||
const urlPrefix = this.configService.get<string>('storage.urlPrefix');
|
|
||||||
const filename = new Date().getTime() + extname(file.originalname);
|
const filename = new Date().getTime() + extname(file.originalname);
|
||||||
const key = `uploads/${userId}/${id}/${filename}`;
|
let updatedResume = null;
|
||||||
|
if (this.s3Enabled) {
|
||||||
await this.s3Client.send(
|
const urlPrefix = this.configService.get<string>('storage.urlPrefix');
|
||||||
new PutObjectCommand({
|
const key = `uploads/${userId}/${id}/${filename}`;
|
||||||
Bucket: this.configService.get<string>('storage.bucket'),
|
const publicUrl = urlPrefix + key;
|
||||||
Key: key,
|
await this.s3Client.send(
|
||||||
Body: file.buffer,
|
new PutObjectCommand({
|
||||||
ACL: 'public-read',
|
Bucket: this.configService.get<string>('storage.bucket'),
|
||||||
})
|
Key: key,
|
||||||
);
|
Body: file.buffer,
|
||||||
|
ACL: 'public-read',
|
||||||
const publicUrl = urlPrefix + key;
|
})
|
||||||
|
);
|
||||||
const updatedResume = set(resume, 'basics.photo.url', publicUrl);
|
updatedResume = set(resume, 'basics.photo.url', publicUrl);
|
||||||
|
} else {
|
||||||
|
const path = `${__dirname}/../assets/uploads/${userId}/${id}/`;
|
||||||
|
fs.mkdir(path, { recursive: true }, (err) => {
|
||||||
|
if (err) {
|
||||||
|
console.log(err);
|
||||||
|
}
|
||||||
|
fs.writeFile(path + filename, file.buffer, (err) => {
|
||||||
|
if (err) {
|
||||||
|
console.log(err);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
updatedResume = set(resume, 'basics.photo.url', `/api/assets/uploads/${userId}/${id}/` + filename);
|
||||||
|
}
|
||||||
|
|
||||||
return this.resumeRepository.save<Resume>(updatedResume);
|
return this.resumeRepository.save<Resume>(updatedResume);
|
||||||
}
|
}
|
||||||
|
|
||||||
async deletePhoto(id: number, userId: number) {
|
async deletePhoto(id: number, userId: number) {
|
||||||
const resume = await this.findOne(id, userId);
|
const resume = await this.findOne(id, userId);
|
||||||
|
|
||||||
const urlPrefix = this.configService.get<string>('storage.urlPrefix');
|
|
||||||
const publicUrl = resume.basics.photo.url;
|
const publicUrl = resume.basics.photo.url;
|
||||||
const key = publicUrl.replace(urlPrefix, '');
|
if (this.s3Enabled) {
|
||||||
|
const urlPrefix = this.configService.get<string>('storage.urlPrefix');
|
||||||
await this.s3Client.send(
|
const key = publicUrl.replace(urlPrefix, '');
|
||||||
new DeleteObjectCommand({
|
|
||||||
Bucket: this.configService.get<string>('storage.bucket'),
|
|
||||||
Key: key,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
|
await this.s3Client.send(
|
||||||
|
new DeleteObjectCommand({
|
||||||
|
Bucket: this.configService.get<string>('storage.bucket'),
|
||||||
|
Key: key,
|
||||||
|
})
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
const filePath = __dirname + '/../' + resume.basics.photo.url.replace('/api/', '');
|
||||||
|
if (fs.existsSync(filePath)) {
|
||||||
|
fs.unlink(filePath, (err) => {
|
||||||
|
if (err) {
|
||||||
|
console.log(err);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
const updatedResume = set(resume, 'basics.photo.url', '');
|
const updatedResume = set(resume, 'basics.photo.url', '');
|
||||||
|
|
||||||
return this.resumeRepository.save<Resume>(updatedResume);
|
return this.resumeRepository.save<Resume>(updatedResume);
|
||||||
|
|||||||
@ -23,7 +23,7 @@ export class UsersService {
|
|||||||
) {}
|
) {}
|
||||||
|
|
||||||
async findById(id: number): Promise<User> {
|
async findById(id: number): Promise<User> {
|
||||||
const user = await this.userRepository.findOne({ id });
|
const user = await this.userRepository.findOne({ where: { id } });
|
||||||
|
|
||||||
if (user) {
|
if (user) {
|
||||||
return user;
|
return user;
|
||||||
@ -33,7 +33,7 @@ export class UsersService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async findByEmail(email: string): Promise<User> {
|
async findByEmail(email: string): Promise<User> {
|
||||||
const user = await this.userRepository.findOne({ email });
|
const user = await this.userRepository.findOne({ where: { email } });
|
||||||
|
|
||||||
if (user) {
|
if (user) {
|
||||||
return user;
|
return user;
|
||||||
@ -55,7 +55,7 @@ export class UsersService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async findByResetToken(resetToken: string): Promise<User> {
|
async findByResetToken(resetToken: string): Promise<User> {
|
||||||
const user = await this.userRepository.findOne({ resetToken });
|
const user = await this.userRepository.findOne({ where: { resetToken } });
|
||||||
|
|
||||||
if (user) {
|
if (user) {
|
||||||
return user;
|
return user;
|
||||||
|
|||||||
Reference in New Issue
Block a user