Skip to content

Commit c8ebeb5

Browse files
Merge pull request #13 from anderson-camacho/feature/template-field-guidance-and-ui-languages
Improve editor UI, localization, SEO, and feedback page
2 parents 42543a1 + 90d221b commit c8ebeb5

4 files changed

Lines changed: 266 additions & 4 deletions

File tree

src/components/Layout.astro

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,9 @@ const structuredDataItems = [
149149
<a href={`/${locale}/saved-signatures/`}>{t.savedLibrary}</a>
150150
<a href={`/${locale}/email-installation-guide/`}>{t.guide}</a>
151151
<a href={`/${locale}/faq/`}>{t.faq}</a>
152+
<a href={`/${locale}/suggest-improvement/`}
153+
>{t.suggestImprovement}</a
154+
>
152155
</nav>
153156
<div class="header-donate-shell">
154157
<div

src/i18n/dictionaries.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ const es = {
4141
guide: "Guía de instalación",
4242
templates: "Plantillas",
4343
faq: "Preguntas frecuentes",
44+
suggestImprovement: "Sugerir mejora",
4445
privacyPage: "Privacidad",
4546
donationThanksTitle: "Gracias por tu donación",
4647
donationThanksCopy:
@@ -104,6 +105,7 @@ const en: Dictionary = {
104105
guide: "Installation guide",
105106
templates: "Templates",
106107
faq: "FAQ",
108+
suggestImprovement: "Suggest improvement",
107109
privacyPage: "Privacy",
108110
donationThanksTitle: "Thanks for your donation",
109111
donationThanksCopy:
@@ -169,6 +171,7 @@ const ptBR: Dictionary = {
169171
guide: "Guia de instalação",
170172
templates: "Modelos",
171173
faq: "Perguntas frequentes",
174+
suggestImprovement: "Sugerir melhoria",
172175
privacyPage: "Privacidade",
173176
form: "Personalize sua assinatura",
174177
preview: "Pré-visualização",
@@ -197,6 +200,7 @@ const fr: Dictionary = {
197200
guide: "Guide d'installation",
198201
templates: "Modèles",
199202
faq: "Questions fréquentes",
203+
suggestImprovement: "Suggérer une amélioration",
200204
privacyPage: "Confidentialité",
201205
form: "Personnalisez votre signature",
202206
preview: "Aperçu",
@@ -225,6 +229,7 @@ const de: Dictionary = {
225229
guide: "Installationsanleitung",
226230
templates: "Vorlagen",
227231
faq: "Häufige Fragen",
232+
suggestImprovement: "Verbesserung vorschlagen",
228233
privacyPage: "Datenschutz",
229234
form: "Signatur anpassen",
230235
preview: "Vorschau",
@@ -255,6 +260,7 @@ const it: Dictionary = {
255260
guide: "Guida di installazione",
256261
templates: "Modelli",
257262
faq: "FAQ",
263+
suggestImprovement: "Suggerisci miglioramento",
258264
privacyPage: "Privacy",
259265
form: "Personalizza la tua firma",
260266
preview: "Anteprima",
@@ -283,6 +289,7 @@ const ja: Dictionary = {
283289
guide: "導入ガイド",
284290
templates: "テンプレート",
285291
faq: "よくある質問",
292+
suggestImprovement: "改善を提案",
286293
privacyPage: "プライバシー",
287294
form: "署名をカスタマイズ",
288295
preview: "プレビュー",
@@ -311,6 +318,7 @@ const ko: Dictionary = {
311318
guide: "설치 가이드",
312319
templates: "템플릿",
313320
faq: "자주 묻는 질문",
321+
suggestImprovement: "개선 제안",
314322
privacyPage: "개인정보",
315323
form: "서명 맞춤 설정",
316324
preview: "미리보기",
@@ -338,6 +346,7 @@ const ar: Dictionary = {
338346
guide: "دليل التثبيت",
339347
templates: "القوالب",
340348
faq: "الأسئلة الشائعة",
349+
suggestImprovement: "اقتراح تحسين",
341350
privacyPage: "الخصوصية",
342351
form: "خصّص توقيعك",
343352
preview: "المعاينة",
@@ -365,6 +374,7 @@ const hi: Dictionary = {
365374
guide: "इंस्टॉलेशन गाइड",
366375
templates: "टेम्पलेट्स",
367376
faq: "अक्सर पूछे जाने वाले सवाल",
377+
suggestImprovement: "सुधार सुझाएं",
368378
privacyPage: "गोपनीयता",
369379
form: "अपना सिग्नेचर कस्टमाइज़ करें",
370380
preview: "प्रीव्यू",
@@ -663,6 +673,7 @@ const zhCN: Dictionary = {
663673
guide: "安装指南",
664674
templates: "模板",
665675
faq: "常见问题",
676+
suggestImprovement: "建议改进",
666677
privacyPage: "隐私",
667678
form: "自定义签名",
668679
preview: "预览",
@@ -716,6 +727,7 @@ const ru: Dictionary = {
716727
guide: "Руководство по установке",
717728
templates: "Шаблоны",
718729
faq: "Частые вопросы",
730+
suggestImprovement: "Предложить улучшение",
719731
privacyPage: "Конфиденциальность",
720732
form: "Настройте подпись",
721733
preview: "Предпросмотр",

src/pages/[locale]/[page].astro

Lines changed: 223 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@ import { dictionary, locales, type Locale } from "../../i18n/dictionaries";
44
import {
55
breadcrumbJsonLd,
66
faqJsonLd,
7+
siteRepository,
78
type SeoPageKind,
89
} from "../../seo/metadata";
910
1011
type StaticPageKey =
1112
| "privacy"
1213
| "email-installation-guide"
1314
| "faq"
15+
| "suggest-improvement"
1416
| "support-open-source"
1517
| "donations";
1618
@@ -19,6 +21,17 @@ type BasicContent = {
1921
paragraphs: string[];
2022
};
2123
24+
type ImprovementContent = {
25+
title: string;
26+
intro: string;
27+
emailTitle: string;
28+
emailCopy: string;
29+
emailAction: string;
30+
issueTitle: string;
31+
issueCopy: string;
32+
issueAction: string;
33+
};
34+
2235
type GuideSection = {
2336
title: string;
2437
audience: string;
@@ -43,6 +56,7 @@ export function getStaticPaths() {
4356
"privacy",
4457
"email-installation-guide",
4558
"faq",
59+
"suggest-improvement",
4660
"support-open-source",
4761
"donations",
4862
];
@@ -59,7 +73,7 @@ const { locale, page } = Astro.props as { locale: Locale; page: StaticPageKey };
5973
const t = dictionary(locale);
6074
6175
type BasicPages = Record<
62-
Exclude<StaticPageKey, "email-installation-guide">,
76+
Exclude<StaticPageKey, "email-installation-guide" | "suggest-improvement">,
6377
BasicContent
6478
>;
6579
@@ -514,6 +528,176 @@ const basicPageCopy: Record<Locale, BasicPages> = {
514528
515529
const basicContents = basicPageCopy[locale] ?? basicPageCopy.es;
516530
531+
const improvementEmail = "anderson.camacho.palacios@gmail.com";
532+
const improvementIssueUrl = `${siteRepository}/issues/new?title=${encodeURIComponent(
533+
"Sugerencia de mejora",
534+
)}&body=${encodeURIComponent(
535+
"Describe la mejora que te gustaria ver, por que seria util y cualquier detalle de contexto.",
536+
)}`;
537+
538+
const improvementPageCopy: Record<Locale, ImprovementContent> = {
539+
es: {
540+
title: "Sugerir una mejora",
541+
intro:
542+
"Si necesitas una mejora, encontraste algo que puede ser mas claro o quieres pedir una nueva funcion, puedes enviar la recomendacion por correo o crear un issue en GitHub.",
543+
emailTitle: "Enviar correo electronico",
544+
emailCopy:
545+
"Escribe tu recomendacion a este correo. Puedes incluir capturas, el navegador que usas y una explicacion corta de lo que esperas mejorar.",
546+
emailAction: "Enviar correo",
547+
issueTitle: "Crear issue en GitHub",
548+
issueCopy:
549+
"Si prefieres dejar la mejora documentada publicamente, abre un issue en el repositorio del proyecto.",
550+
issueAction: "Abrir issue",
551+
},
552+
en: {
553+
title: "Suggest an improvement",
554+
intro:
555+
"If you need an improvement, found something that could be clearer, or want to request a new feature, you can send the recommendation by email or create a GitHub issue.",
556+
emailTitle: "Send an email",
557+
emailCopy:
558+
"Send your recommendation to this email. You can include screenshots, your browser, and a short explanation of what should improve.",
559+
emailAction: "Send email",
560+
issueTitle: "Create a GitHub issue",
561+
issueCopy:
562+
"If you prefer to document the improvement publicly, open an issue in the project repository.",
563+
issueAction: "Open issue",
564+
},
565+
"pt-BR": {
566+
title: "Sugerir uma melhoria",
567+
intro:
568+
"Se voce precisa de uma melhoria, encontrou algo que pode ficar mais claro ou quer pedir uma nova funcao, envie a recomendacao por email ou crie uma issue no GitHub.",
569+
emailTitle: "Enviar email",
570+
emailCopy:
571+
"Envie sua recomendacao para este email. Inclua capturas, navegador e uma explicacao curta do que deveria melhorar.",
572+
emailAction: "Enviar email",
573+
issueTitle: "Criar issue no GitHub",
574+
issueCopy:
575+
"Se preferir documentar a melhoria publicamente, abra uma issue no repositorio do projeto.",
576+
issueAction: "Abrir issue",
577+
},
578+
fr: {
579+
title: "Suggerer une amelioration",
580+
intro:
581+
"Si vous avez besoin d'une amelioration, si quelque chose peut etre plus clair ou si vous souhaitez demander une nouvelle fonction, envoyez la recommandation par email ou creez une issue GitHub.",
582+
emailTitle: "Envoyer un email",
583+
emailCopy:
584+
"Envoyez votre recommandation a cet email. Vous pouvez inclure des captures, votre navigateur et une courte explication.",
585+
emailAction: "Envoyer un email",
586+
issueTitle: "Creer une issue GitHub",
587+
issueCopy:
588+
"Si vous preferez documenter l'amelioration publiquement, ouvrez une issue dans le depot du projet.",
589+
issueAction: "Ouvrir une issue",
590+
},
591+
de: {
592+
title: "Verbesserung vorschlagen",
593+
intro:
594+
"Wenn Sie eine Verbesserung benoetigen, etwas klarer sein koennte oder Sie eine neue Funktion wuenschen, senden Sie die Empfehlung per E-Mail oder erstellen Sie ein GitHub-Issue.",
595+
emailTitle: "E-Mail senden",
596+
emailCopy:
597+
"Senden Sie Ihre Empfehlung an diese Adresse. Screenshots, Browser und eine kurze Erklaerung helfen sehr.",
598+
emailAction: "E-Mail senden",
599+
issueTitle: "GitHub-Issue erstellen",
600+
issueCopy:
601+
"Wenn die Verbesserung oeffentlich dokumentiert werden soll, oeffnen Sie ein Issue im Projekt-Repository.",
602+
issueAction: "Issue oeffnen",
603+
},
604+
it: {
605+
title: "Suggerisci un miglioramento",
606+
intro:
607+
"Se serve un miglioramento, qualcosa puo essere piu chiaro o vuoi chiedere una nuova funzione, invia la raccomandazione via email o crea una issue su GitHub.",
608+
emailTitle: "Invia email",
609+
emailCopy:
610+
"Invia la raccomandazione a questa email. Puoi includere screenshot, browser e una breve spiegazione.",
611+
emailAction: "Invia email",
612+
issueTitle: "Crea issue su GitHub",
613+
issueCopy:
614+
"Se preferisci documentare pubblicamente il miglioramento, apri una issue nel repository del progetto.",
615+
issueAction: "Apri issue",
616+
},
617+
ja: {
618+
title: "改善を提案",
619+
intro:
620+
"改善してほしい点、分かりにくい点、新しい機能の希望があれば、メールまたはGitHub Issueで送れます。",
621+
emailTitle: "メールを送信",
622+
emailCopy:
623+
"このメールアドレスへ提案を送ってください。スクリーンショット、ブラウザ、改善内容の短い説明があると助かります。",
624+
emailAction: "メールを送る",
625+
issueTitle: "GitHub Issueを作成",
626+
issueCopy:
627+
"改善内容を公開で残したい場合は、プロジェクトのリポジトリでIssueを開いてください。",
628+
issueAction: "Issueを開く",
629+
},
630+
ko: {
631+
title: "개선 제안",
632+
intro:
633+
"개선이 필요하거나 더 명확해질 부분, 새 기능 요청이 있다면 이메일로 보내거나 GitHub issue를 만들 수 있습니다.",
634+
emailTitle: "이메일 보내기",
635+
emailCopy:
636+
"이 이메일로 제안을 보내 주세요. 스크린샷, 브라우저, 개선이 필요한 내용을 짧게 적어 주면 좋습니다.",
637+
emailAction: "이메일 보내기",
638+
issueTitle: "GitHub issue 만들기",
639+
issueCopy:
640+
"개선 내용을 공개적으로 남기고 싶다면 프로젝트 저장소에 issue를 열어 주세요.",
641+
issueAction: "Issue 열기",
642+
},
643+
ar: {
644+
title: "اقتراح تحسين",
645+
intro:
646+
"إذا كنت تحتاج إلى تحسين أو وجدت شيئا يمكن توضيحه أو تريد طلب ميزة جديدة، يمكنك إرسال التوصية بالبريد الإلكتروني أو إنشاء issue في GitHub.",
647+
emailTitle: "إرسال بريد إلكتروني",
648+
emailCopy:
649+
"أرسل توصيتك إلى هذا البريد. يمكنك إرفاق لقطات شاشة واسم المتصفح وشرح قصير للتحسين المطلوب.",
650+
emailAction: "إرسال بريد",
651+
issueTitle: "إنشاء issue في GitHub",
652+
issueCopy: "إذا كنت تفضل توثيق التحسين علنا، افتح issue في مستودع المشروع.",
653+
issueAction: "فتح issue",
654+
},
655+
hi: {
656+
title: "सुधार सुझाएं",
657+
intro:
658+
"अगर आपको कोई सुधार चाहिए, कुछ और स्पष्ट होना चाहिए, या नई सुविधा का अनुरोध करना है, तो आप ईमेल भेज सकते हैं या GitHub issue बना सकते हैं।",
659+
emailTitle: "ईमेल भेजें",
660+
emailCopy:
661+
"अपना सुझाव इस ईमेल पर भेजें। स्क्रीनशॉट, ब्राउज़र और सुधार की छोटी व्याख्या शामिल कर सकते हैं।",
662+
emailAction: "ईमेल भेजें",
663+
issueTitle: "GitHub issue बनाएं",
664+
issueCopy:
665+
"यदि आप सुधार को सार्वजनिक रूप से दर्ज करना चाहते हैं, तो प्रोजेक्ट repository में issue खोलें।",
666+
issueAction: "Issue खोलें",
667+
},
668+
"zh-CN": {
669+
title: "建议改进",
670+
intro:
671+
"如果你需要改进、发现某些内容可以更清楚,或想请求新功能,可以发送电子邮件或创建 GitHub issue。",
672+
emailTitle: "发送电子邮件",
673+
emailCopy:
674+
"请把建议发送到这个邮箱。可以附上截图、浏览器信息,以及需要改进内容的简短说明。",
675+
emailAction: "发送邮件",
676+
issueTitle: "创建 GitHub issue",
677+
issueCopy: "如果你希望公开记录这个改进,请在项目仓库中创建 issue。",
678+
issueAction: "打开 issue",
679+
},
680+
ru: {
681+
title: "Предложить улучшение",
682+
intro:
683+
"Если нужно улучшение, что-то можно сделать понятнее или вы хотите запросить новую функцию, отправьте рекомендацию по email или создайте issue в GitHub.",
684+
emailTitle: "Отправить email",
685+
emailCopy:
686+
"Отправьте рекомендацию на этот адрес. Можно добавить скриншоты, браузер и короткое описание улучшения.",
687+
emailAction: "Отправить email",
688+
issueTitle: "Создать GitHub issue",
689+
issueCopy:
690+
"Если хотите публично зафиксировать улучшение, откройте issue в репозитории проекта.",
691+
issueAction: "Открыть issue",
692+
},
693+
};
694+
695+
const improvementContent =
696+
improvementPageCopy[locale] ?? improvementPageCopy.es;
697+
const improvementMailto = `mailto:${improvementEmail}?subject=${encodeURIComponent(
698+
improvementContent.title,
699+
)}&body=${encodeURIComponent(`${improvementContent.intro}\n\n`)}`;
700+
517701
type GuideBasics = {
518702
title: string;
519703
intro: string;
@@ -1105,17 +1289,22 @@ const installationGuide: InstallationGuide =
11051289
);
11061290
11071291
const isInstallationGuide = page === "email-installation-guide";
1108-
const basicPage = isInstallationGuide ? null : basicContents[page];
1292+
const isImprovementPage = page === "suggest-improvement";
1293+
const basicPage =
1294+
isInstallationGuide || isImprovementPage ? null : basicContents[page];
11091295
const pageKindByStaticPage: Record<StaticPageKey, SeoPageKind> = {
11101296
privacy: "privacy",
11111297
"email-installation-guide": "guide",
11121298
faq: "faq",
1299+
"suggest-improvement": "support",
11131300
"support-open-source": "support",
11141301
donations: "donations",
11151302
};
11161303
const pageTitle = isInstallationGuide
11171304
? installationGuide.title
1118-
: basicPage!.title;
1305+
: isImprovementPage
1306+
? improvementContent.title
1307+
: basicPage!.title;
11191308
const pageKind = pageKindByStaticPage[page];
11201309
const structuredData = [
11211310
breadcrumbJsonLd(locale, [
@@ -1201,6 +1390,37 @@ const structuredData = [
12011390
))}
12021391
</section>
12031392
</article>
1393+
) : isImprovementPage ? (
1394+
<article class="content-card improvement-card">
1395+
<h1>{improvementContent.title}</h1>
1396+
<p class="guide-intro">{improvementContent.intro}</p>
1397+
1398+
<div class="improvement-options">
1399+
<section class="improvement-option">
1400+
<h2>{improvementContent.emailTitle}</h2>
1401+
<p>{improvementContent.emailCopy}</p>
1402+
<p>
1403+
<a href={`mailto:${improvementEmail}`}>{improvementEmail}</a>
1404+
</p>
1405+
<a class="support-pill" href={improvementMailto}>
1406+
{improvementContent.emailAction}
1407+
</a>
1408+
</section>
1409+
1410+
<section class="improvement-option">
1411+
<h2>{improvementContent.issueTitle}</h2>
1412+
<p>{improvementContent.issueCopy}</p>
1413+
<a
1414+
class="support-pill tertiary"
1415+
href={improvementIssueUrl}
1416+
target="_blank"
1417+
rel="noreferrer"
1418+
>
1419+
{improvementContent.issueAction}
1420+
</a>
1421+
</section>
1422+
</div>
1423+
</article>
12041424
) : (
12051425
<article class="content-card">
12061426
<h1>{basicPage!.title}</h1>

0 commit comments

Comments
 (0)