mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2025-11-13 08:13:49 +10:00
chore(i18n): update zu-ZA translations
This commit is contained in:
@ -40,7 +40,9 @@
|
|||||||
<!-- Scripts -->
|
<!-- Scripts -->
|
||||||
<script type="module" src="/src/main.tsx"></script>
|
<script type="module" src="/src/main.tsx"></script>
|
||||||
|
|
||||||
<!-- Phosphor Icons -->
|
<!-- Crowdin Anonymous Translations -->
|
||||||
<script src="https://unpkg.com/@phosphor-icons/web"></script>
|
<script type="text/javascript" src="https://crowdin.com/js/crowdjet/crowdjet.js"></script>
|
||||||
|
<div id="crowdjet-container" data-project-id="503410" style="bottom: 90px; right: 20px"></div>
|
||||||
|
<div id="crowdjet-expand-container" style="bottom: 10px; right: 20px"></div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@ -1,12 +1,23 @@
|
|||||||
import { i18n } from "@lingui/core";
|
import { i18n } from "@lingui/core";
|
||||||
import { t } from "@lingui/macro";
|
import { t } from "@lingui/macro";
|
||||||
|
|
||||||
|
type Locale = "en-US" | "de-DE" | "zu-ZA";
|
||||||
|
|
||||||
export const defaultLocale = "en-US";
|
export const defaultLocale = "en-US";
|
||||||
|
|
||||||
export const getLocales = () => ({
|
export const getLocales = () => {
|
||||||
|
const locales = {
|
||||||
"en-US": t`English`,
|
"en-US": t`English`,
|
||||||
"de-DE": t`German`,
|
"de-DE": t`German`,
|
||||||
});
|
} as Record<Locale, string>;
|
||||||
|
|
||||||
|
if (process.env.NODE_ENV === "development") {
|
||||||
|
// eslint-disable-next-line lingui/no-unlocalized-strings
|
||||||
|
locales["zu-ZA"] = "Pseudolocalization";
|
||||||
|
}
|
||||||
|
|
||||||
|
return locales;
|
||||||
|
};
|
||||||
|
|
||||||
export async function dynamicActivate(locale: string) {
|
export async function dynamicActivate(locale: string) {
|
||||||
const { messages } = await import(`../locales/${locale}/messages.po`);
|
const { messages } = await import(`../locales/${locale}/messages.po`);
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"POT-Creation-Date: 2023-11-10 09:26+0100\n"
|
"POT-Creation-Date: 2023-11-10 11:19+0100\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
@ -40,6 +40,7 @@ msgid "<0>Two-factor authentication is enabled.</0> You will be asked to enter a
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps/client/src/pages/home/page.tsx:12
|
#: apps/client/src/pages/home/page.tsx:12
|
||||||
|
#: apps/client/src/pages/home/sections/hero/index.tsx:35
|
||||||
msgid "A free and open-source resume builder"
|
msgid "A free and open-source resume builder"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -48,10 +49,6 @@ msgstr ""
|
|||||||
msgid "A free and open-source resume builder that simplifies the process of creating, updating, and sharing your resume."
|
msgid "A free and open-source resume builder that simplifies the process of creating, updating, and sharing your resume."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps/client/src/pages/home/sections/hero/index.tsx:35
|
|
||||||
msgid "A free and open-source resume builder."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/sharing.tsx:29
|
#: apps/client/src/pages/builder/sidebars/right/sections/sharing.tsx:29
|
||||||
msgid "A link has been copied to your clipboard."
|
msgid "A link has been copied to your clipboard."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -81,6 +78,12 @@ msgstr ""
|
|||||||
msgid "Add a custom field"
|
msgid "Add a custom field"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: apps/client/src/pages/builder/sidebars/left/sections/shared/section-base.tsx:108
|
||||||
|
#: apps/client/src/pages/builder/sidebars/left/sections/shared/section-base.tsx:147
|
||||||
|
msgctxt "For example, add a new work experience, or add a new profile."
|
||||||
|
msgid "Add a new item"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/left/sections/shared/section-options.tsx:67
|
#: apps/client/src/pages/builder/sidebars/left/sections/shared/section-options.tsx:67
|
||||||
msgid "Add a new item"
|
msgid "Add a new item"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -90,12 +93,6 @@ msgstr ""
|
|||||||
msgid "Add a new section"
|
msgid "Add a new section"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/left/sections/shared/section-base.tsx:108
|
|
||||||
#: apps/client/src/pages/builder/sidebars/left/sections/shared/section-base.tsx:147
|
|
||||||
msgctxt "For example, add a new work experience, or add a new profile."
|
|
||||||
msgid "Add New Item"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/layout.tsx:267
|
#: apps/client/src/pages/builder/sidebars/right/sections/layout.tsx:267
|
||||||
msgid "Add New Page"
|
msgid "Add New Page"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -422,7 +419,7 @@ msgid "Don't know where to begin? Hit the docs!"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps/client/src/pages/dashboard/settings/_sections/profile.tsx:107
|
#: apps/client/src/pages/dashboard/settings/_sections/profile.tsx:107
|
||||||
msgid "Don't see your locale? <0>Help translate the app.</0>"
|
msgid "Don't see your language? <0>Help translate the app.</0>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/information.tsx:41
|
#: apps/client/src/pages/builder/sidebars/right/sections/information.tsx:41
|
||||||
@ -481,7 +478,7 @@ msgstr ""
|
|||||||
msgid "Enable 2FA"
|
msgid "Enable 2FA"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps/client/src/libs/lingui.ts:5
|
#: apps/client/src/libs/lingui.ts:10
|
||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -509,7 +506,7 @@ msgstr ""
|
|||||||
msgid "Errors"
|
msgid "Errors"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/index.tsx:79
|
#: apps/client/src/pages/builder/sidebars/right/index.tsx:82
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/export.tsx:40
|
#: apps/client/src/pages/builder/sidebars/right/sections/export.tsx:40
|
||||||
msgid "Export"
|
msgid "Export"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -538,19 +535,19 @@ msgstr ""
|
|||||||
msgid "Fluency (CEFR)"
|
msgid "Fluency (CEFR)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:95
|
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:94
|
||||||
msgid "Font Family"
|
msgid "Font Family"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:136
|
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:135
|
||||||
msgid "Font Size"
|
msgid "Font Size"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:110
|
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:109
|
||||||
msgid "Font Subset"
|
msgid "Font Subset"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:122
|
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:121
|
||||||
msgid "Font Variants"
|
msgid "Font Variants"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -592,7 +589,7 @@ msgstr ""
|
|||||||
msgid "Generate a random title for your resume"
|
msgid "Generate a random title for your resume"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps/client/src/libs/lingui.ts:6
|
#: apps/client/src/libs/lingui.ts:11
|
||||||
msgid "German"
|
msgid "German"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -697,7 +694,7 @@ msgstr ""
|
|||||||
msgid "In this section, you can delete your account and all the data associated to your user, but please keep in mind that <0>this action is irreversible</0>."
|
msgid "In this section, you can delete your account and all the data associated to your user, but please keep in mind that <0>this action is irreversible</0>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/index.tsx:83
|
#: apps/client/src/pages/builder/sidebars/right/index.tsx:86
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/information.tsx:123
|
#: apps/client/src/pages/builder/sidebars/right/sections/information.tsx:123
|
||||||
msgid "Information"
|
msgid "Information"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -740,6 +737,7 @@ msgstr ""
|
|||||||
msgid "Label"
|
msgid "Label"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: apps/client/src/pages/builder/sidebars/right/sections/locale.tsx:42
|
||||||
#: apps/client/src/pages/dashboard/settings/_sections/profile.tsx:93
|
#: apps/client/src/pages/dashboard/settings/_sections/profile.tsx:93
|
||||||
msgid "Language"
|
msgid "Language"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -749,7 +747,7 @@ msgstr ""
|
|||||||
msgid "Last updated {lastUpdated}"
|
msgid "Last updated {lastUpdated}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/index.tsx:65
|
#: apps/client/src/pages/builder/sidebars/right/index.tsx:68
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/layout.tsx:207
|
#: apps/client/src/pages/builder/sidebars/right/sections/layout.tsx:207
|
||||||
msgid "Layout"
|
msgid "Layout"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -774,7 +772,7 @@ msgstr ""
|
|||||||
msgid "Light"
|
msgid "Light"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:153
|
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:152
|
||||||
msgid "Line Height"
|
msgid "Line Height"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -787,6 +785,10 @@ msgstr ""
|
|||||||
msgid "List"
|
msgid "List"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: apps/client/src/pages/builder/sidebars/right/sections/locale.tsx:36
|
||||||
|
msgid "Locale"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/left/dialogs/custom-section.tsx:95
|
#: apps/client/src/pages/builder/sidebars/left/dialogs/custom-section.tsx:95
|
||||||
#: apps/client/src/pages/builder/sidebars/left/dialogs/experience.tsx:86
|
#: apps/client/src/pages/builder/sidebars/left/dialogs/experience.tsx:86
|
||||||
#: apps/client/src/pages/builder/sidebars/left/dialogs/volunteer.tsx:81
|
#: apps/client/src/pages/builder/sidebars/left/dialogs/volunteer.tsx:81
|
||||||
@ -864,7 +866,7 @@ msgstr ""
|
|||||||
msgid "Note: This will make your account less secure."
|
msgid "Note: This will make your account less secure."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/index.tsx:80
|
#: apps/client/src/pages/builder/sidebars/right/index.tsx:83
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/notes.tsx:17
|
#: apps/client/src/pages/builder/sidebars/right/sections/notes.tsx:17
|
||||||
msgid "Notes"
|
msgid "Notes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -894,7 +896,7 @@ msgid "OpenAI Integration"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/page.tsx:67
|
#: apps/client/src/pages/builder/sidebars/right/sections/page.tsx:67
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:170
|
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:169
|
||||||
msgid "Options"
|
msgid "Options"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -907,7 +909,7 @@ msgstr ""
|
|||||||
msgid "Organization"
|
msgid "Organization"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/index.tsx:72
|
#: apps/client/src/pages/builder/sidebars/right/index.tsx:75
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/page.tsx:26
|
#: apps/client/src/pages/builder/sidebars/right/sections/page.tsx:26
|
||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1081,15 +1083,15 @@ msgstr ""
|
|||||||
msgid "Score"
|
msgid "Score"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:99
|
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:98
|
||||||
msgid "Search for a font family"
|
msgid "Search for a font family"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:114
|
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:113
|
||||||
msgid "Search for a font subset"
|
msgid "Search for a font subset"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:127
|
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:126
|
||||||
msgid "Search for a font variant"
|
msgid "Search for a font variant"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -1116,7 +1118,7 @@ msgstr ""
|
|||||||
msgid "Setup two-factor authentication on your account"
|
msgid "Setup two-factor authentication on your account"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/index.tsx:73
|
#: apps/client/src/pages/builder/sidebars/right/index.tsx:76
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/sharing.tsx:39
|
#: apps/client/src/pages/builder/sidebars/right/sections/sharing.tsx:39
|
||||||
msgid "Sharing"
|
msgid "Sharing"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1180,7 +1182,7 @@ msgstr ""
|
|||||||
msgid "Start from scratch"
|
msgid "Start from scratch"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/index.tsx:76
|
#: apps/client/src/pages/builder/sidebars/right/index.tsx:79
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/statistics.tsx:23
|
#: apps/client/src/pages/builder/sidebars/right/sections/statistics.tsx:23
|
||||||
msgid "Statistics"
|
msgid "Statistics"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1221,7 +1223,7 @@ msgstr ""
|
|||||||
msgid "System"
|
msgid "System"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/index.tsx:62
|
#: apps/client/src/pages/builder/sidebars/right/index.tsx:65
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/template.tsx:18
|
#: apps/client/src/pages/builder/sidebars/right/sections/template.tsx:18
|
||||||
msgid "Template"
|
msgid "Template"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1242,7 +1244,7 @@ msgstr ""
|
|||||||
msgid "The resume you were looking for doesn't seem to exist, please check the link and try again."
|
msgid "The resume you were looking for doesn't seem to exist, please check the link and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/index.tsx:71
|
#: apps/client/src/pages/builder/sidebars/right/index.tsx:74
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/theme.tsx:20
|
#: apps/client/src/pages/builder/sidebars/right/sections/theme.tsx:20
|
||||||
#: apps/client/src/pages/dashboard/settings/_sections/profile.tsx:71
|
#: apps/client/src/pages/dashboard/settings/_sections/profile.tsx:71
|
||||||
msgid "Theme"
|
msgid "Theme"
|
||||||
@ -1303,12 +1305,12 @@ msgstr ""
|
|||||||
msgid "Type of Study"
|
msgid "Type of Study"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/index.tsx:68
|
#: apps/client/src/pages/builder/sidebars/right/index.tsx:71
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:67
|
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:66
|
||||||
msgid "Typography"
|
msgid "Typography"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:181
|
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:180
|
||||||
msgid "Underline Links"
|
msgid "Underline Links"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"POT-Creation-Date: 2023-11-10 09:26+0100\n"
|
"POT-Creation-Date: 2023-11-10 11:19+0100\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
@ -40,6 +40,7 @@ msgid "<0>Two-factor authentication is enabled.</0> You will be asked to enter a
|
|||||||
msgstr "<0>Two-factor authentication is enabled.</0> You will be asked to enter a code every time you sign in."
|
msgstr "<0>Two-factor authentication is enabled.</0> You will be asked to enter a code every time you sign in."
|
||||||
|
|
||||||
#: apps/client/src/pages/home/page.tsx:12
|
#: apps/client/src/pages/home/page.tsx:12
|
||||||
|
#: apps/client/src/pages/home/sections/hero/index.tsx:35
|
||||||
msgid "A free and open-source resume builder"
|
msgid "A free and open-source resume builder"
|
||||||
msgstr "A free and open-source resume builder"
|
msgstr "A free and open-source resume builder"
|
||||||
|
|
||||||
@ -48,10 +49,6 @@ msgstr "A free and open-source resume builder"
|
|||||||
msgid "A free and open-source resume builder that simplifies the process of creating, updating, and sharing your resume."
|
msgid "A free and open-source resume builder that simplifies the process of creating, updating, and sharing your resume."
|
||||||
msgstr "A free and open-source resume builder that simplifies the process of creating, updating, and sharing your resume."
|
msgstr "A free and open-source resume builder that simplifies the process of creating, updating, and sharing your resume."
|
||||||
|
|
||||||
#: apps/client/src/pages/home/sections/hero/index.tsx:35
|
|
||||||
msgid "A free and open-source resume builder."
|
|
||||||
msgstr "A free and open-source resume builder."
|
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/sharing.tsx:29
|
#: apps/client/src/pages/builder/sidebars/right/sections/sharing.tsx:29
|
||||||
msgid "A link has been copied to your clipboard."
|
msgid "A link has been copied to your clipboard."
|
||||||
msgstr "A link has been copied to your clipboard."
|
msgstr "A link has been copied to your clipboard."
|
||||||
@ -81,6 +78,12 @@ msgstr "Account"
|
|||||||
msgid "Add a custom field"
|
msgid "Add a custom field"
|
||||||
msgstr "Add a custom field"
|
msgstr "Add a custom field"
|
||||||
|
|
||||||
|
#: apps/client/src/pages/builder/sidebars/left/sections/shared/section-base.tsx:108
|
||||||
|
#: apps/client/src/pages/builder/sidebars/left/sections/shared/section-base.tsx:147
|
||||||
|
msgctxt "For example, add a new work experience, or add a new profile."
|
||||||
|
msgid "Add a new item"
|
||||||
|
msgstr "Add a new item"
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/left/sections/shared/section-options.tsx:67
|
#: apps/client/src/pages/builder/sidebars/left/sections/shared/section-options.tsx:67
|
||||||
msgid "Add a new item"
|
msgid "Add a new item"
|
||||||
msgstr "Add a new item"
|
msgstr "Add a new item"
|
||||||
@ -90,12 +93,6 @@ msgstr "Add a new item"
|
|||||||
msgid "Add a new section"
|
msgid "Add a new section"
|
||||||
msgstr "Add a new section"
|
msgstr "Add a new section"
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/left/sections/shared/section-base.tsx:108
|
|
||||||
#: apps/client/src/pages/builder/sidebars/left/sections/shared/section-base.tsx:147
|
|
||||||
msgctxt "For example, add a new work experience, or add a new profile."
|
|
||||||
msgid "Add New Item"
|
|
||||||
msgstr "Add New Item"
|
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/layout.tsx:267
|
#: apps/client/src/pages/builder/sidebars/right/sections/layout.tsx:267
|
||||||
msgid "Add New Page"
|
msgid "Add New Page"
|
||||||
msgstr "Add New Page"
|
msgstr "Add New Page"
|
||||||
@ -422,8 +419,8 @@ msgid "Don't know where to begin? Hit the docs!"
|
|||||||
msgstr "Don't know where to begin? Hit the docs!"
|
msgstr "Don't know where to begin? Hit the docs!"
|
||||||
|
|
||||||
#: apps/client/src/pages/dashboard/settings/_sections/profile.tsx:107
|
#: apps/client/src/pages/dashboard/settings/_sections/profile.tsx:107
|
||||||
msgid "Don't see your locale? <0>Help translate the app.</0>"
|
msgid "Don't see your language? <0>Help translate the app.</0>"
|
||||||
msgstr "Don't see your locale? <0>Help translate the app.</0>"
|
msgstr "Don't see your language? <0>Help translate the app.</0>"
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/information.tsx:41
|
#: apps/client/src/pages/builder/sidebars/right/sections/information.tsx:41
|
||||||
msgid "Donate to Reactive Resume"
|
msgid "Donate to Reactive Resume"
|
||||||
@ -481,7 +478,7 @@ msgstr "Email"
|
|||||||
msgid "Enable 2FA"
|
msgid "Enable 2FA"
|
||||||
msgstr "Enable 2FA"
|
msgstr "Enable 2FA"
|
||||||
|
|
||||||
#: apps/client/src/libs/lingui.ts:5
|
#: apps/client/src/libs/lingui.ts:10
|
||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "English"
|
msgstr "English"
|
||||||
|
|
||||||
@ -509,7 +506,7 @@ msgstr "Enter your email address and we will send you a link to reset your passw
|
|||||||
msgid "Errors"
|
msgid "Errors"
|
||||||
msgstr "Errors"
|
msgstr "Errors"
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/index.tsx:79
|
#: apps/client/src/pages/builder/sidebars/right/index.tsx:82
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/export.tsx:40
|
#: apps/client/src/pages/builder/sidebars/right/sections/export.tsx:40
|
||||||
msgid "Export"
|
msgid "Export"
|
||||||
msgstr "Export"
|
msgstr "Export"
|
||||||
@ -538,19 +535,19 @@ msgstr "Fluency"
|
|||||||
msgid "Fluency (CEFR)"
|
msgid "Fluency (CEFR)"
|
||||||
msgstr "Fluency (CEFR)"
|
msgstr "Fluency (CEFR)"
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:95
|
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:94
|
||||||
msgid "Font Family"
|
msgid "Font Family"
|
||||||
msgstr "Font Family"
|
msgstr "Font Family"
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:136
|
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:135
|
||||||
msgid "Font Size"
|
msgid "Font Size"
|
||||||
msgstr "Font Size"
|
msgstr "Font Size"
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:110
|
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:109
|
||||||
msgid "Font Subset"
|
msgid "Font Subset"
|
||||||
msgstr "Font Subset"
|
msgstr "Font Subset"
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:122
|
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:121
|
||||||
msgid "Font Variants"
|
msgid "Font Variants"
|
||||||
msgstr "Font Variants"
|
msgstr "Font Variants"
|
||||||
|
|
||||||
@ -592,7 +589,7 @@ msgstr "Full Name"
|
|||||||
msgid "Generate a random title for your resume"
|
msgid "Generate a random title for your resume"
|
||||||
msgstr "Generate a random title for your resume"
|
msgstr "Generate a random title for your resume"
|
||||||
|
|
||||||
#: apps/client/src/libs/lingui.ts:6
|
#: apps/client/src/libs/lingui.ts:11
|
||||||
msgid "German"
|
msgid "German"
|
||||||
msgstr "German"
|
msgstr "German"
|
||||||
|
|
||||||
@ -697,7 +694,7 @@ msgstr "In this section, you can change your password and enable/disable two-fac
|
|||||||
msgid "In this section, you can delete your account and all the data associated to your user, but please keep in mind that <0>this action is irreversible</0>."
|
msgid "In this section, you can delete your account and all the data associated to your user, but please keep in mind that <0>this action is irreversible</0>."
|
||||||
msgstr "In this section, you can delete your account and all the data associated to your user, but please keep in mind that <0>this action is irreversible</0>."
|
msgstr "In this section, you can delete your account and all the data associated to your user, but please keep in mind that <0>this action is irreversible</0>."
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/index.tsx:83
|
#: apps/client/src/pages/builder/sidebars/right/index.tsx:86
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/information.tsx:123
|
#: apps/client/src/pages/builder/sidebars/right/sections/information.tsx:123
|
||||||
msgid "Information"
|
msgid "Information"
|
||||||
msgstr "Information"
|
msgstr "Information"
|
||||||
@ -740,6 +737,7 @@ msgstr "Keywords"
|
|||||||
msgid "Label"
|
msgid "Label"
|
||||||
msgstr "Label"
|
msgstr "Label"
|
||||||
|
|
||||||
|
#: apps/client/src/pages/builder/sidebars/right/sections/locale.tsx:42
|
||||||
#: apps/client/src/pages/dashboard/settings/_sections/profile.tsx:93
|
#: apps/client/src/pages/dashboard/settings/_sections/profile.tsx:93
|
||||||
msgid "Language"
|
msgid "Language"
|
||||||
msgstr "Language"
|
msgstr "Language"
|
||||||
@ -749,7 +747,7 @@ msgstr "Language"
|
|||||||
msgid "Last updated {lastUpdated}"
|
msgid "Last updated {lastUpdated}"
|
||||||
msgstr "Last updated {lastUpdated}"
|
msgstr "Last updated {lastUpdated}"
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/index.tsx:65
|
#: apps/client/src/pages/builder/sidebars/right/index.tsx:68
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/layout.tsx:207
|
#: apps/client/src/pages/builder/sidebars/right/sections/layout.tsx:207
|
||||||
msgid "Layout"
|
msgid "Layout"
|
||||||
msgstr "Layout"
|
msgstr "Layout"
|
||||||
@ -774,7 +772,7 @@ msgstr "Licensed under <0>MIT</0>"
|
|||||||
msgid "Light"
|
msgid "Light"
|
||||||
msgstr "Light"
|
msgstr "Light"
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:153
|
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:152
|
||||||
msgid "Line Height"
|
msgid "Line Height"
|
||||||
msgstr "Line Height"
|
msgstr "Line Height"
|
||||||
|
|
||||||
@ -787,6 +785,10 @@ msgstr "LinkedIn, JSON Resume, etc."
|
|||||||
msgid "List"
|
msgid "List"
|
||||||
msgstr "List"
|
msgstr "List"
|
||||||
|
|
||||||
|
#: apps/client/src/pages/builder/sidebars/right/sections/locale.tsx:36
|
||||||
|
msgid "Locale"
|
||||||
|
msgstr "Locale"
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/left/dialogs/custom-section.tsx:95
|
#: apps/client/src/pages/builder/sidebars/left/dialogs/custom-section.tsx:95
|
||||||
#: apps/client/src/pages/builder/sidebars/left/dialogs/experience.tsx:86
|
#: apps/client/src/pages/builder/sidebars/left/dialogs/experience.tsx:86
|
||||||
#: apps/client/src/pages/builder/sidebars/left/dialogs/volunteer.tsx:81
|
#: apps/client/src/pages/builder/sidebars/left/dialogs/volunteer.tsx:81
|
||||||
@ -864,7 +866,7 @@ msgstr "New Password"
|
|||||||
msgid "Note: This will make your account less secure."
|
msgid "Note: This will make your account less secure."
|
||||||
msgstr "Note: This will make your account less secure."
|
msgstr "Note: This will make your account less secure."
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/index.tsx:80
|
#: apps/client/src/pages/builder/sidebars/right/index.tsx:83
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/notes.tsx:17
|
#: apps/client/src/pages/builder/sidebars/right/sections/notes.tsx:17
|
||||||
msgid "Notes"
|
msgid "Notes"
|
||||||
msgstr "Notes"
|
msgstr "Notes"
|
||||||
@ -894,7 +896,7 @@ msgid "OpenAI Integration"
|
|||||||
msgstr "OpenAI Integration"
|
msgstr "OpenAI Integration"
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/page.tsx:67
|
#: apps/client/src/pages/builder/sidebars/right/sections/page.tsx:67
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:170
|
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:169
|
||||||
msgid "Options"
|
msgid "Options"
|
||||||
msgstr "Options"
|
msgstr "Options"
|
||||||
|
|
||||||
@ -907,7 +909,7 @@ msgstr "or continue with"
|
|||||||
msgid "Organization"
|
msgid "Organization"
|
||||||
msgstr "Organization"
|
msgstr "Organization"
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/index.tsx:72
|
#: apps/client/src/pages/builder/sidebars/right/index.tsx:75
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/page.tsx:26
|
#: apps/client/src/pages/builder/sidebars/right/sections/page.tsx:26
|
||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr "Page"
|
msgstr "Page"
|
||||||
@ -1081,15 +1083,15 @@ msgstr "Scan the QR code below with your authenticator app to setup 2FA on your
|
|||||||
msgid "Score"
|
msgid "Score"
|
||||||
msgstr "Score"
|
msgstr "Score"
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:99
|
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:98
|
||||||
msgid "Search for a font family"
|
msgid "Search for a font family"
|
||||||
msgstr "Search for a font family"
|
msgstr "Search for a font family"
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:114
|
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:113
|
||||||
msgid "Search for a font subset"
|
msgid "Search for a font subset"
|
||||||
msgstr "Search for a font subset"
|
msgstr "Search for a font subset"
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:127
|
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:126
|
||||||
msgid "Search for a font variant"
|
msgid "Search for a font variant"
|
||||||
msgstr "Search for a font variant"
|
msgstr "Search for a font variant"
|
||||||
|
|
||||||
@ -1116,7 +1118,7 @@ msgstr "Settings"
|
|||||||
msgid "Setup two-factor authentication on your account"
|
msgid "Setup two-factor authentication on your account"
|
||||||
msgstr "Setup two-factor authentication on your account"
|
msgstr "Setup two-factor authentication on your account"
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/index.tsx:73
|
#: apps/client/src/pages/builder/sidebars/right/index.tsx:76
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/sharing.tsx:39
|
#: apps/client/src/pages/builder/sidebars/right/sections/sharing.tsx:39
|
||||||
msgid "Sharing"
|
msgid "Sharing"
|
||||||
msgstr "Sharing"
|
msgstr "Sharing"
|
||||||
@ -1180,7 +1182,7 @@ msgstr "Start building your resume by giving it a name."
|
|||||||
msgid "Start from scratch"
|
msgid "Start from scratch"
|
||||||
msgstr "Start from scratch"
|
msgstr "Start from scratch"
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/index.tsx:76
|
#: apps/client/src/pages/builder/sidebars/right/index.tsx:79
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/statistics.tsx:23
|
#: apps/client/src/pages/builder/sidebars/right/sections/statistics.tsx:23
|
||||||
msgid "Statistics"
|
msgid "Statistics"
|
||||||
msgstr "Statistics"
|
msgstr "Statistics"
|
||||||
@ -1221,7 +1223,7 @@ msgstr "Support the app by donating what you can!"
|
|||||||
msgid "System"
|
msgid "System"
|
||||||
msgstr "System"
|
msgstr "System"
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/index.tsx:62
|
#: apps/client/src/pages/builder/sidebars/right/index.tsx:65
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/template.tsx:18
|
#: apps/client/src/pages/builder/sidebars/right/sections/template.tsx:18
|
||||||
msgid "Template"
|
msgid "Template"
|
||||||
msgstr "Template"
|
msgstr "Template"
|
||||||
@ -1242,7 +1244,7 @@ msgstr "The passwords you entered do not match."
|
|||||||
msgid "The resume you were looking for doesn't seem to exist, please check the link and try again."
|
msgid "The resume you were looking for doesn't seem to exist, please check the link and try again."
|
||||||
msgstr "The resume you were looking for doesn't seem to exist, please check the link and try again."
|
msgstr "The resume you were looking for doesn't seem to exist, please check the link and try again."
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/index.tsx:71
|
#: apps/client/src/pages/builder/sidebars/right/index.tsx:74
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/theme.tsx:20
|
#: apps/client/src/pages/builder/sidebars/right/sections/theme.tsx:20
|
||||||
#: apps/client/src/pages/dashboard/settings/_sections/profile.tsx:71
|
#: apps/client/src/pages/dashboard/settings/_sections/profile.tsx:71
|
||||||
msgid "Theme"
|
msgid "Theme"
|
||||||
@ -1303,12 +1305,12 @@ msgstr "Type <0>delete</0> to confirm deleting your account."
|
|||||||
msgid "Type of Study"
|
msgid "Type of Study"
|
||||||
msgstr "Type of Study"
|
msgstr "Type of Study"
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/index.tsx:68
|
#: apps/client/src/pages/builder/sidebars/right/index.tsx:71
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:67
|
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:66
|
||||||
msgid "Typography"
|
msgid "Typography"
|
||||||
msgstr "Typography"
|
msgstr "Typography"
|
||||||
|
|
||||||
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:181
|
#: apps/client/src/pages/builder/sidebars/right/sections/typography.tsx:180
|
||||||
msgid "Underline Links"
|
msgid "Underline Links"
|
||||||
msgstr "Underline Links"
|
msgstr "Underline Links"
|
||||||
|
|
||||||
|
|||||||
1483
apps/client/src/locales/zu-ZA/messages.po
Normal file
1483
apps/client/src/locales/zu-ZA/messages.po
Normal file
File diff suppressed because it is too large
Load Diff
@ -106,7 +106,7 @@ export const SectionBase = <T extends SectionItem>({ id, title, description }: P
|
|||||||
<Plus size={14} />
|
<Plus size={14} />
|
||||||
<span className="font-medium">
|
<span className="font-medium">
|
||||||
{t({
|
{t({
|
||||||
message: "Add New Item",
|
message: "Add a new item",
|
||||||
context: "For example, add a new work experience, or add a new profile.",
|
context: "For example, add a new work experience, or add a new profile.",
|
||||||
})}
|
})}
|
||||||
</span>
|
</span>
|
||||||
@ -145,7 +145,7 @@ export const SectionBase = <T extends SectionItem>({ id, title, description }: P
|
|||||||
<Plus />
|
<Plus />
|
||||||
<span>
|
<span>
|
||||||
{t({
|
{t({
|
||||||
message: "Add New Item",
|
message: "Add a new item",
|
||||||
context: "For example, add a new work experience, or add a new profile.",
|
context: "For example, add a new work experience, or add a new profile.",
|
||||||
})}
|
})}
|
||||||
</span>
|
</span>
|
||||||
|
|||||||
@ -109,8 +109,8 @@ export const SectionOptions = ({ id }: Props) => {
|
|||||||
<DropdownMenuSubContent>
|
<DropdownMenuSubContent>
|
||||||
<DropdownMenuRadioGroup value={`${section.columns}`} onValueChange={onChangeColumns}>
|
<DropdownMenuRadioGroup value={`${section.columns}`} onValueChange={onChangeColumns}>
|
||||||
{Array.from({ length: 5 }, (_, i) => i + 1).map((value) => (
|
{Array.from({ length: 5 }, (_, i) => i + 1).map((value) => (
|
||||||
<DropdownMenuRadioItem value={`${value}`}>
|
<DropdownMenuRadioItem key={value} value={`${value}`}>
|
||||||
{plural(value, { one: "Column", other: "Columns" })}
|
{value} {plural(value, { one: "Column", other: "Columns" })}
|
||||||
</DropdownMenuRadioItem>
|
</DropdownMenuRadioItem>
|
||||||
))}
|
))}
|
||||||
</DropdownMenuRadioGroup>
|
</DropdownMenuRadioGroup>
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import { ThemeSwitch } from "@/client/components/theme-switch";
|
|||||||
import { ExportSection } from "./sections/export";
|
import { ExportSection } from "./sections/export";
|
||||||
import { InformationSection } from "./sections/information";
|
import { InformationSection } from "./sections/information";
|
||||||
import { LayoutSection } from "./sections/layout";
|
import { LayoutSection } from "./sections/layout";
|
||||||
|
import { LocaleSection } from "./sections/locale";
|
||||||
import { NotesSection } from "./sections/notes";
|
import { NotesSection } from "./sections/notes";
|
||||||
import { PageSection } from "./sections/page";
|
import { PageSection } from "./sections/page";
|
||||||
import { SharingSection } from "./sections/sharing";
|
import { SharingSection } from "./sections/sharing";
|
||||||
@ -39,6 +40,8 @@ export const RightSidebar = () => {
|
|||||||
<Separator />
|
<Separator />
|
||||||
<PageSection />
|
<PageSection />
|
||||||
<Separator />
|
<Separator />
|
||||||
|
<LocaleSection />
|
||||||
|
<Separator />
|
||||||
<SharingSection />
|
<SharingSection />
|
||||||
<Separator />
|
<Separator />
|
||||||
<StatisticsSection />
|
<StatisticsSection />
|
||||||
|
|||||||
@ -0,0 +1,48 @@
|
|||||||
|
import { t } from "@lingui/macro";
|
||||||
|
import { useLingui } from "@lingui/react";
|
||||||
|
import { Combobox, Label } from "@reactive-resume/ui";
|
||||||
|
import { useMemo } from "react";
|
||||||
|
|
||||||
|
import { dynamicActivate, getLocales } from "@/client/libs/lingui";
|
||||||
|
import { useResumeStore } from "@/client/stores/resume";
|
||||||
|
|
||||||
|
import { getSectionIcon } from "../shared/section-icon";
|
||||||
|
|
||||||
|
export const LocaleSection = () => {
|
||||||
|
const { _ } = useLingui();
|
||||||
|
|
||||||
|
const setValue = useResumeStore((state) => state.setValue);
|
||||||
|
const locale = useResumeStore((state) => state.resume.data.metadata.locale);
|
||||||
|
|
||||||
|
const options = useMemo(() => {
|
||||||
|
return Object.entries(getLocales()).map(([value, label]) => ({
|
||||||
|
label,
|
||||||
|
value,
|
||||||
|
}));
|
||||||
|
}, [_]);
|
||||||
|
|
||||||
|
const onChangeLanguage = async (value: string) => {
|
||||||
|
setValue("metadata.locale", value);
|
||||||
|
await dynamicActivate(value);
|
||||||
|
|
||||||
|
// Update resume section titles with new locale
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<section id="locale" className="grid gap-y-6">
|
||||||
|
<header className="flex items-center justify-between">
|
||||||
|
<div className="flex items-center gap-x-4">
|
||||||
|
{getSectionIcon("locale")}
|
||||||
|
<h2 className="line-clamp-1 text-3xl font-bold">{t`Locale`}</h2>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<main className="grid gap-y-4">
|
||||||
|
<div className="space-y-1.5">
|
||||||
|
<Label>{t`Language`}</Label>
|
||||||
|
<Combobox value={locale} onValueChange={onChangeLanguage} options={options} />
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
</section>
|
||||||
|
);
|
||||||
|
};
|
||||||
@ -14,7 +14,7 @@ import { getSectionIcon } from "../shared/section-icon";
|
|||||||
const fontSuggestions = [
|
const fontSuggestions = [
|
||||||
"Open Sans",
|
"Open Sans",
|
||||||
"Merriweather",
|
"Merriweather",
|
||||||
"CMU Serif",
|
"Roboto Condensed",
|
||||||
"Playfair Display",
|
"Playfair Display",
|
||||||
"Lato",
|
"Lato",
|
||||||
"Lora",
|
"Lora",
|
||||||
@ -38,7 +38,6 @@ export const TypographySection = () => {
|
|||||||
|
|
||||||
const loadFontSuggestions = useCallback(async () => {
|
const loadFontSuggestions = useCallback(async () => {
|
||||||
fontSuggestions.forEach((font) => {
|
fontSuggestions.forEach((font) => {
|
||||||
if (font === "CMU Serif") return;
|
|
||||||
webfontloader.load({
|
webfontloader.load({
|
||||||
events: false,
|
events: false,
|
||||||
classes: false,
|
classes: false,
|
||||||
|
|||||||
@ -9,20 +9,22 @@ import {
|
|||||||
ReadCvLogo,
|
ReadCvLogo,
|
||||||
ShareFat,
|
ShareFat,
|
||||||
TextT,
|
TextT,
|
||||||
|
Translate,
|
||||||
TrendUp,
|
TrendUp,
|
||||||
} from "@phosphor-icons/react";
|
} from "@phosphor-icons/react";
|
||||||
import { Button, ButtonProps, Tooltip } from "@reactive-resume/ui";
|
import { Button, ButtonProps, Tooltip } from "@reactive-resume/ui";
|
||||||
|
|
||||||
export type MetadataKey =
|
export type MetadataKey =
|
||||||
| "notes"
|
|
||||||
| "template"
|
| "template"
|
||||||
| "layout"
|
| "layout"
|
||||||
| "typography"
|
| "typography"
|
||||||
| "theme"
|
| "theme"
|
||||||
| "page"
|
| "page"
|
||||||
|
| "locale"
|
||||||
| "sharing"
|
| "sharing"
|
||||||
| "statistics"
|
| "statistics"
|
||||||
| "export"
|
| "export"
|
||||||
|
| "notes"
|
||||||
| "information";
|
| "information";
|
||||||
|
|
||||||
export const getSectionIcon = (id: MetadataKey, props: IconProps = {}) => {
|
export const getSectionIcon = (id: MetadataKey, props: IconProps = {}) => {
|
||||||
@ -40,6 +42,8 @@ export const getSectionIcon = (id: MetadataKey, props: IconProps = {}) => {
|
|||||||
return <Palette size={18} {...props} />;
|
return <Palette size={18} {...props} />;
|
||||||
case "page":
|
case "page":
|
||||||
return <ReadCvLogo size={18} {...props} />;
|
return <ReadCvLogo size={18} {...props} />;
|
||||||
|
case "locale":
|
||||||
|
return <Translate size={18} {...props} />;
|
||||||
case "sharing":
|
case "sharing":
|
||||||
return <ShareFat size={18} {...props} />;
|
return <ShareFat size={18} {...props} />;
|
||||||
case "statistics":
|
case "statistics":
|
||||||
|
|||||||
@ -105,7 +105,7 @@ export const ProfileSettings = () => {
|
|||||||
<FormDescription>
|
<FormDescription>
|
||||||
<span>
|
<span>
|
||||||
<Trans>
|
<Trans>
|
||||||
Don't see your locale?{" "}
|
Don't see your language?{" "}
|
||||||
<a
|
<a
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer nofollow"
|
rel="noopener noreferrer nofollow"
|
||||||
|
|||||||
@ -32,7 +32,7 @@ export const HeroSection = () => (
|
|||||||
<div className="mt-10 space-y-2">
|
<div className="mt-10 space-y-2">
|
||||||
<h6 className="text-base font-bold tracking-wide">{t`Finally,`}</h6>
|
<h6 className="text-base font-bold tracking-wide">{t`Finally,`}</h6>
|
||||||
<h1 className="text-4xl font-bold tracking-tight sm:text-6xl">
|
<h1 className="text-4xl font-bold tracking-tight sm:text-6xl">
|
||||||
{t`A free and open-source resume builder.`}
|
{t`A free and open-source resume builder`}
|
||||||
</h1>
|
</h1>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@ -1,27 +1,34 @@
|
|||||||
import "@/client/libs/dayjs";
|
import "@/client/libs/dayjs";
|
||||||
|
|
||||||
import { i18n } from "@lingui/core";
|
import { i18n } from "@lingui/core";
|
||||||
import { detect, fromNavigator, fromStorage, fromUrl } from "@lingui/detect-locale";
|
import { detect, fromNavigator, fromUrl } from "@lingui/detect-locale";
|
||||||
import { I18nProvider } from "@lingui/react";
|
import { I18nProvider } from "@lingui/react";
|
||||||
|
import get from "lodash.get";
|
||||||
import { useEffect } from "react";
|
import { useEffect } from "react";
|
||||||
|
|
||||||
import { defaultLocale, dynamicActivate } from "../libs/lingui";
|
import { defaultLocale, dynamicActivate } from "../libs/lingui";
|
||||||
|
import { useAuthStore } from "../stores/auth";
|
||||||
|
import { useResumeStore } from "../stores/resume";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const LocaleProvider = ({ children }: Props) => {
|
export const LocaleProvider = ({ children }: Props) => {
|
||||||
|
const userLocale = useAuthStore((state) => get(state.user, "locale", null));
|
||||||
|
const resumeLocale = useResumeStore((state) => get(state.resume, "data.metadata.locale", null));
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const detectedLocale = detect(
|
const detectedLocale = detect(
|
||||||
|
resumeLocale,
|
||||||
|
userLocale,
|
||||||
fromUrl("lang"),
|
fromUrl("lang"),
|
||||||
fromStorage("lang"),
|
|
||||||
fromNavigator(),
|
fromNavigator(),
|
||||||
defaultLocale,
|
defaultLocale,
|
||||||
)!;
|
)!;
|
||||||
|
|
||||||
dynamicActivate(detectedLocale);
|
dynamicActivate(detectedLocale);
|
||||||
}, []);
|
}, [userLocale, resumeLocale]);
|
||||||
|
|
||||||
return <I18nProvider i18n={i18n}>{children}</I18nProvider>;
|
return <I18nProvider i18n={i18n}>{children}</I18nProvider>;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -6,8 +6,6 @@ import fontkit from "@pdf-lib/fontkit";
|
|||||||
import { ResumeDto } from "@reactive-resume/dto";
|
import { ResumeDto } from "@reactive-resume/dto";
|
||||||
import { getFontUrls, withTimeout } from "@reactive-resume/utils";
|
import { getFontUrls, withTimeout } from "@reactive-resume/utils";
|
||||||
import retry from "async-retry";
|
import retry from "async-retry";
|
||||||
import { readFile } from "fs/promises";
|
|
||||||
import { join } from "path";
|
|
||||||
import { PDFDocument } from "pdf-lib";
|
import { PDFDocument } from "pdf-lib";
|
||||||
import { connect } from "puppeteer";
|
import { connect } from "puppeteer";
|
||||||
|
|
||||||
@ -154,25 +152,6 @@ export class PrinterService {
|
|||||||
// Get information about fonts used in the resume from the metadata
|
// Get information about fonts used in the resume from the metadata
|
||||||
const fontData = resume.data.metadata.typography.font;
|
const fontData = resume.data.metadata.typography.font;
|
||||||
|
|
||||||
// Handle Special Case for CMU Serif as it is not available on Google Fonts
|
|
||||||
if (fontData.family === "CMU Serif") {
|
|
||||||
const fontsBuffer = await Promise.all([
|
|
||||||
readFile(join(__dirname, "assets/fonts/computer-modern/regular.ttf")),
|
|
||||||
readFile(join(__dirname, "assets/fonts/computer-modern/italic.ttf")),
|
|
||||||
readFile(join(__dirname, "assets/fonts/computer-modern/bold.ttf")),
|
|
||||||
]);
|
|
||||||
|
|
||||||
await Promise.all(
|
|
||||||
fontsBuffer.map((buffer) => {
|
|
||||||
// Convert Buffer to ArrayBuffer
|
|
||||||
const arrayBuffer = buffer.buffer.slice(
|
|
||||||
buffer.byteOffset,
|
|
||||||
buffer.byteOffset + buffer.byteLength,
|
|
||||||
);
|
|
||||||
return pdf.embedFont(arrayBuffer);
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
const fontUrls = getFontUrls(fontData.family, fontData.variants);
|
const fontUrls = getFontUrls(fontData.family, fontData.variants);
|
||||||
|
|
||||||
// Load all the fonts from the URLs using HttpService
|
// Load all the fonts from the URLs using HttpService
|
||||||
@ -187,7 +166,6 @@ export class PrinterService {
|
|||||||
|
|
||||||
// Embed all the fonts in the PDF
|
// Embed all the fonts in the PDF
|
||||||
await Promise.all(fontsBuffer.map((buffer) => pdf.embedFont(buffer)));
|
await Promise.all(fontsBuffer.map((buffer) => pdf.embedFont(buffer)));
|
||||||
}
|
|
||||||
|
|
||||||
for (let index = 0; index < pagesBuffer.length; index++) {
|
for (let index = 0; index < pagesBuffer.length; index++) {
|
||||||
const page = await PDFDocument.load(pagesBuffer[index]);
|
const page = await PDFDocument.load(pagesBuffer[index]);
|
||||||
|
|||||||
@ -9,7 +9,7 @@ export const defaultLayout = [
|
|||||||
|
|
||||||
// Schema
|
// Schema
|
||||||
export const metadataSchema = z.object({
|
export const metadataSchema = z.object({
|
||||||
locale: z.string().default("en"),
|
locale: z.string().default("en-US"),
|
||||||
template: z.string().default("rhyhorn"),
|
template: z.string().default("rhyhorn"),
|
||||||
layout: z.array(z.array(z.array(z.string()))).default(defaultLayout), // pages -> columns -> sections
|
layout: z.array(z.array(z.array(z.string()))).default(defaultLayout), // pages -> columns -> sections
|
||||||
css: z.object({
|
css: z.object({
|
||||||
@ -47,7 +47,7 @@ export type Metadata = z.infer<typeof metadataSchema>;
|
|||||||
|
|
||||||
// Defaults
|
// Defaults
|
||||||
export const defaultMetadata: Metadata = {
|
export const defaultMetadata: Metadata = {
|
||||||
locale: "en",
|
locale: "en-US",
|
||||||
template: "rhyhorn",
|
template: "rhyhorn",
|
||||||
layout: defaultLayout,
|
layout: defaultLayout,
|
||||||
css: {
|
css: {
|
||||||
|
|||||||
@ -452,7 +452,7 @@ export const sampleResume: ResumeData = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
metadata: {
|
metadata: {
|
||||||
locale: "en",
|
locale: "en-US",
|
||||||
template: "pikachu",
|
template: "pikachu",
|
||||||
layout: [
|
layout: [
|
||||||
[
|
[
|
||||||
|
|||||||
@ -7,15 +7,6 @@ export type Font = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const fonts: Font[] = [
|
export const fonts: Font[] = [
|
||||||
{
|
|
||||||
family: "CMU Serif",
|
|
||||||
category: "serif",
|
|
||||||
subsets: ["latin"],
|
|
||||||
variants: ["regular"],
|
|
||||||
files: {
|
|
||||||
regular: "https://cdn.jsdelivr.net/npm/computer-modern/cmu-serif.min.css",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
family: "Roboto",
|
family: "Roboto",
|
||||||
category: "sans-serif",
|
category: "sans-serif",
|
||||||
|
|||||||
@ -3,7 +3,8 @@ import type { LinguiConfig } from "@lingui/conf";
|
|||||||
const config: LinguiConfig = {
|
const config: LinguiConfig = {
|
||||||
format: "po",
|
format: "po",
|
||||||
sourceLocale: "en-US",
|
sourceLocale: "en-US",
|
||||||
locales: ["en-US", "de-DE"],
|
pseudoLocale: "zu-ZA",
|
||||||
|
locales: ["en-US", "de-DE", "zu-ZA"],
|
||||||
catalogs: [
|
catalogs: [
|
||||||
{
|
{
|
||||||
path: "<rootDir>/apps/client/src/locales/{locale}/messages",
|
path: "<rootDir>/apps/client/src/locales/{locale}/messages",
|
||||||
|
|||||||
Reference in New Issue
Block a user