mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2025-11-10 12:32:28 +10:00
Compare commits
203 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 30fd283898 | |||
| 726ea7312b | |||
| f3a7180d4b | |||
| 0173ce32c3 | |||
| d4b6c16bf9 | |||
| c571f201d3 | |||
| e4ecf50ed4 | |||
| 5ee99cfdab | |||
| 72e610b50d | |||
| ba34787333 | |||
| e11b0e6224 | |||
| c78ee18e05 | |||
| 5f5b484243 | |||
| bcc451a6a1 | |||
| 55a7f6a556 | |||
| e9b6265c60 | |||
| 2e2f3271c9 | |||
| fa3e92d643 | |||
| 1f9b52eda6 | |||
| 7074b6fc76 | |||
| b4c4fb94f7 | |||
| 22bdb64fa9 | |||
| af02158d05 | |||
| 6a8db92fc4 | |||
| 6f219ef17e | |||
| 667e51abdc | |||
| 7b98277c32 | |||
| 77ed7ed8be | |||
| ce584d9326 | |||
| 5685352375 | |||
| 036b2917a6 | |||
| e972320722 | |||
| 4ac1e9db35 | |||
| 9fe4403b40 | |||
| 4f4084ab45 | |||
| 72227dc9ab | |||
| d44795a421 | |||
| e9584144e4 | |||
| bbedfa3b75 | |||
| 03f7d74096 | |||
| a62693d611 | |||
| 421f195e1e | |||
| b22dff523f | |||
| 58d0c6e315 | |||
| 36178cac22 | |||
| 376786fa25 | |||
| efceda1c55 | |||
| 047e317c51 | |||
| 36ad63adb9 | |||
| 45c88caf58 | |||
| ca11a9217a | |||
| fd6fbbba77 | |||
| e2fb83bda9 | |||
| 40567e8f61 | |||
| 64c899b159 | |||
| b267cc4097 | |||
| f4657b6592 | |||
| 6a2f512638 | |||
| 499005c21f | |||
| 0e18d3fc48 | |||
| 3b831c4eb4 | |||
| 40564944ef | |||
| fdbb6d2e5b | |||
| 398cd63082 | |||
| efd4af14e5 | |||
| 889697fc31 | |||
| 3aedf6618d | |||
| abf42e13af | |||
| 40bcbebadd | |||
| 364f2e6d49 | |||
| 7e5dfd75f9 | |||
| b94d10c614 | |||
| 8c40b417ec | |||
| 1f17dfe6ea | |||
| be6ea1a224 | |||
| 583e9effae | |||
| 619b2757c8 | |||
| 9e27eee029 | |||
| c2d3c611e1 | |||
| 735f589e54 | |||
| 1e3d6fbb77 | |||
| 3995e7159a | |||
| 6662acf0b0 | |||
| feb8abca95 | |||
| 75c83bd91d | |||
| f6d5897ed3 | |||
| ed356763a1 | |||
| 4847246d84 | |||
| a0ae6cb77e | |||
| 2aa2550be0 | |||
| df39913d49 | |||
| 2225505d48 | |||
| afe20e61ee | |||
| 794e9c6511 | |||
| e7e423bf29 | |||
| 2173297207 | |||
| b091cfa474 | |||
| 057bb3a414 | |||
| c1442c9acc | |||
| 977f1beafd | |||
| 39ee710e97 | |||
| 1d1841c8db | |||
| 3e44774ed4 | |||
| 9e2fa01896 | |||
| 7811f9840c | |||
| 34425c6200 | |||
| 46f9fc549a | |||
| 237abf359b | |||
| c5e8739009 | |||
| 0ea8040977 | |||
| 1f10e8efe3 | |||
| 8c2688670e | |||
| bc5d49b568 | |||
| 27ea84e720 | |||
| 0becb66bfd | |||
| 11f88492e9 | |||
| ae3e01466f | |||
| 5d04dd8a83 | |||
| 52c15a8151 | |||
| f6104e7051 | |||
| ed710f6fe5 | |||
| 7e6e239d7f | |||
| b4381a22f3 | |||
| ba6ca4d220 | |||
| 5486906b05 | |||
| 7348b295cb | |||
| 025762fdf6 | |||
| 96411cdb90 | |||
| 835f453384 | |||
| cc475ae1e9 | |||
| a5249ec646 | |||
| d0e3090421 | |||
| 14f68c8937 | |||
| 9c0c6076b3 | |||
| 36bf729161 | |||
| 3a430ad98c | |||
| 90a8610dd7 | |||
| d62ddab140 | |||
| ca0186bb67 | |||
| 88ac8389ea | |||
| 2f3864fff2 | |||
| 7878e52cc4 | |||
| 08b1967a4e | |||
| b870ca8297 | |||
| 1507c54671 | |||
| 0984ca4daf | |||
| 438798f8de | |||
| 27aadb8948 | |||
| 244a4118cf | |||
| cde320ce46 | |||
| 4772df7618 | |||
| ecb95b35f3 | |||
| 24b09af563 | |||
| 9471fb4169 | |||
| 2f296d6f08 | |||
| cd3d3caa15 | |||
| 440eefe46e | |||
| 5787e2badb | |||
| c235e5ab16 | |||
| f584c70f27 | |||
| 3aa0279519 | |||
| 6830aec2f9 | |||
| 9a3d7af325 | |||
| 52f7e8557f | |||
| 12c17d1c7c | |||
| 67918187a1 | |||
| dcbc0c2b45 | |||
| 26b6a741c2 | |||
| d7064129e8 | |||
| 279dd36a13 | |||
| 49e47b28de | |||
| a782343e0a | |||
| 1e7821a46d | |||
| f7bea5a218 | |||
| 05fa4f3192 | |||
| ed357f0ebc | |||
| 1774832a58 | |||
| 2837befd52 | |||
| 38d866c0c2 | |||
| 87c7acf4f1 | |||
| 1bd68118ce | |||
| 5c34b28c80 | |||
| c550183720 | |||
| 3605579b1b | |||
| fa2e28688f | |||
| 20f1031e28 | |||
| 292cb6d0ed | |||
| 45f2dc1cfc | |||
| e319dd3e3d | |||
| 9678f7a6e5 | |||
| 0cca4e21fb | |||
| f6758f191d | |||
| 983662f877 | |||
| c7fc28a5c5 | |||
| 1f7c33e805 | |||
| 437cc331a8 | |||
| aef51375b8 | |||
| bdd65968e5 | |||
| 061a789c18 | |||
| 68507d0501 | |||
| 1e28c5adfa | |||
| 3b09550ebd | |||
| 16aef9cbec |
@ -2,7 +2,7 @@
|
||||
/app
|
||||
|
||||
# Build Artifacts
|
||||
**/.turbo
|
||||
/schema/dist
|
||||
/server/dist
|
||||
/client/.next
|
||||
|
||||
|
||||
@ -1,12 +1,23 @@
|
||||
{
|
||||
"ignorePatterns": ["/app"],
|
||||
"parser": "@typescript-eslint/parser",
|
||||
"extends": ["plugin:@typescript-eslint/recommended"],
|
||||
"plugins": ["@typescript-eslint/eslint-plugin", "simple-import-sort"],
|
||||
"plugins": ["@typescript-eslint/eslint-plugin", "unused-imports", "simple-import-sort"],
|
||||
"rules": {
|
||||
// ESLint
|
||||
"no-unused-vars": "off",
|
||||
|
||||
// Unused Imports
|
||||
"unused-imports/no-unused-imports": "error",
|
||||
"unused-imports/no-unused-vars": [
|
||||
"warn",
|
||||
{
|
||||
"vars": "all",
|
||||
"args": "none",
|
||||
"varsIgnorePattern": "^_",
|
||||
"argsIgnorePattern": "^_"
|
||||
}
|
||||
],
|
||||
|
||||
// Simple Import Sort
|
||||
"simple-import-sort/imports": "error",
|
||||
"simple-import-sort/exports": "error",
|
||||
|
||||
15
.github/workflows/docker-build-push.yml
vendored
15
.github/workflows/docker-build-push.yml
vendored
@ -13,23 +13,24 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
image: [client, server]
|
||||
arch: [linux/amd64, linux/arm64]
|
||||
|
||||
steps:
|
||||
- name: Checkout the repository
|
||||
uses: actions/checkout@v3.3.0
|
||||
uses: actions/checkout@v3.5.2
|
||||
|
||||
- id: version
|
||||
name: App Version
|
||||
uses: martinbeentjes/npm-get-version-action@v1.2.3
|
||||
uses: martinbeentjes/npm-get-version-action@v1.3.1
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2.1.0
|
||||
with:
|
||||
platforms: amd64
|
||||
platforms: ${{ matrix.arch }}
|
||||
|
||||
- id: buildx
|
||||
name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2.2.1
|
||||
uses: docker/setup-buildx-action@v2.5.0
|
||||
|
||||
- name: Login to Docker Hub
|
||||
uses: docker/login-action@v2.1.0
|
||||
@ -45,12 +46,14 @@ jobs:
|
||||
password: ${{ secrets.GH_TOKEN }}
|
||||
|
||||
- name: Build and Push Docker Image
|
||||
uses: docker/build-push-action@v3.3.0
|
||||
uses: docker/build-push-action@v4.0.0
|
||||
with:
|
||||
context: .
|
||||
push: true
|
||||
platforms: linux/amd64
|
||||
platforms: ${{ matrix.arch }}
|
||||
file: ${{ matrix.image }}/Dockerfile
|
||||
build-args: |
|
||||
TURBO_TOKEN=${{ secrets.TURBO_TOKEN }}
|
||||
tags: |
|
||||
amruthpillai/reactive-resume:${{ matrix.image }}-latest
|
||||
amruthpillai/reactive-resume:${{ matrix.image }}-${{ steps.version.outputs.current-version }}
|
||||
|
||||
7
.gitignore
vendored
7
.gitignore
vendored
@ -1,6 +1,7 @@
|
||||
# Environment Variables
|
||||
.env
|
||||
.env.*
|
||||
*.env
|
||||
!.env.gitpod
|
||||
!.env.example
|
||||
|
||||
@ -10,8 +11,8 @@ node_modules
|
||||
# macOS
|
||||
.DS_Store
|
||||
|
||||
# Turbo
|
||||
.turbo
|
||||
|
||||
# Intellij
|
||||
.idea
|
||||
|
||||
# Turborepo
|
||||
.turbo
|
||||
@ -12,8 +12,8 @@ android {
|
||||
targetSdk 32
|
||||
versionCode 3
|
||||
versionName "1.0"
|
||||
resConfigs 'en'
|
||||
|
||||
resConfigs "en"
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
@ -38,6 +38,7 @@ android {
|
||||
buildFeatures {
|
||||
viewBinding true
|
||||
}
|
||||
namespace 'me.rxresu.app'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="me.rxresu.app">
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
|
||||
|
||||
@ -6,7 +6,6 @@ import android.webkit.WebView
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
|
||||
class MainActivity : AppCompatActivity() {
|
||||
|
||||
private lateinit var webView: WebView
|
||||
|
||||
private var url = "https://rxresu.me"
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
plugins {
|
||||
id 'com.android.application' version '7.1.2' apply false
|
||||
id 'com.android.library' version '7.1.2' apply false
|
||||
id 'org.jetbrains.kotlin.android' version '1.8.0' apply false
|
||||
id 'com.android.application' version '7.4.2' apply false
|
||||
id 'com.android.library' version '7.4.2' apply false
|
||||
id 'org.jetbrains.kotlin.android' version '1.8.21' apply false
|
||||
}
|
||||
|
||||
task clean(type: Delete) {
|
||||
|
||||
2
app/gradle/wrapper/gradle-wrapper.properties
vendored
2
app/gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,6 +1,6 @@
|
||||
#Wed Mar 09 21:34:49 CET 2022
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
|
||||
distributionPath=wrapper/dists
|
||||
zipStorePath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
|
||||
@ -2,12 +2,12 @@ FROM node:lts-alpine AS base
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
RUN apk add --no-cache g++ git curl make python3 libc6-compat \
|
||||
&& curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm
|
||||
RUN apk add --no-cache g++ git make curl python3 libc6-compat \
|
||||
&& corepack enable && corepack prepare pnpm@latest --activate
|
||||
|
||||
FROM base as dependencies
|
||||
|
||||
COPY package.json pnpm-*.yaml turbo.json ./
|
||||
COPY package.json pnpm-*.yaml ./
|
||||
COPY ./schema/package.json ./schema/package.json
|
||||
COPY ./client/package.json ./client/package.json
|
||||
|
||||
@ -21,11 +21,14 @@ COPY --from=dependencies /app/node_modules ./node_modules
|
||||
COPY --from=dependencies /app/schema/node_modules ./schema/node_modules
|
||||
COPY --from=dependencies /app/client/node_modules ./client/node_modules
|
||||
|
||||
RUN pnpm run build --filter client
|
||||
ARG TURBO_TOKEN
|
||||
ENV TURBO_TOKEN=$TURBO_TOKEN
|
||||
|
||||
RUN pnpm exec turbo --filter client build
|
||||
|
||||
FROM base as production
|
||||
|
||||
COPY --from=builder /app/package.json /app/pnpm-*.yaml /app/turbo.json ./
|
||||
COPY --from=builder /app/package.json /app/pnpm-*.yaml ./
|
||||
COPY --from=builder /app/client/package.json ./client/package.json
|
||||
|
||||
RUN pnpm install --filter client --prod --frozen-lockfile --workspace-root
|
||||
@ -39,7 +42,4 @@ EXPOSE 3000
|
||||
|
||||
ENV PORT 3000
|
||||
|
||||
HEALTHCHECK --interval=30s --timeout=20s --retries=3 --start-period=15s \
|
||||
CMD curl -fSs localhost:3000 || exit 1
|
||||
|
||||
CMD [ "pnpm", "run", "start", "--filter", "client" ]
|
||||
CMD [ "pnpm", "run", "--filter", "client", "start" ]
|
||||
43
client/Dockerfile.standalone
Normal file
43
client/Dockerfile.standalone
Normal file
@ -0,0 +1,43 @@
|
||||
FROM node:18-alpine AS base
|
||||
|
||||
FROM base AS deps
|
||||
RUN apk add --no-cache libc6-compat
|
||||
WORKDIR /app
|
||||
|
||||
COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./
|
||||
RUN \
|
||||
if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
|
||||
elif [ -f package-lock.json ]; then npm ci; \
|
||||
elif [ -f pnpm-lock.yaml ]; then yarn global add pnpm && pnpm i --frozen-lockfile; \
|
||||
else echo "Lockfile not found." && exit 1; \
|
||||
fi
|
||||
|
||||
FROM base AS builder
|
||||
WORKDIR /app
|
||||
COPY --from=deps /app/node_modules ./node_modules
|
||||
COPY . .
|
||||
|
||||
ENV NEXT_TELEMETRY_DISABLED 1
|
||||
|
||||
RUN yarn global add pnpm && pnpm build
|
||||
|
||||
FROM base AS runner
|
||||
WORKDIR /app
|
||||
|
||||
ENV NODE_ENV production
|
||||
ENV NEXT_TELEMETRY_DISABLED 1
|
||||
|
||||
RUN addgroup --system --gid 1001 nodejs
|
||||
RUN adduser --system --uid 1001 nextjs
|
||||
|
||||
COPY --from=builder /app/public ./public
|
||||
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
|
||||
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
|
||||
|
||||
USER nextjs
|
||||
|
||||
EXPOSE 3000
|
||||
|
||||
ENV PORT 3000
|
||||
|
||||
CMD ["node", "client/server.js"]
|
||||
@ -14,11 +14,11 @@ import {
|
||||
import { ButtonBase, Divider, Tooltip, useMediaQuery, useTheme } from '@mui/material';
|
||||
import clsx from 'clsx';
|
||||
import dayjs from 'dayjs';
|
||||
import { get } from 'lodash';
|
||||
import get from 'lodash/get';
|
||||
import { useTranslation } from 'next-i18next';
|
||||
import toast from 'react-hot-toast';
|
||||
import { useMutation } from 'react-query';
|
||||
import { ReactZoomPanPinchRef } from 'react-zoom-pan-pinch';
|
||||
import { ReactZoomPanPinchHandlers } from 'react-zoom-pan-pinch';
|
||||
import { ActionCreators } from 'redux-undo';
|
||||
|
||||
import { ServerError } from '@/services/axios';
|
||||
@ -29,7 +29,7 @@ import getResumeUrl from '@/utils/getResumeUrl';
|
||||
|
||||
import styles from './ArtboardController.module.scss';
|
||||
|
||||
const ArtboardController: React.FC<ReactZoomPanPinchRef> = ({ zoomIn, zoomOut, centerView }) => {
|
||||
const ArtboardController: React.FC<ReactZoomPanPinchHandlers> = ({ zoomIn, zoomOut, centerView }) => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
const theme = useTheme();
|
||||
|
||||
@ -20,7 +20,6 @@ import {
|
||||
useMediaQuery,
|
||||
useTheme,
|
||||
} from '@mui/material';
|
||||
import { Resume } from '@reactive-resume/schema';
|
||||
import clsx from 'clsx';
|
||||
import get from 'lodash/get';
|
||||
import { useRouter } from 'next/router';
|
||||
@ -28,6 +27,7 @@ import { useTranslation } from 'next-i18next';
|
||||
import { useEffect, useMemo, useState } from 'react';
|
||||
import toast from 'react-hot-toast';
|
||||
import { useMutation } from 'react-query';
|
||||
import { Resume } from 'schema';
|
||||
|
||||
import { RESUMES_QUERY } from '@/constants/index';
|
||||
import { ServerError } from '@/services/axios';
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
import { css } from '@emotion/css';
|
||||
import { CustomCSS, PageConfig, ThemeConfig, Typography } from '@reactive-resume/schema';
|
||||
import clsx from 'clsx';
|
||||
import get from 'lodash/get';
|
||||
import isEmpty from 'lodash/isEmpty';
|
||||
import { useTranslation } from 'next-i18next';
|
||||
import { useMemo } from 'react';
|
||||
import { CustomCSS, PageConfig, ThemeConfig, Typography } from 'schema';
|
||||
|
||||
import { useAppSelector } from '@/store/hooks';
|
||||
import templateMap from '@/templates/templateMap';
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
import { Add, Star } from '@mui/icons-material';
|
||||
import { Button, Divider, IconButton, SwipeableDrawer, Tooltip, useMediaQuery, useTheme } from '@mui/material';
|
||||
import { Section as SectionRecord } from '@reactive-resume/schema';
|
||||
import cloneDeep from 'lodash/cloneDeep';
|
||||
import get from 'lodash/get';
|
||||
import Link from 'next/link';
|
||||
import { useTranslation } from 'next-i18next';
|
||||
import React, { ReactComponentElement, useMemo } from 'react';
|
||||
import { Section as SectionRecord } from 'schema';
|
||||
import { validate } from 'uuid';
|
||||
|
||||
import Logo from '@/components/shared/Logo';
|
||||
@ -27,6 +27,7 @@ const LeftSidebar = () => {
|
||||
const isDesktop = useMediaQuery(theme.breakpoints.up('lg'));
|
||||
|
||||
const sections = useAppSelector((state) => state.resume.present.sections);
|
||||
|
||||
const { open } = useAppSelector((state) => state.build.sidebar.left);
|
||||
|
||||
const customSections = useMemo(() => getCustomSections(sections), [sections]);
|
||||
@ -122,14 +123,19 @@ const LeftSidebar = () => {
|
||||
arrow
|
||||
key={id}
|
||||
placement="right"
|
||||
title={get(sections, `${id}.name`, t<string>(`builder.leftSidebar.sections.${id}.heading`)) as string}
|
||||
title={t<string>(`builder.leftSidebar.sections.${id}.heading`, get(sections, `${id}.name`))}
|
||||
>
|
||||
<IconButton onClick={() => handleClick(id)}>{icon}</IconButton>
|
||||
</Tooltip>
|
||||
))}
|
||||
|
||||
{customSections.map(({ id }) => (
|
||||
<Tooltip key={id} title={get(sections, `${id}.name`, '') as string} placement="right" arrow>
|
||||
<Tooltip
|
||||
key={id}
|
||||
title={t<string>(`builder.leftSidebar.sections.${id}.heading`, get(sections, `${id}.name`))}
|
||||
placement="right"
|
||||
arrow
|
||||
>
|
||||
<IconButton onClick={() => id && handleClick(id)}>
|
||||
<Star />
|
||||
</IconButton>
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { Circle, Square, SquareRounded } from '@mui/icons-material';
|
||||
import { Checkbox, Divider, FormControlLabel, Slider, ToggleButton, ToggleButtonGroup } from '@mui/material';
|
||||
import { Photo, PhotoShape } from '@reactive-resume/schema';
|
||||
import get from 'lodash/get';
|
||||
import { useTranslation } from 'next-i18next';
|
||||
import { Photo, PhotoShape } from 'schema';
|
||||
|
||||
import { useAppDispatch, useAppSelector } from '@/store/hooks';
|
||||
import { setResumeState } from '@/store/resume/resumeSlice';
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
import { Avatar, IconButton, Skeleton, Tooltip } from '@mui/material';
|
||||
import { Photo, Resume } from '@reactive-resume/schema';
|
||||
import get from 'lodash/get';
|
||||
import isEmpty from 'lodash/isEmpty';
|
||||
import { useTranslation } from 'next-i18next';
|
||||
import React, { useRef } from 'react';
|
||||
import toast from 'react-hot-toast';
|
||||
import { useMutation } from 'react-query';
|
||||
import { Photo, Resume } from 'schema';
|
||||
|
||||
import { ServerError } from '@/services/axios';
|
||||
import { deletePhoto, DeletePhotoParams, uploadPhoto, UploadPhotoParams } from '@/services/resume';
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import { Add } from '@mui/icons-material';
|
||||
import { Button } from '@mui/material';
|
||||
import { ListItem } from '@reactive-resume/schema';
|
||||
import { useTranslation } from 'next-i18next';
|
||||
import { ListItem } from 'schema';
|
||||
|
||||
import Heading from '@/components/shared/Heading';
|
||||
import List from '@/components/shared/List';
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
import { Add } from '@mui/icons-material';
|
||||
import { Button } from '@mui/material';
|
||||
import { ListItem, Section as SectionRecord, SectionType } from '@reactive-resume/schema';
|
||||
import clsx from 'clsx';
|
||||
import get from 'lodash/get';
|
||||
import { useTranslation } from 'next-i18next';
|
||||
import { ListItem, Section as SectionRecord, SectionType } from 'schema';
|
||||
import { validate } from 'uuid';
|
||||
|
||||
import Heading from '@/components/shared/Heading';
|
||||
@ -98,7 +98,9 @@ const Section: React.FC<Props> = ({
|
||||
<SectionSettings path={path} />
|
||||
|
||||
<Button variant="outlined" startIcon={<Add />} onClick={handleAdd}>
|
||||
{t<string>('builder.common.actions.add', { token: heading })}
|
||||
{t<string>('builder.common.actions.add', {
|
||||
token: t<string>(`builder.leftSidebar.${path}.heading`, { defaultValue: heading }),
|
||||
})}
|
||||
</Button>
|
||||
</footer>
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { Divider, IconButton, SwipeableDrawer, Tooltip, useMediaQuery, useTheme } from '@mui/material';
|
||||
import { capitalize } from 'lodash';
|
||||
import capitalize from 'lodash/capitalize';
|
||||
import { useTranslation } from 'next-i18next';
|
||||
|
||||
import Avatar from '@/components/shared/Avatar';
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
import Editor from '@monaco-editor/react';
|
||||
import { useTheme } from '@mui/material';
|
||||
import { CustomCSS as CustomCSSType } from '@reactive-resume/schema';
|
||||
import clsx from 'clsx';
|
||||
import get from 'lodash/get';
|
||||
import { useTranslation } from 'next-i18next';
|
||||
import React from 'react';
|
||||
import { CustomCSS as CustomCSSType } from 'schema';
|
||||
|
||||
import Heading from '@/components/shared/Heading';
|
||||
import { useAppDispatch, useAppSelector } from '@/store/hooks';
|
||||
|
||||
@ -10,13 +10,13 @@ import {
|
||||
Switch,
|
||||
TextField,
|
||||
} from '@mui/material';
|
||||
import { DateConfig, PageConfig, Resume } from '@reactive-resume/schema';
|
||||
import dayjs from 'dayjs';
|
||||
import get from 'lodash/get';
|
||||
import { useRouter } from 'next/router';
|
||||
import { useTranslation } from 'next-i18next';
|
||||
import { useMemo, useState } from 'react';
|
||||
import { useMutation } from 'react-query';
|
||||
import { DateConfig, PageConfig, Resume } from 'schema';
|
||||
|
||||
import Heading from '@/components/shared/Heading';
|
||||
import ThemeSwitch from '@/components/shared/ThemeSwitch';
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { ThemeConfig } from '@reactive-resume/schema';
|
||||
import get from 'lodash/get';
|
||||
import { useTranslation } from 'next-i18next';
|
||||
import { ThemeConfig } from 'schema';
|
||||
|
||||
import ColorAvatar from '@/components/shared/ColorAvatar';
|
||||
import ColorPicker from '@/components/shared/ColorPicker';
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
import { Autocomplete, Skeleton, Slider, TextField } from '@mui/material';
|
||||
import { Font, TypeCategory, TypeProperty, Typography as TypographyType } from '@reactive-resume/schema';
|
||||
import get from 'lodash/get';
|
||||
import isEmpty from 'lodash/isEmpty';
|
||||
import { useTranslation } from 'next-i18next';
|
||||
import { useQuery } from 'react-query';
|
||||
import { Font, TypeCategory, TypeProperty, Typography as TypographyType } from 'schema';
|
||||
|
||||
import Heading from '@/components/shared/Heading';
|
||||
import { FONTS_QUERY } from '@/constants/index';
|
||||
|
||||
@ -7,7 +7,6 @@ import {
|
||||
OpenInNew,
|
||||
} from '@mui/icons-material';
|
||||
import { ButtonBase, ListItemIcon, ListItemText, Menu, MenuItem, Tooltip } from '@mui/material';
|
||||
import { Resume } from '@reactive-resume/schema';
|
||||
import Image from 'next/image';
|
||||
import Link from 'next/link';
|
||||
import { useRouter } from 'next/router';
|
||||
@ -15,6 +14,7 @@ import { useTranslation } from 'next-i18next';
|
||||
import { useState } from 'react';
|
||||
import toast from 'react-hot-toast';
|
||||
import { useMutation } from 'react-query';
|
||||
import { Resume } from 'schema';
|
||||
|
||||
import { RESUMES_QUERY } from '@/constants/index';
|
||||
import { ServerError } from '@/services/axios';
|
||||
|
||||
@ -62,7 +62,7 @@ const Heading: React.FC<Props> = ({
|
||||
{editMode ? (
|
||||
<TextField size="small" value={heading} className="w-3/4" onChange={handleChange} />
|
||||
) : (
|
||||
<h1>{heading}</h1>
|
||||
<h1>{t<string>(`builder.leftSidebar.${path}.heading`, { defaultValue: heading })}</h1>
|
||||
)}
|
||||
</div>
|
||||
|
||||
|
||||
@ -1,4 +1,3 @@
|
||||
import { ListItem as ListItemType } from '@reactive-resume/schema';
|
||||
import clsx from 'clsx';
|
||||
import get from 'lodash/get';
|
||||
import isArray from 'lodash/isArray';
|
||||
@ -8,6 +7,7 @@ import { useTranslation } from 'next-i18next';
|
||||
import { useCallback } from 'react';
|
||||
import { DndProvider } from 'react-dnd';
|
||||
import { HTML5Backend } from 'react-dnd-html5-backend';
|
||||
import { ListItem as ListItemType } from 'schema';
|
||||
|
||||
import { useAppDispatch, useAppSelector } from '@/store/hooks';
|
||||
import { deleteItem, setResumeState } from '@/store/resume/resumeSlice';
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
import { DeleteOutline, DriveFileRenameOutline, FileCopy, MoreVert } from '@mui/icons-material';
|
||||
import { Divider, IconButton, ListItemIcon, ListItemText, Menu, MenuItem, Tooltip } from '@mui/material';
|
||||
import { ListItem as ListItemType } from '@reactive-resume/schema';
|
||||
import clsx from 'clsx';
|
||||
import isFunction from 'lodash/isFunction';
|
||||
import { useTranslation } from 'next-i18next';
|
||||
import React, { useRef, useState } from 'react';
|
||||
import { DropTargetMonitor, useDrag, useDrop, XYCoord } from 'react-dnd';
|
||||
import { ListItem as ListItemType } from 'schema';
|
||||
|
||||
import styles from './ListItem.module.scss';
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import clsx from 'clsx';
|
||||
import { isEmpty } from 'lodash';
|
||||
import isEmpty from 'lodash/isEmpty';
|
||||
import ReactMarkdown from 'react-markdown';
|
||||
import rehypeKatex from 'rehype-katex';
|
||||
import remarkGfm from 'remark-gfm';
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
import { TextField } from '@mui/material';
|
||||
import { DatePicker } from '@mui/x-date-pickers';
|
||||
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
|
||||
import dayjs from 'dayjs';
|
||||
import { isEmpty } from 'lodash';
|
||||
import get from 'lodash/get';
|
||||
import { useEffect, useState } from 'react';
|
||||
|
||||
@ -22,7 +21,6 @@ const ResumeInput: React.FC<Props> = ({ type = 'text', label, path, className, m
|
||||
const dispatch = useAppDispatch();
|
||||
|
||||
const stateValue = useAppSelector((state) => get(state.resume.present, path, ''));
|
||||
const dateFormat = useAppSelector((state) => state.resume.present.metadata.date.format);
|
||||
|
||||
useEffect(() => {
|
||||
setValue(stateValue);
|
||||
@ -57,16 +55,13 @@ const ResumeInput: React.FC<Props> = ({ type = 'text', label, path, className, m
|
||||
if (type === 'date') {
|
||||
return (
|
||||
<DatePicker
|
||||
showToolbar
|
||||
openTo="year"
|
||||
label={label}
|
||||
value={value}
|
||||
toolbarFormat={dateFormat}
|
||||
views={['year', 'month', 'day']}
|
||||
renderInput={(params) => <TextField {...params} error={false} className={className} />}
|
||||
onChange={(date: Date | null, keyboardInputValue: string | undefined) => {
|
||||
isEmpty(keyboardInputValue) && onChangeValue('');
|
||||
date && dayjs(date).isValid() && onChangeValue(dayjs(date).format('YYYY-MM-DD'));
|
||||
value={dayjs(value)}
|
||||
slots={{ textField: (params) => <TextField {...params} error={false} className={className} /> }}
|
||||
onChange={(date: dayjs.Dayjs | null) => {
|
||||
if (!date) return onChangeValue('');
|
||||
if (dayjs(date).isValid()) return onChangeValue(dayjs(date).format('YYYY-MM-DD'));
|
||||
}}
|
||||
/>
|
||||
);
|
||||
|
||||
@ -37,6 +37,7 @@ export const languages: Language[] = [
|
||||
{ code: 'or', name: 'Odia', localName: 'ଓଡ଼ିଆ' },
|
||||
{ code: 'pl', name: 'Polish', localName: 'Polski' },
|
||||
{ code: 'pt', name: 'Portuguese', localName: 'Português' },
|
||||
{ code: 'pt-BR', name: 'Brazilian Portuguese', localName: 'Brasil' },
|
||||
{ code: 'ro', name: 'Romanian', localName: 'limba română' },
|
||||
{ code: 'ru', name: 'Russian', localName: 'русский' },
|
||||
{ code: 'sr', name: 'Serbian', localName: 'српски језик' },
|
||||
|
||||
@ -23,8 +23,8 @@ import {
|
||||
VolunteerActivism,
|
||||
Work,
|
||||
} from '@mui/icons-material';
|
||||
import { Section as SectionRecord, SectionType } from '@reactive-resume/schema';
|
||||
import isEmpty from 'lodash/isEmpty';
|
||||
import { Section as SectionRecord, SectionType } from 'schema';
|
||||
|
||||
import Basics from '@/components/build/LeftSidebar/sections/Basics';
|
||||
import Location from '@/components/build/LeftSidebar/sections/Location';
|
||||
|
||||
@ -4,7 +4,7 @@ import { Login, Visibility, VisibilityOff } from '@mui/icons-material';
|
||||
import { Button, IconButton, InputAdornment, TextField } from '@mui/material';
|
||||
import { CredentialResponse, GoogleLogin } from '@react-oauth/google';
|
||||
import Joi from 'joi';
|
||||
import { isEmpty } from 'lodash';
|
||||
import isEmpty from 'lodash/isEmpty';
|
||||
import { Trans, useTranslation } from 'next-i18next';
|
||||
import { useMemo, useState } from 'react';
|
||||
import { Controller, useForm } from 'react-hook-form';
|
||||
|
||||
@ -4,7 +4,7 @@ import { HowToReg } from '@mui/icons-material';
|
||||
import { Button, TextField } from '@mui/material';
|
||||
import { CredentialResponse, GoogleLogin } from '@react-oauth/google';
|
||||
import Joi from 'joi';
|
||||
import { isEmpty } from 'lodash';
|
||||
import isEmpty from 'lodash/isEmpty';
|
||||
import { Trans, useTranslation } from 'next-i18next';
|
||||
import { Controller, useForm } from 'react-hook-form';
|
||||
import toast from 'react-hot-toast';
|
||||
|
||||
@ -89,7 +89,7 @@ const UserProfileModal = () => {
|
||||
render={({ field, fieldState }) => (
|
||||
<TextField
|
||||
autoFocus
|
||||
label={t('modals.auth.profile.form.name.label')}
|
||||
label={t<string>('modals.auth.profile.form.name.label')}
|
||||
error={!!fieldState.error}
|
||||
helperText={fieldState.error?.message}
|
||||
{...field}
|
||||
@ -114,16 +114,16 @@ const UserProfileModal = () => {
|
||||
render={({ field, fieldState }) => (
|
||||
<TextField
|
||||
disabled
|
||||
label={t('modals.auth.profile.form.email.label')}
|
||||
label={t<string>('modals.auth.profile.form.email.label')}
|
||||
error={!!fieldState.error}
|
||||
helperText={t('modals.auth.profile.form.email.help-text')}
|
||||
helperText={t<string>('modals.auth.profile.form.email.help-text')}
|
||||
{...field}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
|
||||
<div>
|
||||
<Button onClick={handleUpdate}>{t('modals.auth.profile.actions.save')}</Button>
|
||||
<Button onClick={handleUpdate}>{t<string>('modals.auth.profile.actions.save')}</Button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
@ -133,10 +133,12 @@ const UserProfileModal = () => {
|
||||
|
||||
<div className="flex items-center gap-2">
|
||||
<CrisisAlert />
|
||||
<h5 className="font-medium">{t('modals.auth.profile.delete-account.heading')}</h5>
|
||||
<h5 className="font-medium">{t<string>('modals.auth.profile.delete-account.heading')}</h5>
|
||||
</div>
|
||||
|
||||
<p className="text-xs opacity-75">{t('modals.auth.profile.delete-account.body', { keyword: 'delete' })}</p>
|
||||
<p className="text-xs opacity-75">
|
||||
{t<string>('modals.auth.profile.delete-account.body', { keyword: 'delete' })}
|
||||
</p>
|
||||
|
||||
<div className="flex max-w-xs flex-col gap-4">
|
||||
<TextField
|
||||
@ -147,7 +149,7 @@ const UserProfileModal = () => {
|
||||
|
||||
<div>
|
||||
<Button variant="contained" color="error" disabled={!isDeleteTextValid} onClick={handleDelete}>
|
||||
{t('modals.auth.profile.delete-account.actions.delete')}
|
||||
{t<string>('modals.auth.profile.delete-account.actions.delete')}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { joiResolver } from '@hookform/resolvers/joi';
|
||||
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
|
||||
import { Button, TextField } from '@mui/material';
|
||||
import { DatePicker } from '@mui/x-date-pickers';
|
||||
import { Award, SectionPath } from '@reactive-resume/schema';
|
||||
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
|
||||
import { Award, SectionPath } from 'schema';
|
||||
import dayjs from 'dayjs';
|
||||
import Joi from 'joi';
|
||||
import get from 'lodash/get';
|
||||
@ -128,21 +128,23 @@ const AwardModal: React.FC = () => {
|
||||
control={control}
|
||||
render={({ field, fieldState }) => (
|
||||
<DatePicker
|
||||
{...field}
|
||||
openTo="year"
|
||||
inputRef={field.ref}
|
||||
label={t<string>('builder.common.form.date.label')}
|
||||
value={dayjs(field.value)}
|
||||
views={['year', 'month', 'day']}
|
||||
onChange={(date: Date | null, keyboardInputValue: string | undefined) => {
|
||||
isEmpty(keyboardInputValue) && field.onChange('');
|
||||
slots={{
|
||||
textField: (params) => (
|
||||
<TextField
|
||||
{...params}
|
||||
error={!!fieldState.error}
|
||||
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
||||
/>
|
||||
),
|
||||
}}
|
||||
onChange={(date: dayjs.Dayjs | null) => {
|
||||
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
|
||||
}}
|
||||
renderInput={(params) => (
|
||||
<TextField
|
||||
{...params}
|
||||
error={!!fieldState.error}
|
||||
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { joiResolver } from '@hookform/resolvers/joi';
|
||||
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
|
||||
import { Button, TextField } from '@mui/material';
|
||||
import { DatePicker } from '@mui/x-date-pickers';
|
||||
import { Certificate, SectionPath } from '@reactive-resume/schema';
|
||||
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
|
||||
import { Certificate, SectionPath } from 'schema';
|
||||
import dayjs from 'dayjs';
|
||||
import Joi from 'joi';
|
||||
import get from 'lodash/get';
|
||||
@ -128,21 +128,23 @@ const CertificateModal: React.FC = () => {
|
||||
control={control}
|
||||
render={({ field, fieldState }) => (
|
||||
<DatePicker
|
||||
{...field}
|
||||
openTo="year"
|
||||
inputRef={field.ref}
|
||||
label={t<string>('builder.common.form.date.label')}
|
||||
value={dayjs(field.value)}
|
||||
views={['year', 'month', 'day']}
|
||||
onChange={(date: Date | null, keyboardInputValue: string | undefined) => {
|
||||
isEmpty(keyboardInputValue) && field.onChange('');
|
||||
slots={{
|
||||
textField: (params) => (
|
||||
<TextField
|
||||
{...params}
|
||||
error={!!fieldState.error}
|
||||
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
||||
/>
|
||||
),
|
||||
}}
|
||||
onChange={(date: dayjs.Dayjs | null) => {
|
||||
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
|
||||
}}
|
||||
renderInput={(params) => (
|
||||
<TextField
|
||||
{...params}
|
||||
error={!!fieldState.error}
|
||||
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { joiResolver } from '@hookform/resolvers/joi';
|
||||
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
|
||||
import { Button, Slider, TextField } from '@mui/material';
|
||||
import { DatePicker } from '@mui/x-date-pickers';
|
||||
import { Custom } from '@reactive-resume/schema';
|
||||
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
|
||||
import { Custom } from 'schema';
|
||||
import dayjs from 'dayjs';
|
||||
import Joi from 'joi';
|
||||
import get from 'lodash/get';
|
||||
@ -145,21 +145,23 @@ const CustomModal: React.FC = () => {
|
||||
control={control}
|
||||
render={({ field, fieldState }) => (
|
||||
<DatePicker
|
||||
{...field}
|
||||
openTo="year"
|
||||
inputRef={field.ref}
|
||||
label={t<string>('builder.common.form.start-date.label')}
|
||||
value={dayjs(field.value)}
|
||||
views={['year', 'month', 'day']}
|
||||
onChange={(date: Date | null, keyboardInputValue: string | undefined) => {
|
||||
isEmpty(keyboardInputValue) && field.onChange('');
|
||||
slots={{
|
||||
textField: (params) => (
|
||||
<TextField
|
||||
{...params}
|
||||
error={!!fieldState.error}
|
||||
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
||||
/>
|
||||
),
|
||||
}}
|
||||
onChange={(date: dayjs.Dayjs | null) => {
|
||||
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
|
||||
}}
|
||||
renderInput={(params) => (
|
||||
<TextField
|
||||
{...params}
|
||||
error={!!fieldState.error}
|
||||
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
@ -169,21 +171,23 @@ const CustomModal: React.FC = () => {
|
||||
control={control}
|
||||
render={({ field, fieldState }) => (
|
||||
<DatePicker
|
||||
{...field}
|
||||
openTo="year"
|
||||
inputRef={field.ref}
|
||||
label={t<string>('builder.common.form.end-date.label')}
|
||||
value={dayjs(field.value)}
|
||||
views={['year', 'month', 'day']}
|
||||
onChange={(date: Date | null, keyboardInputValue: string | undefined) => {
|
||||
isEmpty(keyboardInputValue) && field.onChange('');
|
||||
slots={{
|
||||
textField: (params) => (
|
||||
<TextField
|
||||
{...params}
|
||||
error={!!fieldState.error}
|
||||
helperText={fieldState.error?.message || t<string>('builder.common.form.end-date.help-text')}
|
||||
/>
|
||||
),
|
||||
}}
|
||||
onChange={(date: dayjs.Dayjs | null) => {
|
||||
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
|
||||
}}
|
||||
renderInput={(params) => (
|
||||
<TextField
|
||||
{...params}
|
||||
error={!!fieldState.error}
|
||||
helperText={fieldState.error?.message || 'Leave this field blank, if still present'}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { joiResolver } from '@hookform/resolvers/joi';
|
||||
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
|
||||
import { Button, TextField } from '@mui/material';
|
||||
import { DatePicker } from '@mui/x-date-pickers';
|
||||
import { Education, SectionPath } from '@reactive-resume/schema';
|
||||
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
|
||||
import { Education, SectionPath } from 'schema';
|
||||
import dayjs from 'dayjs';
|
||||
import Joi from 'joi';
|
||||
import get from 'lodash/get';
|
||||
@ -167,21 +167,23 @@ const EducationModal: React.FC = () => {
|
||||
control={control}
|
||||
render={({ field, fieldState }) => (
|
||||
<DatePicker
|
||||
{...field}
|
||||
openTo="year"
|
||||
inputRef={field.ref}
|
||||
label={t<string>('builder.common.form.start-date.label')}
|
||||
value={dayjs(field.value)}
|
||||
views={['year', 'month', 'day']}
|
||||
onChange={(date: Date | null, keyboardInputValue: string | undefined) => {
|
||||
isEmpty(keyboardInputValue) && field.onChange('');
|
||||
slots={{
|
||||
textField: (params) => (
|
||||
<TextField
|
||||
{...params}
|
||||
error={!!fieldState.error}
|
||||
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
||||
/>
|
||||
),
|
||||
}}
|
||||
onChange={(date: dayjs.Dayjs | null) => {
|
||||
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
|
||||
}}
|
||||
renderInput={(params) => (
|
||||
<TextField
|
||||
{...params}
|
||||
error={!!fieldState.error}
|
||||
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
@ -191,21 +193,23 @@ const EducationModal: React.FC = () => {
|
||||
control={control}
|
||||
render={({ field, fieldState }) => (
|
||||
<DatePicker
|
||||
{...field}
|
||||
openTo="year"
|
||||
inputRef={field.ref}
|
||||
label={t<string>('builder.common.form.end-date.label')}
|
||||
value={dayjs(field.value)}
|
||||
views={['year', 'month', 'day']}
|
||||
onChange={(date: Date | null, keyboardInputValue: string | undefined) => {
|
||||
isEmpty(keyboardInputValue) && field.onChange('');
|
||||
slots={{
|
||||
textField: (params) => (
|
||||
<TextField
|
||||
{...params}
|
||||
error={!!fieldState.error}
|
||||
helperText={fieldState.error?.message || t<string>('builder.common.form.end-date.help-text')}
|
||||
/>
|
||||
),
|
||||
}}
|
||||
onChange={(date: dayjs.Dayjs | null) => {
|
||||
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
|
||||
}}
|
||||
renderInput={(params) => (
|
||||
<TextField
|
||||
{...params}
|
||||
error={!!fieldState.error}
|
||||
helperText={fieldState.error?.message || t<string>('builder.common.form.end-date.help-text')}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import { joiResolver } from '@hookform/resolvers/joi';
|
||||
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
|
||||
import { Button, TextField } from '@mui/material';
|
||||
import { Interest, SectionPath } from '@reactive-resume/schema';
|
||||
import { Interest, SectionPath } from 'schema';
|
||||
import Joi from 'joi';
|
||||
import get from 'lodash/get';
|
||||
import isEmpty from 'lodash/isEmpty';
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import { joiResolver } from '@hookform/resolvers/joi';
|
||||
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
|
||||
import { Button, Slider, TextField } from '@mui/material';
|
||||
import { Language, SectionPath } from '@reactive-resume/schema';
|
||||
import { Language, SectionPath } from 'schema';
|
||||
import Joi from 'joi';
|
||||
import get from 'lodash/get';
|
||||
import isEmpty from 'lodash/isEmpty';
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import { joiResolver } from '@hookform/resolvers/joi';
|
||||
import { Add, AlternateEmail, DriveFileRenameOutline } from '@mui/icons-material';
|
||||
import { Button, TextField } from '@mui/material';
|
||||
import { Profile } from '@reactive-resume/schema';
|
||||
import { Profile } from 'schema';
|
||||
import Joi from 'joi';
|
||||
import get from 'lodash/get';
|
||||
import isEmpty from 'lodash/isEmpty';
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { joiResolver } from '@hookform/resolvers/joi';
|
||||
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
|
||||
import { Button, TextField } from '@mui/material';
|
||||
import { DatePicker } from '@mui/x-date-pickers';
|
||||
import { Project, SectionPath } from '@reactive-resume/schema';
|
||||
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
|
||||
import { Project, SectionPath } from 'schema';
|
||||
import dayjs from 'dayjs';
|
||||
import Joi from 'joi';
|
||||
import get from 'lodash/get';
|
||||
@ -137,21 +137,23 @@ const ProjectModal: React.FC = () => {
|
||||
control={control}
|
||||
render={({ field, fieldState }) => (
|
||||
<DatePicker
|
||||
{...field}
|
||||
openTo="year"
|
||||
inputRef={field.ref}
|
||||
label={t<string>('builder.common.form.start-date.label')}
|
||||
value={dayjs(field.value)}
|
||||
views={['year', 'month', 'day']}
|
||||
onChange={(date: Date | null, keyboardInputValue: string | undefined) => {
|
||||
isEmpty(keyboardInputValue) && field.onChange('');
|
||||
slots={{
|
||||
textField: (params) => (
|
||||
<TextField
|
||||
{...params}
|
||||
error={!!fieldState.error}
|
||||
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
||||
/>
|
||||
),
|
||||
}}
|
||||
onChange={(date: dayjs.Dayjs | null) => {
|
||||
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
|
||||
}}
|
||||
renderInput={(params) => (
|
||||
<TextField
|
||||
{...params}
|
||||
error={!!fieldState.error}
|
||||
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
@ -161,21 +163,23 @@ const ProjectModal: React.FC = () => {
|
||||
control={control}
|
||||
render={({ field, fieldState }) => (
|
||||
<DatePicker
|
||||
{...field}
|
||||
openTo="year"
|
||||
inputRef={field.ref}
|
||||
label={t<string>('builder.common.form.end-date.label')}
|
||||
value={dayjs(field.value)}
|
||||
views={['year', 'month', 'day']}
|
||||
onChange={(date: Date | null, keyboardInputValue: string | undefined) => {
|
||||
isEmpty(keyboardInputValue) && field.onChange('');
|
||||
slots={{
|
||||
textField: (params) => (
|
||||
<TextField
|
||||
{...params}
|
||||
error={!!fieldState.error}
|
||||
helperText={fieldState.error?.message || t<string>('builder.common.form.end-date.help-text')}
|
||||
/>
|
||||
),
|
||||
}}
|
||||
onChange={(date: dayjs.Dayjs | null) => {
|
||||
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
|
||||
}}
|
||||
renderInput={(params) => (
|
||||
<TextField
|
||||
{...params}
|
||||
error={!!fieldState.error}
|
||||
helperText={fieldState.error?.message || 'Leave this field blank, if still present'}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { joiResolver } from '@hookform/resolvers/joi';
|
||||
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
|
||||
import { Button, TextField } from '@mui/material';
|
||||
import { DatePicker } from '@mui/x-date-pickers';
|
||||
import { Publication, SectionPath } from '@reactive-resume/schema';
|
||||
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
|
||||
import { Publication, SectionPath } from 'schema';
|
||||
import dayjs from 'dayjs';
|
||||
import Joi from 'joi';
|
||||
import get from 'lodash/get';
|
||||
@ -128,21 +128,23 @@ const PublicationModal: React.FC = () => {
|
||||
control={control}
|
||||
render={({ field, fieldState }) => (
|
||||
<DatePicker
|
||||
{...field}
|
||||
openTo="year"
|
||||
inputRef={field.ref}
|
||||
label={t<string>('builder.common.form.date.label')}
|
||||
value={dayjs(field.value)}
|
||||
views={['year', 'month', 'day']}
|
||||
onChange={(date: Date | null, keyboardInputValue: string | undefined) => {
|
||||
isEmpty(keyboardInputValue) && field.onChange('');
|
||||
slots={{
|
||||
textField: (params) => (
|
||||
<TextField
|
||||
{...params}
|
||||
error={!!fieldState.error}
|
||||
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
||||
/>
|
||||
),
|
||||
}}
|
||||
onChange={(date: dayjs.Dayjs | null) => {
|
||||
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
|
||||
}}
|
||||
renderInput={(params) => (
|
||||
<TextField
|
||||
{...params}
|
||||
error={!!fieldState.error}
|
||||
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import { joiResolver } from '@hookform/resolvers/joi';
|
||||
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
|
||||
import { Button, TextField } from '@mui/material';
|
||||
import { Reference, SectionPath } from '@reactive-resume/schema';
|
||||
import { Reference, SectionPath } from 'schema';
|
||||
import Joi from 'joi';
|
||||
import get from 'lodash/get';
|
||||
import isEmpty from 'lodash/isEmpty';
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import { joiResolver } from '@hookform/resolvers/joi';
|
||||
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
|
||||
import { Button, Slider, TextField } from '@mui/material';
|
||||
import { SectionPath, Skill } from '@reactive-resume/schema';
|
||||
import { SectionPath, Skill } from 'schema';
|
||||
import Joi from 'joi';
|
||||
import get from 'lodash/get';
|
||||
import isEmpty from 'lodash/isEmpty';
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { joiResolver } from '@hookform/resolvers/joi';
|
||||
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
|
||||
import { Button, TextField } from '@mui/material';
|
||||
import { DatePicker } from '@mui/x-date-pickers';
|
||||
import { SectionPath, Volunteer } from '@reactive-resume/schema';
|
||||
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
|
||||
import { SectionPath, Volunteer } from 'schema';
|
||||
import dayjs from 'dayjs';
|
||||
import Joi from 'joi';
|
||||
import get from 'lodash/get';
|
||||
@ -134,21 +134,23 @@ const VolunteerModal: React.FC = () => {
|
||||
control={control}
|
||||
render={({ field, fieldState }) => (
|
||||
<DatePicker
|
||||
{...field}
|
||||
openTo="year"
|
||||
inputRef={field.ref}
|
||||
label={t<string>('builder.common.form.start-date.label')}
|
||||
value={dayjs(field.value)}
|
||||
views={['year', 'month', 'day']}
|
||||
onChange={(date: Date | null, keyboardInputValue: string | undefined) => {
|
||||
isEmpty(keyboardInputValue) && field.onChange('');
|
||||
slots={{
|
||||
textField: (params) => (
|
||||
<TextField
|
||||
{...params}
|
||||
error={!!fieldState.error}
|
||||
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
||||
/>
|
||||
),
|
||||
}}
|
||||
onChange={(date: dayjs.Dayjs | null) => {
|
||||
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
|
||||
}}
|
||||
renderInput={(params) => (
|
||||
<TextField
|
||||
{...params}
|
||||
error={!!fieldState.error}
|
||||
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
@ -158,21 +160,23 @@ const VolunteerModal: React.FC = () => {
|
||||
control={control}
|
||||
render={({ field, fieldState }) => (
|
||||
<DatePicker
|
||||
{...field}
|
||||
openTo="year"
|
||||
inputRef={field.ref}
|
||||
label={t<string>('builder.common.form.end-date.label')}
|
||||
value={dayjs(field.value)}
|
||||
views={['year', 'month', 'day']}
|
||||
onChange={(date: Date | null, keyboardInputValue: string | undefined) => {
|
||||
isEmpty(keyboardInputValue) && field.onChange('');
|
||||
slots={{
|
||||
textField: (params) => (
|
||||
<TextField
|
||||
{...params}
|
||||
error={!!fieldState.error}
|
||||
helperText={fieldState.error?.message || t<string>('builder.common.form.end-date.help-text')}
|
||||
/>
|
||||
),
|
||||
}}
|
||||
onChange={(date: dayjs.Dayjs | null) => {
|
||||
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
|
||||
}}
|
||||
renderInput={(params) => (
|
||||
<TextField
|
||||
{...params}
|
||||
error={!!fieldState.error}
|
||||
helperText={fieldState.error?.message || 'Leave this field blank, if still present'}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { joiResolver } from '@hookform/resolvers/joi';
|
||||
import { Add, DriveFileRenameOutline } from '@mui/icons-material';
|
||||
import { Button, TextField } from '@mui/material';
|
||||
import { DatePicker } from '@mui/x-date-pickers';
|
||||
import { WorkExperience } from '@reactive-resume/schema';
|
||||
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
|
||||
import { WorkExperience } from 'schema';
|
||||
import dayjs from 'dayjs';
|
||||
import Joi from 'joi';
|
||||
import get from 'lodash/get';
|
||||
@ -56,8 +56,20 @@ const WorkModal: React.FC = () => {
|
||||
|
||||
const isEditMode = useMemo(() => !!item, [item]);
|
||||
|
||||
const addText = useMemo(() => t<string>('builder.common.actions.add', { token: heading }), [t, heading]);
|
||||
const editText = useMemo(() => t<string>('builder.common.actions.edit', { token: heading }), [t, heading]);
|
||||
const addText = useMemo(
|
||||
() =>
|
||||
t<string>('builder.common.actions.add', {
|
||||
token: t<string>(`builder.leftSidebar.${path}.heading`, { defaultValue: heading }),
|
||||
}),
|
||||
[t, heading]
|
||||
);
|
||||
const editText = useMemo(
|
||||
() =>
|
||||
t<string>('builder.common.actions.edit', {
|
||||
token: t<string>(`builder.leftSidebar.${path}.heading`, { defaultValue: heading }),
|
||||
}),
|
||||
[t, heading]
|
||||
);
|
||||
|
||||
const { reset, control, handleSubmit } = useForm<FormData>({
|
||||
defaultValues: defaultState,
|
||||
@ -107,7 +119,7 @@ const WorkModal: React.FC = () => {
|
||||
<TextField
|
||||
required
|
||||
autoFocus
|
||||
label={t<string>('builder.common.form.name.label')}
|
||||
label={t<string>('builder.leftSidebar.sections.experience.form.name.label')}
|
||||
error={!!fieldState.error}
|
||||
helperText={fieldState.error?.message}
|
||||
{...field}
|
||||
@ -134,21 +146,23 @@ const WorkModal: React.FC = () => {
|
||||
control={control}
|
||||
render={({ field, fieldState }) => (
|
||||
<DatePicker
|
||||
{...field}
|
||||
openTo="year"
|
||||
inputRef={field.ref}
|
||||
label={t<string>('builder.common.form.start-date.label')}
|
||||
value={dayjs(field.value)}
|
||||
views={['year', 'month', 'day']}
|
||||
onChange={(date: Date | null, keyboardInputValue: string | undefined) => {
|
||||
isEmpty(keyboardInputValue) && field.onChange('');
|
||||
slots={{
|
||||
textField: (params) => (
|
||||
<TextField
|
||||
{...params}
|
||||
error={!!fieldState.error}
|
||||
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
||||
/>
|
||||
),
|
||||
}}
|
||||
onChange={(date: dayjs.Dayjs | null) => {
|
||||
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
|
||||
}}
|
||||
renderInput={(params) => (
|
||||
<TextField
|
||||
{...params}
|
||||
error={!!fieldState.error}
|
||||
helperText={fieldState.error?.message || params.inputProps?.placeholder}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
@ -158,21 +172,23 @@ const WorkModal: React.FC = () => {
|
||||
control={control}
|
||||
render={({ field, fieldState }) => (
|
||||
<DatePicker
|
||||
{...field}
|
||||
openTo="year"
|
||||
inputRef={field.ref}
|
||||
label={t<string>('builder.common.form.end-date.label')}
|
||||
value={dayjs(field.value)}
|
||||
views={['year', 'month', 'day']}
|
||||
onChange={(date: Date | null, keyboardInputValue: string | undefined) => {
|
||||
isEmpty(keyboardInputValue) && field.onChange('');
|
||||
slots={{
|
||||
textField: (params) => (
|
||||
<TextField
|
||||
{...params}
|
||||
error={!!fieldState.error}
|
||||
helperText={fieldState.error?.message || t<string>('builder.common.form.end-date.help-text')}
|
||||
/>
|
||||
),
|
||||
}}
|
||||
onChange={(date: dayjs.Dayjs | null) => {
|
||||
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
|
||||
}}
|
||||
renderInput={(params) => (
|
||||
<TextField
|
||||
{...params}
|
||||
error={!!fieldState.error}
|
||||
helperText={fieldState.error?.message || t<string>('builder.common.form.end-date.help-text')}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import { joiResolver } from '@hookform/resolvers/joi';
|
||||
import { Add } from '@mui/icons-material';
|
||||
import { Button, FormControlLabel, FormGroup, Switch, TextField } from '@mui/material';
|
||||
import { Resume } from '@reactive-resume/schema';
|
||||
import { Resume } from 'schema';
|
||||
import Joi from 'joi';
|
||||
import { useTranslation } from 'next-i18next';
|
||||
import { useEffect } from 'react';
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { Code, ImportExport, LinkedIn, TrackChanges, UploadFile } from '@mui/icons-material';
|
||||
import { Button, Divider } from '@mui/material';
|
||||
import { Integration, Resume } from '@reactive-resume/schema';
|
||||
import { Integration, Resume } from 'schema';
|
||||
import { Trans, useTranslation } from 'next-i18next';
|
||||
import { useRef } from 'react';
|
||||
import toast from 'react-hot-toast';
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import { joiResolver } from '@hookform/resolvers/joi';
|
||||
import { DriveFileRenameOutline } from '@mui/icons-material';
|
||||
import { Button, TextField } from '@mui/material';
|
||||
import { Resume } from '@reactive-resume/schema';
|
||||
import { Resume } from 'schema';
|
||||
import Joi from 'joi';
|
||||
import get from 'lodash/get';
|
||||
import noop from 'lodash/noop';
|
||||
|
||||
@ -35,6 +35,7 @@ const i18nConfig = {
|
||||
'or',
|
||||
'pl',
|
||||
'pt',
|
||||
'pt-BR',
|
||||
'ro',
|
||||
'ru',
|
||||
'sr',
|
||||
@ -47,6 +48,7 @@ const i18nConfig = {
|
||||
],
|
||||
},
|
||||
nsSeparator: '.',
|
||||
returnNull: false,
|
||||
localePath: path.resolve('./public/locales'),
|
||||
ns: ['common', 'modals', 'landing', 'dashboard', 'builder'],
|
||||
};
|
||||
|
||||
@ -2,5 +2,5 @@
|
||||
module.exports = {
|
||||
siteUrl: 'https://rxresu.me',
|
||||
changefreq: 'monthly',
|
||||
generateRobotsTxt: true,
|
||||
generateIndexSitemap: false,
|
||||
};
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
{
|
||||
"name": "@reactive-resume/client",
|
||||
"name": "client",
|
||||
"scripts": {
|
||||
"dev": "react-env --prefix PUBLIC -- next dev",
|
||||
"lint": "next lint --fix",
|
||||
@ -9,75 +9,74 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@beam-australia/react-env": "^3.1.1",
|
||||
"@date-io/dayjs": "^2.16.0",
|
||||
"@emotion/css": "^11.10.5",
|
||||
"@emotion/react": "^11.10.5",
|
||||
"@emotion/styled": "^11.10.5",
|
||||
"@emotion/css": "^11.11.0",
|
||||
"@emotion/react": "^11.11.1",
|
||||
"@emotion/styled": "^11.11.0",
|
||||
"@hello-pangea/dnd": "^16.2.0",
|
||||
"@hookform/resolvers": "2.9.10",
|
||||
"@monaco-editor/react": "^4.4.6",
|
||||
"@mui/icons-material": "^5.11.0",
|
||||
"@mui/lab": "^5.0.0-alpha.116",
|
||||
"@mui/material": "^5.11.5",
|
||||
"@mui/system": "^5.11.5",
|
||||
"@mui/x-date-pickers": "5.0.14",
|
||||
"@react-oauth/google": "^0.6.0",
|
||||
"@reduxjs/toolkit": "^1.9.1",
|
||||
"axios": "^1.2.3",
|
||||
"@hookform/resolvers": "3.1.0",
|
||||
"@monaco-editor/react": "^4.5.1",
|
||||
"@mui/icons-material": "^5.11.16",
|
||||
"@mui/lab": "^5.0.0-alpha.133",
|
||||
"@mui/material": "^5.13.4",
|
||||
"@mui/system": "^5.13.2",
|
||||
"@mui/x-date-pickers": "6.6.0",
|
||||
"@react-oauth/google": "^0.11.0",
|
||||
"@reduxjs/toolkit": "^1.9.5",
|
||||
"axios": "^1.4.0",
|
||||
"clsx": "^1.2.1",
|
||||
"dayjs": "^1.11.7",
|
||||
"dayjs": "^1.11.8",
|
||||
"downloadjs": "^1.4.7",
|
||||
"joi": "^17.7.0",
|
||||
"joi": "^17.9.2",
|
||||
"lodash": "^4.17.21",
|
||||
"md5-hex": "^4.0.0",
|
||||
"monaco-editor": "^0.34.1",
|
||||
"monaco-editor": "^0.39.0",
|
||||
"nanoid": "3.3.4",
|
||||
"next": "13.1.2",
|
||||
"next-i18next": "^13.0.3",
|
||||
"next": "13.4.4",
|
||||
"next-i18next": "^13.3.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.2.0",
|
||||
"react-hook-form": "^7.42.1",
|
||||
"react-hot-toast": "2.4.0",
|
||||
"react-icons": "^4.7.1",
|
||||
"react-markdown": "^8.0.5",
|
||||
"react-query": "^3.39.2",
|
||||
"react-redux": "^8.0.5",
|
||||
"react-zoom-pan-pinch": "^2.2.0",
|
||||
"redux": "^4.2.0",
|
||||
"react-hook-form": "^7.44.3",
|
||||
"react-hot-toast": "2.4.1",
|
||||
"react-icons": "^4.9.0",
|
||||
"react-markdown": "^8.0.7",
|
||||
"react-query": "^3.39.3",
|
||||
"react-redux": "^8.0.7",
|
||||
"react-zoom-pan-pinch": "^3.0.8",
|
||||
"redux": "^4.2.1",
|
||||
"redux-persist": "^6.0.0",
|
||||
"redux-saga": "^1.2.2",
|
||||
"redux-saga": "^1.2.3",
|
||||
"redux-undo": "^1.0.1",
|
||||
"rehype-katex": "^6.0.2",
|
||||
"rehype-katex": "^6.0.3",
|
||||
"remark-gfm": "^3.0.1",
|
||||
"remark-math": "^5.1.1",
|
||||
"sharp": "^0.31.3",
|
||||
"sharp": "^0.32.1",
|
||||
"uuid": "^9.0.0",
|
||||
"webfontloader": "^1.6.28"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.20.12",
|
||||
"@reactive-resume/schema": "workspace:*",
|
||||
"@babel/core": "^7.22.1",
|
||||
"schema": "workspace:*",
|
||||
"@tailwindcss/typography": "^0.5.9",
|
||||
"@types/downloadjs": "^1.4.3",
|
||||
"@types/lodash": "^4.14.191",
|
||||
"@types/node": "^18.11.18",
|
||||
"@types/react": "^18.0.27",
|
||||
"@types/react-dom": "^18.0.10",
|
||||
"@types/lodash": "^4.14.195",
|
||||
"@types/node": "^20.2.5",
|
||||
"@types/react": "^18.2.8",
|
||||
"@types/react-dom": "^18.2.4",
|
||||
"@types/react-redux": "^7.1.25",
|
||||
"@types/uuid": "^9.0.0",
|
||||
"@types/uuid": "^9.0.1",
|
||||
"@types/webfontloader": "^1.6.35",
|
||||
"autoprefixer": "^10.4.13",
|
||||
"csstype": "^3.1.1",
|
||||
"eslint-config-next": "^13.1.2",
|
||||
"eslint-plugin-tailwindcss": "^3.8.0",
|
||||
"autoprefixer": "^10.4.14",
|
||||
"csstype": "^3.1.2",
|
||||
"eslint-config-next": "^13.4.4",
|
||||
"eslint-plugin-tailwindcss": "^3.12.1",
|
||||
"eslint-plugin-unused-imports": "^2.0.0",
|
||||
"next-sitemap": "^3.1.45",
|
||||
"postcss": "^8.4.21",
|
||||
"sass": "^1.57.1",
|
||||
"tailwindcss": "^3.2.4",
|
||||
"typescript": "^4.9.4"
|
||||
"next-sitemap": "^4.1.3",
|
||||
"postcss": "^8.4.24",
|
||||
"sass": "^1.62.1",
|
||||
"tailwindcss": "^3.3.2",
|
||||
"typescript": "^5.1.3"
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,4 +1,3 @@
|
||||
import { Resume } from '@reactive-resume/schema';
|
||||
import isEmpty from 'lodash/isEmpty';
|
||||
import { GetServerSideProps, NextPage } from 'next';
|
||||
import Head from 'next/head';
|
||||
@ -6,6 +5,7 @@ import { useTranslation } from 'next-i18next';
|
||||
import { serverSideTranslations } from 'next-i18next/serverSideTranslations';
|
||||
import { useEffect } from 'react';
|
||||
import { useQuery } from 'react-query';
|
||||
import { Resume } from 'schema';
|
||||
|
||||
import Center from '@/components/build/Center/Center';
|
||||
import LeftSidebar from '@/components/build/LeftSidebar/LeftSidebar';
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
import { Download, Downloading } from '@mui/icons-material';
|
||||
import { ButtonBase } from '@mui/material';
|
||||
import { Resume } from '@reactive-resume/schema';
|
||||
import clsx from 'clsx';
|
||||
import dayjs from 'dayjs';
|
||||
import download from 'downloadjs';
|
||||
@ -13,6 +12,7 @@ import { serverSideTranslations } from 'next-i18next/serverSideTranslations';
|
||||
import { useEffect } from 'react';
|
||||
import toast from 'react-hot-toast';
|
||||
import { useMutation, useQuery } from 'react-query';
|
||||
import { Resume } from 'schema';
|
||||
|
||||
import Page from '@/components/build/Center/Page';
|
||||
import { DEFAULT_ERROR_MESSAGE } from '@/constants/index';
|
||||
|
||||
@ -1,4 +1,3 @@
|
||||
import { Resume } from '@reactive-resume/schema';
|
||||
import clsx from 'clsx';
|
||||
import get from 'lodash/get';
|
||||
import isEmpty from 'lodash/isEmpty';
|
||||
@ -6,6 +5,7 @@ import { GetServerSideProps, NextPage } from 'next';
|
||||
import { useRouter } from 'next/router';
|
||||
import { serverSideTranslations } from 'next-i18next/serverSideTranslations';
|
||||
import { useEffect } from 'react';
|
||||
import { Resume } from 'schema';
|
||||
|
||||
import Page from '@/components/build/Center/Page';
|
||||
import { fetchResumeByIdentifier } from '@/services/resume';
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import '@/styles/globals.scss';
|
||||
|
||||
import env from '@beam-australia/react-env';
|
||||
import DayjsAdapter from '@date-io/dayjs';
|
||||
import { LocalizationProvider } from '@mui/x-date-pickers';
|
||||
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
|
||||
import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
|
||||
import { GoogleOAuthProvider } from '@react-oauth/google';
|
||||
import type { AppProps } from 'next/app';
|
||||
import Head from 'next/head';
|
||||
@ -32,7 +32,7 @@ const App = ({ Component, pageProps }: AppProps): JSX.Element => (
|
||||
</Head>
|
||||
|
||||
<ReduxProvider store={store}>
|
||||
<LocalizationProvider dateAdapter={DayjsAdapter}>
|
||||
<LocalizationProvider dateAdapter={AdapterDayjs}>
|
||||
<PersistGate loading={null} persistor={persistor}>
|
||||
<GoogleOAuthProvider clientId={env('GOOGLE_CLIENT_ID')}>
|
||||
<QueryClientProvider client={queryClient}>
|
||||
|
||||
@ -1,15 +1,69 @@
|
||||
import { NextPage } from 'next';
|
||||
import NextDocument, { DocumentContext, Head, Html, Main, NextScript } from 'next/document';
|
||||
import Script from 'next/script';
|
||||
|
||||
const Document: NextPage = () => (
|
||||
<Html lang="en">
|
||||
<Head />
|
||||
<Head>
|
||||
<Script
|
||||
id="google-tag-manager"
|
||||
type="text/javascript"
|
||||
strategy="afterInteractive"
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: `(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','GTM-M9DK4S4');`,
|
||||
}}
|
||||
/>
|
||||
|
||||
<Script
|
||||
id="logo-schema"
|
||||
type="application/ld+json"
|
||||
strategy="afterInteractive"
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: `{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Organization",
|
||||
"url": "https://rxresu.me",
|
||||
"logo": "https://rxresu.me/images/logos/logo.svg"
|
||||
}`,
|
||||
}}
|
||||
/>
|
||||
|
||||
<Script
|
||||
id="software-application-schema"
|
||||
type="application/ld+json"
|
||||
strategy="afterInteractive"
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: `{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "SoftwareApplication",
|
||||
"name": "Reactive Resume",
|
||||
"operatingSystem": "Windows, macOS, Linux, Android, iOS",
|
||||
"applicationCategory": "BrowserApplication",
|
||||
"aggregateRating": {
|
||||
"@type": "AggregateRating",
|
||||
"ratingValue": "5",
|
||||
"ratingCount": "11394"
|
||||
},
|
||||
"offers": {
|
||||
"@type": "Offer",
|
||||
"price": "0"
|
||||
}
|
||||
}`,
|
||||
}}
|
||||
/>
|
||||
</Head>
|
||||
|
||||
<body>
|
||||
<Main />
|
||||
<NextScript />
|
||||
|
||||
<script src="/__ENV.js" />
|
||||
|
||||
<noscript
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: `<iframe src="https://www.googletagmanager.com/ns.html?id=GTM-M9DK4S4" height="0" width="0" style="display:none;visibility:hidden"></iframe>`,
|
||||
}}
|
||||
/>
|
||||
</body>
|
||||
</Html>
|
||||
);
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
import { Download, Downloading } from '@mui/icons-material';
|
||||
import { ButtonBase } from '@mui/material';
|
||||
import { Resume } from '@reactive-resume/schema';
|
||||
import clsx from 'clsx';
|
||||
import dayjs from 'dayjs';
|
||||
import download from 'downloadjs';
|
||||
@ -12,6 +11,7 @@ import { useRouter } from 'next/router';
|
||||
import { serverSideTranslations } from 'next-i18next/serverSideTranslations';
|
||||
import { useEffect } from 'react';
|
||||
import { useMutation, useQuery } from 'react-query';
|
||||
import { Resume } from 'schema';
|
||||
|
||||
import Page from '@/components/build/Center/Page';
|
||||
import { ServerError } from '@/services/axios';
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
"actions": {
|
||||
"add": "አዲስ {{token}} ጨምር",
|
||||
"delete": "{{token}} አጥፋ",
|
||||
"duplicate": "የተባዛ ክፍል",
|
||||
"edit": "{{token}} አዘምን"
|
||||
},
|
||||
"columns": {
|
||||
@ -80,13 +81,13 @@
|
||||
"center-artboard": "መሃል የሰዕል ማሳያ",
|
||||
"copy-link": "የስራ ልምድ ሰነዱን ሊንክ ቅዳ",
|
||||
"export-pdf": "PDF አውጣ",
|
||||
"redo": "ድገም",
|
||||
"toggle-orientation": "የገጽ አቀማመጥን ቀያይር",
|
||||
"toggle-page-break-line": "የገጽ መግቻ መስመርን ቀያይር",
|
||||
"toggle-sidebars": "የጎን ክፍሎችን ቀይር",
|
||||
"zoom-in": "አቅርብ",
|
||||
"zoom-out": "አሳንስ",
|
||||
"undo": "ቀልብስ",
|
||||
"redo": "ድገም"
|
||||
"zoom-in": "አቅርብ",
|
||||
"zoom-out": "አሳንስ"
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
@ -114,6 +115,9 @@
|
||||
"actions": {
|
||||
"photo-filters": "የፎቶ ማጣሪያዎች"
|
||||
},
|
||||
"birthdate": {
|
||||
"label": "የትውልድ ቀን"
|
||||
},
|
||||
"heading": "መሰረታዊ ነገሮች",
|
||||
"headline": {
|
||||
"label": "ርዕስ"
|
||||
@ -121,9 +125,6 @@
|
||||
"name": {
|
||||
"label": "ሙሉ ስም"
|
||||
},
|
||||
"birthdate": {
|
||||
"label": "የትውልድ ቀን"
|
||||
},
|
||||
"photo-filters": {
|
||||
"effects": {
|
||||
"border": {
|
||||
@ -174,6 +175,13 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"experience": {
|
||||
"form": {
|
||||
"name": {
|
||||
"label": "Company Name"
|
||||
}
|
||||
}
|
||||
},
|
||||
"location": {
|
||||
"address": {
|
||||
"label": "አድራሻ"
|
||||
@ -264,14 +272,15 @@
|
||||
"button": "GitHub ጉዳዮች",
|
||||
"heading": "ችግሮች? የባህሪ ጥያቄዎች?"
|
||||
},
|
||||
"docs": "ሰነዶች",
|
||||
"donate": {
|
||||
"body": "Reactive Resumeን መጠቀም ከወደዱ እባክዎን መተግበሪያው እንዲሰራ እና ያለ ማስታወቂያ ሁሌም በነፃ እንዲቀጥል በተቻለዎት መጠን ለመለገስ ያስቡበት።",
|
||||
"button": "ቡና ይጋብዙኝ",
|
||||
"heading": "ለ Reactive Resume ይለግሱ"
|
||||
},
|
||||
"github": "የምንጭ ኮድ",
|
||||
"docs": "ሰነዶች",
|
||||
"heading": "አገናኞች"
|
||||
"heading": "አገናኞች",
|
||||
"reddit": "Reddit"
|
||||
},
|
||||
"settings": {
|
||||
"global": {
|
||||
@ -290,14 +299,14 @@
|
||||
},
|
||||
"heading": "ቅንብሮች",
|
||||
"page": {
|
||||
"format": {
|
||||
"primary": "የወረቀት መጠን",
|
||||
"secondary": "ከቆመበት ቀጥል ገጾችዎ ልኬቶችን ይወስናል"
|
||||
},
|
||||
"break-line": {
|
||||
"primary": "መስመር መቁረጫ",
|
||||
"secondary": "የA4 ገጽ ቁመትን ለመለየት በሁሉም ገጾች ላይ መስመር አሳይ"
|
||||
},
|
||||
"format": {
|
||||
"primary": "የወረቀት መጠን",
|
||||
"secondary": "ከቆመበት ቀጥል ገጾችዎ ልኬቶችን ይወስናል"
|
||||
},
|
||||
"heading": "ገጽ",
|
||||
"orientation": {
|
||||
"disabled": "አንድ ገጽ ብቻ ሲኖር ምንም ተጽእኖ የለውም",
|
||||
|
||||
@ -20,23 +20,24 @@
|
||||
"links": {
|
||||
"heading": "አገናኞች",
|
||||
"links": {
|
||||
"docs": "ሰነዶች",
|
||||
"donate": "ይለግሱ",
|
||||
"github": "የምንጭ ኮድ",
|
||||
"docs": "ሰነዶች",
|
||||
"privacy": "የግላዊነት መመሪያ",
|
||||
"reddit": "Reddit",
|
||||
"service": "የአገልግሎት ውሎች"
|
||||
}
|
||||
},
|
||||
"screenshots": {
|
||||
"heading": "የገጽ እይታዎች"
|
||||
},
|
||||
"testimonials": {
|
||||
"heading": "ምስክሮች",
|
||||
"body": "ጥሩም ይሁን መጥፎ፣ ስለ Reactive Resume እና ለእርስዎ እንዴት እንደነበረ አስተያየትዎን መስማት እፈልጋለሁ።<br/>በአለም ዙሪያ በተጠቃሚዎች የተላኩ አንዳንድ መልዕክቶች እነዚሁና",
|
||||
"contact": "በዚህ በኩል ልታገኙኝ <1>ኢሜል</1> ትችላላችሁ ወይም <3>በድረ-ገጽ</3> ላይ ባለው የእውቂያ ቅጽ ማግኘት ይችላሉ።"
|
||||
},
|
||||
"summary": {
|
||||
"body": "Reactive Resume የእርስዎን የስራ ታሪክ የመፍጠር፣ የማዘመን እና የማጋራት መደበኛ ተግባራትን እንደ 1 2 3 ቀላል ለማድረግ የተሰራ ነፃ እና በነጻ የሚገኝ የስራ ልምድ ሰነድ መገንቢያ ነው። በዚህ መገልገያ የተለያዩ የስራ ልምድ ሰነዶችን በመስራት፣ ከቀጣሪዎች ወይም ከጓደኞች ጋር በማስፈንጠሪያ ማጋራት እና እንደ PDF ማተም ፣ ሁሉንም በነጻ ፣ ምንም ማስታወቂያ ሳይኖር ፣ ምንም ክትትል ሳይደረግ ፣ የመረጃዎን ትክክለኛነት እና ግላዊነት ተጠብቆ ማከናወን ይችላሉ።",
|
||||
"heading": "ማጠቃለያ"
|
||||
},
|
||||
"testimonials": {
|
||||
"body": "ጥሩም ይሁን መጥፎ፣ ስለ Reactive Resume እና ለእርስዎ እንዴት እንደነበረ አስተያየትዎን መስማት እፈልጋለሁ።<br/>በአለም ዙሪያ በተጠቃሚዎች የተላኩ አንዳንድ መልዕክቶች እነዚሁና",
|
||||
"contact": "በዚህ በኩል ልታገኙኝ <1>ኢሜል</1> ትችላላችሁ ወይም <3>በድረ-ገጽ</3> ላይ ባለው የእውቂያ ቅጽ ማግኘት ይችላሉ።",
|
||||
"heading": "ምስክሮች"
|
||||
}
|
||||
}
|
||||
|
||||
@ -71,6 +71,31 @@
|
||||
}
|
||||
},
|
||||
"heading": "የይለፍ ቃልዎን ዳግም ያስጀምሩ"
|
||||
},
|
||||
"profile": {
|
||||
"heading": "መለያህ",
|
||||
"form": {
|
||||
"avatar": {
|
||||
"help-text": "የመገለጫ ሥዕልህን በ<1>ግራቫታር ማዘመን ትችላለህ</1>"
|
||||
},
|
||||
"name": {
|
||||
"label": "ሙሉ ስም"
|
||||
},
|
||||
"email": {
|
||||
"label": "የ ኢሜል አድራሻ",
|
||||
"help-text": "በአሁኑ ጊዜ የኢሜል አድራሻዎን ማዘመን አይቻልም፣ እባክዎ ይልቁንስ አዲስ መለያ ይፍጠሩ።"
|
||||
}
|
||||
},
|
||||
"delete-account": {
|
||||
"heading": "መለያ እና ውሂብ ሰርዝ",
|
||||
"body": "መለያህን፣ ዳታህን እና ሁሉንም ከቆመበት ቀጥል ለመሰረዝ በጽሑፍ ሳጥኑ ውስጥ \"{{keyword}}\" ተይብ እና ቁልፉን ተጫን። ይህ የማይቀለበስ እርምጃ መሆኑን እና ውሂብዎን እንደገና ማምጣት እንደማይቻል እባክዎ ልብ ይበሉ።",
|
||||
"actions": {
|
||||
"delete": "መለያ ሰርዝ"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"save": "ለውጦችን አስቀምጥ"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dashboard": {
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
"actions": {
|
||||
"add": "إضافة {{token}} جديدة",
|
||||
"delete": "حذف {{token}}",
|
||||
"duplicate": "قسم مكرر",
|
||||
"edit": "تحرير {{token}}"
|
||||
},
|
||||
"columns": {
|
||||
@ -80,13 +81,13 @@
|
||||
"center-artboard": "لوحة الوسط",
|
||||
"copy-link": "انسخ الرابط للسيرة الذاتية",
|
||||
"export-pdf": "تصدير PDF",
|
||||
"redo": "إعادة",
|
||||
"toggle-orientation": "تبديل اتجاه الصفحة",
|
||||
"toggle-page-break-line": "تبديل سطر الصفحة",
|
||||
"toggle-sidebars": "تبديل الشريط الجانبي",
|
||||
"zoom-in": "تكبير",
|
||||
"zoom-out": "تصغير",
|
||||
"undo": "الغاء التحميل",
|
||||
"redo": "إعادة"
|
||||
"zoom-in": "تكبير",
|
||||
"zoom-out": "تصغير"
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
@ -114,6 +115,9 @@
|
||||
"actions": {
|
||||
"photo-filters": "فلاتر الصور"
|
||||
},
|
||||
"birthdate": {
|
||||
"label": "تاريخ الميلاد"
|
||||
},
|
||||
"heading": "الأساسيات",
|
||||
"headline": {
|
||||
"label": "العنوان الرئيسي"
|
||||
@ -121,9 +125,6 @@
|
||||
"name": {
|
||||
"label": "الاسم الكامل"
|
||||
},
|
||||
"birthdate": {
|
||||
"label": "تاريخ الميلاد"
|
||||
},
|
||||
"photo-filters": {
|
||||
"effects": {
|
||||
"border": {
|
||||
@ -174,6 +175,13 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"experience": {
|
||||
"form": {
|
||||
"name": {
|
||||
"label": "Company Name"
|
||||
}
|
||||
}
|
||||
},
|
||||
"location": {
|
||||
"address": {
|
||||
"label": "العنوان"
|
||||
@ -264,14 +272,15 @@
|
||||
"button": "صفحة المشاكل على \"GitHub\"",
|
||||
"heading": "خلل برمجي؟ طلب وظائف ومميزات مخصصة؟"
|
||||
},
|
||||
"docs": "توثيق",
|
||||
"donate": {
|
||||
"body": "إذا أعجبك استخدام Resctive Resume ، فالرجاء التفكير في التبرع بأكبر قدر ممكن من أجل الحفاظ على استمرار التطبيق وتشغيله ، بدون إعلانات وبشكل مجاني إلى الأبد.",
|
||||
"button": "إشتر لي قهوة",
|
||||
"heading": "تبرع الى Reactive Resume"
|
||||
},
|
||||
"github": "الشفرة المصدرية",
|
||||
"docs": "توثيق",
|
||||
"heading": "الروابط"
|
||||
"heading": "الروابط",
|
||||
"reddit": "رديت"
|
||||
},
|
||||
"settings": {
|
||||
"global": {
|
||||
@ -290,14 +299,14 @@
|
||||
},
|
||||
"heading": "الإعدادات",
|
||||
"page": {
|
||||
"format": {
|
||||
"primary": "حجم الورق",
|
||||
"secondary": "تحدد أبعاد صفحات سيرتك الذاتية"
|
||||
},
|
||||
"break-line": {
|
||||
"primary": "خط فاصل",
|
||||
"secondary": "اعرض خط في كل الصفحات لتحديد ارتفاع صفحة A4"
|
||||
},
|
||||
"format": {
|
||||
"primary": "حجم الورق",
|
||||
"secondary": "تحدد أبعاد صفحات سيرتك الذاتية"
|
||||
},
|
||||
"heading": "صفحة",
|
||||
"orientation": {
|
||||
"disabled": "ليس له تأثير عندما تكون هناك صفحة واحدة فقط",
|
||||
|
||||
@ -20,23 +20,24 @@
|
||||
"links": {
|
||||
"heading": "الروابط",
|
||||
"links": {
|
||||
"docs": "توثيق",
|
||||
"donate": "تبرّع",
|
||||
"github": "الشفرة المصدرية",
|
||||
"docs": "توثيق",
|
||||
"privacy": "سياسة الخصوصية",
|
||||
"reddit": "رديت",
|
||||
"service": "شروط الإستخدام"
|
||||
}
|
||||
},
|
||||
"screenshots": {
|
||||
"heading": "لقطات الشاشة"
|
||||
},
|
||||
"testimonials": {
|
||||
"heading": "الآراء والتقييمات",
|
||||
"body": "سواء أكان ذلك جيدًا أم سيئًا ، أود أن أسمع رأيك في \"السيرة الذاتية التفاعلية\" وكيف كانت التجربة بالنسبة لك.<br/>فيما يلي بعض الرسائل المرسلة بواسطة مستخدمين من جميع أنحاء العالم.",
|
||||
"contact": "يمكنك التواصل معي من خلال <1> بريدي الإلكتروني</1> أو من خلال نموذج الاتصال الموجود على <3> موقع الويب الخاص بي</3>."
|
||||
},
|
||||
"summary": {
|
||||
"body": "Reactive Resume هو منشئ سيرة ذاتية مجاني ومفتوح المصدر تم إنشاؤه لجعل المهام الروتينية لإنشاء وتحديث ومشاركة سيرتك الذاتية سهلة مثل 1 و 2 و 3. باستخدام هذا التطبيق ، يمكنك إنشاء سيرة ذاتية متعددة ومشاركتها مع جهات التوظيف أو الأصدقاء من خلال رابط فريد وطباعته كملف PDF ، كل ذلك مجانًا ، بدون إعلانات ، بدون تتبع ، دون فقدان سلامة وخصوصية بياناتك.",
|
||||
"heading": "الملخص"
|
||||
},
|
||||
"testimonials": {
|
||||
"body": "سواء أكان ذلك جيدًا أم سيئًا ، أود أن أسمع رأيك في \"السيرة الذاتية التفاعلية\" وكيف كانت التجربة بالنسبة لك.<br/>فيما يلي بعض الرسائل المرسلة بواسطة مستخدمين من جميع أنحاء العالم.",
|
||||
"contact": "يمكنك التواصل معي من خلال <1> بريدي الإلكتروني</1> أو من خلال نموذج الاتصال الموجود على <3> موقع الويب الخاص بي</3>.",
|
||||
"heading": "الآراء والتقييمات"
|
||||
}
|
||||
}
|
||||
|
||||
@ -71,6 +71,31 @@
|
||||
}
|
||||
},
|
||||
"heading": "إعادة تعيين كلمة المرور الخاصة بك"
|
||||
},
|
||||
"profile": {
|
||||
"heading": "الحساب الخاص بك",
|
||||
"form": {
|
||||
"avatar": {
|
||||
"help-text": "يمكنك تحديث صورة ملفك الشخصي على <1> Gravatar</1>"
|
||||
},
|
||||
"name": {
|
||||
"label": "الاسم الكامل"
|
||||
},
|
||||
"email": {
|
||||
"label": "عنوان البريد الإلكتروني",
|
||||
"help-text": "لا يمكن تحديث عنوان بريدك الإلكتروني في الوقت الحالي ، يرجى إنشاء حساب جديد بدلاً من ذلك."
|
||||
}
|
||||
},
|
||||
"delete-account": {
|
||||
"heading": "حذف الحساب والبيانات",
|
||||
"body": "لحذف حسابك وبياناتك وجميع سيرتك الذاتية ، اكتب \"{{keyword}}\" في مربع النص وانقر على الزر. يرجى ملاحظة أن هذا إجراء لا رجوع فيه ولا يمكن استرداد بياناتك مرة أخرى.",
|
||||
"actions": {
|
||||
"delete": "حذف الحساب"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"save": "حفظ التغييرات"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dashboard": {
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
"actions": {
|
||||
"add": "Добави нов {{token}}",
|
||||
"delete": "Изтрий {{token}}",
|
||||
"duplicate": "Дублиран раздел",
|
||||
"edit": "Редакция на {{token}}"
|
||||
},
|
||||
"columns": {
|
||||
@ -80,13 +81,13 @@
|
||||
"center-artboard": "Централна табла",
|
||||
"copy-link": "Копирай линка в резюмето",
|
||||
"export-pdf": "Експорт в PDF",
|
||||
"redo": "Redo",
|
||||
"toggle-orientation": "Превключване на ориентацията на страницата",
|
||||
"toggle-page-break-line": "Линия за прекъсване на страницата",
|
||||
"toggle-sidebars": "Включване на страничната лента",
|
||||
"zoom-in": "Увеличи",
|
||||
"zoom-out": "Намали",
|
||||
"undo": "Отмяна на",
|
||||
"redo": "Redo"
|
||||
"zoom-in": "Увеличи",
|
||||
"zoom-out": "Намали"
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
@ -114,6 +115,9 @@
|
||||
"actions": {
|
||||
"photo-filters": "Филтри за снимата"
|
||||
},
|
||||
"birthdate": {
|
||||
"label": "Дата на раждане"
|
||||
},
|
||||
"heading": "Основни",
|
||||
"headline": {
|
||||
"label": "Заглавие"
|
||||
@ -121,9 +125,6 @@
|
||||
"name": {
|
||||
"label": "Пълно име"
|
||||
},
|
||||
"birthdate": {
|
||||
"label": "Дата на раждане"
|
||||
},
|
||||
"photo-filters": {
|
||||
"effects": {
|
||||
"border": {
|
||||
@ -174,6 +175,13 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"experience": {
|
||||
"form": {
|
||||
"name": {
|
||||
"label": "Company Name"
|
||||
}
|
||||
}
|
||||
},
|
||||
"location": {
|
||||
"address": {
|
||||
"label": "Адрес"
|
||||
@ -264,14 +272,15 @@
|
||||
"button": "GitHub общност",
|
||||
"heading": "Бъгове? Искания за функции?"
|
||||
},
|
||||
"docs": "Документация",
|
||||
"donate": {
|
||||
"body": "Ако ви е харесало да използвате Reactive Resume, моля, помислете дали да не дарите колкото можете повече за поддръжка на приложението, без реклами и безплатно завинаги.",
|
||||
"button": "Почерпете ме с кафе",
|
||||
"heading": "Направи дарение и подкрепи Reactive Resume"
|
||||
},
|
||||
"github": "Програмен код",
|
||||
"docs": "Документация",
|
||||
"heading": "Връзки"
|
||||
"heading": "Връзки",
|
||||
"reddit": "Reddit"
|
||||
},
|
||||
"settings": {
|
||||
"global": {
|
||||
@ -290,14 +299,14 @@
|
||||
},
|
||||
"heading": "Настройки",
|
||||
"page": {
|
||||
"format": {
|
||||
"primary": "Размер на хартията",
|
||||
"secondary": "Определя размерите на вашите страници с автобиография"
|
||||
},
|
||||
"break-line": {
|
||||
"primary": "Линия на прекъсване",
|
||||
"secondary": "Показване на линия на всички страници за обозначаване на височината на страница A4"
|
||||
},
|
||||
"format": {
|
||||
"primary": "Размер на хартията",
|
||||
"secondary": "Определя размерите на вашите страници с автобиография"
|
||||
},
|
||||
"heading": "Страница",
|
||||
"orientation": {
|
||||
"disabled": "Няма ефект, когато има само една страница",
|
||||
|
||||
@ -20,23 +20,24 @@
|
||||
"links": {
|
||||
"heading": "Връзки",
|
||||
"links": {
|
||||
"docs": "Документация",
|
||||
"donate": "Дарение",
|
||||
"github": "Програмен код",
|
||||
"docs": "Документация",
|
||||
"privacy": "Политика за поверителност",
|
||||
"reddit": "Reddit",
|
||||
"service": "Условия на ползване"
|
||||
}
|
||||
},
|
||||
"screenshots": {
|
||||
"heading": "Екранни снимки"
|
||||
},
|
||||
"testimonials": {
|
||||
"heading": "Препоръки",
|
||||
"body": "Позитивно или негативно, ще се радвам да чуя мнението ви за Reactive Resume и какъв е вашия опитът.<br/>Ето някои от съобщенията, изпратени от потребители по целия свят.",
|
||||
"contact": "Можете да се свържете с мен чрез <1>моя имейл</1> или чрез формата за контакт на <3>моя уебсайт</3> ."
|
||||
},
|
||||
"summary": {
|
||||
"body": "Reactive Resume е безплатен инструмент за създаване на автобиография/CV с отворен код, който е създаден, за да улесни обикновените задачи за създаване, актуализиране и споделяне на вашата автобиография като 1, 2, 3. С това приложение можете да създавате множество автобиографии, да ги споделяте директно със специалистите по подбор на персонал или приятели чрез уникална връзка, както и ги отпечатате като PDF. Всичко е безплатно, без реклами, без проследяване, без да губите целостта и поверителността на вашите данни.",
|
||||
"heading": "Обобщение"
|
||||
},
|
||||
"testimonials": {
|
||||
"body": "Позитивно или негативно, ще се радвам да чуя мнението ви за Reactive Resume и какъв е вашия опитът.<br/>Ето някои от съобщенията, изпратени от потребители по целия свят.",
|
||||
"contact": "Можете да се свържете с мен чрез <1>моя имейл</1> или чрез формата за контакт на <3>моя уебсайт</3> .",
|
||||
"heading": "Препоръки"
|
||||
}
|
||||
}
|
||||
|
||||
@ -71,6 +71,31 @@
|
||||
}
|
||||
},
|
||||
"heading": "Нулиране на паролата"
|
||||
},
|
||||
"profile": {
|
||||
"heading": "Вашата сметка",
|
||||
"form": {
|
||||
"avatar": {
|
||||
"help-text": "Можете да актуализирате профилната си снимка в <1>Gravatar</1>"
|
||||
},
|
||||
"name": {
|
||||
"label": "Пълно име"
|
||||
},
|
||||
"email": {
|
||||
"label": "Имейл адрес",
|
||||
"help-text": "В момента не е възможно да актуализирате своя имейл адрес, моля, създайте нов акаунт вместо това."
|
||||
}
|
||||
},
|
||||
"delete-account": {
|
||||
"heading": "Изтриване на акаунт и данни",
|
||||
"body": "За да изтриете своя акаунт, вашите данни и всички ваши автобиографии, въведете \"{{keyword}}\" в текстовото поле и щракнете върху бутона. Моля, имайте предвид, че това е необратимо действие и вашите данни не могат да бъдат извлечени отново.",
|
||||
"actions": {
|
||||
"delete": "Изтриване на акаунт"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"save": "Запазите промените"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dashboard": {
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
"actions": {
|
||||
"add": "নতুন {{token}} যোগ করুন",
|
||||
"delete": "{{token}} মুছুন৷",
|
||||
"duplicate": "সদৃশ বিভাগ",
|
||||
"edit": "{{token}} সম্পাদনা করুন"
|
||||
},
|
||||
"columns": {
|
||||
@ -80,13 +81,13 @@
|
||||
"center-artboard": "কেন্দ্র আর্টবোর্ড",
|
||||
"copy-link": "রিজিউমে লিঙ্ক কপি করুন",
|
||||
"export-pdf": "পিডিএফ আকারে পাঠান",
|
||||
"redo": "আবার করুন",
|
||||
"toggle-orientation": "পৃষ্ঠা ওরিয়েন্টেশন টগল করুন",
|
||||
"toggle-page-break-line": "পৃষ্ঠা বিরতি লাইন টগল করুন",
|
||||
"toggle-sidebars": "সাইডবার টগল করুন",
|
||||
"zoom-in": "বড় কর",
|
||||
"zoom-out": "ছোট করা",
|
||||
"undo": "পূর্বাবস্থায় ফেরান",
|
||||
"redo": "আবার করুন"
|
||||
"zoom-in": "বড় কর",
|
||||
"zoom-out": "ছোট করা"
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
@ -114,6 +115,9 @@
|
||||
"actions": {
|
||||
"photo-filters": "ফটো ফিল্টার"
|
||||
},
|
||||
"birthdate": {
|
||||
"label": "জন্ম তারিখ"
|
||||
},
|
||||
"heading": "মৌলিক",
|
||||
"headline": {
|
||||
"label": "শিরোনাম"
|
||||
@ -121,9 +125,6 @@
|
||||
"name": {
|
||||
"label": "পূর্ণ নাম"
|
||||
},
|
||||
"birthdate": {
|
||||
"label": "জন্ম তারিখ"
|
||||
},
|
||||
"photo-filters": {
|
||||
"effects": {
|
||||
"border": {
|
||||
@ -174,6 +175,13 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"experience": {
|
||||
"form": {
|
||||
"name": {
|
||||
"label": "কোম্পানির নাম"
|
||||
}
|
||||
}
|
||||
},
|
||||
"location": {
|
||||
"address": {
|
||||
"label": "ঠিকানা"
|
||||
@ -264,14 +272,15 @@
|
||||
"button": "Github ইস্যু তালিকা",
|
||||
"heading": "বাগ? বৈশিষ্ট্য অনুরোধ?"
|
||||
},
|
||||
"docs": "ডকুমেন্টেশন",
|
||||
"donate": {
|
||||
"body": "আপনি যদি প্রতিক্রিয়াশীল জীবনবৃত্তান্ত ব্যবহার করতে পছন্দ করেন, অনুগ্রহ করে বিজ্ঞাপন ছাড়া এবং চিরতরে বিনামূল্যে অ্যাপটিকে চালু ও চালু রাখার জন্য যতটা সম্ভব দান করার কথা বিবেচনা করুন।",
|
||||
"button": "আমাকে একটা কফি কিনে দাও",
|
||||
"heading": "Reactive Resume -তে দান করুন"
|
||||
},
|
||||
"github": "সোর্স কোড",
|
||||
"docs": "ডকুমেন্টেশন",
|
||||
"heading": "লিঙ্ক"
|
||||
"heading": "লিঙ্ক",
|
||||
"reddit": "রেডডিট"
|
||||
},
|
||||
"settings": {
|
||||
"global": {
|
||||
@ -290,14 +299,14 @@
|
||||
},
|
||||
"heading": "সেটিংস",
|
||||
"page": {
|
||||
"format": {
|
||||
"primary": "কাগজের আকার",
|
||||
"secondary": "আপনার জীবনবৃত্তান্ত পৃষ্ঠাগুলির মাত্রা নির্ধারণ করে"
|
||||
},
|
||||
"break-line": {
|
||||
"primary": "লাইন ভেঙ্গে ফেলুন",
|
||||
"secondary": "একটি A4 পৃষ্ঠার উচ্চতা চিহ্নিত করতে সমস্ত পৃষ্ঠায় একটি লাইন দেখান৷"
|
||||
},
|
||||
"format": {
|
||||
"primary": "কাগজের আকার",
|
||||
"secondary": "আপনার জীবনবৃত্তান্ত পৃষ্ঠাগুলির মাত্রা নির্ধারণ করে"
|
||||
},
|
||||
"heading": "পাতা",
|
||||
"orientation": {
|
||||
"disabled": "শুধুমাত্র একটি পৃষ্ঠা থাকলে কোন প্রভাব নেই",
|
||||
|
||||
@ -20,23 +20,24 @@
|
||||
"links": {
|
||||
"heading": "লিঙ্ক",
|
||||
"links": {
|
||||
"docs": "ডকুমেন্টেশন",
|
||||
"donate": "দান করুন",
|
||||
"github": "সোর্স কোড",
|
||||
"docs": "ডকুমেন্টেশন",
|
||||
"privacy": "গোপনীয়তা নীতি",
|
||||
"reddit": "রেডডিট",
|
||||
"service": "সেবা পাবার শর্ত"
|
||||
}
|
||||
},
|
||||
"screenshots": {
|
||||
"heading": "স্ক্রিনশট"
|
||||
},
|
||||
"testimonials": {
|
||||
"heading": "প্রশংসাপত্র",
|
||||
"body": "ভাল বা খারাপ, আমি প্রতিক্রিয়াশীল জীবনবৃত্তান্ত সম্পর্কে আপনার মতামত এবং আপনার জন্য অভিজ্ঞতা কেমন হয়েছে তা জানতে চাই।<br/>এখানে বিশ্বজুড়ে ব্যবহারকারীদের পাঠানো কিছু বার্তা রয়েছে৷",
|
||||
"contact": "আপনি <1>আমার ইমেল</1> বা <3>আমার ওয়েবসাইট</3>-এ যোগাযোগ ফর্মের মাধ্যমে আমার সাথে যোগাযোগ করতে পারেন।"
|
||||
},
|
||||
"summary": {
|
||||
"body": "Reactive Resume হল একটি বিনামূল্যের এবং ওপেন সোর্স জীবনবৃত্তান্ত নির্মাতা যা আপনার জীবনবৃত্তান্ত তৈরি, আপডেট এবং শেয়ার করার জাগতিক কাজগুলিকে 1, 2, 3 এর মতো সহজ করে তুলতে তৈরি করা হয়েছে৷ এই অ্যাপটির মাধ্যমে, আপনি একাধিক জীবনবৃত্তান্ত তৈরি করতে পারেন, নিয়োগকারীদের বা বন্ধুদের সাথে শেয়ার করতে পারেন৷ একটি অনন্য লিঙ্কের মাধ্যমে এবং আপনার ডেটার অখণ্ডতা এবং গোপনীয়তা হারানো ছাড়াই বিনামূল্যে, কোনও বিজ্ঞাপন, কোনও ট্র্যাকিং ছাড়াই একটি পিডিএফ হিসাবে মুদ্রণ করুন।",
|
||||
"heading": "সারসংক্ষেপ"
|
||||
},
|
||||
"testimonials": {
|
||||
"body": "ভাল বা খারাপ, আমি প্রতিক্রিয়াশীল জীবনবৃত্তান্ত সম্পর্কে আপনার মতামত এবং আপনার জন্য অভিজ্ঞতা কেমন হয়েছে তা জানতে চাই।<br/>এখানে বিশ্বজুড়ে ব্যবহারকারীদের পাঠানো কিছু বার্তা রয়েছে৷",
|
||||
"contact": "আপনি <1>আমার ইমেল</1> বা <3>আমার ওয়েবসাইট</3>-এ যোগাযোগ ফর্মের মাধ্যমে আমার সাথে যোগাযোগ করতে পারেন।",
|
||||
"heading": "প্রশংসাপত্র"
|
||||
}
|
||||
}
|
||||
|
||||
@ -71,6 +71,31 @@
|
||||
}
|
||||
},
|
||||
"heading": "আপনার পাসওয়ার্ডটি রিসেট করুন"
|
||||
},
|
||||
"profile": {
|
||||
"heading": "আপনার অ্যাকাউন্ট",
|
||||
"form": {
|
||||
"avatar": {
|
||||
"help-text": "আপনি <1>Gravatar-এ আপনার প্রোফাইল ছবি আপডেট করতে পারেন</1>"
|
||||
},
|
||||
"name": {
|
||||
"label": "পুরো নাম"
|
||||
},
|
||||
"email": {
|
||||
"label": "ইমেইল ঠিকানা",
|
||||
"help-text": "এই মুহূর্তে আপনার ইমেল ঠিকানা আপডেট করা সম্ভব নয়, এর পরিবর্তে একটি নতুন অ্যাকাউন্ট তৈরি করুন।"
|
||||
}
|
||||
},
|
||||
"delete-account": {
|
||||
"heading": "অ্যাকাউন্ট এবং ডেটা মুছুন",
|
||||
"body": "আপনার অ্যাকাউন্ট, আপনার ডেটা এবং আপনার সমস্ত জীবনবৃত্তান্ত মুছে ফেলতে, পাঠ্যবক্সে \"{{keyword}}\" টাইপ করুন এবং বোতামে ক্লিক করুন৷ দয়া করে মনে রাখবেন এটি একটি অপরিবর্তনীয় ক্রিয়া এবং আপনার ডেটা আবার পুনরুদ্ধার করা যাবে না।",
|
||||
"actions": {
|
||||
"delete": "হিসাব মুছে ফেলা"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"save": "পরিবর্তনগুলোর সংরক্ষন"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dashboard": {
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
"actions": {
|
||||
"add": "Afegeix nou {{token}}",
|
||||
"delete": "Suprimeix {{token}}",
|
||||
"duplicate": "Secció duplicada",
|
||||
"edit": "Edita {{token}}"
|
||||
},
|
||||
"columns": {
|
||||
@ -80,13 +81,13 @@
|
||||
"center-artboard": "Centrar tauler de dibuix",
|
||||
"copy-link": "Copia l'enllaç al currículum",
|
||||
"export-pdf": "Exporta com a PDF",
|
||||
"redo": "Refer",
|
||||
"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"
|
||||
"zoom-in": "Amplia",
|
||||
"zoom-out": "Allunya"
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
@ -114,6 +115,9 @@
|
||||
"actions": {
|
||||
"photo-filters": "Filtres fotogràfics"
|
||||
},
|
||||
"birthdate": {
|
||||
"label": "Data de naixement"
|
||||
},
|
||||
"heading": "Bàsics",
|
||||
"headline": {
|
||||
"label": "Títol"
|
||||
@ -121,9 +125,6 @@
|
||||
"name": {
|
||||
"label": "Nom complet"
|
||||
},
|
||||
"birthdate": {
|
||||
"label": "Data de naixement"
|
||||
},
|
||||
"photo-filters": {
|
||||
"effects": {
|
||||
"border": {
|
||||
@ -174,6 +175,13 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"experience": {
|
||||
"form": {
|
||||
"name": {
|
||||
"label": "Company Name"
|
||||
}
|
||||
}
|
||||
},
|
||||
"location": {
|
||||
"address": {
|
||||
"label": "Adreça"
|
||||
@ -264,14 +272,15 @@
|
||||
"button": "Problemes de GitHub",
|
||||
"heading": "Errors? Sol·licituds de funcions?"
|
||||
},
|
||||
"docs": "Documentació",
|
||||
"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",
|
||||
"docs": "Documentació",
|
||||
"heading": "Enllaços"
|
||||
"heading": "Enllaços",
|
||||
"reddit": "Reddit"
|
||||
},
|
||||
"settings": {
|
||||
"global": {
|
||||
@ -290,14 +299,14 @@
|
||||
},
|
||||
"heading": "Configuració",
|
||||
"page": {
|
||||
"format": {
|
||||
"primary": "Mida del paper",
|
||||
"secondary": "Determina les dimensions de les pàgines del vostre currículum"
|
||||
},
|
||||
"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"
|
||||
},
|
||||
"format": {
|
||||
"primary": "Mida del paper",
|
||||
"secondary": "Determina les dimensions de les pàgines del vostre currículum"
|
||||
},
|
||||
"heading": "Pàgina",
|
||||
"orientation": {
|
||||
"disabled": "No té efecte quan només hi ha una pàgina",
|
||||
|
||||
@ -20,23 +20,24 @@
|
||||
"links": {
|
||||
"heading": "Enllaços",
|
||||
"links": {
|
||||
"docs": "Documentació",
|
||||
"donate": "Donar",
|
||||
"github": "Codi font",
|
||||
"docs": "Documentació",
|
||||
"privacy": "Política de privacitat",
|
||||
"reddit": "Reddit",
|
||||
"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"
|
||||
},
|
||||
"testimonials": {
|
||||
"body": "Bo o dolent, m'encantaria saber la teva opinió sobre Reactive Curriculum vitae i com ha estat l'experiència per a tu.<br/>Aquests són alguns dels missatges enviats pels usuaris de tot el món.",
|
||||
"contact": "Podeu posar-vos en contacte amb mi mitjançant <1>el meu correu electrònic</1> o mitjançant el formulari de contacte al <3>el meu lloc web</3> .",
|
||||
"heading": "Testimonis"
|
||||
}
|
||||
}
|
||||
|
||||
@ -71,6 +71,31 @@
|
||||
}
|
||||
},
|
||||
"heading": "Restablir la contrasenya"
|
||||
},
|
||||
"profile": {
|
||||
"heading": "El teu compte",
|
||||
"form": {
|
||||
"avatar": {
|
||||
"help-text": "Pots actualitzar la teva foto de perfil a <1>Gravatar</1>"
|
||||
},
|
||||
"name": {
|
||||
"label": "Nom complet"
|
||||
},
|
||||
"email": {
|
||||
"label": "Correu electrònic",
|
||||
"help-text": "No és possible actualitzar la vostra adreça de correu electrònic en aquest moment, si us plau, creeu un compte nou."
|
||||
}
|
||||
},
|
||||
"delete-account": {
|
||||
"heading": "Suprimeix el compte i les dades",
|
||||
"body": "Per eliminar el vostre compte, les vostres dades i tots els vostres currículums, escriviu \"{{keyword}}\" al quadre de text i feu clic al botó. Tingueu en compte que aquesta és una acció irreversible i que les vostres dades no es poden recuperar de nou.",
|
||||
"actions": {
|
||||
"delete": "Esborrar compte"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"save": "Guardar canvis"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dashboard": {
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
"actions": {
|
||||
"add": "Přidat nový {{token}}",
|
||||
"delete": "Odstranit {{token}}",
|
||||
"duplicate": "Duplicitní sekce",
|
||||
"edit": "Upravit {{token}}"
|
||||
},
|
||||
"columns": {
|
||||
@ -80,13 +81,13 @@
|
||||
"center-artboard": "Vycentrovat Artboard",
|
||||
"copy-link": "Kopírovat odkaz na životopis",
|
||||
"export-pdf": "Exportovat PDF",
|
||||
"redo": "Přepracovat",
|
||||
"toggle-orientation": "Přepnout orientaci stránky",
|
||||
"toggle-page-break-line": "Přepnout řádek zalomení stránky",
|
||||
"toggle-sidebars": "Přepnout boční panely",
|
||||
"zoom-in": "Přiblížit",
|
||||
"zoom-out": "Oddálit",
|
||||
"undo": "Zrušit",
|
||||
"redo": "Přepracovat"
|
||||
"zoom-in": "Přiblížit",
|
||||
"zoom-out": "Oddálit"
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
@ -114,6 +115,9 @@
|
||||
"actions": {
|
||||
"photo-filters": "Foto filtry"
|
||||
},
|
||||
"birthdate": {
|
||||
"label": "Datum narození"
|
||||
},
|
||||
"heading": "Základy",
|
||||
"headline": {
|
||||
"label": "Titulek"
|
||||
@ -121,9 +125,6 @@
|
||||
"name": {
|
||||
"label": "Celé jméno"
|
||||
},
|
||||
"birthdate": {
|
||||
"label": "Datum narození"
|
||||
},
|
||||
"photo-filters": {
|
||||
"effects": {
|
||||
"border": {
|
||||
@ -174,6 +175,13 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"experience": {
|
||||
"form": {
|
||||
"name": {
|
||||
"label": "Company Name"
|
||||
}
|
||||
}
|
||||
},
|
||||
"location": {
|
||||
"address": {
|
||||
"label": "Adresa"
|
||||
@ -264,14 +272,15 @@
|
||||
"button": "Hlášení chyb GitHub",
|
||||
"heading": "Chyby? Požadavky na funkce?"
|
||||
},
|
||||
"docs": "Dokumentace",
|
||||
"donate": {
|
||||
"body": "Pokud se vám líbilo používání Reactive Resume, zvažte prosím darování co největší částky na udržení aplikace v provozu, bez reklam a navždy zdarma.",
|
||||
"button": "Kupte mi kávu",
|
||||
"heading": "Přispějte na Reactive Resume"
|
||||
},
|
||||
"github": "Zdrojový kód",
|
||||
"docs": "Dokumentace",
|
||||
"heading": "Odkazy"
|
||||
"heading": "Odkazy",
|
||||
"reddit": "Reddit"
|
||||
},
|
||||
"settings": {
|
||||
"global": {
|
||||
@ -290,14 +299,14 @@
|
||||
},
|
||||
"heading": "Nastavení",
|
||||
"page": {
|
||||
"format": {
|
||||
"primary": "Velikost papíru",
|
||||
"secondary": "Určuje rozměry stránek vašeho životopisu"
|
||||
},
|
||||
"break-line": {
|
||||
"primary": "Nový řádek",
|
||||
"secondary": "Zobrazit čáru na všech stránkách pro označení výšky stránky A4"
|
||||
},
|
||||
"format": {
|
||||
"primary": "Velikost papíru",
|
||||
"secondary": "Určuje rozměry stránek vašeho životopisu"
|
||||
},
|
||||
"heading": "Stránka",
|
||||
"orientation": {
|
||||
"disabled": "Nemá žádný efekt, pokud existuje pouze jedna stránka",
|
||||
|
||||
@ -20,23 +20,24 @@
|
||||
"links": {
|
||||
"heading": "Odkazy",
|
||||
"links": {
|
||||
"docs": "Dokumentace",
|
||||
"donate": "Darovat",
|
||||
"github": "Zdrojový kód",
|
||||
"docs": "Dokumentace",
|
||||
"privacy": "Zásady ochrany osobních údajů",
|
||||
"reddit": "Reddit",
|
||||
"service": "Podmínky služby"
|
||||
}
|
||||
},
|
||||
"screenshots": {
|
||||
"heading": "Snímky obrazovky"
|
||||
},
|
||||
"testimonials": {
|
||||
"heading": "Posudky",
|
||||
"body": "Ať je to dobře nebo špatně, rád bych slyšel váš názor na Reactive Resume a jaké to bylo pro vás.<br/>Zde jsou některé zprávy zaslané uživateli z celého světa.",
|
||||
"contact": "Můžete mě kontaktovat prostřednictvím <1>mého e-mailu</1> nebo prostřednictvím kontaktního formuláře na <3>mých webových stránkách</3> ."
|
||||
},
|
||||
"summary": {
|
||||
"body": "Reactive Resume je bezplatný a open source tvůrce životopisů, který je vytvořen tak, aby zjednodušil každodenní úkoly vytváření, aktualizace a sdílení vašeho životopisu jako 1, 2, 3. Pomocí této aplikace můžete vytvořit více životopisů a sdílet je s náboráři nebo přáteli. prostřednictvím jedinečného odkazu a vytiskněte si jej jako PDF, vše zdarma, bez reklam, bez sledování, bez ztráty integrity a soukromí vašich dat.",
|
||||
"heading": "souhrn"
|
||||
},
|
||||
"testimonials": {
|
||||
"body": "Ať je to dobře nebo špatně, rád bych slyšel váš názor na Reactive Resume a jaké to bylo pro vás.<br/>Zde jsou některé zprávy zaslané uživateli z celého světa.",
|
||||
"contact": "Můžete mě kontaktovat prostřednictvím <1>mého e-mailu</1> nebo prostřednictvím kontaktního formuláře na <3>mých webových stránkách</3> .",
|
||||
"heading": "Posudky"
|
||||
}
|
||||
}
|
||||
|
||||
@ -71,6 +71,31 @@
|
||||
}
|
||||
},
|
||||
"heading": "Obnovit heslo"
|
||||
},
|
||||
"profile": {
|
||||
"heading": "Váš účet",
|
||||
"form": {
|
||||
"avatar": {
|
||||
"help-text": "Svůj profilový obrázek si můžete aktualizovat na <1>Gravatar</1>"
|
||||
},
|
||||
"name": {
|
||||
"label": "Celé jméno"
|
||||
},
|
||||
"email": {
|
||||
"label": "Emailová adresa",
|
||||
"help-text": "V tuto chvíli není možné aktualizovat vaši e-mailovou adresu, vytvořte si místo toho nový účet."
|
||||
}
|
||||
},
|
||||
"delete-account": {
|
||||
"heading": "Smazat účet a data",
|
||||
"body": "Chcete-li smazat svůj účet, data a všechny své životopisy, zadejte do textového pole „{{keyword}}“ a klikněte na tlačítko. Upozorňujeme, že se jedná o nevratnou akci a vaše data nelze znovu získat.",
|
||||
"actions": {
|
||||
"delete": "Smazat účet"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"save": "Uložit změny"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dashboard": {
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
"actions": {
|
||||
"add": "Tilføj ny {{token}}",
|
||||
"delete": "Slet {{token}}",
|
||||
"duplicate": "Dublet afsnit",
|
||||
"edit": "Rediger {{token}}"
|
||||
},
|
||||
"columns": {
|
||||
@ -80,13 +81,13 @@
|
||||
"center-artboard": "Centrer tegnebræt",
|
||||
"copy-link": "Kopier link til CV",
|
||||
"export-pdf": "Eksporter PDF",
|
||||
"redo": "Redo",
|
||||
"toggle-orientation": "Skift sideorientering",
|
||||
"toggle-page-break-line": "Skift sideskiftlinje",
|
||||
"toggle-sidebars": "Sidebjælke til/fra",
|
||||
"zoom-in": "Zoom ind",
|
||||
"zoom-out": "Zoom ud",
|
||||
"undo": "Fortryd",
|
||||
"redo": "Redo"
|
||||
"zoom-in": "Zoom ind",
|
||||
"zoom-out": "Zoom ud"
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
@ -114,6 +115,9 @@
|
||||
"actions": {
|
||||
"photo-filters": "Fotofiltre"
|
||||
},
|
||||
"birthdate": {
|
||||
"label": "Fødselsdato"
|
||||
},
|
||||
"heading": "Grundlæggende",
|
||||
"headline": {
|
||||
"label": "Overskrift"
|
||||
@ -121,9 +125,6 @@
|
||||
"name": {
|
||||
"label": "Fulde navn"
|
||||
},
|
||||
"birthdate": {
|
||||
"label": "Fødselsdato"
|
||||
},
|
||||
"photo-filters": {
|
||||
"effects": {
|
||||
"border": {
|
||||
@ -174,6 +175,13 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"experience": {
|
||||
"form": {
|
||||
"name": {
|
||||
"label": "Company Name"
|
||||
}
|
||||
}
|
||||
},
|
||||
"location": {
|
||||
"address": {
|
||||
"label": "Adresse"
|
||||
@ -264,14 +272,15 @@
|
||||
"button": "GitHub-problemer",
|
||||
"heading": "Fejl? Ønsker til en ny funktion?"
|
||||
},
|
||||
"docs": "Dokumentation",
|
||||
"donate": {
|
||||
"body": "Hvis du kunne lide at bruge Reactive Resume, bedes du overveje at donere så meget som muligt til formålet med at holde appen oppe og køre, uden annoncer og gratis for evigt.",
|
||||
"button": "Købe mig en kop kaffe",
|
||||
"heading": "Donér til Reactive Resume"
|
||||
},
|
||||
"github": "Kildekode",
|
||||
"docs": "Dokumentation",
|
||||
"heading": "Links"
|
||||
"heading": "Links",
|
||||
"reddit": "Reddit"
|
||||
},
|
||||
"settings": {
|
||||
"global": {
|
||||
@ -290,14 +299,14 @@
|
||||
},
|
||||
"heading": "Indstillinger",
|
||||
"page": {
|
||||
"format": {
|
||||
"primary": "Papirstørrelse",
|
||||
"secondary": "Bestemmer dimensionerne på dine CV-sider"
|
||||
},
|
||||
"break-line": {
|
||||
"primary": "Brudlinje",
|
||||
"secondary": "Vis en streg på alle sider for at markere højden på en A4-side"
|
||||
},
|
||||
"format": {
|
||||
"primary": "Papirstørrelse",
|
||||
"secondary": "Bestemmer dimensionerne på dine CV-sider"
|
||||
},
|
||||
"heading": "Side",
|
||||
"orientation": {
|
||||
"disabled": "Har ingen effekt, når der kun er én side",
|
||||
|
||||
@ -8,35 +8,36 @@
|
||||
"features": {
|
||||
"heading": "Funktioner",
|
||||
"list": {
|
||||
"ads": "Ingen reklamer.",
|
||||
"ads": "Ingen reklamer",
|
||||
"export": "Eksporter dit CV til JSON- eller PDF-format",
|
||||
"free": "Gratis for evigt",
|
||||
"import": "Importer data fra LinkedIn, JSON CV",
|
||||
"languages": "Tilgængelig på flere sprog",
|
||||
"more": "Og meget flere spændende funktioner, <1>læs alt om det her</1>",
|
||||
"more": "Og mange flere spændende funktioner, <1>læs alt om det her</1>",
|
||||
"tracking": "Ingen brugersporing"
|
||||
}
|
||||
},
|
||||
"links": {
|
||||
"heading": "Links",
|
||||
"links": {
|
||||
"docs": "Dokumentation",
|
||||
"donate": "Donér",
|
||||
"github": "Kildekode",
|
||||
"docs": "Dokumentation",
|
||||
"privacy": "Fortrolighedspolitik",
|
||||
"reddit": "Reddit",
|
||||
"service": "Servicevilkår"
|
||||
}
|
||||
},
|
||||
"screenshots": {
|
||||
"heading": "Skærmbilleder"
|
||||
},
|
||||
"testimonials": {
|
||||
"heading": "Udtalelser",
|
||||
"body": "Godt eller dårligt, jeg ville elske at høre din mening om Reactive Resume og hvordan oplevelsen har været for dig.<br/>Her er nogle af de beskeder, der er sendt af brugere over hele verden.",
|
||||
"contact": "Du kan kontakte mig via <1>min e-mail</1> eller gennem kontaktformularen på <3>min hjemmeside</3> ."
|
||||
},
|
||||
"summary": {
|
||||
"body": "Reactive Resume er en gratis og open source CV-bygger, der er bygget til at gøre de hverdagsagtige opgaver med at oprette, opdatere og dele dit CV så lette som 1, 2, 3. Med denne app kan du oprette flere CV'er, dele dem med rekrutterere eller venner gennem et unikt link og udskriv det som en PDF, helt gratis, ingen annoncer, ingen sporing, uden at miste integriteten og fortroligheden af dine data.",
|
||||
"heading": "Opsummering"
|
||||
},
|
||||
"testimonials": {
|
||||
"body": "Godt eller dårligt, jeg ville elske at høre din mening om Reactive Resume og hvordan oplevelsen har været for dig.<br/>Her er nogle af de beskeder, der er sendt af brugere over hele verden.",
|
||||
"contact": "Du kan kontakte mig via <1>min e-mail</1> eller gennem kontaktformularen på <3>min hjemmeside</3> .",
|
||||
"heading": "Udtalelser"
|
||||
}
|
||||
}
|
||||
|
||||
@ -71,6 +71,31 @@
|
||||
}
|
||||
},
|
||||
"heading": "Nulstil din adgangskode"
|
||||
},
|
||||
"profile": {
|
||||
"heading": "Din konto",
|
||||
"form": {
|
||||
"avatar": {
|
||||
"help-text": "Du kan opdatere dit profilbillede på <1>Gravatar</1>"
|
||||
},
|
||||
"name": {
|
||||
"label": "Fulde navn"
|
||||
},
|
||||
"email": {
|
||||
"label": "Email adresse",
|
||||
"help-text": "Det er ikke muligt at opdatere din e-mailadresse i øjeblikket, opret en ny konto i stedet for."
|
||||
}
|
||||
},
|
||||
"delete-account": {
|
||||
"heading": "Slet konto og data",
|
||||
"body": "For at slette din konto, dine data og alle dine CV'er skal du skrive \"{{keyword}}\" i tekstboksen og klikke på knappen. Bemærk venligst, at dette er en uigenkaldelig handling, og dine data kan ikke genfindes.",
|
||||
"actions": {
|
||||
"delete": "Slet konto"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"save": "Gem ændringer"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dashboard": {
|
||||
|
||||
@ -3,8 +3,8 @@
|
||||
"actions": {
|
||||
"add": "{{token}} hinzufügen",
|
||||
"delete": "{{token}} löschen",
|
||||
"edit": "{{token}} bearbeiten",
|
||||
"duplicate": "Abschnitt duplizieren"
|
||||
"duplicate": "Abschnitt duplizieren",
|
||||
"edit": "{{token}} bearbeiten"
|
||||
},
|
||||
"columns": {
|
||||
"heading": "Spalten",
|
||||
@ -81,13 +81,13 @@
|
||||
"center-artboard": "Artboard zentrieren",
|
||||
"copy-link": "Link zum Lebenslauf kopieren",
|
||||
"export-pdf": "PDF exportieren",
|
||||
"redo": "Wiederholen",
|
||||
"toggle-orientation": "Seitenausrichtung umschalten",
|
||||
"toggle-page-break-line": "Pausenzeile umschalten",
|
||||
"toggle-sidebars": "Seitenleisten umschalten",
|
||||
"zoom-in": "Vergrößern",
|
||||
"zoom-out": "Verkleinern",
|
||||
"undo": "Rückgängig machen",
|
||||
"redo": "Wiederholen"
|
||||
"zoom-in": "Vergrößern",
|
||||
"zoom-out": "Verkleinern"
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
@ -115,6 +115,9 @@
|
||||
"actions": {
|
||||
"photo-filters": "Fotofilter"
|
||||
},
|
||||
"birthdate": {
|
||||
"label": "Geburtsdatum"
|
||||
},
|
||||
"heading": "Grundlagen",
|
||||
"headline": {
|
||||
"label": "Überschrift"
|
||||
@ -122,9 +125,6 @@
|
||||
"name": {
|
||||
"label": "Vollständiger Name"
|
||||
},
|
||||
"birthdate": {
|
||||
"label": "Geburtsdatum"
|
||||
},
|
||||
"photo-filters": {
|
||||
"effects": {
|
||||
"border": {
|
||||
@ -175,6 +175,13 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"experience": {
|
||||
"form": {
|
||||
"name": {
|
||||
"label": "Company Name"
|
||||
}
|
||||
}
|
||||
},
|
||||
"location": {
|
||||
"address": {
|
||||
"label": "Straße"
|
||||
@ -257,33 +264,31 @@
|
||||
"heading": "Layout",
|
||||
"tooltip": {
|
||||
"reset-layout": "Layout zurücksetzen"
|
||||
},
|
||||
"main": "Hauptteil",
|
||||
"sidebar": "Seitenleiste"
|
||||
}
|
||||
},
|
||||
"links": {
|
||||
"bugs-features": {
|
||||
"body": "Sind Sie bei der Erstellung Ihres Lebenslaufs auf ein Problem gestoßen? Oder haben Sie eine tolle Idee, die Sie hinzufügen möchten? Erstellen Sie ein Ticket auf GitHub.",
|
||||
"button": "GitHub Issues",
|
||||
"button": "GitHub Themen",
|
||||
"heading": "Fehler? Verbesserungsvorschläge?"
|
||||
},
|
||||
"docs": "Dokumentation",
|
||||
"donate": {
|
||||
"body": "Sollte Ihnen Reactive Resume gefallen, möchte ich Sie bitten, etwas zu spenden, damit die App für immer kostenlos und werbefrei bleibt.",
|
||||
"button": "Kaufe mir einen Kaffee",
|
||||
"heading": "Spenden Sie an Reactive Resume."
|
||||
},
|
||||
"github": "Quellcode",
|
||||
"docs": "Dokumentation",
|
||||
"heading": "Links"
|
||||
"heading": "Links",
|
||||
"reddit": "Reddit"
|
||||
},
|
||||
"settings": {
|
||||
"global": {
|
||||
"date": {
|
||||
"primary": "Datum",
|
||||
"secondary": "Datumsformat für die gesamte App.",
|
||||
"prefix": "Z.B."
|
||||
"secondary": "Datumsformat für die gesamte App."
|
||||
},
|
||||
"heading": "Global",
|
||||
"heading": "Globale",
|
||||
"language": {
|
||||
"primary": "Sprache",
|
||||
"secondary": "Anzeigesprache, die in der gesamten App verwendet wird."
|
||||
@ -294,14 +299,14 @@
|
||||
},
|
||||
"heading": "Einstellungen",
|
||||
"page": {
|
||||
"format": {
|
||||
"primary": "Papiergröße",
|
||||
"secondary": "Legt die Seitenabmessungen Ihres Lebenslaufs fest."
|
||||
},
|
||||
"break-line": {
|
||||
"primary": "Seitenumbruch anzeigen",
|
||||
"secondary": "Zeigt den Seitenumbruch als Linie auf allen Seiten an."
|
||||
},
|
||||
"format": {
|
||||
"primary": "Papiergröße",
|
||||
"secondary": "Legt die Seitenabmessungen Ihres Lebenslaufs fest."
|
||||
},
|
||||
"heading": "Seite",
|
||||
"orientation": {
|
||||
"disabled": "Hat keine Auswirkung, wenn nur eine Seite vorhanden ist.",
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
"present": "Heute"
|
||||
},
|
||||
"subtitle": "Ein kostenloser Open Source Lebenslauf-Baukasten.",
|
||||
"title": "Reaktives Lebenslauf",
|
||||
"title": "Reactive Resume",
|
||||
"toast": {
|
||||
"error": {
|
||||
"upload-file-size": "Bitte laden Sie nur Dateien unter 2 Megabytes hoch.",
|
||||
|
||||
@ -18,25 +18,26 @@
|
||||
}
|
||||
},
|
||||
"links": {
|
||||
"heading": "Links",
|
||||
"heading": "Verknüpfungen",
|
||||
"links": {
|
||||
"docs": "Dokumentation",
|
||||
"donate": "Spenden",
|
||||
"github": "Quellcode",
|
||||
"docs": "Dokumentation",
|
||||
"privacy": "Datenschutzerklärung",
|
||||
"reddit": "Reddit",
|
||||
"service": "Nutzungsbedingungen"
|
||||
}
|
||||
},
|
||||
"screenshots": {
|
||||
"heading": "Screenshots"
|
||||
},
|
||||
"testimonials": {
|
||||
"heading": "Referenzen",
|
||||
"body": "Egal ob gut oder schlecht - ich würde gerne Ihre Meinung über Reactive Resume hören und welche Erfahrungen Sie gemacht haben.<br/>Hier sind einige der Nachrichten, die mir von Benutzern auf der ganzen Welt zugesandt wurden.",
|
||||
"contact": "Sie können mich über <1>meine E-Mail</1> oder über das Kontaktformular auf <3>meiner Website</3> erreichen."
|
||||
},
|
||||
"summary": {
|
||||
"body": "Reactive Resume ist ein kostenloser Open Source Lebenslauf-Builder, der gebaut wurde, um die langweilige Aufgabe einen Lebenslauf zu erstellen, aktuell zu halten und zu teilen so einfach wie möglich zu machen. Mit dieser App können Sie mehrere Lebensläufe erstellen, sie mit Recruitern oder Freunden über einen einzigartigen Link teilen und als PDF exportieren. Kostenlos, ohne Werbung, kein Tracking, ohne die Integrität und Privatsphäre Ihrer Daten zu verlieren.",
|
||||
"heading": "Zusammenfassung"
|
||||
},
|
||||
"testimonials": {
|
||||
"body": "Egal ob gut oder schlecht - ich würde gerne Ihre Meinung über Reactive Resume hören und welche Erfahrungen Sie gemacht haben.<br/>Hier sind einige der Nachrichten, die mir von Benutzern auf der ganzen Welt zugesandt wurden.",
|
||||
"contact": "Sie können mich über <1>meine E-Mail</1> oder über das Kontaktformular auf <3>meiner Website</3> erreichen.",
|
||||
"heading": "Referenzen"
|
||||
}
|
||||
}
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
"body": "Geben Sie die E-Mail-Adresse des Benutzerkontos ein, dass Sie wiederherstellen möchten.",
|
||||
"form": {
|
||||
"email": {
|
||||
"label": "E-Mail-Addresse"
|
||||
"label": "E-Mail-Adresse"
|
||||
}
|
||||
},
|
||||
"heading": "Passwort vergessen?",
|
||||
@ -42,7 +42,7 @@
|
||||
"label": "Passwort bestätigen"
|
||||
},
|
||||
"email": {
|
||||
"label": "E-Mail-Addresse"
|
||||
"label": "E-Mail-Adresse"
|
||||
},
|
||||
"name": {
|
||||
"label": "Vollständiger Name"
|
||||
@ -71,6 +71,31 @@
|
||||
}
|
||||
},
|
||||
"heading": "Passwort zurücksetzen"
|
||||
},
|
||||
"profile": {
|
||||
"heading": "Ihr Benutzerkonto",
|
||||
"form": {
|
||||
"avatar": {
|
||||
"help-text": "Sie können Ihr Profilbild auf <1>Gravatar</1> aktualisieren"
|
||||
},
|
||||
"name": {
|
||||
"label": "Vollständiger Name"
|
||||
},
|
||||
"email": {
|
||||
"label": "E-Mail-Adresse",
|
||||
"help-text": "Im Moment ist es nicht möglich, Ihre E-Mail-Adresse zu aktualisieren. Bitte erstellen Sie stattdessen ein neues Konto."
|
||||
}
|
||||
},
|
||||
"delete-account": {
|
||||
"heading": "Konto und Daten löschen",
|
||||
"body": "Um Ihr Konto, Ihre Daten und alle Ihre Lebensläufe zu löschen, geben Sie „{{keyword}}“ in das Textfeld ein und klicken Sie auf die Schaltfläche. Bitte beachten Sie, dass dies ein irreversibler Vorgang ist und Ihre Daten nicht wiederhergestellt werden können.",
|
||||
"actions": {
|
||||
"delete": "Account löschen"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"save": "Änderungen speichern"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dashboard": {
|
||||
@ -87,7 +112,7 @@
|
||||
"label": "Ist öffentlich zugänglich?"
|
||||
},
|
||||
"slug": {
|
||||
"label": "Slug"
|
||||
"label": "URL-Segment"
|
||||
}
|
||||
},
|
||||
"heading": "Neuen Lebenslauf erstellen"
|
||||
@ -98,14 +123,14 @@
|
||||
"actions": {
|
||||
"upload-json": "JSON hochladen"
|
||||
},
|
||||
"body": "Wenn du einen <1>validierten JSON Resume</1> bereit hast, kannst du damit deine Entwicklung auf reaktiven Resume beschleunigen. Klicken Sie auf den Button unten und laden Sie eine gültige JSON-Datei hoch, um zu beginnen.",
|
||||
"body": "Wenn du einen <1>validierten JSON Lebenslauf</1> bereit hast, kannst du damit deine Entwicklung auf Reactive Resume beschleunigen. Klicken Sie auf den Button unten und laden Sie eine gültige JSON-Datei hoch, um zu beginnen.",
|
||||
"heading": "Import vom JSON-Lebenslauf"
|
||||
},
|
||||
"linkedin": {
|
||||
"actions": {
|
||||
"upload-archive": "ZIP-Archiv hochladen"
|
||||
},
|
||||
"body": "Sie können Zeit sparen, indem Sie Ihre Daten aus LinkedIn exportieren und sie zum automatischen Ausfüllen von Feldern auf Reaktives Lebenslauf verwenden. Gehen Sie zum Abschnitt <1>Datenschutz </1> auf LinkedIn und fordern Sie ein Archiv Ihrer Daten an. Sobald diese verfügbar sind, laden Sie die ZIP-Datei unten hoch.",
|
||||
"body": "Sie können Zeit sparen, indem Sie Ihre Daten aus LinkedIn exportieren und sie zum automatischen Ausfüllen von Feldern auf Reactive Resume verwenden. Gehen Sie zum Abschnitt <1>Datenschutz </1> auf LinkedIn und fordern Sie ein Archiv Ihrer Daten an. Sobald diese verfügbar sind, laden Sie die ZIP-Datei unten hoch.",
|
||||
"heading": "Aus LinkedIn importieren"
|
||||
},
|
||||
"reactive-resume": {
|
||||
@ -114,7 +139,7 @@
|
||||
"upload-json-v2": "Laden Sie JSON von v2 hoch"
|
||||
},
|
||||
"body": "Wenn Sie eine JSON haben, die mit der aktuellen Version von Reactive Resume exportiert wurde, können Sie sie hier wieder importieren, um wieder eine bearbeitbare Version zu erhalten.",
|
||||
"heading": "Import vom Reaktives Lebenslauf"
|
||||
"heading": "Import von Reactive Resume"
|
||||
}
|
||||
},
|
||||
"rename-resume": {
|
||||
@ -126,7 +151,7 @@
|
||||
"label": "Name"
|
||||
},
|
||||
"slug": {
|
||||
"label": "Slug"
|
||||
"label": "URL-Segment"
|
||||
}
|
||||
},
|
||||
"heading": "Lebenslauf umbenennen"
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
"actions": {
|
||||
"add": "Προσθήκη νέου {{token}}",
|
||||
"delete": "Διαγραφή {{token}}",
|
||||
"duplicate": "Διπλότυπο τμήμα",
|
||||
"edit": "Επεξεργασία {{token}}"
|
||||
},
|
||||
"columns": {
|
||||
@ -80,13 +81,13 @@
|
||||
"center-artboard": "Κεντράρισμα πίνακα",
|
||||
"copy-link": "Αντιγραφή συνδέσμου στο βιογραφικό",
|
||||
"export-pdf": "Εξαγωγή σε PDF",
|
||||
"redo": "Redo",
|
||||
"toggle-orientation": "Εναλλαγή προσανατολισμού σελίδας",
|
||||
"toggle-page-break-line": "Εναλλαγή γραμμής αλλαγής σελίδας",
|
||||
"toggle-sidebars": "Εναλλαγή πλευρικών γραμμών",
|
||||
"zoom-in": "Μεγέθυνση",
|
||||
"zoom-out": "Σμίκρυνση",
|
||||
"undo": "Αναίρεση",
|
||||
"redo": "Redo"
|
||||
"zoom-in": "Μεγέθυνση",
|
||||
"zoom-out": "Σμίκρυνση"
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
@ -114,6 +115,9 @@
|
||||
"actions": {
|
||||
"photo-filters": "Φίλτρα φωτογραφιών"
|
||||
},
|
||||
"birthdate": {
|
||||
"label": "Ημερομηνια γεννησης"
|
||||
},
|
||||
"heading": "Βασικά",
|
||||
"headline": {
|
||||
"label": "Επικεφαλίδα"
|
||||
@ -121,9 +125,6 @@
|
||||
"name": {
|
||||
"label": "Ονοματεπώνυμο"
|
||||
},
|
||||
"birthdate": {
|
||||
"label": "Ημερομηνια γεννησης"
|
||||
},
|
||||
"photo-filters": {
|
||||
"effects": {
|
||||
"border": {
|
||||
@ -174,6 +175,13 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"experience": {
|
||||
"form": {
|
||||
"name": {
|
||||
"label": "Company Name"
|
||||
}
|
||||
}
|
||||
},
|
||||
"location": {
|
||||
"address": {
|
||||
"label": "Διεύθυνση"
|
||||
@ -264,14 +272,15 @@
|
||||
"button": "Σφάλματα GitHub",
|
||||
"heading": "Σφάλματα; Αιτήματα δυνατοτήτων;"
|
||||
},
|
||||
"docs": "Τεκμηρίωση",
|
||||
"donate": {
|
||||
"body": "Αν σας άρεσε να χρησιμοποιείτε το Reactive Resume, σκεφτείτε το ενδεχόμενο να δωρίσετε όσο το δυνατόν περισσότερα για τον σκοπό της διατήρησης και λειτουργίας της εφαρμογής, χωρίς διαφημίσεις και δωρεάν για πάντα.",
|
||||
"button": "Κεράστε με ένα καφεδάκι",
|
||||
"heading": "Κάντε δωρεά στο Reactive βιογραφικό"
|
||||
},
|
||||
"github": "Πηγαίος κώδικας",
|
||||
"docs": "Τεκμηρίωση",
|
||||
"heading": "Σύνδεσμοι"
|
||||
"heading": "Σύνδεσμοι",
|
||||
"reddit": "Reddit"
|
||||
},
|
||||
"settings": {
|
||||
"global": {
|
||||
@ -290,14 +299,14 @@
|
||||
},
|
||||
"heading": "Ρυθμίσεις",
|
||||
"page": {
|
||||
"format": {
|
||||
"primary": "Μέγεθος χαρτιού",
|
||||
"secondary": "Καθορίζει τις διαστάσεις των σελίδων του βιογραφικού σας"
|
||||
},
|
||||
"break-line": {
|
||||
"primary": "Γραμμή διακοπής",
|
||||
"secondary": "Εμφάνιση μιας γραμμής σε όλες τις σελίδες για να επισημάνετε το ύψος μιας σελίδας Α4"
|
||||
},
|
||||
"format": {
|
||||
"primary": "Μέγεθος χαρτιού",
|
||||
"secondary": "Καθορίζει τις διαστάσεις των σελίδων του βιογραφικού σας"
|
||||
},
|
||||
"heading": "Σελίδα",
|
||||
"orientation": {
|
||||
"disabled": "Δεν έχει αποτέλεσμα όταν υπάρχει μόνο μία σελίδα",
|
||||
|
||||
@ -20,23 +20,24 @@
|
||||
"links": {
|
||||
"heading": "Σύνδεσμοι",
|
||||
"links": {
|
||||
"docs": "Τεκμηρίωση",
|
||||
"donate": "Δωρεά",
|
||||
"github": "Πηγαίος Κώδικας",
|
||||
"docs": "Τεκμηρίωση",
|
||||
"privacy": "Πολιτική Απορρήτου",
|
||||
"reddit": "Reddit",
|
||||
"service": "Όρους παροχής υπηρεσιών"
|
||||
}
|
||||
},
|
||||
"screenshots": {
|
||||
"heading": "Στιγμιότυπα οθόνης"
|
||||
},
|
||||
"testimonials": {
|
||||
"heading": "Αναφορές",
|
||||
"body": "Καλή ή κακή, θα ήθελα πολύ να ακούσω τη γνώμη σας για το Reactive Resume και πώς ήταν η εμπειρία σας.<br/>Ακολουθούν μερικά από τα μηνύματα που έστειλαν χρήστες από όλο τον κόσμο.",
|
||||
"contact": "Μπορείτε να επικοινωνήσετε μαζί μου μέσω <1>του email μου</1> ή μέσω της φόρμας επικοινωνίας στην <3>ιστοσελίδα μου</3>."
|
||||
},
|
||||
"summary": {
|
||||
"body": "Το Reactive Resume είναι ένας δωρεάν κατασκευαστής βιογραφικών σημειωμάτων ανοικτού κώδικα που έχει δημιουργηθεί για να κάνει τις καθημερινές εργασίες δημιουργίας, ενημέρωσης και κοινοποίησης του βιογραφικού σας σημειώματος τόσο εύκολες όσο το 1, 2, 3. Με αυτή την εφαρμογή, μπορείτε να δημιουργήσετε πολλαπλά βιογραφικά, να τα μοιραστείτε με τους υπεύθυνους προσλήψεων ή τους φίλους σας μέσω ενός μοναδικού συνδέσμου και να τα εκτυπώσετε σε μορφή PDF, και όλα αυτά δωρεάν, χωρίς διαφημίσεις, χωρίς παρακολούθηση, χωρίς να χάσετε την ακεραιότητα και το απόρρητο των δεδομένων σας.",
|
||||
"heading": "Σύνοψη"
|
||||
},
|
||||
"testimonials": {
|
||||
"body": "Καλή ή κακή, θα ήθελα πολύ να ακούσω τη γνώμη σας για το Reactive Resume και πώς ήταν η εμπειρία σας.<br/>Ακολουθούν μερικά από τα μηνύματα που έστειλαν χρήστες από όλο τον κόσμο.",
|
||||
"contact": "Μπορείτε να επικοινωνήσετε μαζί μου μέσω <1>του email μου</1> ή μέσω της φόρμας επικοινωνίας στην <3>ιστοσελίδα μου</3>.",
|
||||
"heading": "Αναφορές"
|
||||
}
|
||||
}
|
||||
|
||||
@ -71,6 +71,31 @@
|
||||
}
|
||||
},
|
||||
"heading": "Επαναφορά του κωδικού πρόσβασής σας"
|
||||
},
|
||||
"profile": {
|
||||
"heading": "Του λογαριασμού σας",
|
||||
"form": {
|
||||
"avatar": {
|
||||
"help-text": "Μπορείτε να ενημερώσετε την εικόνα του προφίλ σας στο <1>Gravatar</1>"
|
||||
},
|
||||
"name": {
|
||||
"label": "Πλήρες όνομα"
|
||||
},
|
||||
"email": {
|
||||
"label": "Διεύθυνση ηλεκτρονικού ταχυδρομείου",
|
||||
"help-text": "Δεν είναι δυνατό να ενημερώσετε τη διεύθυνση email σας αυτήν τη στιγμή, δημιουργήστε έναν νέο λογαριασμό."
|
||||
}
|
||||
},
|
||||
"delete-account": {
|
||||
"heading": "Διαγραφή λογαριασμού και δεδομένων",
|
||||
"body": "Για να διαγράψετε τον λογαριασμό σας, τα δεδομένα σας και όλα τα βιογραφικά σας, πληκτρολογήστε \"{{keyword}}\" στο πλαίσιο κειμένου και κάντε κλικ στο κουμπί. Λάβετε υπόψη ότι αυτή είναι μια μη αναστρέψιμη ενέργεια και τα δεδομένα σας δεν μπορούν να ανακτηθούν ξανά.",
|
||||
"actions": {
|
||||
"delete": "Διαγραφή λογαριασμού"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"save": "Αποθήκευσε τις αλλαγές"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dashboard": {
|
||||
|
||||
@ -175,6 +175,13 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"experience": {
|
||||
"form": {
|
||||
"name": {
|
||||
"label": "Company Name"
|
||||
}
|
||||
}
|
||||
},
|
||||
"location": {
|
||||
"address": {
|
||||
"label": "Address"
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
"actions": {
|
||||
"add": "Agregar nuevo {{token}}",
|
||||
"delete": "Eliminar {{token}}",
|
||||
"duplicate": "Sección duplicada",
|
||||
"duplicate": "Duplicar sección",
|
||||
"edit": "Editar {{token}}"
|
||||
},
|
||||
"columns": {
|
||||
@ -175,6 +175,13 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"experience": {
|
||||
"form": {
|
||||
"name": {
|
||||
"label": "Company Name"
|
||||
}
|
||||
}
|
||||
},
|
||||
"location": {
|
||||
"address": {
|
||||
"label": "Dirección"
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
"delete": "Borrar",
|
||||
"duplicate": "Duplicar",
|
||||
"open": "Abrir",
|
||||
"rename": "Rebautizar",
|
||||
"rename": "Renombrar",
|
||||
"share-link": "Compartir enlace",
|
||||
"tooltips": {
|
||||
"delete": "¿Está seguro de que desea eliminar este currículum? Esta es una acción irreversible.",
|
||||
|
||||
@ -71,6 +71,31 @@
|
||||
}
|
||||
},
|
||||
"heading": "Restablecer tu contraseña"
|
||||
},
|
||||
"profile": {
|
||||
"heading": "Tu cuenta",
|
||||
"form": {
|
||||
"avatar": {
|
||||
"help-text": "Puedes actualizar tu foto de perfil en <1>Gravatar</1>"
|
||||
},
|
||||
"name": {
|
||||
"label": "Nombre Completo"
|
||||
},
|
||||
"email": {
|
||||
"label": "Correo electrónico",
|
||||
"help-text": "No es posible actualizar tu dirección de correo electrónico en este momento, por favor crea una nueva cuenta en su lugar."
|
||||
}
|
||||
},
|
||||
"delete-account": {
|
||||
"heading": "Eliminar cuenta y datos",
|
||||
"body": "Para eliminar su cuenta, sus datos y todos sus currículums, escriba \"{{keyword}}\" en el cuadro de texto y haga clic en el botón. Tenga en cuenta que esta es una acción irreversible y sus datos no se pueden recuperar nuevamente.",
|
||||
"actions": {
|
||||
"delete": "Eliminar Cuenta"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"save": "Guardar cambios"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dashboard": {
|
||||
|
||||
@ -175,6 +175,13 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"experience": {
|
||||
"form": {
|
||||
"name": {
|
||||
"label": "Company Name"
|
||||
}
|
||||
}
|
||||
},
|
||||
"location": {
|
||||
"address": {
|
||||
"label": "نشانی"
|
||||
|
||||
@ -71,6 +71,31 @@
|
||||
}
|
||||
},
|
||||
"heading": "بازنشانی رمز عبور"
|
||||
},
|
||||
"profile": {
|
||||
"heading": "حساب شما",
|
||||
"form": {
|
||||
"avatar": {
|
||||
"help-text": "می توانید عکس نمایه خود را در <1>Gravatar به روز کنید</1>"
|
||||
},
|
||||
"name": {
|
||||
"label": "نام و نام خانوادگی"
|
||||
},
|
||||
"email": {
|
||||
"label": "آدرس ایمیل",
|
||||
"help-text": "در حال حاضر امکان به روز رسانی آدرس ایمیل شما وجود ندارد، لطفا به جای آن یک حساب کاربری جدید ایجاد کنید."
|
||||
}
|
||||
},
|
||||
"delete-account": {
|
||||
"heading": "حذف حساب و داده",
|
||||
"body": "برای حذف اکانت، اطلاعات و تمام رزومه های خود، \"{{keyword}}\" را در کادر متنی تایپ کرده و روی دکمه کلیک کنید. لطفاً توجه داشته باشید که این یک اقدام غیرقابل برگشت است و اطلاعات شما دوباره قابل بازیابی نیست.",
|
||||
"actions": {
|
||||
"delete": "حذف حساب کاربری"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"save": "ذخیره تغییرات"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dashboard": {
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
"actions": {
|
||||
"add": "Lisää uusi",
|
||||
"delete": "Poista",
|
||||
"duplicate": "Kopioi osio",
|
||||
"edit": "Muokkaa"
|
||||
},
|
||||
"columns": {
|
||||
@ -80,13 +81,13 @@
|
||||
"center-artboard": "Keskitä Kuvataulu",
|
||||
"copy-link": "Kopioi linkki ansioluetteloon",
|
||||
"export-pdf": "Vie PDF",
|
||||
"redo": "Redo",
|
||||
"toggle-orientation": "Vaihda sivun suunta",
|
||||
"toggle-page-break-line": "Vaihda sivunvaihtoviivaa",
|
||||
"toggle-sidebars": "Vaihda Sivupalkkeja",
|
||||
"zoom-in": "Suurenna",
|
||||
"zoom-out": "Pienennä",
|
||||
"undo": "Kumoa",
|
||||
"redo": "Redo"
|
||||
"zoom-in": "Suurenna",
|
||||
"zoom-out": "Pienennä"
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
@ -114,6 +115,9 @@
|
||||
"actions": {
|
||||
"photo-filters": "Valokuvasuodattimet"
|
||||
},
|
||||
"birthdate": {
|
||||
"label": "Syntymäaika"
|
||||
},
|
||||
"heading": "Perustiedot",
|
||||
"headline": {
|
||||
"label": "Otsikko"
|
||||
@ -121,9 +125,6 @@
|
||||
"name": {
|
||||
"label": "Koko nimi"
|
||||
},
|
||||
"birthdate": {
|
||||
"label": "Syntymäaika"
|
||||
},
|
||||
"photo-filters": {
|
||||
"effects": {
|
||||
"border": {
|
||||
@ -174,6 +175,13 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"experience": {
|
||||
"form": {
|
||||
"name": {
|
||||
"label": "Company Name"
|
||||
}
|
||||
}
|
||||
},
|
||||
"location": {
|
||||
"address": {
|
||||
"label": "Osoite"
|
||||
@ -264,14 +272,15 @@
|
||||
"button": "GitHub Issues",
|
||||
"heading": "Bugeja? Ominaisuuspyyntöjä?"
|
||||
},
|
||||
"docs": "Dokumentaatio",
|
||||
"donate": {
|
||||
"body": "Jos pidit Reactive Resume -sovelluksen käytöstä, harkitse lahjoitusta niin paljon kuin voit, jotta sovellus pysyy toiminnassa ilman mainoksia ja ikuisesti ilmaisena.",
|
||||
"button": "Osta minulle kahvi",
|
||||
"heading": "Lahjoita Reaktiiviselle ansioluettelolle"
|
||||
},
|
||||
"github": "Lähdekoodi",
|
||||
"docs": "Dokumentaatio",
|
||||
"heading": "Linkit"
|
||||
"heading": "Linkit",
|
||||
"reddit": "Reddit"
|
||||
},
|
||||
"settings": {
|
||||
"global": {
|
||||
@ -290,14 +299,14 @@
|
||||
},
|
||||
"heading": "Asetukset",
|
||||
"page": {
|
||||
"format": {
|
||||
"primary": "Paperikoko",
|
||||
"secondary": "Määrittää ansioluettelosi sivujen mitat"
|
||||
},
|
||||
"break-line": {
|
||||
"primary": "Katkoviiva",
|
||||
"secondary": "Näytä viiva kaikilla sivuilla A4-sivun korkeuden merkitsemiseksi"
|
||||
},
|
||||
"format": {
|
||||
"primary": "Paperikoko",
|
||||
"secondary": "Määrittää ansioluettelosi sivujen mitat"
|
||||
},
|
||||
"heading": "Sivu",
|
||||
"orientation": {
|
||||
"disabled": "Ei vaikuta, kun sivuja on vain yksi",
|
||||
|
||||
@ -20,23 +20,24 @@
|
||||
"links": {
|
||||
"heading": "Linkit",
|
||||
"links": {
|
||||
"docs": "Dokumentaatio",
|
||||
"donate": "Lahjoita",
|
||||
"github": "Lähdekoodi",
|
||||
"docs": "Dokumentaatio",
|
||||
"privacy": "Tietosuojakäytäntö",
|
||||
"reddit": "Reddit",
|
||||
"service": "Käyttöehdot"
|
||||
}
|
||||
},
|
||||
"screenshots": {
|
||||
"heading": "Kuvakaappaukset"
|
||||
},
|
||||
"testimonials": {
|
||||
"heading": "Asiakaskokemuksia",
|
||||
"body": "Hyvä tai huono, haluaisin kuulla mielipiteesi Reactive Resume -ohjelmasta ja siitä, millainen kokemus sinulla on ollut.<br/>Seuraavassa on muutamia käyttäjien eri puolilta maailmaa lähettämiä viestejä.",
|
||||
"contact": "Voit ottaa minuun yhteyttä <1>sähköpostitse</1> tai <3>verkkosivustoni</3> yhteydenottolomakkeen kautta."
|
||||
},
|
||||
"summary": {
|
||||
"body": "Reactive Resume on ilmainen ja avoimen lähdekoodin ansioluettelon rakentaja, jonka tarkoituksena on tehdä ansioluettelon luomisesta, päivittämisestä ja jakamisesta helppoa kuin 1, 2, 3. Tämän sovelluksen avulla voit luoda useita ansioluetteloita, jakaa ne rekrytoijien tai ystävien kanssa yksilöllisen linkin kautta ja tulostaa ne PDF-muodossa, ja kaikki tämä ilmaiseksi, ilman mainoksia, ilman seurantaa ja menettämättä tietojesi eheyttä ja yksityisyyttä.",
|
||||
"heading": "Yhteenveto"
|
||||
},
|
||||
"testimonials": {
|
||||
"body": "Hyvä tai huono, haluaisin kuulla mielipiteesi Reactive Resume -ohjelmasta ja siitä, millainen kokemus sinulla on ollut.<br/>Seuraavassa on muutamia käyttäjien eri puolilta maailmaa lähettämiä viestejä.",
|
||||
"contact": "Voit ottaa minuun yhteyttä <1>sähköpostitse</1> tai <3>verkkosivustoni</3> yhteydenottolomakkeen kautta.",
|
||||
"heading": "Asiakaskokemuksia"
|
||||
}
|
||||
}
|
||||
|
||||
@ -71,6 +71,31 @@
|
||||
}
|
||||
},
|
||||
"heading": "Palauta salasanasi"
|
||||
},
|
||||
"profile": {
|
||||
"heading": "Tilisi",
|
||||
"form": {
|
||||
"avatar": {
|
||||
"help-text": "Voit päivittää profiilikuvasi <1>Gravatarissa</1>"
|
||||
},
|
||||
"name": {
|
||||
"label": "Koko nimi"
|
||||
},
|
||||
"email": {
|
||||
"label": "Sähköpostiosoite",
|
||||
"help-text": "Sähköpostiosoitettasi ei voi tällä hetkellä päivittää, luo sen sijaan uusi tili."
|
||||
}
|
||||
},
|
||||
"delete-account": {
|
||||
"heading": "Poista tili ja tiedot",
|
||||
"body": "Poistaaksesi tilisi, tietosi ja kaikki ansioluettelosi, kirjoita \"{{keyword}}\" tekstiruutuun ja napsauta painiketta. Huomaa, että tämä on peruuttamaton toimenpide, eikä tietojasi voi noutaa uudelleen.",
|
||||
"actions": {
|
||||
"delete": "Poista tili"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"save": "Tallenna muutokset"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dashboard": {
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
"actions": {
|
||||
"add": "Ajouter un/une {{token}}",
|
||||
"delete": "Supprimer {{token}}",
|
||||
"duplicate": "Dupliquer la section",
|
||||
"edit": "Éditer {{token}}"
|
||||
},
|
||||
"columns": {
|
||||
@ -63,7 +64,7 @@
|
||||
"list": {
|
||||
"actions": {
|
||||
"delete": "Supprimer",
|
||||
"duplicate": "Dédoubler",
|
||||
"duplicate": "Dupliquer",
|
||||
"edit": "Éditer"
|
||||
},
|
||||
"empty-text": "Cette liste est vide."
|
||||
@ -80,19 +81,19 @@
|
||||
"center-artboard": "Centrer l'affichage",
|
||||
"copy-link": "Copier le lien vers le CV",
|
||||
"export-pdf": "Exporter en PDF",
|
||||
"redo": "Refaire",
|
||||
"toggle-orientation": "Basculer l'orientation de la page",
|
||||
"toggle-page-break-line": "Afficher/cacher l'indicateur de saut de page",
|
||||
"toggle-sidebars": "Afficher/cacher les barres latérales",
|
||||
"zoom-in": "Zoomer",
|
||||
"zoom-out": "Dézoomer",
|
||||
"undo": "Défaire",
|
||||
"redo": "Refaire"
|
||||
"zoom-in": "Zoomer",
|
||||
"zoom-out": "Dézoomer"
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
"menu": {
|
||||
"delete": "Supprimer",
|
||||
"duplicate": "Dédoubler",
|
||||
"duplicate": "Dupliquer",
|
||||
"rename": "Renommer",
|
||||
"share-link": "Partager un lien",
|
||||
"tooltips": {
|
||||
@ -112,7 +113,10 @@
|
||||
},
|
||||
"basics": {
|
||||
"actions": {
|
||||
"photo-filters": "Filtres pour la photo"
|
||||
"photo-filters": "Filtres photo"
|
||||
},
|
||||
"birthdate": {
|
||||
"label": "Date de naissance"
|
||||
},
|
||||
"heading": "Informations de base",
|
||||
"headline": {
|
||||
@ -121,9 +125,6 @@
|
||||
"name": {
|
||||
"label": "Nom complet"
|
||||
},
|
||||
"birthdate": {
|
||||
"label": "Date de naissance"
|
||||
},
|
||||
"photo-filters": {
|
||||
"effects": {
|
||||
"border": {
|
||||
@ -174,6 +175,13 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"experience": {
|
||||
"form": {
|
||||
"name": {
|
||||
"label": "Company Name"
|
||||
}
|
||||
}
|
||||
},
|
||||
"location": {
|
||||
"address": {
|
||||
"label": "Adresse"
|
||||
@ -244,11 +252,11 @@
|
||||
"pdf": {
|
||||
"loading": {
|
||||
"primary": "Génération du PDF",
|
||||
"secondary": "Veuillez patienter pendant que votre PDF est généré, cela peut prendre jusqu'à 15 secondes."
|
||||
"secondary": "Merci de patienter que votre PDF soit généré, cela peut prendre jusqu'à 15 secondes."
|
||||
},
|
||||
"normal": {
|
||||
"primary": "PDF",
|
||||
"secondary": "Téléchargez un PDF de votre CV que vous pourrez imprimer et envoyer à l'emploi de vos rêves. Ce fichier ne peut pas être réimporté pour être modifié ultérieurement."
|
||||
"secondary": "Télécharger au format PDF votre CV, à imprimer et envoyer à l'offre d'emploi de vos rêves. Ce fichier ne peut pas être réimporté pour être modifié ultérieurement."
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -260,18 +268,19 @@
|
||||
},
|
||||
"links": {
|
||||
"bugs-features": {
|
||||
"body": "Quelque chose vous a empêché de rédiger un CV ? Ou vous avez une idée géniale à ajouter ? Créez une issue sur GitHub pour commencer.",
|
||||
"body": "Quelque chose vous a empêché de faire un CV ? Vous avez une idée géniale à ajouter ? Créez une issue sur GitHub dès maintenant.",
|
||||
"button": "Issues GitHub",
|
||||
"heading": "Bogues ? Demandes de fonctionnalités ?"
|
||||
},
|
||||
"docs": "Documentation",
|
||||
"donate": {
|
||||
"body": "Si vous avez aimé utiliser Reactive Resume, pensez à donner comme vous le pouvez pour que l'application reste disponible, gratuite et sans publicité pour toujours.",
|
||||
"body": "Si vous avez aimé utiliser Reactive Resume, merci d'envisager de faire un don pour que l'application puisse rester disponible, gratuite et sans publicité pour toujours.",
|
||||
"button": "Offrez-moi un café",
|
||||
"heading": "Faire un don à Reactive Resume"
|
||||
},
|
||||
"github": "Code source",
|
||||
"docs": "Documentation",
|
||||
"heading": "Liens"
|
||||
"heading": "Liens",
|
||||
"reddit": "Reddit"
|
||||
},
|
||||
"settings": {
|
||||
"global": {
|
||||
@ -290,17 +299,17 @@
|
||||
},
|
||||
"heading": "Paramètres",
|
||||
"page": {
|
||||
"break-line": {
|
||||
"primary": "Indicateur de changement de page",
|
||||
"secondary": "Affiche une ligne sur toutes les pages pour marquer la hauteur d'une feuille A4"
|
||||
},
|
||||
"format": {
|
||||
"primary": "Taille de papier",
|
||||
"secondary": "Détermine les dimensions de vos pages de CV"
|
||||
},
|
||||
"break-line": {
|
||||
"primary": "Indicateur de changement de page",
|
||||
"secondary": "Afficher une ligne sur toutes les pages pour marquer la hauteur d'une feuille A4"
|
||||
},
|
||||
"heading": "Page",
|
||||
"orientation": {
|
||||
"disabled": "N'a aucun effet lorsqu'il n'y a qu'une seule page",
|
||||
"disabled": "Aucun effet lorsqu'il n'y a qu'une seule page",
|
||||
"primary": "Orientation",
|
||||
"secondary": "Afficher les pages horizontalement ou verticalement"
|
||||
}
|
||||
@ -308,22 +317,22 @@
|
||||
"resume": {
|
||||
"heading": "CV",
|
||||
"reset": {
|
||||
"primary": "Tout remettre à zéro",
|
||||
"primary": "Remise à zéro",
|
||||
"secondary": "Vous avez fait trop d'erreurs ? Cliquez ici pour réinitialiser toutes les modifications et repartir de zéro. Attention, cette action ne peut pas être annulée."
|
||||
},
|
||||
"sample": {
|
||||
"primary": "Charger les données de démo",
|
||||
"secondary": "Vous ne savez pas par où commencer ? Cliquez ici pour charger quelques exemples de données afin de voir à quoi ressemble un CV complet."
|
||||
"primary": "Charger un exemple de données",
|
||||
"secondary": "Vous ne savez pas par où commencer ? Cliquez-ici pour charger un exemple de données afin de voir à quoi ressemble un CV complet."
|
||||
}
|
||||
}
|
||||
},
|
||||
"sharing": {
|
||||
"heading": "Partage",
|
||||
"heading": "Partager",
|
||||
"short-url": {
|
||||
"label": "Préférer une URL courte"
|
||||
"label": "URL courte préférée"
|
||||
},
|
||||
"visibility": {
|
||||
"subtitle": "Permettre à toute personne ayant un lien de consulter votre CV",
|
||||
"subtitle": "Permettre de consulter votre CV à toute personne ayant un lien",
|
||||
"title": "Public"
|
||||
}
|
||||
},
|
||||
@ -353,7 +362,7 @@
|
||||
"label": "Taille de la police"
|
||||
}
|
||||
},
|
||||
"heading": "Typographie",
|
||||
"heading": "Polices",
|
||||
"widgets": {
|
||||
"body": {
|
||||
"label": "Contenu"
|
||||
|
||||
@ -15,7 +15,7 @@
|
||||
"date": {
|
||||
"present": "Présent"
|
||||
},
|
||||
"subtitle": "Un constructeur de CV gratuit et open source.",
|
||||
"subtitle": "Un créateur de CV gratuit et open source.",
|
||||
"title": "Reactive Resume",
|
||||
"toast": {
|
||||
"error": {
|
||||
|
||||
@ -5,12 +5,12 @@
|
||||
},
|
||||
"import-external": {
|
||||
"subtitle": "LinkedIn, JSON Resume, Reactive Resume",
|
||||
"title": "Importer de sources externes"
|
||||
"title": "Importer à partir de sources externes"
|
||||
},
|
||||
"resume": {
|
||||
"menu": {
|
||||
"delete": "Supprimer",
|
||||
"duplicate": "Dédoubler",
|
||||
"duplicate": "Dupliquer",
|
||||
"open": "Ouvrir",
|
||||
"rename": "Renommer",
|
||||
"share-link": "Partager un lien",
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user