Compare commits

...

18 Commits

Author SHA1 Message Date
David Ascanio fa9b14cac5 add components vue footer form contact / modal register 2026-02-17 21:22:13 -03:00
David Ascanio 3ba5e9f4ee Merge branch 'main' of https://gitea.carpa.com/LGCC/cdrdpyj into status-postulacion 2026-02-17 19:56:45 -03:00
Julio Ruiz 5bb47caa95 Fixed translations for news items - amended data structure. Added locale to news posts. Added filter by locale for news display. 2026-02-17 16:32:56 -05:00
Esteban 0053ee71bc added dropdown languege switcher 2026-02-17 15:39:03 -05:00
Esteban 446e853eed added all translations in all home page 2026-02-17 14:51:03 -05:00
Julio Ruiz f66d3f7a10 Fixing es translation usage
Adding font weights to poppins.
2026-02-17 08:38:52 -05:00
Esteban Paz cea0456efa p set:html={tl("projection.text3")}></p> 2026-02-17 07:06:31 -05:00
Esteban Paz defab34421 fixed text in projection section 2026-02-17 06:55:58 -05:00
Esteban dcf1020e97 added translations in es for projection section and change message to modal of volunteer 2026-02-16 14:42:13 -05:00
Esteban 5326c95d58 added translations for columnSection 2026-02-15 12:42:06 -05:00
Esteban 6081c5aad1 added grid section translations and titles section 2026-02-15 12:01:36 -05:00
Esteban 1ad7482740 added en translations 2026-02-15 11:10:59 -05:00
Julio Ruiz d45a2597ae Added copies for title section 2026-02-15 10:22:01 -05:00
Julio Ruiz 0f60ebbc98 Moving props to json file 2026-02-15 10:03:56 -05:00
Julio Ruiz dc0d66d283 Added initial json files for translations - Adding example nav translations - Modified header to use translations. 2026-02-15 09:02:42 -05:00
Julio Ruiz ea16b61dfc Added font source fonts.
Added font import to layouts.
Added font names to css file
2026-02-15 05:40:38 -05:00
Esteban Paz 262b6c5de2 Merge pull request 'delete imgs' (#11) from delete-images-jbp into main
Reviewed-on: #11
2026-02-15 09:43:43 +00:00
David Ascanio 9b78a38405 delete imgs 2026-02-15 06:41:24 -03:00
39 changed files with 1093 additions and 355 deletions

63
package-lock.json generated
View File

@ -10,8 +10,14 @@
"@astrojs/markdoc": "^0.15.10", "@astrojs/markdoc": "^0.15.10",
"@astrojs/node": "^9.5.3", "@astrojs/node": "^9.5.3",
"@astrojs/vue": "^5.1.4", "@astrojs/vue": "^5.1.4",
"@coreui/icons": "^3.0.1",
"@dotenvx/dotenvx": "^1.52.0", "@dotenvx/dotenvx": "^1.52.0",
"@fontsource-variable/kameron": "^5.2.8",
"@fontsource-variable/kreon": "^5.2.8",
"@fontsource-variable/rokkitt": "^5.2.8",
"@fontsource/poppins": "^5.2.7",
"@iconify-json/ph": "^1.2.2", "@iconify-json/ph": "^1.2.2",
"@iconify/vue": "^5.0.0",
"@tailwindcss/vite": "^4.1.18", "@tailwindcss/vite": "^4.1.18",
"@unpic/astro": "^1.0.2", "@unpic/astro": "^1.0.2",
"astro": "^5.17.1", "astro": "^5.17.1",
@ -870,6 +876,12 @@
"node": ">=18" "node": ">=18"
} }
}, },
"node_modules/@coreui/icons": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@coreui/icons/-/icons-3.0.1.tgz",
"integrity": "sha512-u9UKEcRMyY9pa4jUoLij8pAR03g5g6TLWV33/Mx2ix8sffyi0eO4fLV8DSTQljDCw938zt7KYog5cVKEAJUxxg==",
"license": "MIT"
},
"node_modules/@dotenvx/dotenvx": { "node_modules/@dotenvx/dotenvx": {
"version": "1.52.0", "version": "1.52.0",
"resolved": "https://registry.npmjs.org/@dotenvx/dotenvx/-/dotenvx-1.52.0.tgz", "resolved": "https://registry.npmjs.org/@dotenvx/dotenvx/-/dotenvx-1.52.0.tgz",
@ -1357,6 +1369,42 @@
"node": ">=18" "node": ">=18"
} }
}, },
"node_modules/@fontsource-variable/kameron": {
"version": "5.2.8",
"resolved": "https://registry.npmjs.org/@fontsource-variable/kameron/-/kameron-5.2.8.tgz",
"integrity": "sha512-Q2wjV3qZ62H54rl2k3QUopvPutXBjOU+gy2aqTz4iZYKPW2w0LTvY+UmQLSaWmTXV3MTCHKemr8HRxObQZjx3A==",
"license": "OFL-1.1",
"funding": {
"url": "https://github.com/sponsors/ayuhito"
}
},
"node_modules/@fontsource-variable/kreon": {
"version": "5.2.8",
"resolved": "https://registry.npmjs.org/@fontsource-variable/kreon/-/kreon-5.2.8.tgz",
"integrity": "sha512-QSRKN9LwxoUIMjA1utIBRu5kMg5I2nmHTRJ6/+vstlnjW+eaMCxjPdpL5+NM3cFhUwyFXu/U52NmJmINrXEG1g==",
"license": "OFL-1.1",
"funding": {
"url": "https://github.com/sponsors/ayuhito"
}
},
"node_modules/@fontsource-variable/rokkitt": {
"version": "5.2.8",
"resolved": "https://registry.npmjs.org/@fontsource-variable/rokkitt/-/rokkitt-5.2.8.tgz",
"integrity": "sha512-/1yuWZ0YdvzD5UgayFmISjubAhqkDC5/RZyd583XCXBS9Yck3t0IYGN37+qEZtA8iQ8AypoVc2CfTRmz6L5mHQ==",
"license": "OFL-1.1",
"funding": {
"url": "https://github.com/sponsors/ayuhito"
}
},
"node_modules/@fontsource/poppins": {
"version": "5.2.7",
"resolved": "https://registry.npmjs.org/@fontsource/poppins/-/poppins-5.2.7.tgz",
"integrity": "sha512-6uQyPmseo4FgI97WIhA4yWRlNaoLk4vSDK/PyRwdqqZb5zAEuc+Kunt8JTMcsHYUEGYBtN15SNkMajMdqUSUmg==",
"license": "OFL-1.1",
"funding": {
"url": "https://github.com/sponsors/ayuhito"
}
},
"node_modules/@iconify-json/ph": { "node_modules/@iconify-json/ph": {
"version": "1.2.2", "version": "1.2.2",
"resolved": "https://registry.npmjs.org/@iconify-json/ph/-/ph-1.2.2.tgz", "resolved": "https://registry.npmjs.org/@iconify-json/ph/-/ph-1.2.2.tgz",
@ -1458,6 +1506,21 @@
"mlly": "^1.7.4" "mlly": "^1.7.4"
} }
}, },
"node_modules/@iconify/vue": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/@iconify/vue/-/vue-5.0.0.tgz",
"integrity": "sha512-C+KuEWIF5nSBrobFJhT//JS87OZ++QDORB6f2q2Wm6fl2mueSTpFBeBsveK0KW9hWiZ4mNiPjsh6Zs4jjdROSg==",
"license": "MIT",
"dependencies": {
"@iconify/types": "^2.0.0"
},
"funding": {
"url": "https://github.com/sponsors/cyberalien"
},
"peerDependencies": {
"vue": ">=3"
}
},
"node_modules/@img/colour": { "node_modules/@img/colour": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz",

View File

@ -12,8 +12,14 @@
"@astrojs/markdoc": "^0.15.10", "@astrojs/markdoc": "^0.15.10",
"@astrojs/node": "^9.5.3", "@astrojs/node": "^9.5.3",
"@astrojs/vue": "^5.1.4", "@astrojs/vue": "^5.1.4",
"@coreui/icons": "^3.0.1",
"@dotenvx/dotenvx": "^1.52.0", "@dotenvx/dotenvx": "^1.52.0",
"@fontsource-variable/kameron": "^5.2.8",
"@fontsource-variable/kreon": "^5.2.8",
"@fontsource-variable/rokkitt": "^5.2.8",
"@fontsource/poppins": "^5.2.7",
"@iconify-json/ph": "^1.2.2", "@iconify-json/ph": "^1.2.2",
"@iconify/vue": "^5.0.0",
"@tailwindcss/vite": "^4.1.18", "@tailwindcss/vite": "^4.1.18",
"@unpic/astro": "^1.0.2", "@unpic/astro": "^1.0.2",
"astro": "^5.17.1", "astro": "^5.17.1",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 398 KiB

View File

@ -28,7 +28,7 @@ const background = props.bgImage || props.bgColor;
{props.hasInput && ( {props.hasInput && (
<div class="flex gap-2 w-full mt-5"> <div class="flex gap-2 w-full mt-5">
<RegisterModal client:load /> <RegisterModal client:load locale={Astro.currentLocale} />
</div> </div>
)} )}
</div> </div>

View File

@ -1,22 +1,26 @@
--- ---
import Button from "./ui/Button.astro"; import Button from "./ui/Button.astro";
import { Icon } from "astro-icon/components"; import { Icon } from "astro-icon/components";
import { createTranslator } from "../i18n/index.ts";
const tl = createTranslator(Astro.currentLocale);
const currentLocale = Astro.currentLocale;
--- ---
<div> <div>
<div class="flex justify-between px-8 md:px-0 md:py-4"> <div class="flex justify-between px-8 md:px-0 md:py-4">
<div class="border-l-4 border-colorPrimary pl-4"> <div class="border-l-4 border-colorPrimary pl-4">
<p class="font-secondary text-colorPrimary font-bold leading-none py-2 text-2xl md:text-lg"> <p class="font-secondary text-colorPrimary font-bold leading-none py-2 text-2xl md:text-lg">
<a href="/">Centro del Reino<br /> De Paz y Justicia</a> <a href={`/${currentLocale}`}>{tl("nav.logo_line1")}<br/>{tl("nav.logo_line2")}</a>
</p> </p>
</div> </div>
<nav <nav
class="flex justify-evenly gap-10 items-center uppercase text-md text-white" class="flex justify-evenly gap-10 items-center uppercase text-md text-white"
> >
<div class="hidden md:flex gap-8 font-primary font-bold"> <div class="hidden md:flex gap-8 font-primary font-bold">
<a class="hover:text-colorPrimary transition" href="#somos">Somos</a> <a class="hover:text-colorPrimary transition" href="#somos">{tl("nav.about")}</a>
<a class="hover:text-colorPrimary transition" href="#programs">Programas</a> <a class="hover:text-colorPrimary transition" href="#programs">{tl("nav.programs")}</a>
<a class="hover:text-colorPrimary transition" href="#news">Noticias</a> <a class="hover:text-colorPrimary transition" href="#news">{tl("nav.news")}</a>
</div> </div>
<div class="drawer lg:hidden"> <div class="drawer lg:hidden">
<input id="my-drawer-1" type="checkbox" class="drawer-toggle" /> <input id="my-drawer-1" type="checkbox" class="drawer-toggle" />
@ -31,24 +35,38 @@ import { Icon } from "astro-icon/components";
<div class="flex gap-2 justify-center items-center mb-8 mt-8"> <div class="flex gap-2 justify-center items-center mb-8 mt-8">
<img class="w-1/3 object-contain" src="/img/logo-metalico.webp" alt="Logo Centro del Reino de Paz y Justicia" /> <img class="w-1/3 object-contain" src="/img/logo-metalico.webp" alt="Logo Centro del Reino de Paz y Justicia" />
<p class="font-secondary text-colorPrimary font-bold leading-none py-2 text-lg "> <p class="font-secondary text-colorPrimary font-bold leading-none py-2 text-lg ">
<a href="/">Centro del Reino<br /> De Paz y Justicia</a> <a href="/">{tl("nav.logo_line1")}<br/>{tl("nav.logo_line2")}</a>
</p> </p>
</div> </div>
<div class="font-primary font-bold flex flex-col gap-1 text-lg p-0"> <div class="font-primary font-bold flex flex-col gap-1 text-lg p-0">
<li><a><a class="hover:text-colorPrimary transition" href="#somos">Somos</a></a></li> <li><a><a class="hover:text-colorPrimary transition" href="#somos">{tl("nav.about")}</a></a></li>
<li><a><a class="hover:text-colorPrimary transition" href="#programs">Programas</a></a></li> <li><a><a class="hover:text-colorPrimary transition" href="#programs">{tl("nav.programs")}</a></a></li>
<li><a><a class="hover:text-colorPrimary transition" href="#news">Noticias</a></a></li> <li><a><a class="hover:text-colorPrimary transition" href="#news">{tl("nav.news")}</a></a></li>
</div> </div>
<div class="w-50"> <div class="w-50">
<Button class="px-8 py-2 uppercase text-lg mt-8" title="Contacto" url="#contact" variant="primary" /> <Button class="px-8 py-2 uppercase text-lg mt-8" title={tl("nav.contact")} url="#contact" variant="primary" />
</div>
<div class="dropdown mt-10">
<div tabindex="0" role="button" class="btn-ghost m-1 cursor-pointer"><Icon name="ph:translate" class="text-2xl" /></div>
<ul tabindex="-1" class="dropdown-content text-tertiary text-lg bg-colorPrimary menu z-1 w-52 p-2 shadow-sm">
<li><a href="/es">🇪🇸 Espanol</a></li>
<li><a href="/en">🇬🇧 English</a></li>
</ul>
</div> </div>
</ul> </ul>
</div> </div>
</div> </div>
<div class="w-50 hidden md:block"> <div class="w-50 hidden md:block">
<Button class="px-8 py-2 uppercase" title="Contacto" url="#contact" variant="primary" /> <Button class="px-4 py-2 uppercase" title={tl("nav.contact")} url="#contact" variant="primary" />
</div>
<div class="dropdown dropdown-end lg:block hidden">
<div tabindex="0" role="button" class="btn-ghost m-1 cursor-pointer"><Icon name="ph:translate" class="text-2xl" /></div>
<ul tabindex="-1" class="dropdown-content text-tertiary text-lg bg-colorPrimary menu z-1 w-52 p-2 shadow-sm">
<li><a href="/es">🇪🇸 Espanol</a></li>
<li><a href="/en">🇬🇧 English</a></li>
</ul>
</div> </div>
</nav> </nav>
</div> </div>

View File

@ -1,6 +1,9 @@
--- ---
import Header from './Header.astro'; import Header from './Header.astro';
import { Icon } from 'astro-icon/components'; import { Icon } from 'astro-icon/components';
import { createTranslator } from '../i18n';
const tl = createTranslator(Astro.currentLocale);
--- ---
<div class="font-secondary"> <div class="font-secondary">
@ -18,11 +21,11 @@ import { Icon } from 'astro-icon/components';
/> />
<div class="text-colorPrimary font-semibold font-secondary sm:mb-24 mt-8"> <div class="text-colorPrimary font-semibold font-secondary sm:mb-24 mt-8">
<h1 class="text-3xl md:text-6xl sm:mb-8"> <h1 class="text-3xl md:text-6xl sm:mb-8">
Dr. José Benjamín<br /> Pérez Matos {tl("hero.name")}
</h1> </h1>
<div class="flex items-center "> <div class="flex items-center ">
<Icon name="ph:minus" class="text-xl mr-2" /> <Icon name="ph:minus" class="text-xl mr-2" />
<h6 class="font-primary font-light uppercase text-white">LÍDER FUNDADOR</h6> <h6 class="font-primary font-light uppercase text-white uppercase">{tl("hero.title")}</h6>
</div> </div>
</div> </div>
@ -31,11 +34,7 @@ import { Icon } from 'astro-icon/components';
<div <div
class="md:w-1/2 font-primary font-medium text-2xl text-colorPrimary gap-8 flex flex-col justify-end mb-24" class="md:w-1/2 font-primary font-medium text-2xl text-colorPrimary gap-8 flex flex-col justify-end mb-24"
> >
<h2 class="text-[#EAE6D2] text-lg py-8"> <h2 class="text-[#EAE6D2] text-lg py-8">{tl("hero.body")}</h2>
“El sueño de mi vida es ver cumplida la visión de los
profetas: un mundo de justicia y paz para el bien de
Israel y de toda la humanidad.”
</h2>
<div class="w-16 self-end md:mt-64"> <div class="w-16 self-end md:mt-64">
<img <img
src="/img/white-dove.webp" src="/img/white-dove.webp"

View File

@ -1,8 +1,15 @@
<script setup> <script setup>
import { ref} from "vue"; import { ref} from "vue";
import { Icon } from '@iconify/vue'
const props = defineProps({
locale: String
})
import { createTranslator, t } from "../i18n";
const tl = createTranslator(props.locale);
const loading = ref(false); const loading = ref(false);
const modalRef = ref(null); const modalRef = ref(null);
const isFormPendiente = ref(false);
const openModal = () => { const openModal = () => {
modalRef.value?.showModal(); modalRef.value?.showModal();
@ -38,11 +45,50 @@ const handleSubmit = async (e) => {
</script> </script>
<template> <template>
<template v-if="isFormPendiente">
<button <button
@click="openModal" @click="openModal"
class="btn rounded-none p-7 bg-[#22523F] text-[#EBE6D2] border-0 hover:bg-[#EBE6D2]/90 hover:text-tertiary uppercase text-lg" class="btn rounded-none p-7 bg-[#22523F] text-[#EBE6D2] border-0 hover:bg-[#EBE6D2]/90 hover:text-tertiary uppercase text-lg"
> >
Registrate {{ tl("info.register") }}
</button>
<dialog
ref="modalRef"
class="modal modal-bottom sm:modal-middle p-8"
>
<div class="modal-box bg-[#EBE6D2] text-[#22523F] rounded-none p-8">
<!-- Botón cerrar -->
<button
type="button"
@click="closeModal"
class="btn btn-sm btn-circle btn-ghost absolute right-2 top-2"
>
<Icon icon="ph:x" class="text-2xl" />
</button>
<!-- Título -->
<h3 class="text-lg font-bold lg:text-2xl font-secondary text-center uppercase">
{{ tl("info.modal.title") }}
</h3>
<!-- Texto -->
<p class="text-lg font-primary text-center mt-10">
{{ tl("info.modal.text") }}
</p>
</div>
</dialog>
</template>
<template v-else>
<button
@click="openModal"
class="btn rounded-none p-7 bg-[#22523F] text-[#EBE6D2] border-0 hover:bg-[#EBE6D2]/90 hover:text-tertiary uppercase text-lg"
>
{{ tl("info.register") }}
</button> </button>
<dialog ref="modalRef" id="my_modal_5" class="modal modal-bottom sm:modal-middle p-8"> <dialog ref="modalRef" id="my_modal_5" class="modal modal-bottom sm:modal-middle p-8">
@ -54,16 +100,7 @@ const handleSubmit = async (e) => {
type="button" type="button"
class="btn btn-sm btn-circle btn-ghost absolute right-2 top-2" class="btn btn-sm btn-circle btn-ghost absolute right-2 top-2"
> >
<svg <Icon icon="ph:x" class="w-6 h-6" />
xmlns="http://www.w3.org/2000/svg"
class="w-6 h-6"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M6 18L18 6M6 6l12 12" />
</svg>
</button> </button>
</form> </form>
@ -141,3 +178,4 @@ const handleSubmit = async (e) => {
</div> </div>
</dialog> </dialog>
</template> </template>
</template>

View File

@ -4,8 +4,9 @@ import { Icon } from "astro-icon/components";
import "dayjs/locale/es"; import "dayjs/locale/es";
import dayjs from "dayjs"; import dayjs from "dayjs";
const regionNames = new Intl.DisplayNames(['es'], { type: 'region' }); const regionNames = new Intl.DisplayNames(['es'], { type: 'region' });
const { locale } = Astro.params;
dayjs.locale("es"); dayjs.locale(locale);
const { data } = Astro.props; const { data } = Astro.props;
const nicedate = dayjs(data.data.date).format("D MMMM YYYY"); const nicedate = dayjs(data.data.date).format("D MMMM YYYY");
@ -18,7 +19,7 @@ const countryName = regionNames.of(data.data.country);
<p class="font-light text-2xl mb-8"> <p class="font-light text-2xl mb-8">
{data.data.city}, {countryName}<br />({nicedate}): {data.data.city}, {countryName}<br />({nicedate}):
</p> </p>
<h3 class="text-2xl font-bold mb-8"><a href={`/news/${data.id}`}>{data.data.title}</a></h3> <h3 class="text-2xl font-bold mb-8"><a href={`/${locale}/news/${data.id}`}>{data.data.title}</a></h3>
<div> <div>
<Image <Image

View File

@ -1,12 +1,14 @@
--- ---
const { title, titleColor, description, descColor, bgColor } = Astro.props; import { createTranslator } from '../../i18n';
const tl = createTranslator(Astro.currentLocale);
--- ---
<div class={`container mx-auto ${bgColor}`}> <div class="container mx-auto bg-[#003421]">
<div class="grid grid-cols-3 relative"> <div class="grid grid-cols-3 relative">
<div class={`col-span-3 sm:col-span-2 p-12 lg:p-24 lg:h-82 ${descColor}`}> <div class="col-span-3 sm:col-span-2 p-12 lg:p-24 lg:h-82 text-[#EBE6D2]">
<h2 class={`${titleColor} text-2xl`}><strong>Autoridades</strong> | Centro del Reino de Paz y Justicia</h2> <h2 class="text-colorSecondary text-2xl" set:html={tl("authority.title")}></h2>
<p>El <strong>Dr. José Benjamín Pérez Matos</strong> es el <strong>fundador y único referente del Centro del Reino de Paz y Justicia.</strong> Su liderazgo articula visión espiritual, formación intelectual, acción pública y proyección internacional.</p> <p set:html={tl("authority.body")} />
</div> </div>
<div class="hidden sm:flex col-span-1 bg-[#CBA16A] items-end self-end justify-center h-82 overflow-visible"> <div class="hidden sm:flex col-span-1 bg-[#CBA16A] items-end self-end justify-center h-82 overflow-visible">
<img src="/img/DRJBP-1.webp" class="w-48 sm:w-64 lg:w-76 object-contain absolute bottom-0" alt=""> <img src="/img/DRJBP-1.webp" class="w-48 sm:w-64 lg:w-76 object-contain absolute bottom-0" alt="">

View File

@ -1,14 +1,17 @@
--- ---
import { Icon } from "astro-icon/components"; import { Icon } from "astro-icon/components";
import { createTranslator } from '../../i18n';
const tl = createTranslator(Astro.currentLocale);
const { props } = Astro.props; const { props } = Astro.props;
--- ---
<div class="container mx-auto"> <div class="container mx-auto">
<div class="grid md:grid-cols-2 min-h-100"> <div class="grid md:grid-cols-2 min-h-100">
<div class="bg-[#EBE5D0] p-12 md:p-24 grid lg:grid-cols-2"> <div class="bg-[#EBE5D0] p-12 md:p-24 grid lg:grid-cols-2">
<div class="leftcol flex justify-between flex-col min-h-full"> <div class="leftcol flex justify-between flex-col min-h-full">
<h2 class="text-5xl font-secondary text-tertiary font-bold">Justicia</h2> <h2 class="text-5xl font-secondary text-tertiary font-bold">{tl("values.justice.title")}</h2>
<p class="text-lg text-tertiary">Compromiso activo con un orden justo, basado en principios morales, respeto por la dignidad humana y defensa de valores permanentes.</p> <p class="text-lg text-tertiary">{tl("values.justice.text")}</p>
</div> </div>
<div class="rightcol flex justify-end align-bottom min-h-full "> <div class="rightcol flex justify-end align-bottom min-h-full ">
<Icon name="icon_justice_1" class="text-9xl text-tertiary self-end" /> <Icon name="icon_justice_1" class="text-9xl text-tertiary self-end" />
@ -16,8 +19,8 @@ const { props } = Astro.props;
</div> </div>
<div class="bg-tertiary p-12 md:p-24 grid lg:grid-cols-2"> <div class="bg-tertiary p-12 md:p-24 grid lg:grid-cols-2">
<div class="leftcol flex justify-between flex-col min-h-full"> <div class="leftcol flex justify-between flex-col min-h-full">
<h2 class="text-5xl font-secondary font-bold text-[#CBA16A]">Integridad</h2> <h2 class="text-5xl font-secondary font-bold text-[#CBA16A]">{tl("values.integrity.title")}</h2>
<p class="text-[#CBA16A] text-lg">Coherencia entre pensamiento, palabra y acción; transparencia institucional y responsabilidad en el espacio público.</p> <p class="text-[#CBA16A] text-lg">{tl("values.integrity.text")}</p>
</div> </div>
<div class="rightcol flex justify-end align-bottom min-h-full "> <div class="rightcol flex justify-end align-bottom min-h-full ">
<Icon name="icon_justice_2" class="text-[#EBE5D0] text-9xl self-end" /> <Icon name="icon_justice_2" class="text-[#EBE5D0] text-9xl self-end" />
@ -26,16 +29,16 @@ const { props } = Astro.props;
</div> </div>
<div class="grid lg:grid-cols-3"> <div class="grid lg:grid-cols-3">
<div class="bg-tertiary p-12 xl:p-20 2xl:p-24 flex justify-between flex-col min-h-full lg:aspect-square"> <div class="bg-tertiary p-12 xl:p-20 2xl:p-24 flex justify-between flex-col min-h-full lg:aspect-square">
<h2 class="text-3xl xl:text-5xl font-secondary font-bold text-white">Servicio con Propósito</h2> <h2 class="text-3xl xl:text-5xl font-secondary font-bold text-white">{tl("values.service.title")}</h2>
<p class="text-xl text-[#EBE5D0]">Vocación de acompañamiento y acción orientada a objetivos claros y trascendentes.</p> <p class="text-xl text-[#EBE5D0]">{tl("values.service.text")}</p>
</div> </div>
<div class="bg-[#BEA48D] p-12 xl:p-20 2xl:p-24 flex justify-between flex-col min-h-full lg:aspect-square"> <div class="bg-[#BEA48D] p-12 xl:p-20 2xl:p-24 flex justify-between flex-col min-h-full lg:aspect-square">
<h2 class="text-3xl xl:text-5xl font-secondary font-bold text-tertiary">Excelencia</h2> <h2 class="text-3xl xl:text-5xl font-secondary font-bold text-tertiary">{tl("values.excellence.title")}</h2>
<p class="text-xl text-tertiary">Rigor intelectual, profesionalismo y mejora constante en todas las áreas de trabajo.</p> <p class="text-xl text-tertiary">{tl("values.excellence.text")}</p>
</div> </div>
<div class="bg-[#22523F] p-12 xl:p-20 2xl:p-24 flex justify-between flex-col min-h-full lg:aspect-square"> <div class="bg-[#22523F] p-12 xl:p-20 2xl:p-24 flex justify-between flex-col min-h-full lg:aspect-square">
<h2 class="text-3xl xl:text-5xl font-secondary font-bold text-white">Diálogo Estratégico</h2> <h2 class="text-3xl xl:text-5xl font-secondary font-bold text-white">{tl("values.dialogue.title")}</h2>
<p class="text-white text-xl">Apertura al intercambio entre culturas, naciones y credos, sin renunciar a convicciones ni principios fundamentales.</p> <p class="text-white text-xl">{tl("values.dialogue.text")}</p>
</div> </div>
</div> </div>
</div> </div>

View File

@ -2,6 +2,9 @@
import { Icon } from "astro-icon/components"; import { Icon } from "astro-icon/components";
import { Image } from "astro:assets"; import { Image } from "astro:assets";
import jbp from "../../assets/DRJBP-1.webp"; import jbp from "../../assets/DRJBP-1.webp";
import FormContact from "./FormContact.vue";
import { createTranslator, t } from '../../i18n';
const tl = createTranslator(Astro.currentLocale);
--- ---
<div id="contact" class="bg-[#22523F]"> <div id="contact" class="bg-[#22523F]">
@ -11,97 +14,23 @@ import jbp from "../../assets/DRJBP-1.webp";
<Image src={jbp} alt="Centro del Reino de Paz y Justicia" /> <Image src={jbp} alt="Centro del Reino de Paz y Justicia" />
</div> </div>
<h4 class="text-lg text-center font-bold uppercase">Contacto</h4> <h4 class="text-lg text-center font-bold uppercase" set:html={tl("footer.title")}></h4>
<h2 class="text-2xl lg:text-5xl text-center font-bold font-secondary my-8"> <h2 class="text-2xl lg:text-5xl text-center font-bold font-secondary my-8" set:html={tl("footer.subtitle")}>
Conectemos con visión y propósito
</h2> </h2>
<div class="px-12 lg:px-4 lg:w-2/5 mx-auto"> <div class="px-12 lg:px-4 lg:w-2/5 mx-auto">
<p class="text-lg font-light mb-10"> <p class="text-lg font-light mb-10" set:html={tl("footer.text")}></p>
El <strong>Centro del Reino de Paz y Justicia</strong> dispone de canales
directos para consultas institucionales, participación en programas y
actividades internacionales.
</p>
<p class="text-lg font-light mb-10 break-words"> <p class="text-lg font-light mb-10 break-words" set:html={tl("footer.text2")}></p>
Correo electrónico:
<strong>developer@centrodelreinodepazyjusticia.com</strong><br />
Redes sociales: actualizaciones permanentes sobre actividades y convocatorias.
</p>
<!-- FORMULARIO --> <FormContact client:load locale ={Astro.currentLocale}/>
<form method="POST" action="/api/emailInfo/send" class="flex flex-col gap-4">
<fieldset>
<input
name="nombre"
type="text"
placeholder="Nombre y Apellido"
required
class="bg-[#EBE5D0] w-full py-2 px-4 mb-2 text-[#303335] placeholder:text-[#303335] focus:outline-none"
/>
<input
name="email"
type="email"
placeholder="E-Mail"
required
class="bg-[#EBE5D0] w-full py-2 px-4 mb-2 text-[#303335] placeholder:text-[#303335] focus:outline-none"
/>
<textarea
name="mensaje"
placeholder="Escriba su mensaje"
rows="5"
required
class="bg-[#EBE5D0] w-full py-2 px-4 mb-2 text-[#303335] placeholder:text-[#303335] focus:outline-none"
></textarea>
</fieldset>
<div class="flex flex-row justify-between items-center mt-4">
<ul class="flex flex-row gap-2">
<li class="border-r pr-2">
<a href="https://x.com/CRPazYJusticia" target="_blank">
<Icon name="ph:x-logo-thin" class="text-3xl" />
</a>
</li>
<li class="border-r pr-2">
<a href="https://www.instagram.com/centrodelreinodepazyjusticia/" target="_blank">
<Icon name="ph:instagram-logo-thin" class="text-3xl" />
</a>
</li>
<li class="border-r pr-2">
<a href="https://www.facebook.com/Centrodelreinodepazyjusticia" target="_blank">
<Icon name="ph:facebook-logo-thin" class="text-3xl" />
</a>
</li>
<li>
<a href="https://www.youtube.com/@CentrodelReinodePazyJusticia" target="_blank">
<Icon name="ph:youtube-logo-thin" class="text-3xl" />
</a>
</li>
</ul>
<button
type="submit"
class="bg-[#003421] px-6 py-2 text-sm hover:bg-[#EBE5D0] hover:text-[#003421] cursor-pointer transition duration-300"
>
Enviar
</button>
</div>
</form>
</div> </div>
<div class="flex lg:justify-between mt-10 lg:mt-0 align-center justify-center"> <div class="flex lg:justify-between mt-10 lg:mt-0 align-center justify-center">
<p class="px-4 order-1 text-sm text-white lg:self-end text-center lg:text-left"> <p class="px-4 order-1 text-sm font-normal text-white lg:self-end text-center lg:text-left">
©2026. Todos los Derechos Reservados. All Rights Reserved. {tl("footer.reserved")}
Centro del Reino de Paz y Justicia
</p> </p>
<img class="w-24 lg:order-1 z-10 pl-6 object-contain" src="/img/logo-metalico.webp" alt="Logo Metalico"> <img class="w-24 lg:order-1 z-10 pl-6 object-contain" src="/img/logo-metalico.webp" alt="Logo Metalico">
</div> </div>

View File

@ -0,0 +1,102 @@
<script setup>
import { Icon } from "@iconify/vue";
import { createTranslator } from "../../i18n";
const props = defineProps({
locale: String
});
const tl = createTranslator(props.locale);
const handleSubmit = async (e) => {
const formData = new FormData(e.target);
try {
const response = await fetch("/api/emailInfo/send", {
method: "POST",
body: formData,
});
e.target.reset();
if (!response.ok)
throw new Error();
} catch (error) {
console.error(error);
}
};
</script>
<template>
<form
@submit.prevent="handleSubmit"
class="flex flex-col gap-4"
>
<fieldset>
<input
name="nombre"
type="text"
:placeholder="tl('footer.form.name')"
required
class="bg-[#EBE5D0] w-full py-2 px-4 mb-2 text-[#303335] placeholder:text-[#303335] focus:outline-none"
/>
<input
name="email"
type="email"
placeholder="E-Mail"
required
class="bg-[#EBE5D0] w-full py-2 px-4 mb-2 text-[#303335] placeholder:text-[#303335] focus:outline-none"
/>
<textarea
name="mensaje"
:placeholder="tl('footer.form.mesagge')"
rows="5"
required
class="bg-[#EBE5D0] w-full py-2 px-4 mb-2 text-[#303335] placeholder:text-[#303335] focus:outline-none"
></textarea>
</fieldset>
<div class="flex flex-row justify-between items-center mt-4">
<!-- Social Icons -->
<ul class="flex flex-row gap-2">
<li class="border-r pr-2">
<a href="https://x.com/CRPazYJusticia" target="_blank">
<Icon icon="ph:x-logo-thin" class="text-3xl" />
</a>
</li>
<li class="border-r pr-2">
<a href="https://www.instagram.com/centrodelreinodepazyjusticia/" target="_blank">
<Icon icon="ph:instagram-logo-thin" class="text-3xl" />
</a>
</li>
<li class="border-r pr-2">
<a href="https://www.facebook.com/Centrodelreinodepazyjusticia" target="_blank">
<Icon icon="ph:facebook-logo-thin" class="text-3xl" />
</a>
</li>
<li>
<a href="https://www.youtube.com/@CentrodelReinodePazyJusticia" target="_blank">
<Icon icon="ph:youtube-logo-thin" class="text-3xl" />
</a>
</li>
</ul>
<!-- Submit -->
<button
type="submit"
class="bg-[#003421] px-6 py-2 text-sm hover:bg-[#EBE5D0] hover:text-[#003421] cursor-pointer transition duration-300"
>
{{ tl("footer.form.button") }}
</button>
</div>
</form>
</template>

View File

@ -1,26 +1,21 @@
--- ---
import { Icon } from "astro-icon/components"; import { Icon } from "astro-icon/components";
import { createTranslator, t } from '../../i18n';
const tl = createTranslator(Astro.currentLocale);
--- ---
<div id="programs" class="bg-[#BEA48D] py-16 lg:py-32"> <div id="programs" class="bg-[#BEA48D] py-16 lg:py-32">
<div class="container mx-auto"> <div class="container mx-auto">
<h4 class="text-lg text-center font-bold uppercase text-[#003421]">Programas y Área de Acción</h4> <h4 class="text-lg text-center uppercase text-[#003421]">{tl("formation.subtitle")}</h4>
<h2 class="text-3xl lg:text-5xl text-center font-bold font-secondary my-8 text-[#003421]">Formación y Capacitación</h2> <h2 class="text-3xl lg:text-5xl text-center font-bold font-secondary my-8 text-[#003421]">{tl("formation.title")}</h2>
<p class="text-lg w-2/3 mx-auto mb-20 text-[#003421] text-justify">El <strong>Centro del Reino de Paz y Justicia (CRPJ) desarrolla cursos, seminarios y programas de formación</strong> dirigidos a líderes, profesionales, referentes institucionales y actores con responsabilidad pública.</p> <p class="text-lg w-2/3 mx-auto mb-20 text-[#003421] text-justify" set:html={tl("formation.text")}></p>
<div class="grid xl:grid-cols-3 text-[#003421] gap-20"> <div class="grid xl:grid-cols-3 text-[#003421] gap-20">
<div class="bg-[#EBE5D0] p-12 relative pb-40"> <div class="bg-[#EBE5D0] p-12 relative pb-40">
<Icon name="ph:arrow-circle-down-thin" class="text-6xl mb-12 text-[#003421]" /> <Icon name="ph:arrow-circle-down-thin" class="text-6xl mb-12 text-[#003421]" />
<h4 class="text-[#003421] font-bold text-2xl mb-12">Area de Formación</h4> <h4 class="text-[#003421] text-2xl mb-12">{tl("formation.area.title")}</h4>
<p class="text-lg"> <ul class="text-lg list-disc font-normal list-inside leading-8" set:html={tl("formation.area.text")}></ul>
<ul class="text-lg list-disc list-inside">
<li class="mb-8">Liderazgo ético y estratégico.</li>
<li class="mb-8">Mediación y resolución responsable de conflictos.</li>
<li class="mb-8">Fe, valores y acción en el espacio público.</li>
<li class="mb-8">Análisis de escenarios internacionales y desafíos contemporáneos.</li>
<li class="mb-8">Fundamentos para la construcción de una paz sólida y duradera, con eje en Israel.</li>
</ul>
</p>
<div class="bottom-12 right-12 absolute"> <div class="bottom-12 right-12 absolute">
<Icon name="icon_formation_1" class="text-8xl text-[#003421]" /> <Icon name="icon_formation_1" class="text-8xl text-[#003421]" />
@ -29,9 +24,9 @@ import { Icon } from "astro-icon/components";
<div class="bg-[#EBE5D0] text-[#003421] p-12 relative pb-40"> <div class="bg-[#EBE5D0] text-[#003421] p-12 relative pb-40">
<Icon name="ph:arrow-circle-down-thin" class="text-6xl mb-12 text-[#003421]" /> <Icon name="ph:arrow-circle-down-thin" class="text-6xl mb-12 text-[#003421]" />
<h4 class="text-[#003421] font-bold text-2xl mb-12">Asesoría y Consultoría</h4> <h4 class="text-[#003421] text-2xl mb-12">{tl("formation.consulting.title")}</h4>
<p class="text-lg">Acompañamiento estratégico a organizaciones e instituciones que buscan diseñar e implementar iniciativas de impacto, alineadas con valores claros, objetivos transversales y una visión de largo plazo.</p> <p class="text-lg font-normal">{tl("formation.consulting.text")}</p>
<div class="bottom-12 right-12 absolute"> <div class="bottom-12 right-12 absolute">
<Icon name="icon_formation_2" class="text-8xl" /> <Icon name="icon_formation_2" class="text-8xl" />
@ -40,9 +35,9 @@ import { Icon } from "astro-icon/components";
<div class="bg-[#EBE5D0] text-[#003421] p-12 relative pb-40"> <div class="bg-[#EBE5D0] text-[#003421] p-12 relative pb-40">
<Icon name="ph:arrow-circle-down-thin" class="text-6xl mb-12 text-[#003421]" /> <Icon name="ph:arrow-circle-down-thin" class="text-6xl mb-12 text-[#003421]" />
<h4 class="text-[#003421] font-bold text-2xl mb-12">Proyectos de Acción</h4> <h4 class="text-[#003421] text-2xl mb-12" set:html={tl("formation.action.title")}></h4>
<p class="text-lg">Desarrollo de iniciativas concretas en distintos territorios, orientadas a la formación, la prevención de conflictos y el fortalecimiento de liderazgos locales con visión internacional.</p> <p class="text-lg font-normal" set:html={tl("formation.action.text")}></p>
<div class="bottom-12 right-12 absolute"> <div class="bottom-12 right-12 absolute">
<Icon name="icon_formation_3" class="text-8xl" /> <Icon name="icon_formation_3" class="text-8xl" />

View File

@ -1,6 +1,9 @@
--- ---
import GridCard from "../cards/GridCard.astro" import GridCard from "../cards/GridCard.astro"
import { createTranslator } from '../../i18n';
const tl = createTranslator(Astro.currentLocale);
const cards = [ const cards = [
{ {
type: 'text', type: 'text',
@ -52,7 +55,7 @@ const cards = [
<div class="container mx-auto"> <div class="container mx-auto">
<div class="grid grid-cols-2 md:grid-cols-4"> <div class="grid grid-cols-2 md:grid-cols-4">
{ {
cards.map(card =>( tl("grid.cards").map((card) => (
<GridCard props={card} /> <GridCard props={card} />
)) ))
} }

View File

@ -1,21 +1,23 @@
--- ---
const { title, text, initTitle, colorText, bgColor } = Astro.props; const { colorText, bgColor } = Astro.props;
import { createTranslator } from '../../i18n';
const tl = createTranslator(Astro.currentLocale);
--- ---
<div id="somos" class="container mx-auto"> <div id="somos" class="container mx-auto">
<div class={`grid grid-cols-1 md:grid-cols-3 ${bgColor}`}> <div class="grid grid-cols-1 md:grid-cols-3 bg-white">
<div class="bg-[#22523F] col-span-1 flex items-center justify-center bg-[url('/src/assets/mid-logo-2.webp')] bg-no-repeat bg-right md:bg-left"> <div class="bg-[#22523F] col-span-1 flex items-center justify-center bg-[url('/src/assets/mid-logo-2.webp')] bg-no-repeat bg-right md:bg-left">
<img src="/img/logo-metalico.webp" alt="Imagen de identidad del Centro del Reino de Paz y Justicia (CRPJ)" class="w-1/4 my-8 md:w-1/2" /> <img src="/img/logo-metalico.webp" alt="" class="w-1/4 my-8 md:w-1/2" />
</div>
<div class={`flex flex-col text-tertiary col-span-2 gap-8 py-8 md:py-16 lg:py-24 px-8 sm:px-16 lg:px-32`}>
<h2 class="font-primary text-xl md:text-3xl font-bold">{tl("identity.initTitle")}</h2>
<h2 class="font-secondary text-3xl md:text-5xl font-bold">{tl("identity.title")}</h2>
<div class="prose-p:text-lg prose-p:font-primary prose-p:leading-relaxed prose-p:text-justify prose-p:mb-4">
<p set:html={tl("identity.body")} />
</div> </div>
<div class={`flex flex-col ${colorText} col-span-2 gap-8 py-8 md:py-16 lg:py-24 px-8 sm:px-16 lg:px-32`}>
<h2 class="font-primary text-xl md:text-3xl font-bold">{initTitle}</h2>
<h2 class="font-secondary text-3xl md:text-5xl font-bold">{title}</h2>
<p class="text-lg font-primary leading-relaxed text-justify"><b>El Centro del Reino de Paz y Justicia</b> es una organización internacional conformada por <b>miles de voluntarios distribuidos en numerosos países</b>, que actúan de manera coordinada bajo el liderazgo y la guía del <b>Dr. José Benjamín Pérez Matos</b>, único referente del Centro del Reino de Paz y Justicia (CRPJ).</p>
<p class="text-lg font-primary leading-relaxed text-justify">El Centro cuenta con <strong>presencia activa en distintos continentes</strong>, articulando personas, líderes, comunidades e instituciones que comparten una visión común: llevar los valores del Reino al espacio público y afrontar, con responsabilidad y convicción, los desafíos que atraviesa el mundo actual.</p>
<p class="text-lg font-primary leading-relaxed text-justify">El Centro del Reino de Paz y Justicia (CRPJ) nace con una misión clara: <b>tender puentes entre la fe y la acción en el ámbito público</b>, integrando reflexión espiritual, formación intelectual y compromiso práctico, con el objetivo de preparar el camino hacia una nueva era, marcada por un orden más justo, una paz verdadera y un mundo mejor, conforme a la visión profética.</p>
<p class="text-lg font-primary leading-relaxed text-justify">Su mirada es estratégica, internacional y orientada al futuro, consciente de los conflictos emergentes, las tensiones culturales, los desafíos geopolíticos y la necesidad de liderazgos sólidos capaces de actuar con claridad en tiempos de transformación global.</p>
</div> </div>
</div> </div>

View File

@ -1,41 +1,31 @@
--- ---
import { infoboxes } from "../../data/content/infosection.js";
import BoxContainer from "../BoxContainer.astro"; import BoxContainer from "../BoxContainer.astro";
import { Icon } from "astro-icon/components"; import { Icon } from "astro-icon/components";
const { bgColor, titleColor, textColor, title, text } = Astro.props; import { createTranslator } from '../../i18n';
const tl = createTranslator(Astro.currentLocale);
--- ---
<div class="container mx-auto"> <div class="container mx-auto">
<div class="grid grid-cols-1 sm:grid-cols-1 lg:grid-cols-3"> <div class="grid grid-cols-1 sm:grid-cols-1 lg:grid-cols-3">
{ infoboxes.map((box) => ( { tl("info.boxes").map((box) => (
<BoxContainer props={box} /> <BoxContainer props={box} />
))} ))}
</div> </div>
<div class="grid grid-cols-1 lg:grid-cols-3 h-auto bg-white w-full"> <div class="grid grid-cols-1 lg:grid-cols-3 h-auto bg-white w-full">
<div class="lg:col-span-2 row-span-2 p-8 lg:p-24 text-tertiary grid gap-8 "> <div class="lg:col-span-2 row-span-2 p-8 lg:p-24 text-tertiary grid gap-8 ">
<div class="grid gap-8"> <div class="grid gap-8">
<h2 class="font-secondary text-2xl lg:text-5xl font-bold">{title}</h2> <h2 class="font-secondary text-2xl lg:text-5xl font-bold">{tl('info.title')}</h2>
<Icon name="ph:minus" class="text-tertiary text-4xl" /> <Icon name="ph:minus" class="text-tertiary text-4xl" />
<p class="text-lg text-justify">El <b>Centro del Reino de Paz y Justicia (CRPJ)</b> es una organización de alcance <b>internacional dedicada a la formación, el diálogo estratégico y la acción pública, orientada a promover la justicia y la paz</b> conforme a los valores eternos proclamados por los profetas, con un compromiso explícito y permanente con Israel y su lugar central en la historia y el destino del mundo.</p> <p class="text-lg text-justify" set:html={tl("info.copy1")} />
</div> </div>
<div class="grid grid-cols-1 lg:grid-cols-2 gap-8 text-lg leading-relaxed text-justify"> <div class="grid grid-cols-1 lg:grid-cols-2 gap-8 text-lg leading-relaxed text-justify">
<p>El Centro del Reino de Paz y Justicia (CRPJ) desarrolla iniciativas educativas, espacios de reflexión profunda y acciones concretas en el ámbito público, integrando principios espirituales, responsabilidad institucional y liderazgo ético. Su labor se inscribe en el campo de la diplomacia pública, entendida como una herramienta legítima para influir en la conversación global, fortalecer vínculos entre naciones y defender valores fundamentales frente a los desafíos del presente y del futuro.</p> <p set:html={tl("info.copy_column1")} />
<p>La paz no es concebida como una consigna abstracta ni como un ideal ingenuo, sino como el resultado de decisiones firmes, liderazgo con valores y compromiso sostenido con propósitos claros, que reconocen el rol insustituible de Israel en la construcción de un orden justo y estable para toda la humanidad.</p> <p set:html={tl("info.copy_column2")} />
</div> </div>
</div> </div>
<div class="col-span-1 h-full bg-[#CBA16A]"> <div class="col-span-1 h-full bg-[#CBA16A]">
<BoxContainer props={{ <BoxContainer props={tl("info.endbox")} />
title: 'Misión, Visión y Valores Institucionales.',
buttonLabel: 'LEER MÁS',
hasButton: true,
bgImage: 'https://ik.imagekit.io/crpy/tr:o-20/dove.webp?updatedAt=1770966556158',
hasIcon: true,
url:'#mision',
bgColor: '#CBA16A',
titleColor: 'text-tertiary',
sizeTitle: 'text-2xl',
}} />
</div> </div>
<div class="col-span-1 py-38 lg:px-24 bg-[#21523F]"> <div class="col-span-1 py-38 lg:px-24 bg-[#21523F]">
<img src="/img/logo-ligth.webp" alt="Logo del Centro del Reino de Paz y Justicia (CRPJ)" class="w-1/3 lg:w-100 mx-auto"> <img src="/img/logo-ligth.webp" alt="Logo del Centro del Reino de Paz y Justicia (CRPJ)" class="w-1/3 lg:w-100 mx-auto">

View File

@ -1,14 +1,21 @@
--- ---
import { getCollection, getEntry } from "astro:content"; import { getCollection, getEntry } from "astro:content";
import NewsCard from "../cards/NewsCard.astro"; import NewsCard from "../cards/NewsCard.astro";
const newsItems = await getCollection("news"); const newsItems = await getCollection("news", (post)=>{
//Filter by locale
const currentLocale = Astro.currentLocale;
return post.data.locale == currentLocale
});
import { createTranslator, t } from '../../i18n';
const tl = createTranslator(Astro.currentLocale);
--- ---
<div id="news" class="bg-[#22523F] py-12 lg:py-20"> <div id="news" class="bg-[#22523F] py-12 lg:py-20">
<div class="container mx-auto"> <div class="container mx-auto">
<div class="flex flex-col lg:w-1/2 items-center mx-auto py-8"> <div class="flex flex-col lg:w-1/2 items-center mx-auto py-8">
<h4 class="text-white text-2xl uppercase font-bold text-center mb-4 font-primary">Noticias</h4> <h4 class="text-white text-2xl uppercase font-bold text-center mb-4 font-primary">{tl("news.title")}</h4>
<h2 class="text-white text-3xl lg:text-5xl font-bold text-center font-secondary mb-4">Actualidad institucional y proyección internacional</h2> <h2 class="text-white text-3xl lg:text-5xl font-bold text-center font-secondary mb-4">{tl("news.text")}</h2>
<p class="text-white text-xl text-center">Esta sección reúne las principales actividades, reconocimientos y acciones del Centro del Reino de Paz y Justicia y de su fundador.</p> <p class="text-white text-xl text-center">{tl("news.text2")}</p>
</div> </div>

View File

@ -1,16 +1,18 @@
--- ---
import { createTranslator, t } from '../../i18n';
const tl = createTranslator(Astro.currentLocale);
--- ---
<div class="bg-[#CBA16A] py-12 lg:py-20"> <div class="bg-[#CBA16A] py-12 lg:py-20">
<div class="container mx-auto"> <div class="container mx-auto">
<h4 class="text-tertiary text-2xl uppercase font-bold text-center mb-8 font-primary">Participa | Colabora</h4> <h4 class="text-tertiary text-2xl uppercase font-bold text-center mb-8 font-primary">{tl("participate.title")}</h4>
<h2 class="text-tertiary text-3xl lg:text-5xl font-bold lg:text-center font-secondary mb-4 text-center">Sumarse es asumir un compromiso con propósito</h2> <h2 class="text-tertiary text-3xl lg:text-5xl font-bold lg:text-center font-secondary mb-4 text-center">{tl("participate.text")}</h2>
<p class="text-tertiary pt-10 text-2xl px-12 text-center">La labor del <strong>Centro del Reino de Paz y Justicia</strong> se fortalece mediante la participación de personas e instituciones alineadas con sus valores y objetivos generales. Formas de participar:</p> <p class="text-tertiary font-normal pt-10 text-2xl px-12 text-center" set:html={tl("participate.text2")} />
<div class="grid md:grid-cols-2 w-3/4 justify-center mx-auto gap-20 my-20"> <div class="grid md:grid-cols-2 w-3/4 justify-center mx-auto gap-20 my-20">
<div class="border-1 border-white text-lg p-8 text-tertiary"> <div class="border-1 border-white text-lg p-8 text-tertiary">
<h5 class="font-bold mb-6">Voluntariado:</h5> <h5 class="font-bold mb-6">{tl("participate.box1.title")}</h5>
<p>colaboración en proyectos formativos, institucionales o internacionales.</p> <p class="font-normal">{tl("participate.box1.text")}</p>
</div> </div>
<!-- <div class="border-1 border-white p-8 text-tertiary"> <!-- <div class="border-1 border-white p-8 text-tertiary">
@ -19,12 +21,12 @@
</div> --> </div> -->
<div class="border-1 border-white p-8 text-tertiary"> <div class="border-1 border-white p-8 text-tertiary">
<h5 class="font-bold text-lg mb-6">Difusión institucional:</h5> <h5 class="font-bold text-lg mb-6">{tl("participate.box2.title")}</h5>
<p>amplificación de la misión y acciones del Centro del Reino de Paz y Justicia (CRPJ) en espacios públicos.</p> <p class="font-normal">{tl("participate.box2.text")}</p>
</div> </div>
</div> </div>
<div class="flex justify-center"> <div class="flex justify-center">
<p class="text-tertiary text-xl px-12 font-bold mx-auto">La paz se construye mediante decisiones responsables, liderazgo comprometido y acción sostenida.</p> <p class="text-tertiary text-xl px-12 font-bold mx-auto">{tl("participate.text3")}</p>
</div> </div>
</div> </div>

View File

@ -1,28 +1,20 @@
--- ---
import { infoboxes } from "../../data/content/infosection.js";
import GridCard from "../cards/GridCard.astro"; import GridCard from "../cards/GridCard.astro";
import BoxContainer from "../BoxContainer.astro"; import BoxContainer from "../BoxContainer.astro";
import { Icon } from "astro-icon/components"; import { Icon } from "astro-icon/components";
const { bgColor, titleColor, textColor, title, text } = Astro.props; import { createTranslator, t } from '../../i18n';
const tl = createTranslator(Astro.currentLocale);
--- ---
<div class="container mx-auto"> <div class="container mx-auto">
<div id="projection" class="grid lg:grid-cols-3 bg-white w-full"> <div id="projection" class="grid lg:grid-cols-3 bg-white w-full">
<div class="row-span-2 lg:col-span-2 p-12 lg:p-24 text-tertiary"> <div class="row-span-2 lg:col-span-2 p-12 lg:p-24">
<div class="flex flex-col gap-5 md:text-lg text-justify"> <div class="flex flex-col gap-5 md:text-lg text-tertiary text-justify prose-p:mb-4 prose-ul:text-tertiary prose-p:text-tertiary prose-strong:text-tertiary prose-strong:font-bold ">
<h2 class="font-secondary text-3xl lg:text-5xl font-bold">{title}</h2> <h2 class="font-secondary text-3xl lg:text-5xl font-bold">{tl('projection.title')}</h2>
<Icon name="ph:minus" class="text-tertiary text-4xl" /> <Icon name="ph:minus" class="text-tertiary text-4xl" />
<p class="text-lg">El <strong>Centro del Reino de Paz y Justicia</strong> lleva adelante una activa política de diplomacia pública, entendida como la construcción consciente de vínculos éticos, culturales y estratégicos entre pueblos, instituciones y liderazgos globales.</p> <div class="prose" set:html={tl('projection.text')}></div>
<p><strong>A través de encuentros, giras internacionales, foros y relaciones institucionales, el Centro del Reino de Paz y Justicia (CRPJ) impulsa:</strong></p>
<ul class="list-disc list-inside text-lg">
<li>El diálogo interreligioso e intercultural desde valores firmes.</li>
<li>La defensa de la justicia y la paz en escenarios internacionales.</li>
<li>La vinculación con líderes políticos, académicos y sociales.</li>
<li>El <strong>apoyo claro y permanente al pueblo judío y al Estado de Israel</strong>, reconociendo su centralidad histórica, espiritual y geopolítica.</li>
</ul>
<p>Esta proyección internacional posiciona al Centro del Reino de Paz y Justicia (CRPJ) como un <strong>actor relevante en el debate global sobre el futuro del mundo</strong>, la estabilidad internacional y la vigencia de los valores proféticos.</p>
</div> </div>
<div class="grid xl:grid-cols-2 gap-16 mt-12"> <div class="grid xl:grid-cols-2 gap-16 mt-12">
<GridCard props={{ <GridCard props={{
@ -30,7 +22,7 @@ const { bgColor, titleColor, textColor, title, text } = Astro.props;
bgColor: '#BEA48D', bgColor: '#BEA48D',
icon: 'ph:minus', icon: 'ph:minus',
image: 'https://ik.imagekit.io/crpy/JBP-MBM.webp', image: 'https://ik.imagekit.io/crpy/JBP-MBM.webp',
text: 'La vinculación con líderes políticos, académicos y sociales.' text: tl("projection.card1")
}} /> }} />
<GridCard props={{ <GridCard props={{
@ -38,7 +30,7 @@ const { bgColor, titleColor, textColor, title, text } = Astro.props;
type: 'imgText', type: 'imgText',
image: 'https://ik.imagekit.io/crpy/pueblo-judio.webp', image: 'https://ik.imagekit.io/crpy/pueblo-judio.webp',
icon: 'ph:minus', icon: 'ph:minus',
text: 'Apoyo claro y permanente al pueblo judío y al Estado de Israel' text: tl("projection.card2")
}} /> }} />
</div> </div>
</div> </div>

View File

@ -3,8 +3,9 @@ import { glob, file } from 'astro/loaders';
import { z } from 'astro/zod'; import { z } from 'astro/zod';
const news = defineCollection({ const news = defineCollection({
loader: glob({ pattern: "**/*.md", base: "./src/data/news" }), loader: glob({ pattern: "**/*.md", base: "./src/content/news" }),
schema: z.object({ schema: z.object({
locale: z.string(),
title: z.string(), title: z.string(),
date: z.date(), date: z.date(),
place: z.string().optional(), place: z.string().optional(),

11
src/content/news/en/1.md Normal file
View File

@ -0,0 +1,11 @@
---
locale: en
title: 'A news article in english'
date: 2025-09-18
slug: 2025-09-18-a-news-article-in-english
place: The basement
city: Cota
country: CO
thumbnail: https://ik.imagekit.io/crpy/tr:w-600/Condecoracion-JBP-congreso-18-sep-2025_-15-scaled.jpg
---
Some dummy news content in here

View File

@ -1,4 +1,5 @@
--- ---
locale: es
title: 'La democracia se vistió de gala: el Congreso de Colombia honra al Dr. José Benjamín Pérez Matos' title: 'La democracia se vistió de gala: el Congreso de Colombia honra al Dr. José Benjamín Pérez Matos'
date: 2025-09-18 date: 2025-09-18
slug: 2025-09-18-la-democracia-se-vistio-de-gala slug: 2025-09-18-la-democracia-se-vistio-de-gala

View File

@ -1,4 +1,5 @@
--- ---
locale: es
title: 'Un nuevo hijo para Jacareí: el homenaje al Dr. José Benjamín Pérez Matos' title: 'Un nuevo hijo para Jacareí: el homenaje al Dr. José Benjamín Pérez Matos'
date: 2025-08-29 date: 2025-08-29
slug: 2025-08-29-un-nuevo-hijo-para-jacarei slug: 2025-08-29-un-nuevo-hijo-para-jacarei

View File

@ -1,4 +1,5 @@
--- ---
locale: es
title: 'Condecoración al Dr. José Benjamín Pérez Matos en el Congreso de Colombia' title: 'Condecoración al Dr. José Benjamín Pérez Matos en el Congreso de Colombia'
date: 2025-05-08 date: 2025-05-08
slug: 2025-05-08-condecoracion-al-dr-jose-benjamin-perez-matos slug: 2025-05-08-condecoracion-al-dr-jose-benjamin-perez-matos

View File

@ -1,4 +1,5 @@
--- ---
locale: es
title: 'San Juan Chamula, corazón indígena, congrega a miles en jornada espiritual' title: 'San Juan Chamula, corazón indígena, congrega a miles en jornada espiritual'
date: 2024-10-04 date: 2024-10-04
slug: 2024-10-04-san-juan-chamula-corazon-indigena slug: 2024-10-04-san-juan-chamula-corazon-indigena

View File

@ -1,54 +0,0 @@
export const infoboxes = [
{
title: 'Diplomacia Pública y\nproyección Internacional',
copy: 'Construcción consciente de vínculos éticos, culturales y estratégicos entre pueblos',
bgColor: '#CBA16A',
sizeTitle: 'text-2xl',
titleColor: 'text-[#1F5349]',
textColor: 'text-[#003421]',
sizeText: 'text-xl',
buttonLabel: 'Leer más',
hasButton: true,
url:'#projection',
hasIcon: true,
// iconColor: 'text-[#1F5349]',
hasInput: false
},
{
title: 'Programas y áreas\nde Acción',
copy: 'Cursos, seminarios y programas de formación dirigidos a líderes, profesionales, referentes.',
bgColor: '#003421',
sizeTitle: 'text-2xl',
titleColor: 'text-[#CBA16A]',
textColor: 'text-[#EDE9D9]',
sizeText: 'text-xl',
buttonLabel: 'Leer más',
bgImage: 'https://ik.imagekit.io/crpy/tr:o-20/dove.webp?updatedAt=1770966556158',
url:'#programs',
hasButton: true,
hasIcon: true,
// iconColor: 'text-[#CBA16A]',
hasInput: false
},
{
title: 'Quiero postularme\ncomo Voluntario',
copy: 'Sumarse es asumir un compromiso con propósito',
bgColor: '#EBE6D2',
sizeTitle: 'text-2xl',
titleColor: 'text-[#CBA16A]',
textColor: 'text-[#003421]',
sizeText: 'text-xl',
buttonLabel: 'Registrarse',
hasButton: false,
hasIcon: true,
// iconColor: 'text-[#CBA16A]',
hasInput: true
},
]
// bg
// heading color
// text color
// hasButton = boolean
// hasInput = boolean
// bgImage

200
src/i18n/en.json Normal file
View File

@ -0,0 +1,200 @@
{
"nav.logo_line1": "Kingdom of Peace",
"nav.logo_line2": "and Justice Center",
"nav.about": "About",
"nav.news": "News",
"nav.programs": "Programs",
"nav.contact": "Contact",
"hero.name": "Dr. José Benjamín Pérez Matos",
"hero.title": "Founding Leader",
"hero.body": "“My lifes dream is to see the prophets vision fulfilled: a world of justice and peace for the good of Israel and all mankind.”",
"info.title": "Building the world dreamed of by the prophets: justice and peace for Israel and all humanity",
"info.register": "Register",
"info.modal.title": "Form available soon",
"info.modal.text": "We are finalizing details to enable the volunteer form. You will be able to complete your registration from this section very soon.",
"carousel.text1": "Peace",
"carousel.text2": "Justice",
"info.boxes": [
{
"title": "Public Diplomacy and International Projection",
"copy": "Conscious construction of ethical, cultural, and strategic links between peoples",
"buttonLabel": "Read More",
"bgColor": "#CBA16A",
"sizeTitle": "text-2xl",
"titleColor": "text-[#1F5349]",
"textColor": "text-[#003421]",
"sizeText": "text-xl",
"hasButton": true,
"url":"#projection",
"hasIcon": true,
"hasInput": false
},
{
"title": "Programs and Areas of Action",
"copy": "Courses, seminars and training programs aimed at leaders, professionals and reference persons.",
"buttonLabel": "Read More",
"bgColor": "#003421",
"sizeTitle": "text-2xl",
"titleColor": "text-[#CBA16A]",
"textColor": "text-[#EDE9D9]",
"sizeText": "text-xl",
"bgImage": "https://ik.imagekit.io/crpy/tr:o-20/dove.webp?updatedAt=1770966556158",
"url": "#programs",
"hasButton": true,
"hasIcon": true,
"hasInput": false
},
{
"title": "I want to apply as a volunteer",
"copy": "Joining means making a commitment with purpose.",
"bgColor": "#EBE6D2",
"buttonLabel": "Register",
"sizeTitle": "text-2xl",
"titleColor": "text-[#CBA16A]",
"textColor": "text-[#003421]",
"sizeText": "text-xl",
"hasButton": false,
"hasIcon": true,
"hasInput": true
}
],
"info.copy1": "The <b>Kingdom of Peace and Justice Center (KPJC)</b>is an international organization dedicated to leadership development, strategic dialogue, and public action, to advance justice and peace according to the eternal values proclaimed by the prophets, with an explicit and unwavering commitment to Israel and its central role in the history and destiny of the world.",
"info.copy_column1": "The (KPJC) develops educational initiatives, spaces for deep reflection and concrete actions in the public sphere, integrating spiritual principles, institutional responsibility, and ethical leadership. Its work is anchored in the field of <strong>public diplomacy</strong>, deemed a legitimate tool to shape the global conversation, strengthen ties between nations, and defend fundamental values against the challenges of the present and the future.",
"info.copy_column2": "Peace is not conceived as an abstract slogan nor a naive ideal, but as the result of resolute decisions, values-driven leadership, and a sustained commitment to clear goals, recognizing Israels irreplaceable role in building a just and stable order for all mankind.",
"info.endbox": {
"title": "Mission, Vision and Institutional Values.",
"buttonLabel": "READ MORE",
"hasButton": true,
"bgImage": "https://ik.imagekit.io/crpy/tr:o-20/dove.webp?updatedAt=1770966556158",
"hasIcon": true,
"url":"#mision",
"bgColor": "#CBA16A",
"titleColor": "text-tertiary",
"sizeTitle": "text-2xl"
},
"carousel1.images": [
{
"image": "https://ik.imagekit.io/crpy/tr:w-1920,h-1080,cm-extract,x-0,y-1730/lonely-african-american-male-praying-with-his-hands-bible-with-his-head-down.webp",
"text": "Justice"
},
{
"image": "https://ik.imagekit.io/crpy/amigos-bn.webp",
"text": "Peace"
}
],
"identity.initTitle": "Institutional Identity",
"identity.title": "Kingdom of Peace and Justice Center",
"identity.body": "<p><b>The Kingdom of Peace and Justice Center</b> is an international organization made up of <b>thousands of volunteers throughout numerous countries</b>, who act in alignment under the leadership and guidance of <b>Dr. José Benjamín Pérez Matos</b>, the sole point of reference of the KPJC.</p><p>The KPJC has an active <strong>presence in different continents</strong>,bringing together individuals, leaders, communities, and institutions that share a common vision: to bring the values of the Kingdom into the public sphere and to meet the challenges that the world is currently facing with responsibility and conviction.</p><p>The KPJC was created with a clear mission: <b>to build bridges between faith and action in the public sphere</b>, integrating spiritual reflection, intellectual development, and actionable commitment, to pave the way for a new era marked by a more just order, true peace, and a better world, according to the prophetic vision.</p><p>Its vision is strategic, international, and forward-looking, mindful of emerging conflicts, cultural tensions, geopolitical challenges, and the need for steadfast leadership capable of acting with clarity in times of global transformation.</p>",
"authority.title": "<strong>Authority</strong> | Kingdom of Peace and Justice Center",
"authority.body": "<strong>Dr. José Benjamín Pérez Matos</strong> is the <strong>founder and sole leader of the Kingdom of Peace and Justice Center.</strong> His leadership combines spiritual vision, intellectual development, public action, and global reach.",
"title1.title": "Dr. José Benjamín Pérez Matos | Trajectory",
"grid.cards" : [
{
"type": "text",
"icon": "ph:arrow-circle-down-thin",
"text": "Administration Of La Gran Carpa Catedral. Puerto Rico",
"bgColor": "#EBE5D0",
"textColor": "#003421"
},
{
"type": "image",
"image": "https://ik.imagekit.io/crpy/grid_image_1.webp"
},
{
"type": "text",
"icon": "ph:arrow-circle-right-thin",
"text": "Active involment in international scenarios.",
"textColor": "#003421",
"bgColor": "#BEA48D"
},
{
"type": "image",
"image": "https://ik.imagekit.io/crpy/grid_image_2.webp"
},
{
"type": "image",
"image": "https://ik.imagekit.io/crpy/grid_image_3.webp"
},
{
"type": "text",
"icon": "ph:arrow-circle-up-thin",
"text": "Biblical teaching applied to the analysis of the contemporary world.",
"textColor": "#EBE5D0",
"bgColor": "#003421"
},
{
"type": "image",
"image": "https://ik.imagekit.io/crpy/grid_image_4.webp"
},
{
"type": "text",
"icon": "ph:arrow-circle-left-thin",
"text": "Public commitment in defense, justice and peace of Israel.",
"textColor": "#003421",
"bgColor": "#EBE5D0"
}
],
"color1.title": "Mission",
"color1.text": "To form leaders, promote educational initiatives, and encourage public actions in pursuit of justice and peace, based on a firm ethical and spiritual foundation, with an explicit commitment to Israel and a responsibility to contribute to the well-being and stability of mankind as a whole.",
"color2.title": "Vision",
"color2.text": "To position ourselves as an international benchmark in leadership development, public diplomacy, and institutional outreach, recognized for our consistency, clear values, and tangible contribution to building a world aligned with the prophetic vision of justice and peace.",
"title2.title": "Institutional Values",
"values.justice.title": "Justice",
"values.justice.text": "An active commitment to a just order grounded in moral principles, respect for human dignity, and the defense of enduring values.",
"values.integrity.title": "Integrity",
"values.integrity.text": "Alignment of thought, word, and deed; institutional transparency and accountability in the public sphere.",
"values.service.title": "Service with purpose",
"values.service.text": "A calling to accompany others and act in pursuit of clear and transcendent goals.",
"values.excellence.title": "Excellence",
"values.excellence.text": "Intellectual rigor, professionalism, and continuous improvement in all work areas.",
"values.dialogue.title": "Strategic dialogue",
"values.dialogue.text": "Openness to exchange across cultures, nations, and faiths, while upholding fundamental convictions and principles.",
"projection.title": "Public Diplomacy and International Projection",
"projection.text": "<p>The <strong>Kingdom of Peace and Justice Center</strong> pursues an active policy of public diplomacy, defined as the intentional building of ethical, cultural, and strategic bonds between peoples, institutions, and global leaders.</p><p><strong>Through meetings, international missions, forums, and institutional relations, the KPJC promotes:</strong></p><p><ul><li>Interreligious and intercultural dialogue based on steadfast values.</li><li>The advocacy of justice and peace in international settings.</li><li>Partnership with political, academic, and social leaders.</li><li>El <strong>Clear and unwavering support for the Jewish people and the State of Israel, recognizing its historical, spiritual, and geopolitical significance.</li></ul></p><p>This global reach positions the KPJC as a stakeholder in the global discourse on the future of the world, international stability, and the enduring relevance of prophetic values.</p>",
"projection.card1": "The connection with political, academic and social leaders.",
"projection.card2": "Clear and permanent support for the Jewish people and the State of Israel",
"formation.title": "Training and Development",
"formation.subtitle": "Programs and Areas of Action",
"formation.text": "The KPJC develops courses, seminars, and training programs for leaders, professionals, institutional management, and public stakeholders.",
"formation.area.title": "Training areas",
"formation.area.text": "<li>Ethical and strategic leadership.</li> <li>MMediation and responsible conflict resolution.</li> <li>Faith, values, and action in the public sphere.</li> <li>Analysis of global scenarios and contemporary challenges.</li> <li>Foundations for building a solid and lasting peace, with a focus on Israel.</li>",
"formation.consulting.title": "Advisory and Consulting",
"formation.consulting.text": "Strategic support for organizations and institutions seeking to design and implement impactful initiatives aligned with clear values, overarching objectives, and a long-term vision.",
"formation.action.title": "Action Projects",
"formation.action.text": "The advancement of tangible initiatives in different areas, focused on development, conflict prevention, and empowerment of local leadership with a global vision.",
"news.title": "News",
"news.text": "Institutional updates and global reach",
"news.text2": "This section brings together the main events, awards, and undertakings of the Kingdom of Peace and Justice Center and its founder.",
"participate.title": "Participate | Collaborate",
"participate.text": "Joining means making a commitment with purpose",
"participate.text2": "The work of KPJC is strengthened by the participation of individuals and institutions aligned with its values and overarching objectives:",
"participate.box1.title": "Volunteering:",
"participate.box1.text": "participation in educational, institutional, or international projects.",
"participate.box2.title": "Institutional outreach:",
"participate.box2.text": "amplify the KPJCs mission and activities in the public sphere.",
"participate.text3": "Peace is built through responsible decisions, committed leadership, and sustained action.",
"footer.title": "Contact",
"footer.subtitle": "Lets connect with vision and purpose",
"footer.text": "The Kingdom of Peace and Justice Center has direct channels for institutional inquiries and participation in international programs and events.",
"footer.text2": "Email: <br> <strong>developer@centrodelreinodepazyjusticia.com</strong><br /> Social media: regular updates on events and announcements.",
"footer.form.name": "Name and Lastname",
"footer.form.mesagge": "Write a message",
"footer.form.button": "Enviar",
"footer.reserved": "©2026 All Rights Reserved. Kingdom of Peace and Justice Center"
}

207
src/i18n/es.json Normal file
View File

@ -0,0 +1,207 @@
{
"nav.logo_line1": "Centro del Reino",
"nav.logo_line2": "de Paz y Justicia",
"nav.about": "Somos",
"nav.news": "Noticias",
"nav.programs": "Programas",
"nav.contact": "Contacto",
"hero.name": "Dr. José Benjamín Pérez Matos",
"hero.title": "Líder fundador",
"hero.body": "“El sueño de mi vida es ver cumplida la visión de los profetas: un mundo de justicia y paz para el bien de Israel y de toda la humanidad.”",
"carousel.text1": "Paz",
"carousel.text2": "Justicia",
"info.title": "Construyendo el mundo soñado por los profetas: justicia y paz para Israel y toda la humanidad",
"info.register": "Registrarse",
"info.modal.title": "Formulario disponible próximamente",
"info.modal.text": "Estamos ultimando detalles para habilitar el formulario de voluntariado. Muy pronto podrás completar tu inscripción desde esta sección.",
"info.boxes": [
{
"title": "Diplomacia Pública y proyección Internacional",
"copy": "Construcción consciente de vínculos éticos, culturales y estratégicos entre pueblos",
"buttonLabel": "Leer más",
"bgColor": "#CBA16A",
"sizeTitle": "text-2xl",
"titleColor": "text-[#1F5349]",
"textColor": "text-[#003421]",
"sizeText": "text-xl",
"hasButton": true,
"url":"#projection",
"hasIcon": true,
"hasInput": false
},
{
"title": "Programas y áreas de Acción",
"copy": "Cursos, seminarios y programas de formación dirigidos a líderes, profesionales, referentes.",
"buttonLabel": "Leer más",
"bgColor": "#003421",
"sizeTitle": "text-2xl",
"titleColor": "text-[#CBA16A]",
"textColor": "text-[#EDE9D9]",
"sizeText": "text-xl",
"bgImage": "https://ik.imagekit.io/crpy/tr:o-20/dove.webp?updatedAt=1770966556158",
"url": "#programs",
"hasButton": true,
"hasIcon": true,
"hasInput": false
},
{
"title": "Quiero postularme como Voluntario",
"copy": "Sumarse es asumir un compromiso con propósito",
"bgColor": "#EBE6D2",
"buttonLabel": "Registrarse",
"sizeTitle": "text-2xl",
"titleColor": "text-[#CBA16A]",
"textColor": "text-[#003421]",
"sizeText": "text-xl",
"hasButton": false,
"hasIcon": true,
"hasInput": true
}
],
"info.copy1": "El <b>Centro del Reino de Paz y Justicia (CRPJ)</b>es una organización de alcance <b>internacional dedicada a la formación, el diálogo estratégico y la acción pública, orientada a promover la justicia y la paz</b> conforme a los valores eternos proclamados por los profetas, con un compromiso explícito y permanente con Israel y su lugar central en la historia y el destino del mundo.",
"info.copy_column1": "El Centro del Reino de Paz y Justicia (CRPJ) desarrolla iniciativas educativas, espacios de reflexión profunda y acciones concretas en el ámbito público, integrando principios espirituales, responsabilidad institucional y liderazgo ético. Su labor se inscribe en el campo de la diplomacia pública, entendida como una herramienta legítima para influir en la conversación global, fortalecer vínculos entre naciones y defender valores fundamentales frente a los desafíos del presente y del futuro.",
"info.copy_column2": "La paz no es concebida como una consigna abstracta ni como un ideal ingenuo, sino como el resultado de decisiones firmes, liderazgo con valores y compromiso sostenido con propósitos claros, que reconocen el rol insustituible de Israel en la construcción de un orden justo y estable para toda la humanidad.",
"info.endbox": {
"title": "Misión, Visión y Valores Institucionales.",
"buttonLabel": "LEER MÁS",
"hasButton": true,
"bgImage": "https://ik.imagekit.io/crpy/tr:o-20/dove.webp?updatedAt=1770966556158",
"hasIcon": true,
"url":"#mision",
"bgColor": "#CBA16A",
"titleColor": "text-tertiary",
"sizeTitle": "text-2xl"
},
"carousel1.images": [
{
"image": "https://ik.imagekit.io/crpy/tr:w-1920,h-1080,cm-extract,x-0,y-1730/lonely-african-american-male-praying-with-his-hands-bible-with-his-head-down.webp",
"text": "Justicia"
},
{
"image": "https://ik.imagekit.io/crpy/amigos-bn.webp",
"text": "Paz"
}
],
"identity.initTitle": "Identidad Institucional",
"identity.title": "El Centro del Reino de Paz y Justicia",
"identity.body": "<p><b>El Centro del Reino de Paz y Justicia</b> es una organización internacional conformada por <b>miles de voluntarios distribuidos en numerosos países</b>, que actúan de manera coordinada bajo el liderazgo y la guía del <b>Dr. José Benjamín Pérez Matos</b>, único referente del Centro del Reino de Paz y Justicia (CRPJ).</p><p>El Centro cuenta con <strong>presencia activa en distintos continentes</strong>, articulando personas, líderes, comunidades e instituciones que comparten una visión común: llevar los valores del Reino al espacio público y afrontar, con responsabilidad y convicción, los desafíos que atraviesa el mundo actual.</p><p>El Centro del Reino de Paz y Justicia (CRPJ) nace con una misión clara: <b>tender puentes entre la fe y la acción en el ámbito público</b>, integrando reflexión espiritual, formación intelectual y compromiso práctico, con el objetivo de preparar el camino hacia una nueva era, marcada por un orden más justo, una paz verdadera y un mundo mejor, conforme a la visión profética.</p><p>Su mirada es estratégica, internacional y orientada al futuro, consciente de los conflictos emergentes, las tensiones culturales, los desafíos geopolíticos y la necesidad de liderazgos sólidos capaces de actuar con claridad en tiempos de transformación global.</p>",
"authority.title": "<strong>Autoridades</strong> | Centro del Reino de Paz y Justicia",
"authority.body": "El <strong>Dr. José Benjamín Pérez Matos</strong> es el <strong>fundador y único referente del Centro del Reino de Paz y Justicia.</strong> Su liderazgo articula visión espiritual, formación intelectual, acción pública y proyección internacional.",
"title1.title": "Dr. José Benjamín Pérez Matos | Trayectoria",
"grid.cards" : [
{
"type": "text",
"icon": "ph:arrow-circle-down-thin",
"text": "Dirección de La Gran Carpa Catedral. Puerto Rico",
"bgColor": "#EBE5D0",
"textColor": "#003421"
},
{
"type": "image",
"image": "https://ik.imagekit.io/crpy/grid_image_1.webp"
},
{
"type": "text",
"icon": "ph:arrow-circle-right-thin",
"text": "Participación activa en escenarios internacionales.",
"textColor": "#003421",
"bgColor": "#BEA48D"
},
{
"type": "image",
"image": "https://ik.imagekit.io/crpy/grid_image_2.webp"
},
{
"type": "image",
"image": "https://ik.imagekit.io/crpy/grid_image_3.webp"
},
{
"type": "text",
"icon": "ph:arrow-circle-up-thin",
"text": "Enseñanza bíblica aplicada al análisis del mundo contemporáneo.",
"textColor": "#EBE5D0",
"bgColor": "#003421"
},
{
"type": "image",
"image": "https://ik.imagekit.io/crpy/grid_image_4.webp"
},
{
"type": "text",
"icon": "ph:arrow-circle-left-thin",
"text": "Compromiso público en la defensa de Israel, la justicia y la paz.",
"textColor": "#003421",
"bgColor": "#EBE5D0"
}
],
"color1.title": "Misión",
"color1.text": "Formar líderes, impulsar iniciativas educativas y promover acciones públicas orientadas a la justicia y la paz, desde una base ética y espiritual firme, con un compromiso explícito con Israel y con la responsabilidad de contribuir al bienestar y la estabilidad de la humanidad en su conjunto.",
"color2.title": "Visión",
"color2.text": "Consolidarse como un actor internacional de referencia en formación de liderazgo, diplomacia pública y proyección institucional, reconocido por su coherencia, su claridad de valores y su contribución concreta a la construcción de un mundo alineado con la visión profética de justicia y paz.",
"title2.title": "Valores Institucionales",
"values.justice.title": "Justicia",
"values.justice.text": "Compromiso activo con un orden justo, basado en principios morales, respeto por la dignidad humana y defensa de valores permanentes.",
"values.integrity.title": "Integridad",
"values.integrity.text": "Coherencia entre pensamiento, palabra y acción; transparencia institucional y responsabilidad en el espacio público.",
"values.service.title": "Servicio",
"values.service.text": "Vocación de acompañamiento y acción orientada a objetivos claros y trascendentes.",
"values.excellence.title": "Excelencia",
"values.excellence.text": "Rigor intelectual, profesionalismo y mejora constante en todas las áreas de trabajo.",
"values.dialogue.title": "Diálogo Estratégico",
"values.dialogue.text": "Apertura al intercambio entre culturas, naciones y credos, sin renunciar a convicciones ni principios fundamentales.",
"projection.title": "Diplomacia Pública y Proyección Internacional",
"projection.text": "<p>El <strong>Centro del Reino de Paz y Justicia</strong> lleva adelante una activa política de diplomacia pública, entendida como la construcción consciente de vínculos éticos, culturales y estratégicos entre pueblos, instituciones y liderazgos globales.</p><p><strong>A través de encuentros, giras internacionales, foros y relaciones institucionales, el Centro del Reino de Paz y Justicia (CRPJ) impulsa:</strong></p><p><ul><li>El diálogo interreligioso e intercultural desde valores firmes.</li><li>La defensa de la justicia y la paz en escenarios internacionales.</li><li>La vinculación con líderes políticos, académicos y sociales.</li><li>El <strong>apoyo claro y permanente al pueblo judío y al Estado de Israel</strong>, reconociendo su centralidad histórica, espiritual y geopolítica.</li></ul></p><p>Esta proyección internacional posiciona al Centro del Reino de Paz y Justicia (CRPJ) como un <strong>actor relevante en el debate global sobre el futuro del mundo</strong>, la estabilidad internacional y la vigencia de los valores proféticos.</p>",
"projection.card1": "La vinculación con líderes políticos, académicos y sociales.",
"projection.card2": "Apoyo claro y permanente al pueblo judío y al Estado de Israel.",
"formation.title": "Formación y Capacitación",
"formation.subtitle": "Programas y Área de Acción",
"formation.text": "El <strong>Centro del Reino de Paz y Justicia (CRPJ) desarrolla cursos, seminarios y programas de formación</strong> dirigidos a líderes, profesionales, referentes institucionales y actores con responsabilidad pública.",
"formation.area.title": "Area de Formación",
"formation.area.text": "<li>Liderazgo ético y estratégico.</li> <li>Mediación y resolución responsable de conflictos.</li> <li>Fe, valores y acción en el espacio público.</li> <li>Análisis de escenarios internacionales y desafíos contemporáneos.</li> <li>Fundamentos para la construcción de una paz sólida y duradera, con eje en Israel.</li>",
"formation.consulting.title": "Asesoría y Consultoría",
"formation.consulting.text": "Acompañamiento estratégico a organizaciones e instituciones que buscan diseñar e implementar iniciativas de impacto, alineadas con valores claros, objetivos transversales y una visión de largo plazo.",
"formation.action.title": "Proyectos de Acción",
"formation.action.text": "Desarrollo de iniciativas concretas en distintos territorios, orientadas a la formación, la prevención de conflictos y el fortalecimiento de liderazgos locales con visión internacional.",
"news.title": "Noticias",
"news.text": "Actualidad institucional y proyección internacional",
"news.text2": "Esta sección reúne las principales actividades, reconocimientos y acciones del Centro del Reino de Paz y Justicia y de su fundador.",
"participate.title": "Participa | Colabora",
"participate.text": "Sumarse es asumir un compromiso con propósito",
"participate.text2": "La labor del <strong>Centro del Reino de Paz y Justicia</strong> se fortalece mediante la participación de personas e instituciones alineadas con sus valores y objetivos generales. Formas de participar:",
"participate.box1.title": "Voluntariado:",
"participate.box1.text": "colaboración en proyectos formativos, institucionales o internacionales.",
"participate.box2.title": "Difusión institucional:",
"participate.box2.text": "amplificación de la misión y acciones del Centro del Reino de Paz y Justicia (CRPJ) en espacios públicos.",
"participate.text3": "La paz se construye mediante decisiones responsables, liderazgo comprometido y acción sostenida.",
"footer.title": "Contacto",
"footer.subtitle": "Conectemos con visión y propósito ",
"footer.text": "El <strong>Centro del Reino de Paz y Justicia</strong> dispone de canales directos para consultas institucionales, participación en programas y actividades internacionales. ",
"footer.text2": "Correo electrónico:<br> <strong>developer@centrodelreinodepazyjusticia.com</strong><br /> Redes sociales: actualizaciones permanentes sobre actividades y convocatorias.",
"footer.form.name": "Nombre y Apellido",
"footer.form.mesagge": "Escriba su mensaje",
"footer.form.button": "Enviar",
"footer.reserved": "©2026. Todos los Derechos Reservados. Centro del Reino de Paz y Justicia"
}

8
src/i18n/fr.json Normal file
View File

@ -0,0 +1,8 @@
{
"nav.logo_line1": "Centro del Reino",
"nav.logo_line2": "de Paz y Justicia",
"nav.about": "À propos",
"nav.news": "Nouvelles",
"nav.programs": "Programmes",
"nav.contact": "Contactez"
}

8
src/i18n/he.json Normal file
View File

@ -0,0 +1,8 @@
{
"nav.logo_line1": "Centro del Reino",
"nav.logo_line2": "de Paz y Justicia",
"nav.about": "À propos",
"nav.news": "Nouvelles",
"nav.programs": "Programmes",
"nav.contact": "Contactez"
}

39
src/i18n/index.ts Normal file
View File

@ -0,0 +1,39 @@
import es from "./es.json";
import en from "./en.json";
import fr from "./fr.json";
import he from "./he.json";
import uk from "./uk.json";
import pt from "./pt.json";
const dictionaries = { es, en, fr, he, uk, pt } as const;
export type Locale = keyof typeof dictionaries;
// Optional: type-safe keys from the default dictionary
export type I18nKey = keyof typeof es;
export function t(
locale: string | undefined,
key: I18nKey,
vars?: Record<string, string | number>
) {
const l = (locale in dictionaries ? locale : "es") as Locale;
// fallback chain: requested locale -> default locale -> key itself
const template =
dictionaries[l][key] ??
dictionaries.es[key] ??
String(key);
if (!vars) return template;
// simple interpolation: "Hello {name}"
return template.replace(/\{(\w+)\}/g, (_, name) =>
vars[name] === undefined ? `{${name}}` : String(vars[name])
);
}
export function createTranslator(locale: string | undefined) {
return function tl(key: I18nKey, vars?: Record<string, string | number>) {
return t(locale, key, vars);
};
}

8
src/i18n/pt.json Normal file
View File

@ -0,0 +1,8 @@
{
"nav.logo_line1": "Centro del Reino",
"nav.logo_line2": "de Paz y Justicia",
"nav.about": "Somos",
"nav.news": "Noticias",
"nav.programs": "Programas",
"nav.contact": "Contacto"
}

8
src/i18n/uk.json Normal file
View File

@ -0,0 +1,8 @@
{
"nav.logo_line1": "Centro del Reino",
"nav.logo_line2": "de Paz y Justicia",
"nav.about": "Somos",
"nav.news": "Noticias",
"nav.programs": "Programas",
"nav.contact": "Contacto"
}

View File

@ -1,8 +1,13 @@
--- ---
import Header from "../components/Header.astro";
import BaseHead from "../components/BaseHead.astro"; import BaseHead from "../components/BaseHead.astro";
import Footer from "../components/Footer.astro"; import Footer from "../components/Footer.astro";
import "../styles/global.css"; import "../styles/global.css";
import '@fontsource/poppins/100.css';
import '@fontsource/poppins/400.css';
import '@fontsource/poppins/500.css';
import '@fontsource/poppins/700.css';
import '@fontsource-variable/kameron';
const { title } = Astro.props; const { title } = Astro.props;
--- ---

View File

@ -0,0 +1,96 @@
---
import "../../styles/global.css";
import MainLayout from "../../layouts/MainLayout.astro";
import HeroHome from "../../components/HeroHome.astro";
import NewsSection from "../../components/section/NewsSection.astro";
import ParticipateSection from "../../components/section/ParticipateSection.astro";
import CarouselSection from "../../components/section/CarouselSection.astro";
import InfoSection from "../../components/section/InfoSection.astro";
import IdentitySection from "../../components/section/IdentitySection.astro";
import AuthoritySection from "../../components/section/AuthoritySection.astro";
import ProjectionSection from "../../components/section/ProjectionSection.astro";
import ColorSection from "../../components/section/ColorSection.astro";
import TitleSection from "../../components/section/TitleSection.astro";
import GridSection from "../../components/section/GridSection.astro";
import ColumnsSection from "../../components/section/ColumnsSection.astro";
import FormationSection from "../../components/section/FormationSection.astro";
import FooterSection from "../../components/section/FooterSection.astro";
const { locale } = Astro.params;
import { createTranslator } from '../../i18n';
const tl = createTranslator(Astro.currentLocale);
const carouselImages2 = [
{
image: "https://ik.imagekit.io/crpy/tr:w-1920,h-1080,cm-extract,x-0,y-1730/lonely-african-american-male-praying-with-his-hands-bible-with-his-head-down.webp",
text: tl("carousel.text1"),
},
{
image: "https://ik.imagekit.io/crpy/amigos-bn.webp",
text: tl("carousel.text2"),
},
];
const carouselImages3 = [
{
image: "https://ik.imagekit.io/crpy/tr:w-1920,h-1080,cm-extract,x-0,y-1730/lonely-african-american-male-praying-with-his-hands-bible-with-his-head-down.webp",
text: tl("carousel.text1"),
},
{
image: "https://ik.imagekit.io/crpy/amigos-bn.webp",
text: tl("carousel.text2"),
},
];
---
<MainLayout>
<HeroHome />
<InfoSection bgColor="bg-white" title="Construyendo el mundo soñado por los profetas: justicia y paz para Israel y toda la humanidad" />
<CarouselSection class="object-cover" images={carouselImages3} />
<IdentitySection bgColor="bg-white" colorText="text-[#003421]" initTitle="Identidad Institucional" title="El Centro del Reino de Paz y Justicia" />
<AuthoritySection bgColor="bg-[#003421]" titleColor="text-colorSecondary" descColor="text-[#EBE6D2]" />
<TitleSection title={tl("title1.title")} />
<GridSection />
<ColorSection
id="mision"
bgColor="#22523F"
titleColor="text-[#ffffff]"
textColor="text-[#CBA16A] font-bold"
title={tl("color1.title")}
text={tl("color1.text")} />
<ColorSection
bgColor="#CBA16A"
titleColor="text-[#ffffff]"
textColor="text-[#ffffff] font-bold"
title={tl("color2.title")}
text={tl("color2.text")} />
<TitleSection title={tl("title2.title")} />
<ColumnsSection />
<ProjectionSection title={tl("projection.title")} />
<FormationSection />
<CarouselSection images={carouselImages2} />
<NewsSection />
<ParticipateSection />
<FooterSection />
</MainLayout>

View File

@ -0,0 +1,54 @@
---
import { YouTube } from 'astro-embed';
import MainLayout from "../../../layouts/MainLayout.astro";
import Header from "../../../components/Header.astro";
import CarouselSection from "../../../components/section/CarouselSection.astro";
import { Image } from "@unpic/astro";
import { getCollection, render } from "astro:content";
import TitleSection from "../../../components/section/TitleSection.astro";
import FooterSection from '../../../components/section/FooterSection.astro';
export const prerender = true;
// 1. Generate a new path for every collection entry
export async function getStaticPaths() {
const posts = await getCollection("news");
return posts.map((post) => ({
params: { id: post.id, locale: post.data.locale },
props: { post },
}));
}
// 2. For your template, you can get the entry directly from the prop
const { post } = Astro.props;
const { Content } = await render(post);
---
<MainLayout>
<div class="container mx-auto py-16">
<Header />
</div>
<TitleSection title={post.data.title} />
<div class="container mx-auto">
{post.data.gallery && <CarouselSection images={post.data.gallery} />}
<div class="grid md:grid-cols-10">
<div class="md:col-span-7 bg-white p-8 md:p-20 prose-p:mb-4 text-[#003421]">
<Content />
</div>
<div class="md:col-span-3 bg-tertiary md:sticky top-0 h-fit">
{ post.data.youtube && (
<YouTube id={post.data.youtube} />
)}
{post.data.gallery && (
post.data.gallery.map(galleryImage => (
<Image src={galleryImage.image} alt={galleryImage.text} />
))
)}
</div>
</div>
</div>
</MainLayout>
<FooterSection />

View File

@ -11,7 +11,6 @@ import IdentitySection from "../components/section/IdentitySection.astro";
import AuthoritySection from "../components/section/AuthoritySection.astro"; import AuthoritySection from "../components/section/AuthoritySection.astro";
import ProjectionSection from "../components/section/ProjectionSection.astro"; import ProjectionSection from "../components/section/ProjectionSection.astro";
import { infoboxes } from "../data/content/infosection.js";
import ColorSection from "../components/section/ColorSection.astro"; import ColorSection from "../components/section/ColorSection.astro";
import TitleSection from "../components/section/TitleSection.astro"; import TitleSection from "../components/section/TitleSection.astro";
import GridSection from "../components/section/GridSection.astro"; import GridSection from "../components/section/GridSection.astro";
@ -19,16 +18,8 @@ import ColumnsSection from "../components/section/ColumnsSection.astro";
import FormationSection from "../components/section/FormationSection.astro"; import FormationSection from "../components/section/FormationSection.astro";
import FooterSection from "../components/section/FooterSection.astro"; import FooterSection from "../components/section/FooterSection.astro";
const carouselImages2 = [ import { createTranslator } from '../i18n';
{ const tl = createTranslator(Astro.currentLocale);
image: "https://ik.imagekit.io/crpy/tr:w-1920,h-1080,cm-extract,x-0,y-1730/lonely-african-american-male-praying-with-his-hands-bible-with-his-head-down.webp",
text: "Justicia",
},
{
image: "https://ik.imagekit.io/crpy/amigos-bn.webp",
text: "Paz",
},
];
const carouselImages3 = [ const carouselImages3 = [
{ {
@ -45,13 +36,13 @@ const carouselImages3 = [
<MainLayout> <MainLayout>
<HeroHome /> <HeroHome />
<InfoSection bgColor="bg-white" title="Construyendo el mundo soñado por los profetas: justicia y paz para Israel y toda la humanidad" data={infoboxes} /> <InfoSection />
<CarouselSection class="object-cover" images={carouselImages3} /> <CarouselSection images={tl("carousel1.images")} />
<IdentitySection bgColor="bg-white" colorText="text-[#003421]" initTitle="Identidad Institucional" title="El Centro del Reino de Paz y Justicia" /> <IdentitySection />
<AuthoritySection bgColor="bg-[#003421]" titleColor="text-colorSecondary" descColor="text-[#EBE6D2]" /> <AuthoritySection />
<TitleSection title="Dr. José Benjamín Pérez Matos | Trayectoria" /> <TitleSection title="Dr. José Benjamín Pérez Matos | Trayectoria" />
@ -76,11 +67,11 @@ const carouselImages3 = [
<ColumnsSection /> <ColumnsSection />
<ProjectionSection title="Diplomacia Pública y Proyección Internacional" /> <ProjectionSection />
<FormationSection /> <FormationSection />
<CarouselSection images={carouselImages2} /> <CarouselSection images={tl("carousel1.images")} />
<NewsSection /> <NewsSection />

View File

@ -4,7 +4,7 @@
@theme { @theme {
--font-primary: "Poppins", sans-serif; --font-primary: "Poppins", sans-serif;
--font-secondary: "Rockwell", sans-serif; --font-secondary: "Kameron Variable", sans-serif;
--color-colorPrimary: #EBE6D2; --color-colorPrimary: #EBE6D2;
--color-colorSecondary: #CBA16A; --color-colorSecondary: #CBA16A;