Compare commits

...

76 Commits

Author SHA1 Message Date
9ff1ffb0b9 Merge pull request #988 from AmruthPillai/feature/remove-docs
Feature Release: v3.6.3
2022-08-28 11:51:08 +02:00
79d3ef1306 docs(docs): 🗑️ remove docs app, include more i18n locales 2022-08-28 11:16:08 +02:00
f4a12285f5 Merge branch 'main' of github.com:AmruthPillai/Reactive-Resume 2022-08-28 10:57:49 +02:00
120ad827ad Merge pull request #986 from AmruthPillai/i18n_main
New Crowdin updates
2022-08-28 10:57:40 +02:00
a129b2033f New translations builder.json (Bengali) 2022-08-28 10:56:29 +02:00
372e508936 New translations builder.json (Hindi) 2022-08-28 10:56:28 +02:00
ce8ada2621 New translations builder.json (Malayalam) 2022-08-28 10:56:27 +02:00
d0563d2ec9 New translations builder.json (Kannada) 2022-08-28 10:56:26 +02:00
dacd4e311c New translations builder.json (Odia) 2022-08-28 10:56:25 +02:00
d6d016ba5d New translations builder.json (Finnish) 2022-08-28 10:56:12 +02:00
407ac990ac New translations builder.json (French) 2022-08-28 10:56:12 +02:00
895e9845fc New translations builder.json (Spanish) 2022-08-28 10:56:11 +02:00
859a44197d New translations builder.json (Arabic) 2022-08-28 10:56:10 +02:00
0b80f33d46 New translations builder.json (Czech) 2022-08-28 10:56:09 +02:00
f246a17038 New translations builder.json (Danish) 2022-08-28 10:56:08 +02:00
10c13d54be New translations builder.json (German) 2022-08-28 10:56:07 +02:00
66316b740b New translations builder.json (Greek) 2022-08-28 10:56:06 +02:00
ae94748abe New translations builder.json (Hebrew) 2022-08-28 10:56:05 +02:00
fe11be60d3 New translations builder.json (Portuguese) 2022-08-28 10:56:04 +02:00
1d3e47adb2 New translations builder.json (Italian) 2022-08-28 10:56:03 +02:00
fdd5f373c4 New translations builder.json (Dutch) 2022-08-28 10:56:02 +02:00
0f99d6cdfb New translations builder.json (Polish) 2022-08-28 10:56:01 +02:00
742865a66a New translations builder.json (Russian) 2022-08-28 10:56:00 +02:00
12dcf04981 New translations builder.json (Swedish) 2022-08-28 10:55:58 +02:00
c0d76eaf0e New translations builder.json (Chinese Simplified) 2022-08-28 10:55:57 +02:00
2f430a1d07 New translations builder.json (Vietnamese) 2022-08-28 10:55:57 +02:00
576b942027 New translations builder.json (Indonesian) 2022-08-28 10:55:56 +02:00
7df777ad0c New translations builder.json (Persian) 2022-08-28 10:55:55 +02:00
e5e30f290a New translations builder.json (Hungarian) 2022-08-28 10:55:54 +02:00
dcb476c28b New translations builder.json (Tamil) 2022-08-28 10:55:53 +02:00
e09f281461 New translations landing.json (Norwegian) 2022-08-28 10:55:52 +02:00
293f008f0a New translations landing.json (Japanese) 2022-08-28 10:55:51 +02:00
f9cd1c779f New translations landing.json (Catalan) 2022-08-28 10:55:51 +02:00
d931590374 New translations landing.json (Romanian) 2022-08-28 10:55:50 +02:00
907ffacca0 New translations dashboard.json (Ukrainian) 2022-08-28 10:55:49 +02:00
a263d54319 New translations dashboard.json (Serbian (Cyrillic)) 2022-08-28 10:55:48 +02:00
0d478e1286 New translations dashboard.json (Japanese) 2022-08-28 10:55:47 +02:00
08997a1728 New translations dashboard.json (Catalan) 2022-08-28 10:55:46 +02:00
688bb11844 New translations common.json (Ukrainian) 2022-08-28 10:55:45 +02:00
0bf4e0b2ae New translations common.json (Serbian (Cyrillic)) 2022-08-28 10:55:44 +02:00
60bbfb6703 New translations common.json (Norwegian) 2022-08-28 10:55:43 +02:00
706307b073 New translations common.json (Japanese) 2022-08-28 10:55:42 +02:00
3be18636ff New translations common.json (Catalan) 2022-08-28 10:55:42 +02:00
b2ee2f9d09 New translations common.json (Romanian) 2022-08-28 10:55:41 +02:00
fe54a2388e New translations dashboard.json (Romanian) 2022-08-28 10:55:40 +02:00
be170dd985 New translations landing.json (Ukrainian) 2022-08-28 10:55:39 +02:00
7fd26ad2c3 New translations landing.json (Serbian (Cyrillic)) 2022-08-28 10:55:38 +02:00
ec30aff4d1 New translations modals.json (Romanian) 2022-08-28 10:55:37 +02:00
0b3023989b New translations modals.json (Khmer) 2022-08-28 10:55:37 +02:00
3b96348183 New translations modals.json (Nepali) 2022-08-28 10:55:34 +02:00
30080b23cd New translations landing.json (Nepali) 2022-08-28 10:55:33 +02:00
b3ba1e5b56 New translations dashboard.json (Nepali) 2022-08-28 10:55:32 +02:00
bf72b557ca New translations builder.json (Nepali) 2022-08-28 10:55:31 +02:00
344fcb1078 New translations common.json (Nepali) 2022-08-28 10:55:30 +02:00
ddd71567c1 New translations modals.json (Ukrainian) 2022-08-28 10:55:29 +02:00
adc679a6e5 New translations modals.json (Serbian (Cyrillic)) 2022-08-28 10:55:29 +02:00
8f49536119 New translations modals.json (Norwegian) 2022-08-28 10:55:28 +02:00
750fedbd74 New translations modals.json (Japanese) 2022-08-28 10:55:27 +02:00
cd59ea7e9b New translations modals.json (Catalan) 2022-08-28 10:55:26 +02:00
5c1b44ddea New translations builder.json (Japanese) 2022-08-28 10:55:25 +02:00
eb6450a9de New translations builder.json (Norwegian) 2022-08-28 10:55:24 +02:00
0b620f41fc New translations builder.json (Ukrainian) 2022-08-28 10:55:24 +02:00
64e0e677d7 New translations builder.json (Bulgarian) 2022-08-28 10:55:23 +02:00
19ae1cf036 New translations builder.json (Turkish) 2022-08-28 10:55:22 +02:00
c221cef77f New translations builder.json (Khmer) 2022-08-28 10:55:21 +02:00
77e3dc2b16 New translations builder.json (Catalan) 2022-08-28 10:55:20 +02:00
9c9368acd5 New translations builder.json (Romanian) 2022-08-28 10:55:19 +02:00
22b91d3f94 feat(docker): add arm64 support 2022-08-28 09:57:15 +02:00
d844092d0f fix(client): 🎨 add style to make list item appear after bullet icon 2022-08-28 09:57:00 +02:00
b3e118fb8b New translations builder.json (Serbian (Cyrillic)) 2022-08-27 12:11:42 +02:00
fe37eb2791 fix(client): 💄 add overflow-y-scroll to left/right sidebar navigation 2022-08-26 08:06:47 +02:00
7902f67f4f feat: update app version to 3.6.2 2022-08-26 00:00:18 +02:00
57dd110187 Merge pull request #981 from AmruthPillai/i18n_main
New Crowdin updates
2022-08-25 10:06:11 +02:00
829375e87a New translations landing.json (Khmer) 2022-08-24 14:27:42 +02:00
0a15b4ebc9 New translations dashboard.json (Khmer) 2022-08-24 14:27:41 +02:00
2bff3fc20b New translations common.json (Khmer) 2022-08-24 14:27:40 +02:00
195 changed files with 6022 additions and 8518 deletions

View File

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

View File

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

View File

@ -1,15 +1,14 @@
{
"root": true,
"ignorePatterns": ["/app"],
"parser": "@typescript-eslint/parser",
"extends": ["plugin:@typescript-eslint/recommended", "plugin:prettier/recommended"],
"extends": ["plugin:@typescript-eslint/recommended"],
"plugins": ["@typescript-eslint/eslint-plugin", "simple-import-sort", "unused-imports"],
"rules": {
// Unused Imports
// ESLint
"no-unused-vars": "off",
// Simple Import Sort
"simple-import-sort/imports": "error",
"simple-import-sort/exports": "error",
// Unused Imports
"unused-imports/no-unused-imports": "error",
"unused-imports/no-unused-vars": [
"warn",
{
@ -19,7 +18,11 @@
"argsIgnorePattern": "^_"
}
],
"unused-imports/no-unused-imports": "error",
// Simple Import Sort
"simple-import-sort/imports": "error",
"simple-import-sort/exports": "error",
// TypeScript ESLint
"@typescript-eslint/no-unused-vars": "off",
"@typescript-eslint/no-explicit-any": "off",

View File

@ -23,6 +23,15 @@ jobs:
name: Get Version
run: echo ::set-output name=tag::${GITHUB_REF#refs/*/}
- name: Set up QEMU
uses: docker/setup-qemu-action@v2.0.0
- id: buildx
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2.0.0
with:
install: true
- name: Login to Docker Hub
uses: docker/login-action@v2.0.0
with:
@ -42,6 +51,7 @@ jobs:
context: .
push: true
file: client/Dockerfile
platforms: linux/amd64,linux/arm64
tags: |
amruthpillai/reactive-resume:client-latest
amruthpillai/reactive-resume:client-${{ steps.version.outputs.tag }}
@ -66,6 +76,15 @@ jobs:
name: Get Version
run: echo ::set-output name=tag::${GITHUB_REF#refs/*/}
- name: Set up QEMU
uses: docker/setup-qemu-action@v2.0.0
- id: buildx
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2.0.0
with:
install: true
- name: Login to Docker Hub
uses: docker/login-action@v2.0.0
with:
@ -85,6 +104,7 @@ jobs:
context: .
push: true
file: server/Dockerfile
platforms: linux/amd64,linux/arm64
tags: |
amruthpillai/reactive-resume:server-latest
amruthpillai/reactive-resume:server-${{ steps.version.outputs.tag }}

View File

@ -17,10 +17,6 @@ jobs:
with:
fetch-depth: 2
- id: vars
name: Get Short SHA
run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)"
- name: Set up QEMU
uses: docker/setup-qemu-action@v2.0.0
@ -30,9 +26,9 @@ jobs:
with:
install: true
- id: version
name: Get Version
run: echo ::set-output name=tag::${GITHUB_REF#refs/*/}
- id: variables
name: Get Short SHA
run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)"
- name: Build Client Image
uses: docker/build-push-action@v3.1.1
@ -43,9 +39,9 @@ jobs:
platforms: linux/amd64,linux/arm64
tags: |
amruthpillai/reactive-resume:client-latest
amruthpillai/reactive-resume:client-${{ steps.vars.outputs.sha_short }}
amruthpillai/reactive-resume:client-${{ steps.variables.outputs.sha_short }}
ghcr.io/amruthpillai/reactive-resume:client-latest
ghcr.io/amruthpillai/reactive-resume:client-${{ steps.vars.outputs.sha_short }}
ghcr.io/amruthpillai/reactive-resume:client-${{ steps.variables.outputs.sha_short }}
server:
name: Server
@ -70,9 +66,9 @@ jobs:
with:
install: true
- id: version
name: Get Version
run: echo ::set-output name=tag::${GITHUB_REF#refs/*/}
- id: variables
name: Get Short SHA
run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)"
- name: Build Server Image
uses: docker/build-push-action@v3.1.1
@ -83,6 +79,6 @@ jobs:
platforms: linux/amd64,linux/arm64
tags: |
amruthpillai/reactive-resume:server-latest
amruthpillai/reactive-resume:server-${{ steps.vars.outputs.sha_short }}
amruthpillai/reactive-resume:server-${{ steps.variables.outputs.sha_short }}
ghcr.io/amruthpillai/reactive-resume:server-latest
ghcr.io/amruthpillai/reactive-resume:server-${{ steps.vars.outputs.sha_short }}
ghcr.io/amruthpillai/reactive-resume:server-${{ steps.variables.outputs.sha_short }}

View File

@ -1,3 +1,6 @@
# Android App
/app
# Schema
schema/dist
@ -23,11 +26,4 @@ pnpm-lock.yaml
# Docker
Dockerfile
.dockerignore
docker-compose.yml
# Android App
/app
# Docs
docs/build
docs/.docusaurus
docker-compose.yml

26
.vscode/launch.json vendored
View File

@ -1,26 +0,0 @@
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"name": "Debug: Server",
"port": 9229,
"request": "attach",
"restart": true,
"protocol": "inspector",
"stopOnEntry": false
},
{
"name": "Debug: Client",
"type": "node-terminal",
"request": "launch",
"command": "pnpm run dev:client",
"console": "integratedTerminal",
"serverReadyAction": {
"action": "debugWithChrome",
"pattern": "started server on .+, url: (https?://.+)",
"uriFormat": "%s"
}
}
]
}

View File

