Merge remote-tracking branch 'upstream/develop' into develop

This commit is contained in:
gianantoniopini
2020-12-21 11:20:41 +01:00
13 changed files with 1090 additions and 5422 deletions

View File

@ -1,6 +1,5 @@
{
"projects": {
"rx-resume": "rx-resume",
"default": "rx-resume"
},
"targets": {

33
.github/workflows/build-and-deploy.yml vendored Normal file
View File

@ -0,0 +1,33 @@
name: Build and Deploy
on:
push:
branches:
- master
jobs:
build:
name: Build and Deploy
runs-on: ubuntu-latest
steps:
- name: Checkout Repo
uses: actions/checkout@master
- name: Install Dependencies
run: npm install
- name: Build
run: npm run build
env:
FIREBASE_APIKEY: ${{ secrets.FIREBASE_APIKEY }}
FIREBASE_APPID: ${{ secrets.FIREBASE_APPID }}
FIREBASE_AUTHDOMAIN: ${{ secrets.FIREBASE_AUTHDOMAIN }}
FIREBASE_DATABASEURL: ${{ secrets.FIREBASE_DATABASEURL }}
FIREBASE_MEASUREMENTID: ${{ secrets.FIREBASE_MEASUREMENTID }}
FIREBASE_MESSAGINGSENDERID: ${{ secrets.FIREBASE_MESSAGINGSENDERID }}
FIREBASE_PROJECTID: ${{ secrets.FIREBASE_PROJECTID }}
FIREBASE_STORAGEBUCKET: ${{ secrets.FIREBASE_STORAGEBUCKET }}
- name: Deploy to Firebase
uses: w9jds/firebase-action@master
with:
args: deploy --only hosting
env:
FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}

56
.github/workflows/codeql-analysis.yml vendored Normal file
View File

@ -0,0 +1,56 @@
name: CodeQL Analysis
on:
push:
branches: [ develop ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ develop ]
schedule:
- cron: '37 16 * * 0'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
language: [ 'javascript' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
# Learn more:
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
steps:
- name: Checkout repository
uses: actions/checkout@v2
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v1
# Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language
#- run: |
# make bootstrap
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1

View File

@ -58,6 +58,7 @@ For those of you familiar with the Crowdin Platform, you could do that too and j
- Japanese (日本人)
- Kannada (ಕನ್ನಡ)
- Norwegian (Norsk)
- Persian (Farsi)
- Polish (Polskie)
- Portuguese (Brazilian)
- Portuguese (Portugal)
@ -65,6 +66,7 @@ For those of you familiar with the Crowdin Platform, you could do that too and j
- Spanish (Español)
- Swedish (Svenska)
- Turkish (Türkçe)
- Ukrainian (Українська)
Thank you to all the amazing people who have contributed to Reactive Resume by translating it into their native language.

View File

@ -2,7 +2,7 @@
"hosting": [
{
"site": "rxresume",
"public": "public",
"public": "public/",
"ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
"rewrites": [
{

View File

@ -1,11 +1,12 @@
require('dotenv').config();
module.exports = {
flags: { PRESERVE_WEBPACK_CACHE: true },
siteMetadata: {
title: 'Reactive Resume',
siteUrl: 'https://rxresu.me',
description: 'A free and open source resume builder.',
version: '2.3.5',
version: '2.4.2',
},
plugins: [
'gatsby-plugin-react-helmet',

5966
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -7,14 +7,13 @@
"scripts": {
"lint": "eslint .",
"lint:fix": "eslint --fix .",
"prebuild": "npm run test",
"build": "gatsby build",
"develop": "gatsby develop",
"format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,md}\"",
"start": "npm run develop",
"serve": "gatsby serve",
"clean": "gatsby clean",
"test": "jest"
"test": "echo \"Write tests! -> https://gatsby.dev/unit-testing\" && exit 1"
},
"dependencies": {
"@material-ui/core": "^4.11.2",
@ -26,24 +25,24 @@
"dayjs": "^1.9.7",
"dotenv": "^8.2.0",
"downloadjs": "^1.4.7",
"firebase": "^8.1.2",
"firebase": "^8.2.1",
"formik": "^2.2.6",
"gatsby": "^2.28.2",
"gatsby-image": "^2.7.0",
"gatsby-plugin-create-client-paths": "^2.6.0",
"gatsby": "^2.29.1",
"gatsby-image": "^2.8.0",
"gatsby-plugin-create-client-paths": "^2.7.0",
"gatsby-plugin-firebase": "^0.2.0-beta.4",
"gatsby-plugin-manifest": "^2.8.0",
"gatsby-plugin-manifest": "^2.9.0",
"gatsby-plugin-material-ui": "^2.1.10",
"gatsby-plugin-offline": "^3.6.0",
"gatsby-plugin-postcss": "^3.3.0",
"gatsby-plugin-react-helmet": "^3.6.0",
"gatsby-plugin-sharp": "^2.10.1",
"gatsby-plugin-sitemap": "^2.8.0",
"gatsby-plugin-offline": "^3.7.0",
"gatsby-plugin-postcss": "^3.4.0",
"gatsby-plugin-react-helmet": "^3.7.0",
"gatsby-plugin-sharp": "^2.11.1",
"gatsby-plugin-sitemap": "^2.9.0",
"gatsby-plugin-webfonts": "^1.1.3",
"gatsby-source-filesystem": "^2.7.0",
"gatsby-source-filesystem": "^2.8.0",
"gatsby-source-gravatar": "^1.0.0",
"gatsby-transformer-remark": "^2.12.0",
"gatsby-transformer-sharp": "^2.8.0",
"gatsby-transformer-remark": "^2.13.0",
"gatsby-transformer-sharp": "^2.9.0",
"i18next": "^19.8.4",
"lodash": "^4.17.20",
"nanoevents": "^5.1.10",
@ -52,34 +51,28 @@
"react-beautiful-dnd": "^13.0.0",
"react-dom": "^17.0.1",
"react-helmet": "^6.1.0",
"react-i18next": "^11.8.3",
"react-i18next": "^11.8.4",
"react-icons": "^4.1.0",
"react-markdown": "^5.0.3",
"react-scroll": "^1.8.1",
"react-toastify": "^6.2.0",
"short-unique-id": "^3.2.0",
"short-unique-id": "^3.2.3",
"uuid": "^8.3.2",
"yup": "^0.32.8"
},
"devDependencies": {
"@testing-library/jest-dom": "^5.11.6",
"@testing-library/react": "^11.2.2",
"babel-jest": "^26.6.3",
"babel-preset-gatsby": "^0.8.0",
"eslint": "^7.15.0",
"eslint": "^7.16.0",
"eslint-config-airbnb": "^18.2.1",
"eslint-config-prettier": "^7.0.0",
"eslint-config-prettier": "^7.1.0",
"eslint-loader": "^4.0.2",
"eslint-plugin-jsx-a11y": "^6.4.1",
"eslint-plugin-prettier": "^3.2.0",
"eslint-plugin-prettier": "^3.3.0",
"eslint-plugin-react": "^7.21.5",
"gatsby-plugin-eslint": "^2.0.8",
"identity-obj-proxy": "^3.0.0",
"jest": "^26.6.3",
"prettier": "2.2.1",
"stylelint": "^13.8.0",
"stylelint-config-standard": "^20.0.0",
"tailwindcss": "^2.0.1"
"tailwindcss": "^2.0.2"
},
"repository": {
"type": "git",

View File

@ -136,72 +136,86 @@ const ResumeProvider = ({ children }) => {
newState.updatedAt = temp.updatedAt;
newState.profile = {
address: {
city: payload.basics.location.city,
line1: payload.basics.location.address,
line2: payload.basics.location.region,
pincode: payload.basics.location.postalCode,
city: get(payload, 'basics.location.city'),
line1: get(payload, 'basics.location.address'),
line2: get(payload, 'basics.location.region'),
pincode: get(payload, 'basics.location.postalCode'),
},
email: payload.basics.email,
firstName: payload.basics.name,
phone: payload.basics.phone,
photograph: payload.basics.picture,
subtitle: payload.basics.label,
website: payload.basics.website,
email: get(payload, 'basics.email'),
firstName: get(payload, 'basics.name'),
phone: get(payload, 'basics.phone'),
photograph: get(payload, 'basics.picture'),
subtitle: get(payload, 'basics.label'),
website: get(payload, 'basics.website'),
};
newState.social.items = payload.basics.profiles.map((x) => ({
id: uuidv4(),
network: x.network,
username: x.username,
url: x.url,
}));
newState.objective.body = payload.basics.summary;
newState.work.items = payload.work.map((x) => ({
id: uuidv4(),
company: x.company,
endDate: x.endDate,
position: x.position,
startDate: x.startDate,
summary: x.summary,
website: x.website,
}));
newState.education.items =
payload.education &&
payload.education.map((x) => ({
id: uuidv4(),
degree: x.studyType,
endDate: x.endDate,
field: x.area,
gpa: x.gpa,
institution: x.institution,
startDate: x.startDate,
summary: x.courses.join('\n'),
}));
newState.awards.items = payload.awards.map((x) => ({
id: uuidv4(),
awarder: x.awarder,
date: x.date,
summary: x.summary,
title: x.title,
}));
newState.skills.items = payload.skills.map((x) => ({
id: uuidv4(),
level: 'Fundamental Awareness',
name: x.name,
}));
newState.hobbies.items = payload.interests.map((x) => ({
id: uuidv4(),
name: x.name,
}));
newState.languages.items = payload.languages.map((x) => ({
id: uuidv4(),
name: x.language,
fluency: x.fluency,
}));
newState.references.items = payload.references.map((x) => ({
id: uuidv4(),
name: x.name,
summary: x.reference,
}));
newState.social.items = get(payload, 'basics.profiles')
? payload.basics.profiles.map((x) => ({
id: uuidv4(),
network: x.network,
username: x.username,
url: x.url,
}))
: [];
newState.objective.body = get(payload, 'basics.summary');
newState.work.items = payload.work
? payload.work.map((x) => ({
id: uuidv4(),
company: x.company,
endDate: x.endDate,
position: x.position,
startDate: x.startDate,
summary: x.summary,
website: x.website,
}))
: [];
newState.education.items = payload.education
? payload.education.map((x) => ({
id: uuidv4(),
degree: x.studyType,
endDate: x.endDate,
field: x.area,
gpa: x.gpa,
institution: x.institution,
startDate: x.startDate,
summary: x.courses.join('\n'),
}))
: [];
newState.awards.items = payload.awards
? payload.awards.map((x) => ({
id: uuidv4(),
awarder: x.awarder,
date: x.date,
summary: x.summary,
title: x.title,
}))
: [];
newState.skills.items = payload.skills
? payload.skills.map((x) => ({
id: uuidv4(),
level: 'Fundamental Awareness',
name: x.name,
}))
: [];
newState.hobbies.items = payload.interests
? payload.interests.map((x) => ({
id: uuidv4(),
name: x.name,
}))
: [];
newState.languages.items = payload.languages
? payload.languages.map((x) => ({
id: uuidv4(),
name: x.language,
fluency: x.fluency,
}))
: [];
newState.references.items = payload.references
? payload.references.map((x) => ({
id: uuidv4(),
name: x.name,
summary: x.reference,
}))
: [];
debouncedUpdateResume(newState);
return newState;
@ -216,6 +230,7 @@ const ResumeProvider = ({ children }) => {
newState.id = temp.id;
newState.user = temp.user;
newState.name = temp.name;
newState.preview = temp.preview;
newState.createdAt = temp.createdAt;
newState.updatedAt = temp.updatedAt;
debouncedUpdateResume(newState);

View File

@ -55,6 +55,10 @@ const languages = [
code: 'nb',
name: 'Norwegian (Norsk)',
},
{
code: 'fa',
name: 'Persian (Farsi)',
},
{
code: 'pl',
name: 'Polish (Polskie)',

252
src/i18n/locales/fa.json Normal file
View File

@ -0,0 +1,252 @@
{
"shared": {
"appName": "Reactive Resume",
"shortDescription": "رزومه‌ساز رایگان و متن‌باز.",
"forms": {
"name": "نام",
"title": "عنوان",
"subtitle": "عنوان فرعی",
"required": "الزامی",
"website": "وب‌سایت",
"date": "تاریخ",
"present": "اکنون",
"position": "سمت",
"startDate": "تاریخ شروع",
"endDate": "تاریخ پایان",
"address": "نشانی",
"phone": "تلفن",
"email": "ایمیل",
"summary": "خلاصه",
"markdown": "این فیلد متنی از <1>مارک‌داون</1> پشتیبانی می‌کند.",
"validation": {
"min": "لطفاً حداقل {{number}} کاراکتر وارد نمایید.",
"dateRange": "تاریخ پایان باید بعد از تاریخ شروع باشد.",
"email": "ایمیل معتبر نیست.",
"required": "این فیلد الزامی است.",
"url": "نشانی اینترنتی معتبر نیست."
}
},
"buttons": {
"add": "افزودن",
"edit": "ویرایش",
"cancel": "انصراف",
"delete": "حذف",
"loading": "درحال بارگذاری...",
"confirmation": "آیا اطمینان دارید؟",
"login": "ورود",
"logout": "خروج"
}
},
"landing": {
"hero": {
"goToApp": "برو به برنامه"
}
},
"dashboard": {
"title": "داشبورد",
"createResume": "ایجاد رزومه",
"editResume": "ویرایش رزومه",
"lastUpdated": "آخرین به‌روزرسانی در {{timestamp}}",
"toasts": {
"deleted": "{{name}} با موفقیت حذف شد"
},
"buttons": {
"duplicate": "کپی کردن",
"rename": "تغییر نام"
},
"helpText": "شما درحال ساخت یک رزومه جدید هستید، اما ابتدا باید برای آن یک نام انتخاب کنید. این نام می‌تواند سمت شغلی باشد که برای آن درخواست می‌دهید، یا اگر درحال ساخت رزومه برای دوست خود هستید، نام آن را بگذارید: رزومه حسن."
},
"builder": {
"toasts": {
"formErrors": "قبل از ارسال این فرم، باید تمامی فیلدهای الزامی را پر کنید.",
"doesNotExist": "رزومه‌ای که دنبال آن هستید دیگر وجود ندارد... یا شاید هم وجود نداشته است.",
"loadDemoData": "مطمئن نیستید از کجا شروع کنید؟ بهتر است داده‌های دمو را بارگذاری کرده تا با قابلیت‌های Reactive Resume بهتر آشنا شوید.",
"printError": "سرور به مشکل برخورده است؛ لطفاً بعداً تلاش کرده یا از قابلیت چاپ مرورگر خود استفاده نمایید."
},
"sections": {
"heading": "عنوان",
"profile": "پروفایل",
"social": "شبکه اجتماعی",
"objective": "هدف",
"work": "تجربه کاری",
"education": "تحصیلات",
"project": "پروژه",
"projects": "پروژه‌ها",
"award": "جایزه",
"awards": "جوایز",
"certification": "مدرک",
"certifications": "مدارک",
"skill": "مهارت",
"skills": "مهارت‌ها",
"hobby": "سرگرمی",
"hobbies": "سرگرمی‌ها",
"language": "زبان",
"languages": "زبان‌ها",
"reference": "معرف",
"references": "معرف‌ها",
"templates": "قالب‌ها",
"layout": "چیدمان",
"colors": "رنگ‌ها",
"fonts": "قلم‌ها",
"actions": "اقدامات",
"settings": "تنظیمات",
"about": "درباره"
},
"profile": {
"photograph": "عکس",
"firstName": "نام",
"lastName": "نام خانوادگی",
"birthDate": "تاریخ تولد",
"address": {
"line1": "نشانی خط ۱",
"line2": "نشانی خط ۲",
"city": "شهر",
"pincode": "کد پستی"
}
},
"social": {
"network": "شبکه",
"username": "نام کاربری",
"url": "نشانی اینترنتی"
},
"work": {
"company": "شرکت"
},
"education": {
"institution": "مؤسسه",
"field": "رشته تحصیلی",
"degree": "مقطع تحصیلی",
"gpa": "معدل"
},
"awards": {
"awarder": "اعطاءکننده"
},
"certifications": {
"issuer": "صادرکننده"
},
"skills": {
"level": "سطح"
},
"languages": {
"fluency": "میزان تسلط"
},
"layout": {
"block": "قطعه",
"reset": "تنظیم دوباره چیدمان",
"text": "این قالب از {{count}} قطعه پشتیبانی می‌کند."
},
"colors": {
"primary": "رنگ اصلی",
"text": "رنگ متن",
"background": "رنگ زمینه"
},
"actions": {
"import": {
"heading": "رزومه خود را بارگذاری کنید",
"text": "شما می‌توانید اطلاعات خود را از منابع مختلفی مانند JSON Resume یا پروفایل LinkedIn خود وارد کرده تا بیشتر بخش‌های رزومه‌تان به‌طور خودکار پر شود.",
"button": "بارگذاری"
},
"export": {
"heading": "از رزومه خود خروجی بگیرید",
"text": "از رزومه خود با فرمت PDF (برای به اشتراک گذاشتن با دیگران) یا با فرمت JSON (برای بارگذاری دوباره در این برنامه در رایانه‌ای دیگر) خروجی بگیرید.",
"button": "خروجی"
},
"share": {
"heading": "رزومه خود را به اشتراک بگذارید",
"text": "لینک زیر به صورت عمومی در دسترس خواهد بود، اگر بخواهید آن را به اشتراک بگذارید. بازدیدکنندگان در هر زمان قادر خواهند بود آخرین نسخه رزومه شما را ببینند."
},
"loadDemoData": {
"text": "مطمئن نیستید باید با صفحه خالی چه کار کنید؟ داده‌های دمو را بارگذاری کرده تا رزومه تکمیل‌شده را دیده و سپس آن‌را ویرایش نمایید.",
"button": "بارگذاری داده‌های دمو"
},
"resetEverything": {
"text": "اگر خیلی اشتباه کرده‌اید عیبی ندارد، همه چیز را تنها با یک کلیک پاک کنید. اما اگر نسخه پشتیبان از رزومه ندارید مراقب باشید.",
"button": "تنظیم دوباره همه چیز"
}
},
"settings": {
"theme": "طرح زمینه",
"language": "زبان",
"translate": "اگر می خواهید با ارائه ترجمه به زبان خود به ما یاری دهید، <1>لطفاً از این لینک دیدن کنید</1>.",
"dangerZone": {
"heading": "منطقه خطر",
"text": "اگر می‌خواهید حساب کاربری خود را حذف و تمام رزومه‌هایتان را پاک کنید، کار تنها یک دکمه است. اما این یک فرآیند برگشت‌ناپذیر است.",
"button": "حذف حساب کاربری"
}
},
"about": {
"donate": {
"heading": "کمک مالی به Reactive Resume",
"text": "من تمام تلاش خود را خواهم داد، اما اگر این برنامه مفید بود، یا در موقعیت بهتری نسبت به افرادی هستید که به‌دنبال اولین شغل خود هستند، <1>لطفاً در حد ۵ دلار برای زنده نگهداشتن این پروژه کمک مالی کنید</1> :)",
"button": "برای من یک قهوه بخر!"
},
"bugFeature": {
"heading": "اشکالی پیدا کردید؟ پیشنهادی دارید؟",
"text": "آیا در ساخت رزومه خود به مشکلی برخوردید؟ آیا اشکالی در برنامه پیدا کرده‌اید که رفع نمی‌شود؟ با استفاده از اقدامات زیر در قسمت مسائل گیت‌هاب درباره آن بحث کنید.",
"button": "مسئله‌ای طرح کنید"
},
"appreciate": {
"heading": "از Reactive Resume خوشتان آمد؟",
"text": "من هیچ‌وقت از شنیدن داستان‌های مردم درباره اینکه چگونه این برنامه چگونه به آنها کمک کرده است سیر نمی‌شوم؛ پس اگر شما از این برنامه استفاده کرده‌اید یا فکر می‌کنید Reactive Resume یک ابزار خیلی باحال است، مرا در جریان بگذارید. می‌توانید از طریق وب‌سایتم با من در ارتباط باشید."
},
"sourceCode": {
"heading": "کد منبع",
"text": "می‌خواهید برنامه را از منبع آن اجرا کنید؟ آیا شما یک توسعه‌دهنده هستید که می‌خواهد در توسعه متن‌باز این پروژه مشارکت داشته باشد؟ روی دکمه زیر کلیک کنید.",
"button": "مخزن گیت‌هاب"
},
"footer": "ساخته شده با عشق توسط <1>Amruth Pillai</1>"
},
"tooltips": {
"uploadPhotograph": "بارگذاری عکس",
"backToDashboard": "برگشت به داشبورد"
},
"emptyList": "این لیست خالی است."
},
"modals": {
"auth": {
"whoAreYou": "شما که هستید؟",
"welcome": "خوش آمدید {{name}}!",
"loggedOutText": "Reactive Resume نیاز دارد بداند شما که هستید تا بتواند به‌طور امن شما را به برنامه وارد کند و تنها اطلاعات خودتان را به شما نشان دهد. وقتی وارد شدید، می‌توانید شروع به ساخت رزومه‌تان کنید، آن را ویرایش کرده یا با دنیا به اشتراک بگذارید.",
"loggedInText": "عالی. حالا که هویت‌تان تأیید شد، می‌توانیم برویم سر اصل مطلب. روی دکمه برو به برنامه کلیک کرده تا شروع به ساخت رزومه‌تان را کنید.",
"buttons": {
"google": "ورود با گوگل",
"anonymous": "ورود به صورت ناشناس"
}
},
"import": {
"button": "انتخاب فایل",
"reactiveResume": {
"heading": "بارگذاری از Reactive Resume",
"text": "Reactive Resume الگوی خاص خودش را دارد تا بتواند به بهترین وجه از تمام قابلیت‌های برنامه استفاده کند. اگر می‌خواهید یک نسخه پشتیبان رزومه که با این برنامه ساخته شده است را بارگذاری کنید، فایل مورد نظر را با استفاده از دکمه زیر آپلود نمایید."
},
"jsonResume": {
"heading": "بارگذاری از JSON Resume",
"text": "JSON Resume یک استاندارد باز برای ساختار رزومه است. اگر شما یکی از مشتاقانی هستید که رزومه خود را در این قالب آماده کرده‌اند، تنها یک دکمه با شروع به کار با Reactive Resume فاصله دارید."
},
"linkedIn": {
"heading": "بارگذاری از LinkedIn",
"text": "شما می‌توانید یک فایل JSON که LinkedIn خروجی گرفته شده است را با کلیک کردن روی دکمه زیر بارگذاری نمایید."
}
},
"export": {
"printDialog": {
"heading": "استفاده از پنجره چاپ مرورگر",
"text": "آن دسته از شما که به‌دنبال یک راه‌حل سریع هستید، کافی است از قابلیت چاپ مرورگر استفاده کنید. کافی است با فشار دادن کلید ترکیبی Ctrl/Cmd + P پنجره چاپ مرورگر را باز کرده رزومه خود را چاپ نمایید.",
"button": "چاپ رزومه"
},
"downloadPDF": {
"heading": "دانلود PDF",
"text": "این گزینه‌ها به شما اجازه می‌دهند که نسخه بدون محدودیت یک صفحه‌ای رزومه خود را چاپ کنید، ایده‌آل برای افرادی که حجم زیادی محتوا دارند. همچنین می‌توانید نسخه چند صفحه‌ای رزومه خود را نیز با تنها یک کلیک دانلود نمایید.",
"buttons": {
"single": "رزومه یک صفحه‌ای",
"multi": "رزومه چند صفحه‌ای"
}
},
"jsonFormat": {
"heading": "خروجی به فرمت JSON",
"text": "شما همچنین می‌توانید از داده‌های خود در فرمت JSON برای ذخیره‌سازی خروجی بگیرید تا هر موقع که خواستید برای ویرایش یا تولید دوباره، بتوانید آن را در Reactive Resume دوباره بارگذاری نمایید.",
"button": "خروجی JSON"
}
}
}
}

View File

@ -3,6 +3,7 @@ import da from './da.json';
import de from './de.json';
import en from './en.json';
import es from './es.json';
import fa from './fa.json';
import fi from './fi.json';
import fr from './fr.json';
import hi from './hi.json';
@ -26,6 +27,7 @@ export default {
de: { translation: de },
en: { translation: en },
es: { translation: es },
fa: { translation: fa },
fi: { translation: fi },
fr: { translation: fr },
hi: { translation: hi },

View File

@ -5,6 +5,7 @@ import 'dayjs/locale/da';
import 'dayjs/locale/de';
import 'dayjs/locale/en';
import 'dayjs/locale/es';
import 'dayjs/locale/fa';
import 'dayjs/locale/fi';
import 'dayjs/locale/fr';
import 'dayjs/locale/it';