@ -1,323 +0,0 @@
# Changelog
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
### [3.5.3](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.5.2...v3.5.3) (2022-08-11)
### [3.5.2](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.5.1...v3.5.2) (2022-08-04)
### Features
* **client:** :dizzy: add Finnish language support ([16d19eb](https://github.com/AmruthPillai/Reactive-Resume/commit/16d19eb70f64f768304f352d0f87102d328b57c1))
### [3.5.1](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.5.0...v3.5.1) (2022-07-30)
### Features
* **client:** :sparkles: ask for confirmation when resetting a resume ([4d43f6a](https://github.com/AmruthPillai/Reactive-Resume/commit/4d43f6a6427198e62e9fcb995f1a28c0ee4de71e))
* **docker:** :zap: remove ports from postgres docker instance ([07c91e9](https://github.com/AmruthPillai/Reactive-Resume/commit/07c91e9ac21e8ef120d08ab92363d8e48a55aaba))
### Bug Fixes
* **server:** :zap: don't initialize sendgrid if the apikey is empty ([05d3f1f](https://github.com/AmruthPillai/Reactive-Resume/commit/05d3f1f06fbffd899269a5c4dea3c52cf408125f))
## [3.5.0](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.4.8...v3.5.0) (2022-07-30)
### Bug Fixes
* **client:** :bug: attempt to fix the one-off date issue ([5197f95](https://github.com/AmruthPillai/Reactive-Resume/commit/5197f954c0baed3daf1c7e2c79b607354ef42024))
* **client:** :bug: fix mui rendering of utc dates ([977fa72](https://github.com/AmruthPillai/Reactive-Resume/commit/977fa72ddeeeebf7463d43a820e85f783489a4dc))
### [3.4.8](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.4.7...v3.4.8) (2022-07-13)
### Features
* **google:** add toast to display error message from google ([25cf594](https://github.com/AmruthPillai/Reactive-Resume/commit/25cf594eb948e1c2d6157028ee1fff2799df5f92))
### [3.4.7](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.4.6...v3.4.7) (2022-06-30)
### Bug Fixes
* **mui:** update mui datepickers to newer package ([bfb48e3](https://github.com/AmruthPillai/Reactive-Resume/commit/bfb48e3aa7e0575922841522edc1d38544d1884f))
### [3.4.6](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.4.5...v3.4.6) (2022-06-19)
## [3.6.0](https://github.com/dvd741-a/Reactive-Resume/compare/v3.3.4...v3.6.0) (2022-06-05)
### Features
* **all:** upgrade to v3.4.0 ([87d381f](https://github.com/dvd741-a/Reactive-Resume/commit/87d381fe8eab9ca4624df5de6e8b9ab18a072b67))
* **i18n:** add Hungrarian (Magyar) language ([35fe4e2](https://github.com/dvd741-a/Reactive-Resume/commit/35fe4e27744b6f7325b25db2cf3b626ed8598623))
### Bug Fixes
* **i18n:** fix language mismatch in exported pdf ([62fd63e](https://github.com/dvd741-a/Reactive-Resume/commit/62fd63e41fe10fba843a40fb08191f5944f2b2fc))
* **typeorm:** update typeorm to latest 0.2.x for secpatch ([5bdb92b](https://github.com/dvd741-a/Reactive-Resume/commit/5bdb92b1cff9e56879f9bbf31801d6554a00a8d5))
## [3.5.0](https://github.com/dvd741-a/Reactive-Resume/compare/v3.3.4...v3.5.0) (2022-06-05)
### Features
* **all:** upgrade to v3.4.0 ([87d381f](https://github.com/dvd741-a/Reactive-Resume/commit/87d381fe8eab9ca4624df5de6e8b9ab18a072b67))
* **i18n:** add Hungrarian (Magyar) language ([35fe4e2](https://github.com/dvd741-a/Reactive-Resume/commit/35fe4e27744b6f7325b25db2cf3b626ed8598623))
### Bug Fixes
* **i18n:** fix language mismatch in exported pdf ([62fd63e](https://github.com/dvd741-a/Reactive-Resume/commit/62fd63e41fe10fba843a40fb08191f5944f2b2fc))
* **typeorm:** update typeorm to latest 0.2.x for secpatch ([5bdb92b](https://github.com/dvd741-a/Reactive-Resume/commit/5bdb92b1cff9e56879f9bbf31801d6554a00a8d5))
### [3.4.5](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.4.4...v3.4.5) (2022-05-24)
### Bug Fixes
* **i18n:** fix language mismatch in exported pdf ([62fd63e](https://github.com/AmruthPillai/Reactive-Resume/commit/62fd63e41fe10fba843a40fb08191f5944f2b2fc))
## [3.4.4](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.4.3...v3.4.4) (2022-05-02)
### Features
* **i18n:** add Hungrarian (Magyar) language ([35fe4e2](https://github.com/AmruthPillai/Reactive-Resume/commit/35fe4e27744b6f7325b25db2cf3b626ed8598623))
### [3.4.3](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.4.2...v3.4.3) (2022-05-01)
### [3.4.2](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.4.1...v3.4.2) (2022-04-30)
### [3.4.1](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.4.0...v3.4.1) (2022-04-30)
### Bug Fixes
* **typeorm:** update typeorm to latest 0.2.x for secpatch ([5bdb92b](https://github.com/AmruthPillai/Reactive-Resume/commit/5bdb92b1cff9e56879f9bbf31801d6554a00a8d5))
### [3.4.0](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.3.3...v3.4.0) (2022-04-30)
### [3.3.4](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.3.3...v3.3.4) (2022-04-09)
### [3.3.3](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.3.2...v3.3.3) (2022-04-09)
### Features
* **profile:** add XING profile icon ([1e59f73](https://github.com/AmruthPillai/Reactive-Resume/commit/1e59f73f79a91d0264c0d2108906ee89d4eb27f8)), closes [#821](https://github.com/AmruthPillai/Reactive-Resume/issues/821)
* **s3:** implement non-ephemeral storage through S3/DO Spaces ([feb911a](https://github.com/AmruthPillai/Reactive-Resume/commit/feb911aea06bacf58ea933d2803a2a89fe36e57b))
### [3.3.2](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.3.1...v3.3.2) (2022-04-08)
### Bug Fixes
* **types/react:** downgrade to <18 ([fc77b54](https://github.com/AmruthPillai/Reactive-Resume/commit/fc77b548d8d61530b2d158ff83f088bed12d5080))
### [3.3.1](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.3.0...v3.3.1) (2022-04-08)
## [3.3.0](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.2.11...v3.3.0) (2022-04-08)
### Features
* **upgrade:** changes to code to support new template ([1df7810](https://github.com/AmruthPillai/Reactive-Resume/commit/1df78100ca0667ce9b7834cf2c25384eb21c67c2))
### What's Changed
* New Crowdin updates by @AmruthPillai in https://github.com/AmruthPillai/Reactive-Resume/pull/791
* Bump org.jetbrains.kotlin.android from 1.6.10 to 1.6.20 in /app by @dependabot in https://github.com/AmruthPillai/Reactive-Resume/pull/812
* New Crowdin updates by @AmruthPillai in https://github.com/AmruthPillai/Reactive-Resume/pull/806
* A new template - Leafish by @klejejs in https://github.com/AmruthPillai/Reactive-Resume/pull/811
* Automatic multi-platform Docker image build by @schklom in https://github.com/AmruthPillai/Reactive-Resume/pull/817
### New Contributors
* @klejejs made their first contribution in https://github.com/AmruthPillai/Reactive-Resume/pull/811
* @schklom made their first contribution in https://github.com/AmruthPillai/Reactive-Resume/pull/817
### [3.2.11](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.2.10...v3.2.11) (2022-03-28)
### [3.2.10](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.2.9...v3.2.10) (2022-03-24)
### Features
* **i18n:** add portuguese (pt) language to i18n locales ([7f1c82c](https://github.com/AmruthPillai/Reactive-Resume/commit/7f1c82cd9185ebb44486a16132eb44d5c2fb747a))
### [3.2.9](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.2.8...v3.2.9) (2022-03-21)
### Features
* **i18n:** add nl and ru i18n locales to app ([03cbf22](https://github.com/AmruthPillai/Reactive-Resume/commit/03cbf22c9bee96cac8f228830b67b44529b7ecee))
### [3.2.8](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.2.7...v3.2.8) (2022-03-18)
### Features
* **client/theme:** add theme switcher to landing page ([8f5632c](https://github.com/AmruthPillai/Reactive-Resume/commit/8f5632c5ad0bc8a4b3028c2806365717fedd78c9))
* **flags:** introduce flags, disable_user_signups ([b6267d0](https://github.com/AmruthPillai/Reactive-Resume/commit/b6267d07ba2dcaed0da3946d136a0a9a01c441d5)), closes [#698](https://github.com/AmruthPillai/Reactive-Resume/issues/698)
* **i18n:** add Vietnamese language to i18n locales ([4390bcc](https://github.com/AmruthPillai/Reactive-Resume/commit/4390bccfb9764f2d2730ec3a124b7befb6792e9a))
### Bug Fixes
* **client/create-rename-slug:** fix slug accepting apostrophes and other special characters ([1facd2a](https://github.com/AmruthPillai/Reactive-Resume/commit/1facd2ad111cd9d990c808b3956d3915e8711acd)), closes [#706](https://github.com/AmruthPillai/Reactive-Resume/issues/706)
* **disable_user_signups:** hide create account link under flag ([80acfe9](https://github.com/AmruthPillai/Reactive-Resume/commit/80acfe97c74bfa05b719285b19144144f3f7c5ba))
### [3.2.7](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.2.6...v3.2.7) (2022-03-18)
### Features
* **i18n:** add Malayalam (മലയ) language to i18n locales ([3a2e62b](https://github.com/AmruthPillai/Reactive-Resume/commit/3a2e62be4c9acc14f17277c060cc9ea2c417a478))
### Bug Fixes
* **printer/i18n:** fix dates not showing up in resume language when printing ([90321e1](https://github.com/AmruthPillai/Reactive-Resume/commit/90321e1284409ab9442883c04a9b4c591d36f95d)), closes [#729](https://github.com/AmruthPillai/Reactive-Resume/issues/729)
### [3.2.6](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.2.5...v3.2.6) (2022-03-17)
### Features
* **client/auth/google:** disable google login/registration if GOOGLE_CLIENT_ID is not in ENV ([7f0ee40](https://github.com/AmruthPillai/Reactive-Resume/commit/7f0ee40af4acc7eb41514406ecee3218ace9e891)), closes [#724](https://github.com/AmruthPillai/Reactive-Resume/issues/724)
* **i18n:** add arabic language to i18n locale ([39fa6da](https://github.com/AmruthPillai/Reactive-Resume/commit/39fa6da5dd77ce2e12e81530fa18c2eac722c1f2))
### Bug Fixes
* **i18n:** add missing languages to dayjs date wrapper locales ([9e6dafc](https://github.com/AmruthPillai/Reactive-Resume/commit/9e6dafc8cada5c01559894905996b81004bedaec)), closes [#719](https://github.com/AmruthPillai/Reactive-Resume/issues/719)
* **json-export:** add mimeType and charset to JSON export ([b3ff780](https://github.com/AmruthPillai/Reactive-Resume/commit/b3ff7805cd856a52900d9acef0554867d8ce0b01)), closes [#726](https://github.com/AmruthPillai/Reactive-Resume/issues/726)
* **linkedin:** fix skill modal crashing when importing from linkedin ([a02b85b](https://github.com/AmruthPillai/Reactive-Resume/commit/a02b85b4bb1c4a1499aacddeac7bc59bcb1f7adb)), closes [#718](https://github.com/AmruthPillai/Reactive-Resume/issues/718)
### [3.2.5](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.2.4...v3.2.5) (2022-03-16)
### Features
* **i18n:** add danish, polish and turkish locales to i18n ([97e9432](https://github.com/AmruthPillai/Reactive-Resume/commit/97e9432d6bd887e666a3443fbfde9a92cef53965))
### Bug Fixes
* **client/templates:** fix text veering off of artboard in most templates ([b2f1fb3](https://github.com/AmruthPillai/Reactive-Resume/commit/b2f1fb3a5502988a49c5cd3e496d9d165f5c1792)), closes [#702](https://github.com/AmruthPillai/Reactive-Resume/issues/702)
### [3.2.4](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.2.3...v3.2.4) (2022-03-14)
### [3.2.3](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.2.2...v3.2.3) (2022-03-14)
### Features
* **client/import:** implement import json from reactive resume v2 ([42408ce](https://github.com/AmruthPillai/Reactive-Resume/commit/42408ce8c5ce55904854f9f6e0481889a01edfb8))
### [3.2.2](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.2.1...v3.2.2) (2022-03-14)
### Bug Fixes
* **client/skills:** make skill level optional ([02e396b](https://github.com/AmruthPillai/Reactive-Resume/commit/02e396bfdbf07ae75661f1e7e4e55060cacee7d0))
### [3.2.1](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.2.0...v3.2.1) (2022-03-14)
### Features
* **i18n:** add Chinese (Simplified) language to locales ([549363b](https://github.com/AmruthPillai/Reactive-Resume/commit/549363bbe5bdd781699dea9506bd4baedf5740d1))
### Bug Fixes
* **client/basics:** fix issue with overlapping photo filters on safari/webkit/iOS ([e6bda68](https://github.com/AmruthPillai/Reactive-Resume/commit/e6bda688ac3ba1c04e82721add92e755ea5386c3))
* **docker:** fix docker-compose for production grade deployments ([57f7edc](https://github.com/AmruthPillai/Reactive-Resume/commit/57f7edc13432a038c907afc6cb74b5182a9b2333))
## [3.2.0](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.1.4...v3.2.0) (2022-03-14)
### Features
* **i18n:** add Bengali, Italian and other languages ([21931bc](https://github.com/AmruthPillai/Reactive-Resume/commit/21931bc324b5e2440baaaaa2e52a93b4f2c766f8))
### Bug Fixes
* **app:** fix issue with external link redirection in android app ([b18120b](https://github.com/AmruthPillai/Reactive-Resume/commit/b18120b3f7223981e28c0441a6b7725787186edb))
* **client:** fix issue with react-query cache ([ed75a85](https://github.com/AmruthPillai/Reactive-Resume/commit/ed75a858279047dfd43152e041c1a09a625417f5))
### [3.1.4](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.1.3...v3.1.4) (2022-03-12)
### Bug Fixes
* **client:** exported pdf did not contain "Present" keyword with translations ([cf670af](https://github.com/AmruthPillai/Reactive-Resume/commit/cf670af4035dc9b462cf5b1aad06ca089cf1d40c))
* **client:** fix issues raised through lgtm alerts ([dfccb31](https://github.com/AmruthPillai/Reactive-Resume/commit/dfccb3130f889934d31196226be3d33e772f323b))
### [3.1.3](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.1.2...v3.1.3) (2022-03-12)
### Bug Fixes
* **server:** reform url for pdf generation and download ([6d55f91](https://github.com/AmruthPillai/Reactive-Resume/commit/6d55f917eab3cb2f5f3a90c5a18f03b625d60021)), closes [#661](https://github.com/AmruthPillai/Reactive-Resume/issues/661)
### [3.1.2](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.1.1...v3.1.2) (2022-03-12)
### CI
* **docker:**: include traefik routing and proxy to ensure server connections pass in local ([11cb066](https://github.com/AmruthPillai/Reactive-Resume/commit/11cb066573c6917857b79c028b97fcda1acaf90a))
### [3.1.1](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.1.0...v3.1.1) (2022-03-12)
### Features
* **client:** add product hunt announcement banner ([b515fc3](https://github.com/AmruthPillai/Reactive-Resume/commit/b515fc36e7f282db92e8eb509b6c5004a944fa95))
## [3.1.0](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.0.0...v3.1.0) (2022-03-12)
### Features
* **client:** add "spanish (es)" language to i18n locales ([bf167f8](https://github.com/AmruthPillai/Reactive-Resume/commit/bf167f81a3659677dada55856f5eaf0fc469e697))
* **client:** add mm/yyyy date option to date format options ([82bf44d](https://github.com/AmruthPillai/Reactive-Resume/commit/82bf44daa24422156779e9b38d3dc695176eaa09)), closes [#656](https://github.com/AmruthPillai/Reactive-Resume/issues/656)
* **client:** add sitemap generation to next app ([2cbc582](https://github.com/AmruthPillai/Reactive-Resume/commit/2cbc582a12b72b3012246022d4b518ed657d4c08))
* **client:** disable "Toggle Page Orientation" when there's only one page on the artboard ([01da1a0](https://github.com/AmruthPillai/Reactive-Resume/commit/01da1a06b802f1063a41d7a9a682e76b1daf9461)), closes [#655](https://github.com/AmruthPillai/Reactive-Resume/issues/655)
### Bug Fixes
* **client:** remove hard-coded "keywords:" in certain templates ([dda42b4](https://github.com/AmruthPillai/Reactive-Resume/commit/dda42b4c6b3bc359ac4f2bb91ca8118ddc84ec07)), closes [#650](https://github.com/AmruthPillai/Reactive-Resume/issues/650)
* **client:** show "present" string if end date is not entered, also add to i18n locales ([b5cd6c4](https://github.com/AmruthPillai/Reactive-Resume/commit/b5cd6c412b5b6b6ca7bb43c3801762de451f06b4)), closes [#653](https://github.com/AmruthPillai/Reactive-Resume/issues/653)
* **server:** photo uploads not working, fix save location and returned url ([799f208](https://github.com/AmruthPillai/Reactive-Resume/commit/799f20823e6d97a1ff0ba2c45c61d56304d0fa58)), closes [#658](https://github.com/AmruthPillai/Reactive-Resume/issues/658)
## [3.0.0](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.0.0-beta.6...v3.0.0) (2022-03-11)
### Features
* **lang**: add German, Kannada and Tamil languages to the app ([3a524f9](https://github.com/AmruthPillai/Reactive-Resume/commit/3a524f9c9c7a0e446491265b2242ad3dfeae188c))
* **docs:** add docusaurus workspace, initial setup of docs ([dc4aa0b](https://github.com/AmruthPillai/Reactive-Resume/commit/dc4aa0b496096bd59c45426bfcea6ba7db5f5c01))
## [3.0.0-beta.6](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.0.0-beta.5...v3.0.0-beta.6) (2022-03-11)
### Features
* **lang:** add language switcher on the landing page, in the footer ([8bc7d25](https://github.com/AmruthPillai/Reactive-Resume/commit/8bc7d2599ef6af7a07bfbe886c43844152b0d9f7))
### Bug Fixes
* **i18n:** add missing translation keys, update lang/locale logic ([7d8828a](https://github.com/AmruthPillai/Reactive-Resume/commit/7d8828a358d653bb162877a64c75028eb82678cd))
* **webkit:** fix issue with webkit not supporting .at() ([2654cba](https://github.com/AmruthPillai/Reactive-Resume/commit/2654cba039eb73d33257c36fa90a52cabc9fda96))
## [3.0.0-beta.5](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.0.0-beta.4...v3.0.0-beta.5) (2022-03-10)
### Bug Fixes
* **app:** fix issue with using swipelayout ([972e8b1](https://github.com/AmruthPillai/Reactive-Resume/commit/972e8b1bcf9ad44d8915bf23d189711672937bc0))

View File

@ -18,7 +18,7 @@ You have complete control over what goes into your resume, how it looks, what co
## Table of Contents
- [Reactive Resume](#reactive-resume)
- [Go to App](https://rxresu.me) | [Docs](https://docs.rxresu.me)
- [Go to App | [Docs](https://docs.rxresu.me)](#go-to-app--docs)
- [Table of Contents](#table-of-contents)
- [Features](#features)
- [Languages](#languages)

View File

@ -1,9 +1,20 @@
{
"extends": ["../.eslintrc.json", "next/core-web-vitals"],
"extends": ["../.eslintrc.json", "next/core-web-vitals", "plugin:tailwindcss/recommended"],
"ignorePatterns": [".next", "__ENV.js"],
"settings": {
"next": {
"rootDir": "client"
}
},
"rules": {
// Next.js
"@next/next/no-img-element": "off",
"@next/next/no-sync-scripts": "off",
"@next/next/no-html-link-for-pages": ["error", "pages"]
// React Hooks
"react-hooks/exhaustive-deps": "off",
// Tailwind CSS
"tailwindcss/no-custom-classname": ["warn", { "whitelist": ["preview-mode", "printer-mode", "markdown"] }]
}
}

View File

@ -5,6 +5,8 @@ import {
FilterCenterFocus,
InsertPageBreak,
Link,
RedoOutlined,
UndoOutlined,
ViewSidebar,
ZoomIn,
ZoomOut,
@ -16,6 +18,7 @@ import { useTranslation } from 'next-i18next';
import toast from 'react-hot-toast';
import { useMutation } from 'react-query';
import { ReactZoomPanPinchRef } from 'react-zoom-pan-pinch';
import { ActionCreators } from 'redux-undo';
import { ServerError } from '@/services/axios';
import { printResumeAsPdf, PrintResumeAsPdfParams } from '@/services/printer';
@ -31,14 +34,18 @@ const ArtboardController: React.FC<ReactZoomPanPinchRef> = ({ zoomIn, zoomOut, c
const theme = useTheme();
const dispatch = useAppDispatch();
const resume = useAppSelector((state) => state.resume);
const isDesktop = useMediaQuery(theme.breakpoints.up('sm'));
const pages = useAppSelector((state) => state.resume.metadata.layout);
const { past, present: resume, future } = useAppSelector((state) => state.resume);
const pages = get(resume, 'metadata.layout');
const { left, right } = useAppSelector((state) => state.build.sidebar);
const orientation = useAppSelector((state) => state.build.page.orientation);
const { mutateAsync, isLoading } = useMutation<string, ServerError, PrintResumeAsPdfParams>(printResumeAsPdf);
const handleUndo = () => dispatch(ActionCreators.undo());
const handleRedo = () => dispatch(ActionCreators.redo());
const handleTogglePageBreakLine = () => dispatch(togglePageBreakLine());
const handleTogglePageOrientation = () => dispatch(togglePageOrientation());
@ -75,6 +82,20 @@ const ArtboardController: React.FC<ReactZoomPanPinchRef> = ({ zoomIn, zoomOut, c
})}
>
<div className={styles.controller}>
<Tooltip arrow placement="top" title={t<string>('builder.controller.tooltip.undo')}>
<ButtonBase onClick={handleUndo} className={clsx({ 'pointer-events-none opacity-50': past.length < 2 })}>
<UndoOutlined fontSize="medium" />
</ButtonBase>
</Tooltip>
<Tooltip arrow placement="top" title={t<string>('builder.controller.tooltip.redo')}>
<ButtonBase onClick={handleRedo} className={clsx({ 'pointer-events-none opacity-50': future.length === 0 })}>
<RedoOutlined fontSize="medium" />
</ButtonBase>
</Tooltip>
<Divider />
<Tooltip arrow placement="top" title={t<string>('builder.controller.tooltip.zoom-in')}>
<ButtonBase onClick={() => zoomIn(0.25)}>
<ZoomIn fontSize="medium" />
@ -97,17 +118,18 @@ const ArtboardController: React.FC<ReactZoomPanPinchRef> = ({ zoomIn, zoomOut, c
{isDesktop && (
<>
{pages.length > 1 && (
<Tooltip arrow placement="top" title={t<string>('builder.controller.tooltip.toggle-orientation')}>
<ButtonBase onClick={handleTogglePageOrientation}>
{orientation === 'vertical' ? (
<AlignHorizontalCenter fontSize="medium" />
) : (
<AlignVerticalCenter fontSize="medium" />
)}
</ButtonBase>
</Tooltip>
)}
<Tooltip arrow placement="top" title={t<string>('builder.controller.tooltip.toggle-orientation')}>
<ButtonBase
onClick={handleTogglePageOrientation}
className={clsx({ 'pointer-events-none opacity-50': pages.length === 1 })}
>
{orientation === 'vertical' ? (
<AlignHorizontalCenter fontSize="medium" />
) : (
<AlignVerticalCenter fontSize="medium" />
)}
</ButtonBase>
</Tooltip>
<Tooltip arrow placement="top" title={t<string>('builder.controller.tooltip.toggle-page-break-line')}>
<ButtonBase onClick={handleTogglePageBreakLine}>

View File

@ -13,7 +13,7 @@ import Page from './Page';
const Center = () => {
const orientation = useAppSelector((state) => state.build.page.orientation);
const resume = useAppSelector((state) => state.resume);
const resume = useAppSelector((state) => state.resume.present);
const layout: string[][][] = get(resume, 'metadata.layout');
if (isEmpty(resume)) return null;

View File

@ -57,7 +57,7 @@ const Header = () => {
const { mutateAsync: deleteMutation } = useMutation<void, ServerError, DeleteResumeParams>(deleteResume);
const resume = useAppSelector((state) => state.resume);
const resume = useAppSelector((state) => state.resume.present);
const { left, right } = useAppSelector((state) => state.build.sidebar);
const name = useMemo(() => get(resume, 'name'), [resume]);

View File

@ -27,6 +27,11 @@
@apply hidden;
}
}
ul {
padding-left: 1.5em;
text-indent: -1.5em;
}
}
.pageNumber {

View File

@ -20,7 +20,7 @@ type Props = PageProps & {
const Page: React.FC<Props> = ({ page, showPageNumbers = false }) => {
const { t } = useTranslation();
const resume = useAppSelector((state) => state.resume);
const resume = useAppSelector((state) => state.resume.present);
const breakLine: boolean = useAppSelector((state) => state.build.page.breakLine);
const theme: Theme = get(resume, 'metadata.theme');

View File

@ -25,7 +25,7 @@ const LeftSidebar = () => {
const isDesktop = useMediaQuery(theme.breakpoints.up('lg'));
const sections = useAppSelector((state) => state.resume.sections);
const sections = useAppSelector((state) => state.resume.present.sections);
const { open } = useAppSelector((state) => state.build.sidebar.left);
const customSections = useMemo(() => getCustomSections(sections), [sections]);
@ -65,7 +65,7 @@ const LeftSidebar = () => {
variant={isDesktop ? 'persistent' : 'temporary'}
>
<div className={styles.container}>
<nav>
<nav className="overflow-y-scroll">
<div>
<Link href="/dashboard">
<a className="inline-flex">

View File

@ -32,7 +32,7 @@ const Basics = () => {
<PhotoUpload />
</div>
<div className="grid gap-2 w-full sm:col-span-2">
<div className="grid w-full gap-2 sm:col-span-2">
<ResumeInput label={t<string>('builder.leftSidebar.sections.basics.name.label')} path="basics.name" />
<Button variant="outlined" startIcon={<PhotoFilter />} onClick={handleClick}>

View File

@ -12,7 +12,7 @@ const PhotoFilters = () => {
const dispatch = useAppDispatch();
const photo: Photo = useAppSelector((state) => get(state.resume, 'basics.photo'));
const photo: Photo = useAppSelector((state) => get(state.resume.present, 'basics.photo'));
const size: number = get(photo, 'filters.size', 128);
const shape: PhotoShape = get(photo, 'filters.shape', 'square');
const grayscale: boolean = get(photo, 'filters.grayscale', false);

View File

@ -21,8 +21,8 @@ const PhotoUpload: React.FC = () => {
const fileInputRef = useRef<HTMLInputElement>(null);
const id: number = useAppSelector((state) => get(state.resume, 'id'));
const photo: Photo = useAppSelector((state) => get(state.resume, 'basics.photo'));
const id: number = useAppSelector((state) => get(state.resume.present, 'id'));
const photo: Photo = useAppSelector((state) => get(state.resume.present, 'basics.photo'));
const { mutateAsync: uploadMutation, isLoading } = useMutation<Resume, ServerError, UploadPhotoParams>(uploadPhoto);

View File

@ -37,8 +37,8 @@ const Section: React.FC<Props> = ({
const dispatch = useAppDispatch();
const heading = useAppSelector<string>((state) => get(state.resume, `${path}.name`, name));
const visibility = useAppSelector<boolean>((state) => get(state.resume, `${path}.visible`, true));
const heading = useAppSelector<string>((state) => get(state.resume.present, `${path}.name`, name));
const visibility = useAppSelector<boolean>((state) => get(state.resume.present, `${path}.visible`, true));
const handleAdd = () => {
const id = path.split('.')[1];

View File

@ -18,7 +18,7 @@ const SectionSettings: React.FC<Props> = ({ path }) => {
const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null);
const columns = useAppSelector<number>((state) => get(state.resume, `${path}.columns`, 2));
const columns = useAppSelector<number>((state) => get(state.resume.present, `${path}.columns`, 2));
const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {
setAnchorEl(event.currentTarget);

View File

@ -43,7 +43,7 @@ const RightSidebar = () => {
variant={isDesktop ? 'persistent' : 'temporary'}
>
<div className={styles.container}>
<nav>
<nav className="overflow-y-scroll">
<div>
<Avatar size={40} />
<Divider />

View File

@ -17,7 +17,7 @@ const CustomCSS = () => {
const dispatch = useAppDispatch();
const customCSS: CustomCSSType = useAppSelector((state) => get(state.resume, 'metadata.css', {}));
const customCSS: CustomCSSType = useAppSelector((state) => get(state.resume.present, 'metadata.css', {}));
const handleChange = (value: string | undefined) => {
dispatch(setResumeState({ path: 'metadata.css.value', value }));

View File

@ -13,7 +13,7 @@ import { useAppSelector } from '@/store/hooks';
const Export = () => {
const { t } = useTranslation();
const resume = useAppSelector((state) => state.resume);
const resume = useAppSelector((state) => state.resume.present);
const { mutateAsync, isLoading } = useMutation<string, ServerError, PrintResumeAsPdfParams>(printResumeAsPdf);

View File

@ -1,10 +1,10 @@
import { DragDropContext, Draggable, DraggableLocation, Droppable, DropResult } from '@hello-pangea/dnd';
import { Add, Close, Restore } from '@mui/icons-material';
import { Button, IconButton, Tooltip } from '@mui/material';
import clsx from 'clsx';
import cloneDeep from 'lodash/cloneDeep';
import get from 'lodash/get';
import { useTranslation } from 'next-i18next';
import { DragDropContext, Draggable, DraggableLocation, Droppable, DropResult } from 'react-beautiful-dnd';
import Heading from '@/components/shared/Heading';
import { useAppDispatch, useAppSelector } from '@/store/hooks';
@ -23,8 +23,8 @@ const Layout = () => {
const dispatch = useAppDispatch();
const layout = useAppSelector((state) => state.resume.metadata.layout);
const resumeSections = useAppSelector((state) => state.resume.sections);
const layout = useAppSelector((state) => state.resume.present.metadata.layout);
const resumeSections = useAppSelector((state) => state.resume.present.sections);
const onDragEnd = (dropResult: DropResult) => {
const { source: srcLoc, destination: destLoc } = dropResult;

View File

@ -38,9 +38,9 @@ const Settings = () => {
const [confirmReset, setConfirmReset] = useState(false);
const resume = useAppSelector((state) => state.resume);
const resume = useAppSelector((state) => state.resume.present);
const theme = useAppSelector((state) => state.build.theme);
const pages = useAppSelector((state) => state.resume.metadata.layout);
const pages = useAppSelector((state) => state.resume.present.metadata.layout);
const breakLine = useAppSelector((state) => state.build.page.breakLine);
const orientation = useAppSelector((state) => state.build.page.orientation);

View File

@ -17,7 +17,7 @@ const Sharing = () => {
const [showShortUrl, setShowShortUrl] = useState(false);
const resume = useAppSelector((state) => state.resume);
const resume = useAppSelector((state) => state.resume.present);
const isPublic = useMemo(() => get(resume, 'public'), [resume]);
const url = useMemo(() => getResumeUrl(resume, { withHost: true }), [resume]);
const shortUrl = useMemo(() => getResumeUrl(resume, { withHost: true, shortUrl: true }), [resume]);

View File

@ -16,7 +16,7 @@ const Templates = () => {
const dispatch = useAppDispatch();
const currentTemplate: string = useAppSelector((state) => get(state.resume, 'metadata.template'));
const currentTemplate: string = useAppSelector((state) => get(state.resume.present, 'metadata.template'));
const handleChange = (template: TemplateMeta) => {
dispatch(setResumeState({ path: 'metadata.template', value: template.id }));
@ -31,7 +31,7 @@ const Templates = () => {
<div key={template.id} className={styles.template}>
<div className={clsx(styles.preview, { [styles.selected]: template.id === currentTemplate })}>
<ButtonBase onClick={() => handleChange(template)}>
<Image src={template.preview} alt={template.name} className="rounded-sm" layout="fill" />
<Image src={template.preview} alt={template.name} className="rounded-sm" layout="fill" priority />
</ButtonBase>
</div>

View File

@ -1,8 +1,8 @@
.container {
@apply grid sm:grid-cols-2 gap-4;
@apply grid gap-4 sm:grid-cols-2;
}
.colorOptions {
@apply col-span-2 mb-4;
@apply grid grid-cols-8 gap-y-2 justify-items-center;
@apply grid grid-cols-8 justify-items-center gap-y-2;
}

View File

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

View File

@ -33,7 +33,7 @@ const Widgets: React.FC<WidgetProps> = ({ label, category }) => {
const dispatch = useAppDispatch();
const { family, size } = useAppSelector<TypographyType>((state) => get(state.resume, 'metadata.typography'));
const { family, size } = useAppSelector<TypographyType>((state) => get(state.resume.present, 'metadata.typography'));
const { data: fonts } = useQuery(FONTS_QUERY, fetchFonts, {
select: (fonts) => fonts.sort((a, b) => a.category.localeCompare(b.category)),

View File

@ -1,9 +1,9 @@
.testimony {
@apply grid gap-2;
@apply border-2 rounded p-4 dark:border-neutral-800;
@apply rounded border-2 p-4 dark:border-neutral-800;
blockquote {
@apply text-xs leading-normal text-justify opacity-90;
@apply text-justify text-xs leading-normal opacity-90;
}
figcaption {

View File

@ -10,7 +10,7 @@
}
.header {
@apply sticky top-0 left-0 right-0 z-50 pt-6 bg-neutral-50 dark:bg-neutral-900;
@apply sticky top-0 left-0 right-0 z-50 bg-neutral-50 pt-6 dark:bg-neutral-900;
@apply flex items-center justify-between;
@apply w-full border-b pb-5 dark:border-white/10;
@ -33,7 +33,7 @@
}
.footer {
@apply sticky bottom-0 left-0 right-0 z-50 pb-6 bg-neutral-50 dark:bg-neutral-900;
@apply sticky bottom-0 left-0 right-0 z-50 bg-neutral-50 pb-6 dark:bg-neutral-900;
@apply flex items-center justify-end gap-x-4;
@apply w-full border-t pt-5 dark:border-white/10;
}

View File

@ -32,8 +32,8 @@ const Heading: React.FC<Props> = ({
const dispatch = useAppDispatch();
const heading = useAppSelector((state) => get(state.resume, `${path}.name`, name));
const visibility = useAppSelector((state) => get(state.resume, `${path}.visible`, true));
const heading = useAppSelector((state) => get(state.resume.present, `${path}.name`, name));
const visibility = useAppSelector((state) => get(state.resume.present, `${path}.visible`, true));
const [editMode, setEditMode] = useState(false);

View File

@ -9,5 +9,5 @@
}
.language {
@apply py-2 px-4 cursor-pointer text-center hover:underline;
@apply cursor-pointer py-2 px-4 text-center hover:underline;
}

View File

@ -36,7 +36,7 @@ const List: React.FC<Props> = ({
const dispatch = useAppDispatch();
const list: Array<ListItemType> = useAppSelector((state) => get(state.resume, path, []));
const list: Array<ListItemType> = useAppSelector((state) => get(state.resume.present, path, []));
const handleEdit = (item: ListItemType) => {
isFunction(onEdit) && onEdit(item);

View File

@ -5,6 +5,7 @@ import styles from './Loading.module.scss';
const Loading: React.FC = () => {
const { isReady } = useRouter();
const isFetching = useIsFetching();
const isMutating = useIsMutating();

View File

@ -21,7 +21,7 @@ interface Props {
const ResumeInput: React.FC<Props> = ({ type = 'text', label, path, className, markdownSupported = false }) => {
const dispatch = useAppDispatch();
const stateValue = useAppSelector((state) => get(state.resume, path, ''));
const stateValue = useAppSelector((state) => get(state.resume.present, path, ''));
useEffect(() => {
setValue(stateValue);

View File

@ -8,12 +8,14 @@ export const languages: Language[] = [
{ code: 'ar', name: 'Arabic', localName: 'اَلْعَرَبِيَّةُ' },
{ code: 'bg', name: 'Bulgarian', localName: 'български' },
{ code: 'bn', name: 'Bengali', localName: 'বাংলা' },
{ code: 'ca', name: 'Catalan', localName: 'Valencian' },
{ code: 'cs', name: 'Czech', localName: 'čeština' },
{ code: 'da', name: 'Danish', localName: 'Dansk' },
{ code: 'de', name: 'German', localName: 'Deutsch' },
{ code: 'el', name: 'Greek', localName: 'Ελληνικά' },
{ code: 'en', name: 'English' },
{ code: 'es', name: 'Spanish', localName: 'Español' },
{ code: 'fa', name: 'Persian', localName: 'فارسی' },
{ code: 'fi', name: 'Finnish', localName: 'Suomi' },
{ code: 'fr', name: 'French', localName: 'Français' },
{ code: 'he', name: 'Hebrew', localName: 'Ivrit' },
@ -21,17 +23,23 @@ export const languages: Language[] = [
{ code: 'hu', name: 'Hungarian', localName: 'Magyar' },
{ code: 'id', name: 'Indonesian', localName: 'Bahasa Indonesia' },
{ code: 'it', name: 'Italian', localName: 'Italiano' },
{ code: 'ja', name: 'Japanese', localName: '日本語' },
{ code: 'km', name: 'Khmer', localName: 'ភាសាខ្មែរ' },
{ code: 'kn', name: 'Kannada', localName: 'ಕನ್ನಡ' },
{ code: 'ml', name: 'Malayalam', localName: 'മലയാളം' },
{ code: 'ne', name: 'Nepali', localName: 'नेपाली' },
{ code: 'nl', name: 'Dutch', localName: 'Nederlands' },
{ code: 'no', name: 'Norwegian', localName: 'Norsk' },
{ code: 'or', name: 'Odia', localName: 'ଓଡ଼ିଆ' },
{ code: 'fa', name: 'Persian', localName: 'Farsi' },
{ code: 'pl', name: 'Polish', localName: 'Polski' },
{ code: 'pt', name: 'Portuguese', localName: 'Português' },
{ code: 'ro', name: 'Romanian', localName: 'limba română' },
{ code: 'ru', name: 'Russian', localName: 'русский' },
{ code: 'sr', name: 'Serbian', localName: 'српски језик' },
{ code: 'sv', name: 'Swedish', localName: 'Svenska' },
{ code: 'ta', name: 'Tamil', localName: 'தமிழ்' },
{ code: 'tr', name: 'Turkish', localName: 'Türkçe' },
{ code: 'uk', name: 'Ukranian', localName: 'Українська мова' },
{ code: 'vi', name: 'Vietnamese', localName: 'Tiếng Việt' },
{ code: 'zh', name: 'Chinese', localName: '中文' },
].sort((a, b) => a.name.localeCompare(b.name));

View File

@ -44,7 +44,7 @@ const AwardModal: React.FC = () => {
const dispatch = useAppDispatch();
const heading = useAppSelector((state) => get(state.resume, `${path}.name`));
const heading = useAppSelector((state) => get(state.resume.present, `${path}.name`));
const { open: isOpen, payload } = useAppSelector((state) => state.modal[`builder.${path}`]);
const item: FormData = get(payload, 'item', null);

View File

@ -44,7 +44,7 @@ const CertificateModal: React.FC = () => {
const dispatch = useAppDispatch();
const heading = useAppSelector((state) => get(state.resume, `${path}.name`));
const heading = useAppSelector((state) => get(state.resume.present, `${path}.name`));
const { open: isOpen, payload } = useAppSelector((state) => state.modal[`builder.${path}`]);
const item: FormData = get(payload, 'item', null);

View File

@ -60,7 +60,7 @@ const CustomModal: React.FC = () => {
const dispatch = useAppDispatch();
const heading = useAppSelector((state) => get(state.resume, `${path}.name`));
const heading = useAppSelector((state) => get(state.resume.present, `${path}.name`));
const { open: isOpen, payload } = useAppSelector((state) => state.modal['builder.sections.custom']);
const path: string = get(payload, 'path', '');

View File

@ -57,7 +57,7 @@ const EducationModal: React.FC = () => {
const dispatch = useAppDispatch();
const heading = useAppSelector((state) => get(state.resume, `${path}.name`));
const heading = useAppSelector((state) => get(state.resume.present, `${path}.name`));
const { open: isOpen, payload } = useAppSelector((state) => state.modal[`builder.${path}`]);
const item: FormData = get(payload, 'item', null);

View File

@ -35,7 +35,7 @@ const InterestModal: React.FC = () => {
const dispatch = useAppDispatch();
const heading = useAppSelector((state) => get(state.resume, `${path}.name`));
const heading = useAppSelector((state) => get(state.resume.present, `${path}.name`));
const { open: isOpen, payload } = useAppSelector((state) => state.modal[`builder.${path}`]);
const item: FormData = get(payload, 'item', null);

View File

@ -36,7 +36,7 @@ const LanguageModal: React.FC = () => {
const dispatch = useAppDispatch();
const heading = useAppSelector((state) => get(state.resume, `${path}.name`));
const heading = useAppSelector((state) => get(state.resume.present, `${path}.name`));
const { open: isOpen, payload } = useAppSelector((state) => state.modal[`builder.${path}`]);
const item: FormData = get(payload, 'item', null);

View File

@ -53,7 +53,7 @@ const ProjectModal: React.FC = () => {
const dispatch = useAppDispatch();
const heading = useAppSelector((state) => get(state.resume, `${path}.name`));
const heading = useAppSelector((state) => get(state.resume.present, `${path}.name`));
const { open: isOpen, payload } = useAppSelector((state) => state.modal[`builder.${path}`]);
const item: FormData = get(payload, 'item', null);

View File

@ -44,7 +44,7 @@ const PublicationModal: React.FC = () => {
const dispatch = useAppDispatch();
const heading = useAppSelector((state) => get(state.resume, `${path}.name`));
const heading = useAppSelector((state) => get(state.resume.present, `${path}.name`));
const { open: isOpen, payload } = useAppSelector((state) => state.modal[`builder.${path}`]);
const item: FormData = get(payload, 'item', null);

View File

@ -41,7 +41,7 @@ const ReferenceModal: React.FC = () => {
const dispatch = useAppDispatch();
const heading = useAppSelector((state) => get(state.resume, `${path}.name`));
const heading = useAppSelector((state) => get(state.resume.present, `${path}.name`));
const { open: isOpen, payload } = useAppSelector((state) => state.modal[`builder.${path}`]);
const item: FormData = get(payload, 'item', null);

View File

@ -39,7 +39,7 @@ const SkillModal: React.FC = () => {
const dispatch = useAppDispatch();
const heading = useAppSelector((state) => get(state.resume, `${path}.name`));
const heading = useAppSelector((state) => get(state.resume.present, `${path}.name`));
const { open: isOpen, payload } = useAppSelector((state) => state.modal[`builder.${path}`]);
const item: FormData = get(payload, 'item', null);

View File

@ -50,7 +50,7 @@ const VolunteerModal: React.FC = () => {
const dispatch = useAppDispatch();
const heading = useAppSelector((state) => get(state.resume, `${path}.name`));
const heading = useAppSelector((state) => get(state.resume.present, `${path}.name`));
const { open: isOpen, payload } = useAppSelector((state) => state.modal[`builder.${path}`]);
const item: FormData = get(payload, 'item', null);

View File

@ -50,7 +50,7 @@ const WorkModal: React.FC = () => {
const dispatch = useAppDispatch();
const heading = useAppSelector((state) => get(state.resume, `${path}.name`));
const heading = useAppSelector((state) => get(state.resume.present, `${path}.name`));
const { open: isOpen, payload } = useAppSelector((state) => state.modal[`builder.${path}`]);
const item: FormData = get(payload, 'item', null);

View File

@ -69,7 +69,8 @@ const CreateResumeModal: React.FC = () => {
try {
await mutateAsync({ name, slug, public: isPublic });
queryClient.invalidateQueries(RESUMES_QUERY);
await queryClient.invalidateQueries(RESUMES_QUERY);
handleClose();
} catch (error: any) {
toast.error(error.message);

View File

@ -7,6 +7,7 @@ const i18nConfig = {
'ar',
'bg',
'bn',
'ca',
'cs',
'da',
'de',
@ -21,16 +22,23 @@ const i18nConfig = {
'hu',
'id',
'it',
'ja',
'km',
'kn',
'ml',
'ne',
'nl',
'no',
'or',
'pl',
'pt',
'ro',
'ru',
'sr',
'sv',
'ta',
'tr',
'uk',
'vi',
'zh',
],

View File

@ -13,13 +13,14 @@
"@emotion/css": "^11.10.0",
"@emotion/react": "^11.10.0",
"@emotion/styled": "^11.10.0",
"@hello-pangea/dnd": "^16.0.0",
"@hookform/resolvers": "2.9.7",
"@monaco-editor/react": "^4.4.5",
"@mui/icons-material": "^5.8.4",
"@mui/lab": "^5.0.0-alpha.95",
"@mui/material": "^5.10.1",
"@mui/system": "^5.10.1",
"@mui/x-date-pickers": "5.0.0-beta.6",
"@mui/icons-material": "^5.10.2",
"@mui/lab": "^5.0.0-alpha.96",
"@mui/material": "^5.10.2",
"@mui/system": "^5.10.2",
"@mui/x-date-pickers": "5.0.0-beta.7",
"@next/env": "^12.2.5",
"@react-oauth/google": "^0.2.6",
"@reduxjs/toolkit": "^1.8.5",
@ -34,12 +35,11 @@
"nanoid": "^3.3.4",
"next": "12.2.5",
"next-i18next": "^12.0.0",
"react": "18",
"react-beautiful-dnd": "^13.1.0",
"react": "^18.2.0",
"react-colorful": "^5.6.1",
"react-dnd": "16.0.1",
"react-dnd-html5-backend": "16.0.1",
"react-dom": "18",
"react-dom": "^18.2.0",
"react-hook-form": "^7.34.2",
"react-hot-toast": "2.3.0",
"react-hotkeys-hook": "^3.4.7",
@ -51,36 +51,33 @@
"redux": "^4.2.0",
"redux-persist": "^6.0.0",
"redux-saga": "^1.2.1",
"redux-undo": "^1.0.1",
"remark-gfm": "^3.0.1",
"sharp": "^0.30.7",
"uuid": "^8.3.2",
"webfontloader": "^1.6.28"
},
"resolutions": {
"@types/react": "18",
"@types/react-dom": "18"
},
"devDependencies": {
"@babel/core": "^7.18.10",
"@babel/core": "^7.18.13",
"@reactive-resume/schema": "workspace:*",
"@tailwindcss/typography": "^0.5.4",
"@types/downloadjs": "^1.4.3",
"@types/lodash": "^4.14.184",
"@types/node": "18.7.9",
"@types/react": "18",
"@types/react-beautiful-dnd": "^13.1.2",
"@types/react-dom": "18",
"@types/node": "^18.7.13",
"@types/react": "^18.0.17",
"@types/react-dom": "^18.0.6",
"@types/react-redux": "^7.1.24",
"@types/tailwindcss": "^3.0.11",
"@types/uuid": "^8.3.4",
"@types/webfontloader": "^1.6.34",
"autoprefixer": "^10.4.8",
"csstype": "^3.1.0",
"eslint-config-next": "12.2.5",
"eslint-config-next": "^12.2.5",
"eslint-plugin-tailwindcss": "^3.6.0",
"next-sitemap": "^3.1.21",
"postcss": "^8.4.16",
"sass": "^1.54.5",
"tailwindcss": "^3.1.8",
"typescript": "^4.7.4"
"typescript": "^4.8.2"
}
}

View File

@ -51,7 +51,7 @@ const Preview: NextPage<Props> = ({ username, slug, resume: initialData }) => {
const dispatch = useAppDispatch();
const resume = useAppSelector((state) => state.resume);
const resume = useAppSelector((state) => state.resume.present);
useEffect(() => {
if (initialData && !isEmpty(initialData)) {

View File

@ -56,7 +56,7 @@ export const getServerSideProps: GetServerSideProps<Props | Promise<Props>, Quer
const Printer: NextPage<Props> = ({ resume: initialData, locale }) => {
const dispatch = useAppDispatch();
const resume = useAppSelector((state) => state.resume);
const resume = useAppSelector((state) => state.resume.present);
useEffect(() => {
if (initialData) dispatch(setResume(initialData));

View File

@ -4,7 +4,9 @@ import Head from 'next/head';
import Link from 'next/link';
import { useTranslation } from 'next-i18next';
import { serverSideTranslations } from 'next-i18next/serverSideTranslations';
import { useEffect } from 'react';
import { useQuery } from 'react-query';
import { ActionCreators } from 'redux-undo';
import ResumeCard from '@/components/dashboard/ResumeCard';
import ResumePreview from '@/components/dashboard/ResumePreview';
@ -12,6 +14,7 @@ import Avatar from '@/components/shared/Avatar';
import Logo from '@/components/shared/Logo';
import { RESUMES_QUERY } from '@/constants/index';
import { fetchResumes } from '@/services/resume';
import { useAppDispatch } from '@/store/hooks';
import styles from '@/styles/pages/Dashboard.module.scss';
export const getStaticProps: GetStaticProps = async ({ locale = 'en' }) => {
@ -25,8 +28,14 @@ export const getStaticProps: GetStaticProps = async ({ locale = 'en' }) => {
const Dashboard: NextPage = () => {
const { t } = useTranslation();
const dispatch = useAppDispatch();
const { data } = useQuery(RESUMES_QUERY, fetchResumes);
useEffect(() => {
dispatch(ActionCreators.clearHistory());
}, []);
if (!data) return null;
return (

View File

@ -1,7 +1,7 @@
import { NextPage } from 'next';
const PrivacyPolicy: NextPage = () => (
<div className="mx-auto my-12 prose dark:prose-invert">
<div className="prose mx-auto my-12 dark:prose-invert">
<h1>Privacy Policy</h1>
<p>

View File

@ -1,7 +1,7 @@
import { NextPage } from 'next';
const TermsOfService: NextPage = () => (
<div className="mx-auto my-12 prose dark:prose-invert">
<div className="prose mx-auto my-12 dark:prose-invert">
<h1>Terms of Service</h1>
<p>

View File

@ -84,7 +84,9 @@
"toggle-page-break-line": "تبديل سطر الصفحة",
"toggle-sidebars": "تبديل الشريط الجانبي",
"zoom-in": "تكبير",
"zoom-out": "تصغير"
"zoom-out": "تصغير",
"undo": "الغاء التحميل",
"redo": "إعادة"
}
},
"header": {

View File

@ -84,7 +84,9 @@
"toggle-page-break-line": "Линия за прекъсване на страницата",
"toggle-sidebars": "Включване на страничната лента",
"zoom-in": "Увеличи",
"zoom-out": "Намали"
"zoom-out": "Намали",
"undo": "Отмяна на",
"redo": "Redo"
}
},
"header": {

View File

@ -84,7 +84,9 @@
"toggle-page-break-line": "পৃষ্ঠা বিরতি লাইন টগল করুন",
"toggle-sidebars": "সাইডবার টগল করুন",
"zoom-in": "বড় কর",
"zoom-out": "ছোট করা"
"zoom-out": "ছোট করা",
"undo": "পূর্বাবস্থায় ফেরান",
"redo": "আবার করুন"
}
},
"header": {

View File

@ -0,0 +1,363 @@
{
"common": {
"actions": {
"add": "Afegeix nou {{token}}",
"delete": "Suprimeix {{token}}",
"edit": "Edita {{token}}"
},
"columns": {
"heading": "Columnes",
"tooltip": "Canvia el nombre de columnes"
},
"form": {
"date": {
"label": "Data"
},
"description": {
"label": "Descripció"
},
"email": {
"label": "Correu electrònic"
},
"end-date": {
"help-text": "Deixeu aquest camp en blanc, si encara està present",
"label": "Data de finalització"
},
"keywords": {
"label": "Paraules clau"
},
"level": {
"label": "Nivell"
},
"levelNum": {
"label": "Nivell (nombre)"
},
"name": {
"label": "Nom"
},
"phone": {
"label": "Número de telèfon"
},
"position": {
"label": "Posició"
},
"start-date": {
"label": "Data d'inici"
},
"subtitle": {
"label": "Subtítol"
},
"summary": {
"label": "Resum"
},
"title": {
"label": "Títol"
},
"url": {
"label": "Pàgina web"
}
},
"glossary": {
"page": "Pàgina"
},
"list": {
"actions": {
"delete": "Elimina",
"duplicate": "Duplica",
"edit": "Edita"
},
"empty-text": "Aquesta llista està buida."
},
"tooltip": {
"delete-item": "Estàs segur que vols esborrar aquest element? Aquesta acció és irreversible.",
"delete-section": "Suprimeix una secció",
"rename-section": "Canvia el nom de la secció",
"toggle-visibility": "Commuta la visibilitat"
}
},
"controller": {
"tooltip": {
"center-artboard": "Centrar tauler de dibuix",
"copy-link": "Copia l'enllaç al currículum",
"export-pdf": "Exporta com a PDF",
"toggle-orientation": "Commuta l'orientació de la pàgina",
"toggle-page-break-line": "Commuta la línia de salt de pàgina",
"toggle-sidebars": "Mostra o oculta la barra lateral",
"zoom-in": "Amplia",
"zoom-out": "Allunya",
"undo": "Desfer",
"redo": "Refer"
}
},
"header": {
"menu": {
"delete": "Elimina",
"duplicate": "Duplica",
"rename": "Canvia el nom",
"share-link": "Comparteix l'enllaç",
"tooltips": {
"delete": "Estàs segur que vols esborrar aquest currículum? Aquesta acció és irreversible.",
"share-link": "Heu de canviar la visibilitat del vostre currículum a pública per fer-lo visible per als altres."
}
}
},
"leftSidebar": {
"sections": {
"awards": {
"form": {
"awarder": {
"label": "Otorgat per"
}
}
},
"basics": {
"actions": {
"photo-filters": "Filtres fotogràfics"
},
"heading": "Bàsics",
"headline": {
"label": "Títol"
},
"name": {
"label": "Nom complet"
},
"birthdate": {
"label": "Data de naixement"
},
"photo-filters": {
"effects": {
"border": {
"label": "Vora"
},
"grayscale": {
"label": "Escala de grisos"
},
"heading": "Efectes"
},
"shape": {
"heading": "Forma"
},
"size": {
"heading": "Mida (en px)"
}
},
"photo-upload": {
"tooltip": {
"remove": "Esborrar foto",
"upload": "Pugeu la foto"
}
}
},
"certifications": {
"form": {
"issuer": {
"label": "Emissor"
}
}
},
"education": {
"form": {
"area-study": {
"label": "Àrea d'estudi"
},
"courses": {
"label": "Cursos"
},
"degree": {
"label": "Graus"
},
"grade": {
"label": "Qualificació"
},
"institution": {
"label": "Institució"
}
}
},
"location": {
"address": {
"label": "Adreça"
},
"city": {
"label": "Ciutat"
},
"country": {
"label": "País"
},
"heading": "Ubicació",
"postal-code": {
"label": "Codi Postal"
},
"region": {
"label": "Regió"
}
},
"profiles": {
"form": {
"network": {
"label": "Xarxa"
},
"username": {
"label": "Nom d'usuari"
}
},
"heading": "Perfils",
"heading_one": "Perfil"
},
"publications": {
"form": {
"publisher": {
"label": "Editor"
}
}
},
"references": {
"form": {
"relationship": {
"label": "Relació"
}
}
},
"section": {
"heading": "Secció"
},
"volunteer": {
"form": {
"organization": {
"label": "Organització"
}
}
}
}
},
"rightSidebar": {
"sections": {
"css": {
"heading": "CSS personalitzat"
},
"export": {
"heading": "Exporta",
"json": {
"primary": "JSON",
"secondary": "Baixeu una versió JSON del vostre currículum que es pot tornar a importar a Reactive Resume."
},
"pdf": {
"loading": {
"primary": "Generació de PDF",
"secondary": "Si us plau, espereu mentre es generi el vostre PDF; això pot trigar fins a 15 segons."
},
"normal": {
"primary": "PDF",
"secondary": "Descarrega un PDF del teu currículum que pots imprimir i enviar a la feina dels teus somnis. Aquest fitxer no es pot tornar a importar per editar-lo més."
}
}
},
"layout": {
"heading": "Disseny",
"tooltip": {
"reset-layout": "Restableix el disseny"
}
},
"links": {
"bugs-features": {
"body": "Alguna cosa t'impedeix fer un currículum? O tens una idea sorprenent per afegir? Planteja un problema a GitHub per començar.",
"button": "Problemes de GitHub",
"heading": "Errors? Sol·licituds de funcions?"
},
"donate": {
"body": "Si us ha agradat utilitzar Reactive Resume, considereu donar tant com pugueu per mantenir l'aplicació en funcionament, sense anuncis i gratuïta per sempre.",
"button": "Compra'm un cafè",
"heading": "Dona a Reactive Curriculum vitae"
},
"github": "Codi font",
"heading": "Enllaços"
},
"settings": {
"global": {
"date": {
"primary": "Data",
"secondary": "Format de data per utilitzar a l'aplicació"
},
"heading": "Global",
"language": {
"primary": "Llenguatge",
"secondary": "Mostra l'idioma per utilitzar a l'aplicació"
},
"theme": {
"primary": "Tema"
}
},
"heading": "Configuració",
"page": {
"break-line": {
"primary": "Línia de trencament",
"secondary": "Mostra una línia a totes les pàgines per marcar l'alçada d'una pàgina A4"
},
"heading": "Pàgina",
"orientation": {
"disabled": "No té efecte quan només hi ha una pàgina",
"primary": "Orientació",
"secondary": "Si voleu mostrar les pàgines horitzontalment o verticalment"
}
},
"resume": {
"heading": "Resum",
"reset": {
"primary": "Restablir-ho tot",
"secondary": "S'ha equivocat massa? Feu clic aquí per restablir tots els canvis i començar des de zero. Aneu amb compte, aquesta acció no es pot revertir."
},
"sample": {
"primary": "Carregueu dades de mostra",
"secondary": "No saps per on començar? Feu clic aquí per carregar algunes dades de mostra per veure com es veu un currículum complet."
}
}
},
"sharing": {
"heading": "Compartint",
"short-url": {
"label": "Prefereix URL curt"
},
"visibility": {
"subtitle": "Permet que qualsevol persona amb un enllaç vegi el teu currículum",
"title": "Públic"
}
},
"templates": {
"heading": "Plantilles"
},
"theme": {
"form": {
"background": {
"label": "Fons"
},
"primary": {
"label": "primària"
},
"text": {
"label": "Text"
}
},
"heading": "Tema"
},
"typography": {
"form": {
"font-family": {
"label": "Família de lletres"
},
"font-size": {
"label": "Mida de la font"
}
},
"heading": "Tipografia",
"widgets": {
"body": {
"label": "Cos"
},
"headings": {
"label": "Encapçalaments"
}
}
}
}
}
}

View File

@ -0,0 +1,29 @@
{
"avatar": {
"menu": {
"greeting": "Hola",
"logout": "Tancar sessió"
}
},
"footer": {
"credit": "Un projecte de passió d'<1>Amruth Pillai</1>",
"license": "Per la comunitat, per a la comunitat."
},
"markdown": {
"help-text": "Aquesta secció admet <1>reducció</1> formatació."
},
"date": {
"present": "Present"
},
"subtitle": "Un creador de currículums gratuït i de codi obert.",
"title": "Currículum reactiu",
"toast": {
"error": {
"upload-file-size": "Pengeu només fitxers de menys de 2 megabytes.",
"upload-photo-size": "Pengeu només fotos de menys de 2 megabytes, preferiblement quadrades."
},
"success": {
"resume-link-copied": "S'ha copiat un enllaç al vostre currículum al porta-retalls."
}
}
}

View File

@ -0,0 +1,25 @@
{
"create-resume": {
"subtitle": "Començar de zero",
"title": "Crea un currículum nou"
},
"import-external": {
"subtitle": "LinkedIn, currículum JSON, currículum reactiu",
"title": "Importa des de fonts externes"
},
"resume": {
"menu": {
"delete": "Suprimeix",
"duplicate": "Duplicat",
"open": "Obert",
"rename": "Canvia el nom",
"share-link": "Compartir Enllaç",
"tooltips": {
"delete": "Esteu segur que voleu suprimir aquest currículum? Aquesta és una acció irreversible.",
"share-link": "Heu de canviar la visibilitat del vostre currículum a pública per fer-lo visible per als altres."
}
},
"timestamp": "Última actualització fa {{timestamp}}"
},
"title": "panell"
}

View File

@ -0,0 +1,41 @@
{
"actions": {
"app": "Vés a l'aplicació",
"login": "iniciar Sessió",
"logout": "Tancar sessió",
"register": "Registra't"
},
"features": {
"heading": "Característiques",
"list": {
"ads": "No hi ha publicitat",
"export": "Exporteu el vostre currículum a format JSON o PDF",
"free": "Lliure, per sempre",
"import": "Importeu dades de LinkedIn, Currículum JSON",
"languages": "Accessible en diversos idiomes",
"more": "I moltes més funcions interessants, <1>llegiu-ne tot aquí</1>",
"tracking": "Sense seguiment d'usuaris"
}
},
"links": {
"heading": "Enllaços",
"links": {
"donate": "Donar",
"github": "Codi font",
"privacy": "Política de privacitat",
"service": "Termes del servei"
}
},
"screenshots": {
"heading": "Captures de pantalla"
},
"testimonials": {
"heading": "Testimonis",
"body": "Bo o dolent, m'encantaria saber la teva opinió sobre Reactive Curriculum vitae i com ha estat l'experiència per a tu.<br/>Aquests són alguns dels missatges enviats pels usuaris de tot el món.",
"contact": "Podeu posar-vos en contacte amb mi mitjançant <1>el meu correu electrònic</1> o mitjançant el formulari de contacte al <3>el meu lloc web</3> ."
},
"summary": {
"body": "Reactive Resume és un creador de currículums gratuït i de codi obert que s'ha creat per fer que les tasques mundanes de crear, actualitzar i compartir el vostre currículum siguin tan fàcils com 1, 2, 3. Amb aquesta aplicació, podeu crear diversos currículums, compartir-los amb reclutadors o amics. mitjançant un enllaç únic i imprimiu-lo com a PDF, tot de franc, sense anuncis, sense seguiment, sense perdre la integritat i la privadesa de les vostres dades.",
"heading": "Resum"
}
}

View File

@ -0,0 +1,135 @@
{
"auth": {
"forgot-password": {
"actions": {
"send-email": "Envieu un correu electrònic de restabliment de la contrasenya"
},
"body": "Només cal que introduïu l'adreça de correu electrònic associada al compte que voleu recuperar.",
"form": {
"email": {
"label": "Correu electrònic"
}
},
"heading": "Has oblidat la teva contrasenya?",
"help-text": "Si el compte existeix, rebràs un correu electrònic amb un enllaç per restablir la teva contrasenya."
},
"login": {
"actions": {
"login": "iniciar Sessió"
},
"body": "Introduïu el vostre nom d'usuari i contrasenya associats al vostre compte per iniciar sessió i accedir, gestionar i compartir els vostres currículums.",
"form": {
"password": {
"label": "Contrasenya"
},
"username": {
"help-text": "També podeu introduir la vostra adreça de correu electrònic",
"label": "Nom d'usuari"
}
},
"heading": "Inicieu sessió al vostre compte",
"recover-text": "En cas que hagis oblidat la teva contrasenya, pots <1>recuperar el teu compte</1> aquí.",
"register-text": "Si no en teniu cap, podeu <1>crear un compte</1> aquí."
},
"register": {
"actions": {
"register": "Registra't",
"google": "Registra't a Google"
},
"body": "Introduïu la vostra informació personal per crear un compte.",
"form": {
"confirm-password": {
"label": "Confirma la contrassenya"
},
"email": {
"label": "Correu electrònic"
},
"name": {
"label": "Nom complet"
},
"password": {
"label": "Contrasenya"
},
"username": {
"label": "Nom d'usuari"
}
},
"heading": "Crear un compte",
"loginText": "Si ja teniu un compte, podeu <1>iniciar sessió aquí</1> ."
},
"reset-password": {
"actions": {
"set-password": "Estableix una contrasenya nova"
},
"body": "Introduïu una contrasenya nova per al vostre compte.",
"form": {
"confirm-password": {
"label": "Confirma la contrassenya"
},
"password": {
"label": "Contrasenya"
}
},
"heading": "Restablir la contrasenya"
}
},
"dashboard": {
"create-resume": {
"actions": {
"create-resume": "Crea un currículum"
},
"body": "Comenceu a crear el vostre currículum posant-li un nom. Pot ser en referència a la funció que esteu sol·licitant, o només al vostre berenar preferit.",
"form": {
"name": {
"label": "Nom"
},
"public": {
"label": "És accessible públicament?"
},
"slug": {
"label": "Llimac"
}
},
"heading": "Crea un currículum nou"
},
"import-external": {
"heading": "Importa des de fonts externes",
"json-resume": {
"actions": {
"upload-json": "Carregueu JSON"
},
"body": "Si teniu un currículum JSON <1>validat</1> a punt per començar, podeu utilitzar-lo per accelerar el vostre desenvolupament a Reactive Resume. Feu clic al botó següent i carregueu un fitxer JSON vàlid per començar.",
"heading": "Importa des del currículum JSON"
},
"linkedin": {
"actions": {
"upload-archive": "Carregueu l'arxiu ZIP"
},
"body": "Podeu estalviar temps exportant les vostres dades de LinkedIn i utilitzant-les per omplir automàticament els camps de Reactive Resume. Aneu a <1>Privadesa de dades</1> secció a LinkedIn i sol·liciteu un arxiu de les vostres dades. Un cop estigui disponible, carregueu el fitxer ZIP a continuació.",
"heading": "Importa des de LinkedIn"
},
"reactive-resume": {
"actions": {
"upload-json": "Carregueu JSON",
"upload-json-v2": "Carregueu JSON des de la v2"
},
"body": "Si teniu un JSON que s'ha exportat amb la versió actual de Reactive Resume, podeu tornar-lo a importar aquí per tornar a obtenir una versió editable.",
"heading": "Importa des del currículum reactiu"
}
},
"rename-resume": {
"actions": {
"rename-resume": "Canvia el nom del currículum"
},
"form": {
"name": {
"label": "Nom"
},
"slug": {
"label": "Llimac"
}
},
"heading": "Canvieu el nom del vostre currículum"
}
}
}

View File

@ -84,7 +84,9 @@
"toggle-page-break-line": "Přepnout řádek zalomení stránky",
"toggle-sidebars": "Přepnout boční panely",
"zoom-in": "Přiblížit",
"zoom-out": "Oddálit"
"zoom-out": "Oddálit",
"undo": "Zrušit",
"redo": "Přepracovat"
}
},
"header": {

View File

@ -84,7 +84,9 @@
"toggle-page-break-line": "Skift sideskiftlinje",
"toggle-sidebars": "Sidebjælke til/fra",
"zoom-in": "Zoom ind",
"zoom-out": "Zoom ud"
"zoom-out": "Zoom ud",
"undo": "Fortryd",
"redo": "Redo"
}
},
"header": {

View File

@ -84,7 +84,9 @@
"toggle-page-break-line": "Pausenzeile umschalten",
"toggle-sidebars": "Seitenleisten umschalten",
"zoom-in": "Vergrößern",
"zoom-out": "Verkleinern"
"zoom-out": "Verkleinern",
"undo": "Rückgängig machen",
"redo": "Redo"
}
},
"header": {

View File

@ -84,7 +84,9 @@
"toggle-page-break-line": "Εναλλαγή γραμμής αλλαγής σελίδας",
"toggle-sidebars": "Εναλλαγή πλευρικών γραμμών",
"zoom-in": "Μεγέθυνση",
"zoom-out": "Σμίκρυνση"
"zoom-out": "Σμίκρυνση",
"undo": "Αναίρεση",
"redo": "Redo"
}
},
"header": {

View File

@ -84,7 +84,9 @@
"toggle-page-break-line": "Toggle Page Break Line",
"toggle-sidebars": "Toggle Sidebars",
"zoom-in": "Zoom In",
"zoom-out": "Zoom Out"
"zoom-out": "Zoom Out",
"undo": "Undo",
"redo": "Redo"
}
},
"header": {

View File

@ -84,7 +84,9 @@
"toggle-page-break-line": "Alternar línea de salto de página",
"toggle-sidebars": "Ocultar/mostrar barra lateral",
"zoom-in": "Acercar",
"zoom-out": "Alejar"
"zoom-out": "Alejar",
"undo": "Deshacer",
"redo": "Rehacer"
}
},
"header": {

View File

@ -84,7 +84,9 @@
"toggle-page-break-line": "تغییر وضعیت خط شکست صفحه",
"toggle-sidebars": "باز/بسته کردن نوار کنار صفحه",
"zoom-in": "بزرگ‌نمایی",
"zoom-out": "کوچک‌نمایی"
"zoom-out": "کوچک‌نمایی",
"undo": "واگرد",
"redo": "دوباره انجام دهید"
}
},
"header": {

View File

@ -84,7 +84,9 @@
"toggle-page-break-line": "Vaihda sivunvaihtoviivaa",
"toggle-sidebars": "Vaihda Sivupalkkeja",
"zoom-in": "Suurenna",
"zoom-out": "Pienennä"
"zoom-out": "Pienennä",
"undo": "Kumoa",
"redo": "Redo"
}
},
"header": {

View File

@ -84,7 +84,9 @@
"toggle-page-break-line": "Afficher/cacher l'indicateur de saut de page",
"toggle-sidebars": "Afficher/cacher les barres latérales",
"zoom-in": "Zoomer",
"zoom-out": "Dézoomer"
"zoom-out": "Dézoomer",
"undo": "Défaire",
"redo": "Refaire"
}
},
"header": {

View File

@ -84,7 +84,9 @@
"toggle-page-break-line": "החלף את קו מעבר עמוד",
"toggle-sidebars": "החלף את סרגלי הצד",
"zoom-in": "הגדל",
"zoom-out": "הקטן"
"zoom-out": "הקטן",
"undo": "לבטל",
"redo": "לַעֲשׂוֹת שׁוּב"
}
},
"header": {

View File

@ -84,7 +84,9 @@
"toggle-page-break-line": "टॉगल पेज ब्रेक लाइन",
"toggle-sidebars": "साइडबार टॉगल करें",
"zoom-in": "ज़ूम इन",
"zoom-out": "ज़ूम आउट"
"zoom-out": "ज़ूम आउट",
"undo": "पूर्ववत",
"redo": "फिर से करें"
}
},
"header": {

View File

@ -84,7 +84,9 @@
"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"
"zoom-out": "Kicsinyítés",
"undo": "Undo",
"redo": "Redo"
}
},
"header": {

View File

@ -84,7 +84,9 @@
"toggle-page-break-line": "Beralih Garis Pemisah Halaman",
"toggle-sidebars": "Beralih Sidebar",
"zoom-in": "Perbesar",
"zoom-out": "Perkecil"
"zoom-out": "Perkecil",
"undo": "Batalkan",
"redo": "Ulangi"
}
},
"header": {

View File

@ -84,7 +84,9 @@
"toggle-page-break-line": "Mostra/Nascondi linea interruzione pagina",
"toggle-sidebars": "Mostra/Nascondi barre laterali",
"zoom-in": "Ingrandisci",
"zoom-out": "Riduci"
"zoom-out": "Riduci",
"undo": "Annulla",
"redo": "Rifare"
}
},
"header": {

View File

@ -0,0 +1,363 @@
{
"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": "Webサイト"
}
},
"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": "ズームアウト",
"undo": "アンドゥ",
"redo": "やり直し"
}
},
"header": {
"menu": {
"delete": "削除",
"duplicate": "デュプリケート",
"rename": "リネーム",
"share-link": "シェアリンク",
"tooltips": {
"delete": "本当にこのレジュメを削除しますか?これは不可逆的なアクションです。",
"share-link": "レジュメを他の人に見てもらうためには、レジュメの表示方法を公開に変更する必要があります。"
}
}
},
"leftSidebar": {
"sections": {
"awards": {
"form": {
"awarder": {
"label": "賞罰"
}
}
},
"basics": {
"actions": {
"photo-filters": "フォトフィルター"
},
"heading": "基本事項",
"headline": {
"label": "ヘッドライン"
},
"name": {
"label": "フルネーム"
},
"birthdate": {
"label": "生年月日"
},
"photo-filters": {
"effects": {
"border": {
"label": "ボーダー"
},
"grayscale": {
"label": "グレースケール"
},
"heading": "効果"
},
"shape": {
"heading": "形状"
},
"size": {
"heading": "サイズ単位px"
}
},
"photo-upload": {
"tooltip": {
"remove": "写真を削除する",
"upload": "写真のアップロード"
}
}
},
"certifications": {
"form": {
"issuer": {
"label": "発行者"
}
}
},
"education": {
"form": {
"area-study": {
"label": "専攻分野"
},
"courses": {
"label": "コース紹介"
},
"degree": {
"label": "学位"
},
"grade": {
"label": "グレード"
},
"institution": {
"label": "インスティテューション"
}
}
},
"location": {
"address": {
"label": "住所"
},
"city": {
"label": "市区町村"
},
"country": {
"label": "国"
},
"heading": "所在地",
"postal-code": {
"label": "郵便番号"
},
"region": {
"label": "地域"
}
},
"profiles": {
"form": {
"network": {
"label": "ネットワーク"
},
"username": {
"label": "ユーザー名"
}
},
"heading": "プロフィール",
"heading_one": "プロフィール"
},
"publications": {
"form": {
"publisher": {
"label": "出版社"
}
}
},
"references": {
"form": {
"relationship": {
"label": "関係"
}
}
},
"section": {
"heading": "セクション"
},
"volunteer": {
"form": {
"organization": {
"label": "組織"
}
}
}
}
},
"rightSidebar": {
"sections": {
"css": {
"heading": "カスタムCSS"
},
"export": {
"heading": "エクスポート",
"json": {
"primary": "JSON",
"secondary": "履歴書のJSONバージョンをダウンロードし、Reactive Resumeにインポートすることができます。"
},
"pdf": {
"loading": {
"primary": "PDF を生成中",
"secondary": "PDFが生成されるまで、15秒程度かかる場合があります。"
},
"normal": {
"primary": "PDF",
"secondary": "履歴書のPDFをダウンロードして印刷し、憧れの職場に送りましょう。このファイルは、再度インポートして編集することはできません。"
}
}
},
"layout": {
"heading": "レイアウト",
"tooltip": {
"reset-layout": "リセットレイアウト"
}
},
"links": {
"bugs-features": {
"body": "レジュメを作るのを邪魔しているものがありますかまたは、追加したい素晴らしいアイディアがありますかGitHub で課題を出してください。",
"button": "GitHubの課題",
"heading": "バグ?機能要望?"
},
"donate": {
"body": "もしReactive Resumeを気に入って使っていただけたなら、このアプリを広告なしで、いつまでも無料で使い続けるために、できる限りの寄付をご検討ください。",
"button": "コーヒーを買ってきて",
"heading": "リアクティブ・レジュメに寄付をする"
},
"github": "ソースコード",
"heading": "リンク集"
},
"settings": {
"global": {
"date": {
"primary": "日付",
"secondary": "アプリ全体で使用する日付フォーマット"
},
"heading": "グローバル",
"language": {
"primary": "言語",
"secondary": "アプリ全体で使用する表示言語"
},
"theme": {
"primary": "テーマ"
}
},
"heading": "設定",
"page": {
"break-line": {
"primary": "ブレイクライン",
"secondary": "A4ページの高さを示す線を全ページに表示する。"
},
"heading": "ページ",
"orientation": {
"disabled": "ページが1つしかない場合は効果がありません",
"primary": "オリエンテーション",
"secondary": "ページを水平に表示するか垂直に表示するか"
}
},
"resume": {
"heading": "レジュメ",
"reset": {
"primary": "すべてをリセットする",
"secondary": "間違いが多いですか?ここをクリックすると、すべての変更がリセットされ、最初からやり直すことができます。この操作は元に戻せませんのでご注意ください。"
},
"sample": {
"primary": "サンプルデータの読み込み",
"secondary": "どこから始めればいいのかわからない?ここをクリックしてサンプルデータをロードし、完全な履歴書がどのように見えるかを確認してください。"
}
}
},
"sharing": {
"heading": "シェアリング",
"short-url": {
"label": "短いURLを希望"
},
"visibility": {
"subtitle": "リンクで誰でもレジュメを閲覧できるようにする",
"title": "公共"
}
},
"templates": {
"heading": "テンプレート"
},
"theme": {
"form": {
"background": {
"label": "背景"
},
"primary": {
"label": "プライマリー"
},
"text": {
"label": "テキスト"
}
},
"heading": "テーマ"
},
"typography": {
"form": {
"font-family": {
"label": "フォントファミリー"
},
"font-size": {
"label": "文字サイズ"
}
},
"heading": "タイポグラフィ",
"widgets": {
"body": {
"label": "本体"
},
"headings": {
"label": "見出し"
}
}
}
}
}
}

View File

@ -0,0 +1,29 @@
{
"avatar": {
"menu": {
"greeting": "こんにちは",
"logout": "ログアウト"
}
},
"footer": {
"credit": "<1>アムルース・ピライの</1>情熱のプロジェクト",
"license": "コミュニティによる、コミュニティのための。"
},
"markdown": {
"help-text": "<1>マークダウンフォーマットに</1>対応しています。"
},
"date": {
"present": "現在"
},
"subtitle": "フリーでオープンソースの履歴書作成ツール。",
"title": "リアクティブ・レジュメ",
"toast": {
"error": {
"upload-file-size": "2メガバイト以下のファイルのみアップロードしてください。",
"upload-photo-size": "アップロードする写真は2メガバイト以下、正方形が望ましいです。"
},
"success": {
"resume-link-copied": "あなたの履歴書へのリンクがクリップボードにコピーされました。"
}
}
}

View File

@ -0,0 +1,25 @@
{
"create-resume": {
"subtitle": "ゼロからのスタート",
"title": "新しいレジュメの作成"
},
"import-external": {
"subtitle": "LinkedIn、JSON Resume、Reactive Resume",
"title": "外部からの取り込み"
},
"resume": {
"menu": {
"delete": "削除",
"duplicate": "複製",
"open": "開く",
"rename": "名前を変更",
"share-link": "リンクを共有",
"tooltips": {
"delete": "本当にこのレジュメを削除しますか?これは不可逆的な行為です。",
"share-link": "レジュメを他の人に見てもらうためには、レジュメの表示方法を公開に変更する必要があります。"
}
},
"timestamp": "最終更新 {{timestamp}} 前"
},
"title": "ダッシュボード"
}

View File

@ -0,0 +1,41 @@
{
"actions": {
"app": "アプリに移動する",
"login": "ログイン",
"logout": "ログアウト",
"register": "登録"
},
"features": {
"heading": "特徴",
"list": {
"ads": "広告なし",
"export": "履歴書をJSONまたはPDF形式で書き出し",
"free": "無料、永久",
"import": "LinkedInからのデータインポート、JSON履歴書",
"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": "リアクティブ・レジュメは、履歴書の作成、更新、共有というありふれた作業を1、2、3のように簡単にするために作られた、無料かつオープンソースの履歴書作成ツールです。このアプリを使えば、複数の履歴書を作成し、ユニークなリンクを通じて採用担当者や友人と共有し、PDFとして印刷することができます。すべて無料、広告なし、トラッキングなし、データの整合性とプライバシーを失うことなく、履歴書を作成できます。",
"heading": "要約"
}
}

View File

@ -0,0 +1,135 @@
{
"auth": {
"forgot-password": {
"actions": {
"send-email": "パスワードリセットメールを送信する"
},
"body": "復元したいアカウントに関連付けられているメールアドレスを入力してください",
"form": {
"email": {
"label": "メールアドレス"
}
},
"heading": "パスワードを忘れましたか?",
"help-text": "アカウントが存在する場合、パスワードをリセットするためのリンクが記載されたメールが送信されます。"
},
"login": {
"actions": {
"login": "ログイン"
},
"body": "アカウントに関連付けられたユーザー名とパスワードを入力してログインし、レジュメにアクセス、管理、共有することができます。",
"form": {
"password": {
"label": "パスワード"
},
"username": {
"help-text": "また、メールアドレスを入力することもできます",
"label": "ユーザー名"
}
},
"heading": "ログイン",
"recover-text": "パスワードをお忘れの場合は、こちらで<1>復旧</1>できます。",
"register-text": "お持ちでない方は、こちらから<1>アカウントを作成して</1>ください。"
},
"register": {
"actions": {
"register": "登録",
"google": "Googleアカウントで登録"
},
"body": "個人情報を入力し、アカウントを作成してください。",
"form": {
"confirm-password": {
"label": "パスワードの確認"
},
"email": {
"label": "メールアドレス"
},
"name": {
"label": "フルネーム"
},
"password": {
"label": "パスワード"
},
"username": {
"label": "ユーザー名"
}
},
"heading": "アカウントを作成",
"loginText": "すでにアカウントをお持ちの方は、<1>こちらからログイン</1>できます。"
},
"reset-password": {
"actions": {
"set-password": "新しいパスワードの設定"
},
"body": "アカウントの新しいパスワードを入力します。",
"form": {
"confirm-password": {
"label": "パスワードの確認"
},
"password": {
"label": "パスワード"
}
},
"heading": "パスワードのリセット"
}
},
"dashboard": {
"create-resume": {
"actions": {
"create-resume": "履歴書の作成"
},
"body": "履歴書の作成は、名前をつけることから始めましょう。応募している職務にちなんだものでも、好きなお菓子にちなんだものでもよいでしょう。",
"form": {
"name": {
"label": "名称"
},
"public": {
"label": "一般に公開されているか?"
},
"slug": {
"label": "スラッグ"
}
},
"heading": "新しいレジュメを作成する"
},
"import-external": {
"heading": "外部からの取り込み",
"json-resume": {
"actions": {
"upload-json": "JSONのアップロード"
},
"body": "<1>検証済みのJSON Resumeが</1>あれば、それを使ってReactive Resumeでの開発を迅速に進めることができます。下のボタンをクリックし、有効なJSONファイルをアップロードして開始してください。",
"heading": "JSON履歴書からのインポート"
},
"linkedin": {
"actions": {
"upload-archive": "ZIPアーカイブのアップロード"
},
"body": "LinkedInからデータをエクスポートして、Reactive Resumeのフィールドの自動入力に使用すると、時間を節約することができます。LinkedInの<1>データプライバシーセクションに</1>移動して、データのアーカイブをリクエストしてください。アーカイブが利用可能になったら、以下のZIPファイルをアップロードしてください。",
"heading": "LinkedInからインポートする"
},
"reactive-resume": {
"actions": {
"upload-json": "JSONのアップロード",
"upload-json-v2": "v2からのJSONのアップロード"
},
"body": "もし、現在のバージョンのReactive ResumeでエクスポートされたJSONがあれば、ここにインポートして、再び編集可能なバージョンを入手することができます。",
"heading": "リアクティブレジュームからのインポート"
}
},
"rename-resume": {
"actions": {
"rename-resume": "リネーム・レジューム"
},
"form": {
"name": {
"label": "名称"
},
"slug": {
"label": "スラッグ"
}
},
"heading": "履歴書の名前を変更する"
}
}
}

View File

@ -0,0 +1,363 @@
{
"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": "បង្រួម",
"undo": "មិនធ្វើវិញ",
"redo": "ធ្វើឡើងវិញ"
}
},
"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 របស់អ្នកត្រូវបានបង្កើត វាអាចចំណាយពេលរហូតដល់ 15 វិនាទី។"
},
"normal": {
"primary": "PDF",
"secondary": "ទាញយកឯកសារ PDF នៃប្រវត្តិរូបសង្ខេបរបស់អ្នក ដែលអ្នកអាចបោះពុម្ព និងផ្ញើទៅកាន់ការងារក្នុងក្តីស្រមៃរបស់អ្នក។ ឯកសារ​នេះ​មិន​អាច​ត្រូវ​បាន​នាំចូល​មក​វិញ​សម្រាប់​ការ​កែសម្រួល​បន្ថែម​ទៀត​ទេ។"
}
}
},
"layout": {
"heading": "ប្លង់",
"tooltip": {
"reset-layout": "កំណត់ប្លង់ឡើងវិញ"
}
},
"links": {
"bugs-features": {
"body": "មានអ្វីមួយរារាំងអ្នកមិនឱ្យបង្កើតប្រវត្តិរូប? ឬតើអ្នកមានគំនិតអស្ចារ្យដើម្បីបន្ថែមទេ? លើកបញ្ហានៅលើ GitHub ដើម្បីចាប់ផ្តើម។",
"button": "បញ្ហា GitHub",
"heading": "កំហុស? សំណើលក្ខណៈពិសេស?"
},
"donate": {
"body": "ប្រសិនបើអ្នកចូលចិត្តប្រើ Reactive Resume សូមពិចារណាបរិច្ចាគឱ្យបានច្រើនតាមដែលអ្នកអាចធ្វើបាន ដើម្បីបុព្វហេតុធ្វើឱ្យកម្មវិធីដំណើរការ និងដំណើរការដោយគ្មានការផ្សាយពាណិជ្ជកម្ម និងឥតគិតថ្លៃជារៀងរហូត។",
"button": "ទិញកាហ្វេឱ្យខ្ញុំ",
"heading": "បរិច្ចាគទៅប្រវត្តិរូបសង្ខេបដែលមានប្រតិកម្ម"
},
"github": "ប្រភព​កូដ",
"heading": "តំណភ្ជាប់"
},
"settings": {
"global": {
"date": {
"primary": "កាលបរិច្ឆេទ",
"secondary": "ទម្រង់កាលបរិច្ឆេទដែលត្រូវប្រើនៅលើកម្មវិធី"
},
"heading": "សកល",
"language": {
"primary": "ភាសា",
"secondary": "បង្ហាញភាសាដែលត្រូវប្រើនៅលើកម្មវិធី"
},
"theme": {
"primary": "ប្រធានបទ"
}
},
"heading": "ការកំណត់",
"page": {
"break-line": {
"primary": "បំបែកបន្ទាត់",
"secondary": "បង្ហាញបន្ទាត់នៅលើទំព័រទាំងអស់ដើម្បីសម្គាល់កម្ពស់នៃទំព័រ A4"
},
"heading": "ទំព័រ",
"orientation": {
"disabled": "មិន​មាន​ប្រសិទ្ធភាព​ទេ​ពេល​មាន​តែ​មួយ​ទំព័រ",
"primary": "ការតំរង់ទិស",
"secondary": "ថាតើត្រូវបង្ហាញទំព័រផ្ដេក ឬបញ្ឈរ"
}
},
"resume": {
"heading": "ប្រវត្តិរូប",
"reset": {
"primary": "កំណត់អ្វីៗគ្រប់យ៉ាងឡើងវិញ",
"secondary": "ធ្វើ​ខុស​ច្រើន​ពេក? សូមចុចទីនេះដើម្បីកំណត់ការផ្លាស់ប្តូរទាំងអស់ឡើងវិញ ហើយចាប់ផ្តើមពីដំបូង។ សូមប្រយ័ត្ន សកម្មភាពនេះមិនអាចត្រឡប់វិញបានទេ។"
},
"sample": {
"primary": "ផ្ទុកទិន្នន័យគំរូ",
"secondary": "មិនប្រាកដថាត្រូវចាប់ផ្តើមពីណា? ចុចទីនេះដើម្បីផ្ទុកទិន្នន័យគំរូមួយចំនួន ដើម្បីមើលពីរបៀបដែលប្រវត្តិរូបសង្ខេបពេញលេញ។"
}
}
},
"sharing": {
"heading": "ការចែករំលែក",
"short-url": {
"label": "ចូលចិត្ត URL ខ្លី"
},
"visibility": {
"subtitle": "អនុញ្ញាតឱ្យនរណាម្នាក់ដែលមានតំណមើលប្រវត្តិរូបសង្ខេបរបស់អ្នក។",
"title": "សាធារណៈ"
}
},
"templates": {
"heading": "គំរូ"
},
"theme": {
"form": {
"background": {
"label": "ផ្ទៃខាងក្រោយ"
},
"primary": {
"label": "បឋមសិក្សា"
},
"text": {
"label": "អត្ថបទ"
}
},
"heading": "ប្រធានបទ"
},
"typography": {
"form": {
"font-family": {
"label": "គ្រួសារពុម្ពអក្សរ"
},
"font-size": {
"label": "ទំហំ​អក្សរ"
}
},
"heading": "វាយអក្សរ",
"widgets": {
"body": {
"label": "រាងកាយ"
},
"headings": {
"label": "ក្បាល"
}
}
}
}
}
}

View File

@ -0,0 +1,29 @@
{
"avatar": {
"menu": {
"greeting": "សួស្តី",
"logout": "ចាកចេញ"
}
},
"footer": {
"credit": "គម្រោងបង្កើតឡើងដោយលោក <1> Amruth Pillai</1>",
"license": "ដោយសហគមន៍ ដើម្បីសហគមន៍។"
},
"markdown": {
"help-text": "ផ្នែកនេះគាំទ្រទម្រង់ <1> markdown</1> ។"
},
"date": {
"present": "បច្ចុប្បន្ន"
},
"subtitle": "បង្កើតជីវត្តប្រវត្តិដោយចំហ និងមិនគិតថ្លៃ។",
"title": "Reactive Resume",
"toast": {
"error": {
"upload-file-size": "សូមបញ្ចូលតែឯកសារណាដែលមានទំហំមិនលើសពី២មេហ្គាបៃ។",
"upload-photo-size": "សូមបញ្ចូលតែឯកសារណាដែលមានទំហំមិនលើសពី២មេហ្គាបៃ កាន់តែល្អប្រសិនបើរូបរាងជាការ៉េ។"
},
"success": {
"resume-link-copied": "តំណភ្ជាប់ទៅកាន់ប្រវត្តិរូបរបស់អ្នកត្រូវបានចម្លងរួចរាល់។"
}
}
}

View File

@ -0,0 +1,25 @@
{
"create-resume": {
"subtitle": "ចាប់ផ្តើមពីដំបូង",
"title": "បង្កើតប្រវត្តិរូបសង្ខេបថ្មី។"
},
"import-external": {
"subtitle": "LinkedIn, JSON Resume, Reactive Resume",
"title": "នាំចូលពីប្រភពខាងក្រៅ"
},
"resume": {
"menu": {
"delete": "លុប",
"duplicate": "ស្ទួន",
"open": "បើក",
"rename": "ប្ដូរឈ្មោះ",
"share-link": "ចែករំលែកតំណ",
"tooltips": {
"delete": "តើអ្នកប្រាកដទេដែលចង់លុបវាចេញ? បញ្ជាក់ៈ ក្រោយពីលុបហើយ មិនអាចទាញយកមកវិញបានទេ។",
"share-link": "អ្នកត្រូវផ្លាស់ប្តូរការមើលឃើញនៃប្រវត្តិរូបរបស់អ្នកជាសាធារណៈ ដើម្បីឱ្យអ្នកដទៃមើលឃើញ។"
}
},
"timestamp": "បានធ្វើបច្ចុប្បន្នភាពចុងក្រោយ {{timestamp}} មុន។"
},
"title": "ផ្ទាំងគ្រប់គ្រង"
}

View File

@ -0,0 +1,41 @@
{
"actions": {
"app": "ចូលទៅកាន់កម្មវិធី",
"login": "ចូល",
"logout": "ចាកចេញ",
"register": "ចុះឈ្មោះ"
},
"features": {
"heading": "មុខងារ",
"list": {
"ads": "គ្មានការផ្សាយពាណិជ្ជកម្ម",
"export": "នាំចេញប្រវត្តិរូបសង្ខេបរបស់អ្នកទៅជាទម្រង់ JSON ឬ PDF",
"free": "ឥតគិតថ្លៃជារៀងរហូត",
"import": "នាំចូលទិន្នន័យពី LinkedIn, JSON Resume",
"languages": "អាចចូលប្រើបានច្រើនភាសា",
"more": "និងមុខងារពិសេសៗជាច្រើនទៀត <1>អានបន្ថែមនៅទីនេះ</1>",
"tracking": "គ្មានការតាមដានអ្នកប្រើប្រាស់"
}
},
"links": {
"heading": "តំណ",
"links": {
"donate": "បរិច្ចាគ",
"github": "ប្រភព​កូដ",
"privacy": "គោលការណ៍​ភាព​ឯកជន",
"service": "លក្ខខណ្ឌ​នៃ​សេវាកម្ម"
}
},
"screenshots": {
"heading": "រូបថតអេក្រង់"
},
"testimonials": {
"heading": "សក្ខីកម្ម",
"body": "ល្អ ឬមិនល្អ ខ្ញុំចង់រីករាយនឹងទទួលមតិរបស់អ្នកលើ Reactive Resume និងបទពិសោធន៍ដែលអ្នកទទួលបាន។ <br/> នេះគឺជាមតិតដែលយើងទទួលបានពីអ្នកប្រើប្រាស់ពីជុំវិញពិភពលោក។",
"contact": "អ្នកអាចទាក់ទងមកខ្ញុំតាមរយៈ <1>អ៊ីមែលរបស់ខ្ញុំ</1> ឬតាមរយៈទម្រង់ទំនាក់ទំនងនៅលើ <3>គេហទំព័ររបស់ខ្ញុំ</3> ."
},
"summary": {
"body": "Reactive Resume គឺជាកម្មវិធីបង្កើតប្រវត្តិរូបសង្ខេបដោយឥតគិតថ្លៃ និងបើកចំហ ដែលត្រូវបានបង្កើតឡើងដើម្បីឲ្យលោកអ្នកអាចបង្កើត កែប្រែ ក៏ដូចជាចែករំលែកនូវប្រវត្តិរូបសង្ខេបរបស់អ្នកបានយ៉ាងងាយស្រួលដូចជា 1,2,3។ អ្នកអាចបង្កើតប្រវត្តិរូបបានច្រើន ចែករំលែកទៅកាន់អ្នកដែលកំពុងស្វែងរកបុគ្គលិក ឬ​មិត្តភក្តិតាមរយៈតំណភ្ជាប់ ហើយក៏អាចព្រីនជា PDF, មិនគិតថ្លៃ គ្មានការផ្សាយណាណិជ្ជកម្ម គ្មានការតាមដានឬលួចទិន្នន័យ ត្រឹមត្រូវ និងរក្សារបាននូវឯកជនភាព។",
"heading": "សង្ខេប"
}
}

View File

@ -0,0 +1,135 @@
{
"auth": {
"forgot-password": {
"actions": {
"send-email": "ផ្ញើអ៊ីមែលកំណត់ពាក្យសម្ងាត់ឡើងវិញ"
},
"body": "បញ្ចូលអ៉ីម៉ែលដែលអ្នកនឹងប្រើដើម្បីទាញយកគណនីមកវិញនៅពេលភ្លេចលេខកូដ",
"form": {
"email": {
"label": "អាស័យ​ដ្ឋាន​អ៊ី​ម៉េ​ល"
}
},
"heading": "ភ្លេច​លេខ​សំងាត់​របស់អ្នក​?",
"help-text": "ប្រសិនបើបង្កើតគណនីជាមួយនឹងអ៉ីម៉ែលនេះរួចហើយ នោះលោកអ្នកនឹងទទួលបានសារពីយើងខ្ញុំដើម្បីកំណត់ពាក្យសម្ងាត់ឡើងវិញ។"
},
"login": {
"actions": {
"login": "ចូល"
},
"body": "សូមបញ្ចូលឈ្មោះអ្នកប្រើប្រាស់ និងពាក្យសម្ងាត់ដែលភ្ជាប់ជាមួយគណនីរបស់អ្នក ដើម្បីចូល និងចូលប្រើប្រាស់ គ្រប់គ្រង និងចែករំលែកប្រវត្តិរូបសង្ខេបរបស់អ្នក។",
"form": {
"password": {
"label": "ពាក្យសម្ងាត់"
},
"username": {
"help-text": "អ្នកក៏អាចបញ្ចូលអាសយដ្ឋានអ៊ីមែលរបស់អ្នកផងដែរ។",
"label": "ឈ្មោះ​អ្នក​ប្រើ"
}
},
"heading": "ចូលទៅគណនីរបស់អ្នក។",
"recover-text": "ក្នុងករណីដែលអ្នកភ្លេចពាក្យសម្ងាត់របស់អ្នក អ្នកអាច <1>សង្គ្រោះគណនីរបស់អ្នក។</1> នៅទីនេះ",
"register-text": "ប្រសិនបើអ្នកមិនមានទេ អ្នកអាច <1>បង្កើតគណនីមួយ</1> នៅទីនេះ"
},
"register": {
"actions": {
"register": "ចុះឈ្មោះ",
"google": "ចូលជាមួយ Google"
},
"body": "សូមធ្វើបំពេញអាស័យដ្ឋាន អ៊ីម៉េល របស់អ្នកដើម្បីធ្វើការ​បង្កើតគណនីថ្មី។​",
"form": {
"confirm-password": {
"label": "បញ្ជាក់​ពាក្យ​សម្ងាត់"
},
"email": {
"label": "អាស័យ​ដ្ឋាន​អ៊ី​ម៉េ​ល"
},
"name": {
"label": "ឈ្មោះពេញ"
},
"password": {
"label": "ពាក្យសម្ងាត់"
},
"username": {
"label": "ឈ្មោះ​អ្នកប្រើប្រាស់"
}
},
"heading": "បង្កើតគណនី",
"loginText": "ប្រសិនបើអ្នកមានគណនីរួចហើយ អ្នកអាច <1>ចូលនៅទីនេះ</1> "
},
"reset-password": {
"actions": {
"set-password": "កំណត់ពាក្យសម្ងាត់ថ្មី។"
},
"body": "បញ្ចូលពាក្យសម្ងាត់ថ្មីសម្រាប់គណនីរបស់អ្នក។",
"form": {
"confirm-password": {
"label": "បញ្ជាក់​ពាក្យ​សម្ងាត់"
},
"password": {
"label": "ពាក្យសម្ងាត់"
}
},
"heading": "កំណត់លេខសម្ងាត់​របស់អ្នក"
}
},
"dashboard": {
"create-resume": {
"actions": {
"create-resume": "បង្កើតប្រវត្តិរូបសង្ខេប"
},
"body": "បង្កើតប្រវត្តិរូបរបស់អ្នកដោយដាក់ឈ្មោះណាមួយ។ វាអាចជាឈ្មោះតំណាងឲ្យមុខដំណែងដែលអ្នកចង់ដាក់ពាក្យ ឬឈ្មោះអ្វីម្យ៉ាងដែលអ្នកពេញចិត្ត។",
"form": {
"name": {
"label": "ឈ្មោះ"
},
"public": {
"label": "តើអាចចូលប្រើជាសាធារណៈបានទេ?"
},
"slug": {
"label": "Slug"
}
},
"heading": "បង្កើតប្រវត្តិរូបសង្ខេបថ្មី។"
},
"import-external": {
"heading": "នាំចូលពីប្រភពខាងក្រៅ",
"json-resume": {
"actions": {
"upload-json": "បញ្ចូល JSON"
},
"body": "ប្រសិនបើអ្នកមាន <1>ប្រវត្តិរូបសង្ខេប JSON ដែលមានសុពលភាព</1> រួចរាល់ហើយ អ្នកអាចប្រើវាដើម្បីតាមដានការអភិវឌ្ឍន៍របស់អ្នកយ៉ាងរហ័សនៅលើ Reactive Resume។ ចុចប៊ូតុងខាងក្រោម ហើយបង្ហោះឯកសារ JSON ដែលមានសុពលភាព ដើម្បីចាប់ផ្តើម។",
"heading": "នាំចូលពីប្រវត្តិរូប JSON"
},
"linkedin": {
"actions": {
"upload-archive": "ផ្ទុកឡើងប័ណ្ណសារហ្ស៊ីប"
},
"body": "អ្នកអាចសន្សំសំចៃពេលវេលាដោយការនាំចេញទិន្នន័យរបស់អ្នកពី LinkedIn ហើយប្រើវាដើម្បីបំពេញវាលដោយស្វ័យប្រវត្តិនៅលើ Reactive Resume។ ទៅកាន់ <1>ឯកជនភាពទិន្នន័យ</1> ផ្នែកនៅលើ LinkedIn និងស្នើសុំបណ្ណសារទិន្នន័យរបស់អ្នក។ នៅពេលដែលវាអាចប្រើបាន សូមបង្ហោះឯកសារ ZIP ខាងក្រោម។",
"heading": "នាំចូលពី LinkedIn"
},
"reactive-resume": {
"actions": {
"upload-json": "បង្ហោះ JSON",
"upload-json-v2": "បង្ហោះ JSON ពី v2"
},
"body": "ប្រសិនបើអ្នកមាន JSON ដែលត្រូវបាននាំចេញជាមួយនឹងកំណែបច្ចុប្បន្ននៃ Reactive Resume អ្នកអាចនាំចូលវាមកវិញនៅទីនេះ ដើម្បីទទួលបានកំណែដែលអាចកែសម្រួលបានម្តងទៀត។",
"heading": "នាំចូលពីប្រវត្តិរូបដែលមានប្រតិកម្ម"
}
},
"rename-resume": {
"actions": {
"rename-resume": "ប្តូរឈ្មោះប្រវត្តិរូប"
},
"form": {
"name": {
"label": "ឈ្មោះ"
},
"slug": {
"label": "ស្លក"
}
},
"heading": "ប្តូរឈ្មោះប្រវត្តិរូបរបស់អ្នក។"
}
}
}

View File

@ -84,7 +84,9 @@
"toggle-page-break-line": "ಪುಟ ಬ್ರೇಕ್ ಲೈನ್ ಅನ್ನು ಟಾಗಲ್ ಮಾಡಿ",
"toggle-sidebars": "ಅಡ್ಡಪಟ್ಟಿಗಳನ್ನು ಟಾಗಲ್ ಮಾಡಿ",
"zoom-in": "ಗಾತ್ರ ಹಿಗ್ಗಿಸಿ",
"zoom-out": "ಗಾತ್ರ ಕುಗ್ಗಿಸಿ"
"zoom-out": "ಗಾತ್ರ ಕುಗ್ಗಿಸಿ",
"undo": "ರದ್ದುಮಾಡು",
"redo": "ಮತ್ತೆಮಾಡು"
}
},
"header": {

View File

@ -84,7 +84,9 @@
"toggle-page-break-line": "പേജ് ബ്രേക്ക് ലൈൻ ടോഗിൾ ചെയ്യുക",
"toggle-sidebars": "സൈഡ്‌ബാറുകൾ ടോഗിൾ ചെയ്യുക",
"zoom-in": "വലുതാക്കുക",
"zoom-out": "ചെറുതാക്കുക"
"zoom-out": "ചെറുതാക്കുക",
"undo": "പഴയപടിയാക്കുക",
"redo": "വീണ്ടും ചെയ്യുക"
}
},
"header": {

View File

@ -0,0 +1,363 @@
{
"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": "जुम आउट गर्नुहोस्",
"undo": "पूर्ववत गर्नुहोस्",
"redo": "पुन: गर्नुहोस्"
}
},
"header": {
"menu": {
"delete": "मेटाउन",
"duplicate": "नक्कल",
"rename": "पुन: नामाकरण गर्नुहोस्",
"share-link": "लिङ्क साझा गर्नुहोस्",
"tooltips": {
"delete": "के तपाइँ यो बायोडाटा मेटाउन निश्चित हुनुहुन्छ? यो अपरिवर्तनीय कार्य हो।",
"share-link": "तपाईंले आफ्नो बायोडाटाको दृश्यतालाई अरूले देख्नको लागि सार्वजनिक रूपमा परिवर्तन गर्न आवश्यक छ।"
}
}
},
"leftSidebar": {
"sections": {
"awards": {
"form": {
"awarder": {
"label": "पुरस्कार दिने"
}
}
},
"basics": {
"actions": {
"photo-filters": "फोटो फिल्टरहरू"
},
"heading": "आधारभूत",
"headline": {
"label": "हेडलाइन"
},
"name": {
"label": "पुरा नाम"
},
"birthdate": {
"label": "जन्म मिति"
},
"photo-filters": {
"effects": {
"border": {
"label": "सीमा"
},
"grayscale": {
"label": "ग्रेस्केल"
},
"heading": "प्रभावहरू"
},
"shape": {
"heading": "आकार"
},
"size": {
"heading": "आकार (px मा)"
}
},
"photo-upload": {
"tooltip": {
"remove": "फोटो हटाउनुहोस्",
"upload": "फोटो अपलोड गर्नुहोस्"
}
}
},
"certifications": {
"form": {
"issuer": {
"label": "जारीकर्ता"
}
}
},
"education": {
"form": {
"area-study": {
"label": "अध्ययन क्षेत्र"
},
"courses": {
"label": "पाठ्यक्रमहरू"
},
"degree": {
"label": "डिग्री"
},
"grade": {
"label": "ग्रेड"
},
"institution": {
"label": "संस्था"
}
}
},
"location": {
"address": {
"label": "ठेगाना"
},
"city": {
"label": "सहर"
},
"country": {
"label": "राष्ट्र"
},
"heading": "स्थान",
"postal-code": {
"label": "हुलाक कोड"
},
"region": {
"label": "क्षेत्र"
}
},
"profiles": {
"form": {
"network": {
"label": "नेटवर्क"
},
"username": {
"label": "प्रयोगकर्ता नाम"
}
},
"heading": "प्रोफाइलहरू",
"heading_one": "प्रोफाइल"
},
"publications": {
"form": {
"publisher": {
"label": "प्रकाशक"
}
}
},
"references": {
"form": {
"relationship": {
"label": "सम्बन्ध"
}
}
},
"section": {
"heading": "खण्ड"
},
"volunteer": {
"form": {
"organization": {
"label": "सङ्गठन"
}
}
}
}
},
"rightSidebar": {
"sections": {
"css": {
"heading": "अनुकूलन CSS"
},
"export": {
"heading": "निर्यात गर्नुहोस्",
"json": {
"primary": "JSON",
"secondary": "Reactive Resume मा फिर्ता आयात गर्न सकिने आफ्नो रिज्युमको JSON संस्करण डाउनलोड गर्नुहोस्।"
},
"pdf": {
"loading": {
"primary": "PDF उत्पन्न गर्दै",
"secondary": "कृपया तपाईंको पीडीएफ उत्पन्न हुँदा पर्खनुहोस्, यसले 15 सेकेन्डसम्म लिन सक्छ।"
},
"normal": {
"primary": "PDF",
"secondary": "तपाइँको रिजुमेको PDF डाउनलोड गर्नुहोस् जुन तपाइँ प्रिन्ट गर्न सक्नुहुन्छ र तपाइँको सपनाको काममा पठाउन सक्नुहुन्छ। थप सम्पादनको लागि यो फाइल फिर्ता आयात गर्न सकिँदैन।"
}
}
},
"layout": {
"heading": "लेआउट",
"tooltip": {
"reset-layout": "लेआउट रिसेट गर्नुहोस्"
}
},
"links": {
"bugs-features": {
"body": "केहि चीजले तपाईंलाई पुन: सुरु गर्नबाट रोक्छ? वा तपाइँसँग थप्नको लागि एक अद्भुत विचार छ? सुरु गर्न GitHub मा मुद्दा उठाउनुहोस्।",
"button": "GitHub मुद्दाहरू",
"heading": "बगहरू? सुविधा अनुरोधहरू?"
},
"donate": {
"body": "यदि तपाइँ प्रतिक्रियात्मक पुन: प्रयोग गर्न मन पराउनुहुन्छ भने, कृपया एपलाई जारी राख्न र चलाउनको लागि, विज्ञापनहरू बिना र सदाको लागि निःशुल्क राख्नको लागि सकेसम्म दान गर्ने विचार गर्नुहोस्।",
"button": "मलाई एक कफी किन्नुहोस्",
"heading": "प्रतिक्रियात्मक पुन: सुरुमा दान गर्नुहोस्"
},
"github": "स्रोत कोड",
"heading": "लिङ्कहरू"
},
"settings": {
"global": {
"date": {
"primary": "मिति",
"secondary": "एप भरि प्रयोग गर्न मिति ढाँचा"
},
"heading": "विश्वव्यापी",
"language": {
"primary": "भाषा",
"secondary": "एप भरि प्रयोग गर्न भाषा प्रदर्शन गर्नुहोस्"
},
"theme": {
"primary": "विषयवस्तु"
}
},
"heading": "सेटिङहरू",
"page": {
"break-line": {
"primary": "ब्रेक लाइन",
"secondary": "A4 पृष्ठको उचाइ चिन्ह लगाउन सबै पृष्ठहरूमा रेखा देखाउनुहोस्"
},
"heading": "पृष्ठ",
"orientation": {
"disabled": "केवल एक पृष्ठ हुँदा कुनै प्रभाव छैन",
"primary": "अभिमुखीकरण",
"secondary": "पृष्ठहरू तेर्सो वा ठाडो रूपमा प्रदर्शन गर्ने कि नगर्ने"
}
},
"resume": {
"heading": "पुन: सुरु गर्नुहोस्",
"reset": {
"primary": "सबै कुरा रिसेट गर्नुहोस्",
"secondary": "धेरै गल्ती गर्नुभयो? सबै परिवर्तनहरू रिसेट गर्न र स्क्र्याचबाट सुरु गर्न यहाँ क्लिक गर्नुहोस्। सावधान रहनुहोस्, यो कार्य उल्टाउन सकिँदैन।"
},
"sample": {
"primary": "नमूना डेटा लोड गर्नुहोस्",
"secondary": "कहाँ सुरु गर्ने निश्चित छैन? पूर्ण रिजुमे कस्तो देखिन्छ भनेर हेर्नको लागि केही नमूना डेटा लोड गर्न यहाँ क्लिक गर्नुहोस्।"
}
}
},
"sharing": {
"heading": "बाढ्नु",
"short-url": {
"label": "छोटो URL लाई प्राथमिकता दिनुहोस्"
},
"visibility": {
"subtitle": "लिङ्क भएको कसैलाई पनि आफ्नो बायोडाटा हेर्न अनुमति दिनुहोस्",
"title": "सार्वजनिक"
}
},
"templates": {
"heading": "टेम्प्लेटहरू"
},
"theme": {
"form": {
"background": {
"label": "पृष्ठभूमि"
},
"primary": {
"label": "प्राथमिक"
},
"text": {
"label": "पाठ"
}
},
"heading": "विषयवस्तु"
},
"typography": {
"form": {
"font-family": {
"label": "फन्ट परिवार"
},
"font-size": {
"label": "फन्ट साइज"
}
},
"heading": "टाइपोग्राफी",
"widgets": {
"body": {
"label": "जीउ"
},
"headings": {
"label": "शीर्षकहरू"
}
}
}
}
}
}

View File

@ -0,0 +1,29 @@
{
"avatar": {
"menu": {
"greeting": "नमस्ते",
"logout": "बाहिर निस्कनु"
}
},
"footer": {
"credit": "<1> अमृत पिल्लै द्वारा एक जोश परियोजना</1>",
"license": "समुदाय द्वारा, समुदाय को लागी।"
},
"markdown": {
"help-text": "यो खण्डले <1>मार्कडाउनलाई समर्थन गर्दछ</1> ढाँचा।"
},
"date": {
"present": "उपस्थित"
},
"subtitle": "एक नि: शुल्क र खुला स्रोत पुनःसुरु बिल्डर।",
"title": "प्रतिक्रियात्मक पुन: सुरु",
"toast": {
"error": {
"upload-file-size": "कृपया २ मेगाबाइट मुनिका फाइलहरू मात्र अपलोड गर्नुहोस्।",
"upload-photo-size": "कृपया २ मेगाबाइट मुनिका तस्बिरहरू मात्र अपलोड गर्नुहोस्, प्राथमिकता वर्गाकार।"
},
"success": {
"resume-link-copied": "तपाईंको रिजुमेको लिङ्क तपाईंको क्लिपबोर्डमा प्रतिलिपि गरिएको छ।"
}
}
}

View File

@ -0,0 +1,25 @@
{
"create-resume": {
"subtitle": "स्क्र्याचबाट सुरु गर्नुहोस्",
"title": "नयाँ रिजुमे सिर्जना गर्नुहोस्"
},
"import-external": {
"subtitle": "LinkedIn, JSON पुनःसुरु, प्रतिक्रियात्मक पुनःसुरु",
"title": "बाह्य स्रोतहरूबाट आयात गर्नुहोस्"
},
"resume": {
"menu": {
"delete": "मेटाउन",
"duplicate": "नक्कल",
"open": "खोल्नुहोस्",
"rename": "पुन: नामाकरण गर्नुहोस्",
"share-link": "लिङ्क साझा गर्नुहोस्",
"tooltips": {
"delete": "के तपाइँ यो बायोडाटा मेटाउन निश्चित हुनुहुन्छ? यो अपरिवर्तनीय कार्य हो।",
"share-link": "तपाईंले आफ्नो बायोडाटाको दृश्यतालाई अरूले देख्नको लागि सार्वजनिक रूपमा परिवर्तन गर्न आवश्यक छ।"
}
},
"timestamp": "अन्तिम अपडेट {{timestamp}} पहिले"
},
"title": "ड्यासबोर्ड"
}

View File

@ -0,0 +1,41 @@
{
"actions": {
"app": "एपमा जानुहोस्",
"login": "लग - इन",
"logout": "बाहिर निस्कनु",
"register": "दर्ता गर्नुहोस्"
},
"features": {
"heading": "विशेषताहरु",
"list": {
"ads": "कुनै विज्ञापन छैन",
"export": "JSON वा PDF ढाँचामा आफ्नो रिजुमे निर्यात गर्नुहोस्",
"free": "नि: शुल्क, सधैंभरि",
"import": "LinkedIn, JSON रिज्युमबाट डाटा आयात गर्नुहोस्",
"languages": "धेरै भाषाहरूमा पहुँचयोग्य",
"more": "र धेरै रोमाञ्चक सुविधाहरू, <1>यसको बारेमा सबै यहाँ पढ्नुहोस्</1>",
"tracking": "कुनै प्रयोगकर्ता ट्र्याकिङ छैन"
}
},
"links": {
"heading": "लिङ्कहरू",
"links": {
"donate": "दान गर्नुहोस्",
"github": "स्रोत कोड",
"privacy": "गोपनीयता नीति",
"service": "सेवाका सर्तहरु"
}
},
"screenshots": {
"heading": "स्क्रिनसटहरू"
},
"testimonials": {
"heading": "प्रशंसापत्रहरू",
"body": "राम्रो वा नराम्रो, म प्रतिक्रियाशील पुन: सुरुमा तपाईंको राय सुन्न चाहन्छु र अनुभव तपाईंको लागि कस्तो छ।<br/>विश्वभरका प्रयोगकर्ताहरूले पठाएको सन्देशहरू यहाँ छन्।",
"contact": "तपाईंले <1>मेरो इमेल मार्फत मलाई सम्पर्क गर्न सक्नुहुन्छ</1> वा <3>मेरो वेबसाइटमा सम्पर्क फारम मार्फत</3> ।"
},
"summary": {
"body": "Reactive Resume एउटा नि:शुल्क र खुला स्रोत रिजुमे निर्माणकर्ता हो जुन तपाइँको रिज्युम 1, 2, 3 को रूपमा सजिलो बनाउन, अद्यावधिक गर्ने र साझेदारी गर्ने सांसारिक कार्यहरू बनाउनको लागि बनाइएको हो। यस एपको साथ, तपाइँ धेरै रिजुमेहरू सिर्जना गर्न सक्नुहुन्छ, तिनीहरूलाई भर्तीकर्ता वा साथीहरूसँग साझा गर्न सक्नुहुन्छ। एक अद्वितीय लिङ्क मार्फत र यसलाई PDF को रूपमा प्रिन्ट गर्नुहोस्, सबै नि: शुल्क, कुनै विज्ञापनहरू, कुनै ट्र्याकिङ बिना, तपाईंको डाटाको अखण्डता र गोपनीयता गुमाए बिना।",
"heading": "सारांश"
}
}

View File

@ -0,0 +1,135 @@
{
"auth": {
"forgot-password": {
"actions": {
"send-email": "रिसेट पासवर्ड इमेल पठाउनुहोस्"
},
"body": "तपाईले रिकभर गर्न चाहनु भएको खातासँग सम्बन्धित इमेल ठेगाना मात्र प्रविष्ट गर्नुहोस्।",
"form": {
"email": {
"label": "इ - मेल ठेगाना"
}
},
"heading": "आफ्नो पासवर्ड बिर्सनुभयो?",
"help-text": "यदि खाता अवस्थित छ भने, तपाईंले आफ्नो पासवर्ड रिसेट गर्न लिङ्क भएको इमेल प्राप्त गर्नुहुनेछ।"
},
"login": {
"actions": {
"login": "लग - इन"
},
"body": "कृपया लगइन गर्न र पहुँच गर्न, व्यवस्थापन गर्न र आफ्नो बायोडाटा साझेदारी गर्न आफ्नो खातासँग सम्बन्धित प्रयोगकर्ता नाम र पासवर्ड प्रविष्ट गर्नुहोस्।",
"form": {
"password": {
"label": "पासवर्ड"
},
"username": {
"help-text": "तपाईं आफ्नो इमेल ठेगाना पनि प्रविष्ट गर्न सक्नुहुन्छ",
"label": "प्रयोगकर्ता नाम"
}
},
"heading": "आफ्नो खातामा लगइन गर्नुहोस्",
"recover-text": "यदि तपाईंले आफ्नो पासवर्ड बिर्सनुभएको छ भने, तपाईं <1>आफ्नो खाता पुन: प्राप्त गर्न सक्नुहुन्छ</1> यहाँ।",
"register-text": "यदि तपाईंसँग छैन भने, तपाईं <1>खाता सिर्जना गर्न सक्नुहुन्छ</1> यहाँ।"
},
"register": {
"actions": {
"register": "दर्ता गर्नुहोस्",
"google": "Google मा दर्ता गर्नुहोस्"
},
"body": "खाता बनाउनको लागि कृपया आफ्नो व्यक्तिगत जानकारी प्रविष्ट गर्नुहोस्।",
"form": {
"confirm-password": {
"label": "पासवर्ड सुनिश्चित गर्नुहोस"
},
"email": {
"label": "इ - मेल ठेगाना"
},
"name": {
"label": "पुरा नाम"
},
"password": {
"label": "पासवर्ड"
},
"username": {
"label": "प्रयोगकर्ता नाम"
}
},
"heading": "खाता खोल्नुहोस्",
"loginText": "यदि तपाइँसँग पहिले नै खाता छ भने, तपाइँ यहाँ <1> लगइन गर्न सक्नुहुन्छ</1> ।"
},
"reset-password": {
"actions": {
"set-password": "नयाँ पासवर्ड सेट गर्नुहोस्"
},
"body": "आफ्नो खाताको लागि नयाँ पासवर्ड प्रविष्ट गर्नुहोस्।",
"form": {
"confirm-password": {
"label": "पासवर्ड सुनिश्चित गर्नुहोस"
},
"password": {
"label": "पासवर्ड"
}
},
"heading": "आफ्नो पासवर्ड रिसेट गर्नुहोस्"
}
},
"dashboard": {
"create-resume": {
"actions": {
"create-resume": "रिजुमे सिर्जना गर्नुहोस्"
},
"body": "यसलाई नाम दिएर आफ्नो रिजुमे निर्माण सुरु गर्नुहोस्। यो तपाईंले आवेदन गरिरहनुभएको भूमिका वा तपाईंको मनपर्ने खाजाको सन्दर्भमा हुन सक्छ।",
"form": {
"name": {
"label": "नाम"
},
"public": {
"label": "के सार्वजनिक रूपमा पहुँचयोग्य छ?"
},
"slug": {
"label": "स्लग"
}
},
"heading": "नयाँ रिजुमे सिर्जना गर्नुहोस्"
},
"import-external": {
"heading": "बाह्य स्रोतहरूबाट आयात गर्नुहोस्",
"json-resume": {
"actions": {
"upload-json": "JSON अपलोड गर्नुहोस्"
},
"body": "यदि तपाईंसँग <1>प्रमाणित JSON रिजुमे छ भने</1> जान तयार छ, तपाइँ यसलाई प्रतिक्रियाशील पुन: सुरुमा तपाइँको विकासलाई द्रुत ट्र्याक गर्न प्रयोग गर्न सक्नुहुन्छ। तलको बटनमा क्लिक गर्नुहोस् र सुरु गर्नको लागि मान्य JSON फाइल अपलोड गर्नुहोस्।",
"heading": "JSON पुनःसुरुबाट आयात गर्नुहोस्"
},
"linkedin": {
"actions": {
"upload-archive": "ZIP अभिलेख अपलोड गर्नुहोस्"
},
"body": "तपाईंले LinkedIn बाट आफ्नो डाटा निर्यात गरेर र Reactive Resume मा फिल्डहरू स्वत: भर्न प्रयोग गरेर समय बचत गर्न सक्नुहुन्छ। <1>डेटा गोपनीयतामा जानुहोस्</1> LinkedIn मा खण्ड र आफ्नो डाटा को एक संग्रह अनुरोध। यो उपलब्ध भएपछि, तलको ZIP फाइल अपलोड गर्नुहोस्।",
"heading": "LinkedIn बाट आयात गर्नुहोस्"
},
"reactive-resume": {
"actions": {
"upload-json": "JSON अपलोड गर्नुहोस्",
"upload-json-v2": "v2 बाट JSON अपलोड गर्नुहोस्"
},
"body": "यदि तपाइँसँग JSON छ जुन Reactive Resume को हालको संस्करणको साथ निर्यात गरिएको थियो, तपाइँ यसलाई फेरि सम्पादन योग्य संस्करण प्राप्त गर्न यहाँ आयात गर्न सक्नुहुन्छ।",
"heading": "प्रतिक्रियात्मक पुन: सुरुबाट आयात गर्नुहोस्"
}
},
"rename-resume": {
"actions": {
"rename-resume": "पुन: नामकरण गर्नुहोस्"
},
"form": {
"name": {
"label": "नाम"
},
"slug": {
"label": "स्लग"
}
},
"heading": "आफ्नो रिजुमे पुन: नामाकरण गर्नुहोस्"
}
}
}

View File

@ -84,7 +84,9 @@
"toggle-page-break-line": "Regel voor pagina-einde in-/uitschakelen",
"toggle-sidebars": "Zijbalk tonen/verbergen",
"zoom-in": "Inzoomen",
"zoom-out": "Uitzoomen"
"zoom-out": "Uitzoomen",
"undo": "Ongedaan maken",
"redo": "Redo"
}
},
"header": {

View File

@ -0,0 +1,363 @@
{
"common": {
"actions": {
"add": "Legg til ny {{token}}",
"delete": "Slett {{token}}",
"edit": "Rediger {{token}}"
},
"columns": {
"heading": "Kolonner",
"tooltip": "Endre antall kolonner"
},
"form": {
"date": {
"label": "Dato"
},
"description": {
"label": "Beskrivelse"
},
"email": {
"label": "E-postadresse"
},
"end-date": {
"help-text": "La feltet stå tomt hvis det fremdeles finnes",
"label": "Sluttdato"
},
"keywords": {
"label": "Nøkkelord"
},
"level": {
"label": "Nivå"
},
"levelNum": {
"label": "Nivå (Nummer)"
},
"name": {
"label": "Navn"
},
"phone": {
"label": "Telefonnummer"
},
"position": {
"label": "Stilling"
},
"start-date": {
"label": "Startdato"
},
"subtitle": {
"label": "Teksting"
},
"summary": {
"label": "Sammendrag"
},
"title": {
"label": "Tittel"
},
"url": {
"label": "Hjemmeside"
}
},
"glossary": {
"page": "Side"
},
"list": {
"actions": {
"delete": "Slett",
"duplicate": "Dupliser",
"edit": "Rediger"
},
"empty-text": "Denne listen er tom."
},
"tooltip": {
"delete-item": "Er du sikker på at du vil slette dette elementet? Handlingen kan ikke angres.",
"delete-section": "Slett seksjon",
"rename-section": "Gi nytt navn til seksjon",
"toggle-visibility": "Slå på synlighet"
}
},
"controller": {
"tooltip": {
"center-artboard": "Center Artboard",
"copy-link": "Kopier lenke til CV",
"export-pdf": "Eksporter PDF",
"toggle-orientation": "Bytt sideorientering",
"toggle-page-break-line": "Veksle på sideskiftlinje",
"toggle-sidebars": "Slå av sidefelt",
"zoom-in": "Zoom inn",
"zoom-out": "Zoome ut",
"undo": "Angre",
"redo": "Gjøre om"
}
},
"header": {
"menu": {
"delete": "Slett",
"duplicate": "Duplisere",
"rename": "Gi nytt navn",
"share-link": "Del lenke",
"tooltips": {
"delete": "Er du sikker på at du vil slette denne CV-en? Dette er en irreversibel handling.",
"share-link": "Du må endre synligheten til CV-en til offentlig for å gjøre den synlig for andre."
}
}
},
"leftSidebar": {
"sections": {
"awards": {
"form": {
"awarder": {
"label": "Priser"
}
}
},
"basics": {
"actions": {
"photo-filters": "Fotofiltre"
},
"heading": "Grunnleggende",
"headline": {
"label": "Overskrift"
},
"name": {
"label": "Fullt navn"
},
"birthdate": {
"label": "Fødselsdato"
},
"photo-filters": {
"effects": {
"border": {
"label": "Grense"
},
"grayscale": {
"label": "Gråtoner"
},
"heading": "Effekter"
},
"shape": {
"heading": "Form"
},
"size": {
"heading": "Størrelse (i px)"
}
},
"photo-upload": {
"tooltip": {
"remove": "Fjern bilde",
"upload": "Last opp bilde"
}
}
},
"certifications": {
"form": {
"issuer": {
"label": "Utsteder"
}
}
},
"education": {
"form": {
"area-study": {
"label": "Studieområde"
},
"courses": {
"label": "Kurs"
},
"degree": {
"label": "Grad"
},
"grade": {
"label": "Karakter"
},
"institution": {
"label": "Institusjon"
}
}
},
"location": {
"address": {
"label": "Adresse"
},
"city": {
"label": "By"
},
"country": {
"label": "Land"
},
"heading": "plassering",
"postal-code": {
"label": "postnummer"
},
"region": {
"label": "Region"
}
},
"profiles": {
"form": {
"network": {
"label": "Nettverk"
},
"username": {
"label": "Brukernavn"
}
},
"heading": "Profiler",
"heading_one": "Profil"
},
"publications": {
"form": {
"publisher": {
"label": "Forlegger"
}
}
},
"references": {
"form": {
"relationship": {
"label": "Forhold"
}
}
},
"section": {
"heading": "Seksjon"
},
"volunteer": {
"form": {
"organization": {
"label": "Organisasjon"
}
}
}
}
},
"rightSidebar": {
"sections": {
"css": {
"heading": "Tilpasset CSS"
},
"export": {
"heading": "Eksport",
"json": {
"primary": "JSON",
"secondary": "Last ned en JSON-versjon av CV-en din som kan importeres tilbake til Reactive CV."
},
"pdf": {
"loading": {
"primary": "Generer PDF-fil",
"secondary": "Vennligst vent mens PDF-en din blir generert, dette kan ta opptil 15 sekunder."
},
"normal": {
"primary": "PDF",
"secondary": "Last ned en PDF av CV-en din som du kan skrive ut og sende ut til drømmejobben. Denne filen kan ikke importeres tilbake for videre redigering."
}
}
},
"layout": {
"heading": "Oppsett",
"tooltip": {
"reset-layout": "Tilbakestill layout"
}
},
"links": {
"bugs-features": {
"body": "Noe som hindrer deg i å lage en CV? Eller har du en fantastisk idé å legge til? Ta opp et problem på GitHub for å komme i gang.",
"button": "GitHub-problemer",
"heading": "Bugs? Funksjonsforespørsler?"
},
"donate": {
"body": "Hvis du likte å bruke Reactive Resume, kan du vurdere å donere så mye du kan for å holde appen oppe og kjøre, uten annonser og gratis for alltid.",
"button": "Kjøp meg en kaffe",
"heading": "Doner til Reactive CV"
},
"github": "Kildekode",
"heading": "Linker"
},
"settings": {
"global": {
"date": {
"primary": "Dato",
"secondary": "Datoformat for bruk på tvers av appen"
},
"heading": "Global",
"language": {
"primary": "Språk",
"secondary": "Visningsspråk for bruk på tvers av appen"
},
"theme": {
"primary": "Tema"
}
},
"heading": "Innstillinger",
"page": {
"break-line": {
"primary": "Break Line",
"secondary": "Vis en linje på alle sider for å markere høyden på en A4-side"
},
"heading": "Side",
"orientation": {
"disabled": "Har ingen effekt når det bare er én side",
"primary": "Orientering",
"secondary": "Om sider skal vises horisontalt eller vertikalt"
}
},
"resume": {
"heading": "Gjenoppta",
"reset": {
"primary": "Tilbakestill alt",
"secondary": "Gjorde for mange feil? Klikk her for å tilbakestille alle endringer og starte fra bunnen av. Vær forsiktig, denne handlingen kan ikke reverseres."
},
"sample": {
"primary": "Last inn prøvedata",
"secondary": "Ikke sikker på hvor du skal begynne? Klikk her for å laste inn noen eksempeldata for å se hvordan en fullstendig CV ser ut."
}
}
},
"sharing": {
"heading": "Deling",
"short-url": {
"label": "Foretrekker kort URL"
},
"visibility": {
"subtitle": "Tillat alle med en lenke å se CV-en din",
"title": "Offentlig"
}
},
"templates": {
"heading": "Maler"
},
"theme": {
"form": {
"background": {
"label": "Bakgrunn"
},
"primary": {
"label": "Hoved"
},
"text": {
"label": "Tekst"
}
},
"heading": "Tema"
},
"typography": {
"form": {
"font-family": {
"label": "Fontfamilie"
},
"font-size": {
"label": "Skriftstørrelse"
}
},
"heading": "Typografi",
"widgets": {
"body": {
"label": "Kropp"
},
"headings": {
"label": "Overskrifter"
}
}
}
}
}
}

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