@mdguggenbichler/slugbase-core 0.0.39 → 0.0.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/frontend/src/locales/de.json +3 -0
- package/frontend/src/locales/en.json +3 -0
- package/frontend/src/locales/es.json +3 -0
- package/frontend/src/locales/fr.json +3 -0
- package/frontend/src/locales/it.json +3 -0
- package/frontend/src/locales/ja.json +3 -0
- package/frontend/src/locales/nl.json +3 -0
- package/frontend/src/locales/pl.json +3 -0
- package/frontend/src/locales/pt.json +3 -0
- package/frontend/src/locales/ru.json +3 -0
- package/frontend/src/locales/zh.json +3 -0
- package/frontend/src/pages/SearchEngineGuide.tsx +204 -101
- package/package.json +1 -1
|
@@ -635,6 +635,9 @@
|
|
|
635
635
|
"searchEngineGuide": {
|
|
636
636
|
"title": "Anleitung zur Einrichtung benutzerdefinierter Suchmaschinen",
|
|
637
637
|
"description": "So richtest du eine Suchmaschine im Browser ein und greifst schnell auf deine Lesezeichen zu",
|
|
638
|
+
"tabChromium": "Chromium-basiert",
|
|
639
|
+
"tabFirefox": "Firefox",
|
|
640
|
+
"stepTitle": "Schritt {{n}}",
|
|
638
641
|
"howItWorks": "Wie es funktioniert",
|
|
639
642
|
"howItWorksDescription": "Mit einer Suchmaschine tippst du in der Adresszeile z. B. 'go' plus Slug und landest direkt beim Lesezeichen.",
|
|
640
643
|
"yourSearchUrl": "Ihre Such-URL",
|
|
@@ -675,6 +675,9 @@
|
|
|
675
675
|
"searchEngineGuide": {
|
|
676
676
|
"title": "Custom Search Engine Setup Guide",
|
|
677
677
|
"description": "Learn how to set up a custom search engine in your browser to quickly access your bookmarks",
|
|
678
|
+
"tabChromium": "Chromium-based",
|
|
679
|
+
"tabFirefox": "Firefox",
|
|
680
|
+
"stepTitle": "Step {{n}}",
|
|
678
681
|
"howItWorks": "How It Works",
|
|
679
682
|
"howItWorksDescription": "By setting up a custom search engine, you can type a keyword (like 'go') followed by a bookmark slug in your browser's address bar to instantly navigate to that bookmark.",
|
|
680
683
|
"yourSearchUrl": "Your Search URL",
|
|
@@ -636,6 +636,9 @@
|
|
|
636
636
|
"searchEngineGuide": {
|
|
637
637
|
"title": "Guía de configuración de motor de búsqueda personalizado",
|
|
638
638
|
"description": "Aprende cómo configurar un motor de búsqueda personalizado en tu navegador para acceder rápidamente a tus marcadores",
|
|
639
|
+
"tabChromium": "Basado en Chromium",
|
|
640
|
+
"tabFirefox": "Firefox",
|
|
641
|
+
"stepTitle": "Paso {{n}}",
|
|
639
642
|
"howItWorks": "Cómo funciona",
|
|
640
643
|
"howItWorksDescription": "Al configurar un motor de búsqueda personalizado, puedes escribir una palabra clave (como 'go') seguida de un slug de marcador en la barra de direcciones de tu navegador para navegar instantáneamente a ese marcador.",
|
|
641
644
|
"yourSearchUrl": "Tu URL de búsqueda",
|
|
@@ -459,6 +459,9 @@
|
|
|
459
459
|
"searchEngineGuide": {
|
|
460
460
|
"title": "Guide de configuration du moteur de recherche personnalisé",
|
|
461
461
|
"description": "Apprenez à configurer un moteur de recherche personnalisé dans votre navigateur pour accéder rapidement à vos favoris",
|
|
462
|
+
"tabChromium": "Basé sur Chromium",
|
|
463
|
+
"tabFirefox": "Firefox",
|
|
464
|
+
"stepTitle": "Étape {{n}}",
|
|
462
465
|
"howItWorks": "Comment ça fonctionne",
|
|
463
466
|
"howItWorksDescription": "En configurant un moteur de recherche personnalisé, vous pouvez taper un mot-clé (comme 'go') suivi d'un slug de favori dans la barre d'adresse de votre navigateur pour naviguer instantanément vers ce favori.",
|
|
464
467
|
"yourSearchUrl": "Votre URL de recherche",
|
|
@@ -444,6 +444,9 @@
|
|
|
444
444
|
"searchEngineGuide": {
|
|
445
445
|
"title": "Guida alla configurazione del motore di ricerca personalizzato",
|
|
446
446
|
"description": "Scopri come configurare un motore di ricerca personalizzato nel tuo browser per accedere rapidamente ai tuoi segnalibri",
|
|
447
|
+
"tabChromium": "Basato su Chromium",
|
|
448
|
+
"tabFirefox": "Firefox",
|
|
449
|
+
"stepTitle": "Passo {{n}}",
|
|
447
450
|
"howItWorks": "Come funziona",
|
|
448
451
|
"howItWorksDescription": "Configurando un motore di ricerca personalizzato, puoi digitare una parola chiave (come 'go') seguita da uno slug di segnalibro nella barra degli indirizzi del browser per navigare istantaneamente a quel segnalibro.",
|
|
449
452
|
"yourSearchUrl": "La tua URL di ricerca",
|
|
@@ -444,6 +444,9 @@
|
|
|
444
444
|
"searchEngineGuide": {
|
|
445
445
|
"title": "カスタム検索エンジン設定ガイド",
|
|
446
446
|
"description": "ブラウザでカスタム検索エンジンを設定してブックマークにすばやくアクセスする方法を学ぶ",
|
|
447
|
+
"tabChromium": "Chromiumベース",
|
|
448
|
+
"tabFirefox": "Firefox",
|
|
449
|
+
"stepTitle": "ステップ {{n}}",
|
|
447
450
|
"howItWorks": "仕組み",
|
|
448
451
|
"howItWorksDescription": "カスタム検索エンジンを設定すると、ブラウザのアドレスバーにキーワード(例:'go')に続いてブックマークスラッグを入力することで、そのブックマークに瞬時に移動できます。",
|
|
449
452
|
"yourSearchUrl": "検索URL",
|
|
@@ -459,6 +459,9 @@
|
|
|
459
459
|
"searchEngineGuide": {
|
|
460
460
|
"title": "Gids voor aangepaste zoekmachine-instelling",
|
|
461
461
|
"description": "Leer hoe je een aangepaste zoekmachine in je browser instelt om snel toegang te krijgen tot je bladwijzers",
|
|
462
|
+
"tabChromium": "Chromium-gebaseerd",
|
|
463
|
+
"tabFirefox": "Firefox",
|
|
464
|
+
"stepTitle": "Stap {{n}}",
|
|
462
465
|
"howItWorks": "Hoe het werkt",
|
|
463
466
|
"howItWorksDescription": "Door een aangepaste zoekmachine in te stellen, kun je een trefwoord (zoals 'go') gevolgd door een bladwijzerslug in de adresbalk van je browser typen om direct naar die bladwijzer te navigeren.",
|
|
464
467
|
"yourSearchUrl": "Je zoek-URL",
|
|
@@ -444,6 +444,9 @@
|
|
|
444
444
|
"searchEngineGuide": {
|
|
445
445
|
"title": "Przewodnik konfiguracji niestandardowej wyszukiwarki",
|
|
446
446
|
"description": "Dowiedz się, jak skonfigurować niestandardową wyszukiwarkę w przeglądarce, aby szybko uzyskać dostęp do zakładek",
|
|
447
|
+
"tabChromium": "Na bazie Chromium",
|
|
448
|
+
"tabFirefox": "Firefox",
|
|
449
|
+
"stepTitle": "Krok {{n}}",
|
|
447
450
|
"howItWorks": "Jak to działa",
|
|
448
451
|
"howItWorksDescription": "Konfigurując niestandardową wyszukiwarkę, możesz wpisać słowo kluczowe (np. 'go'), a następnie slug zakładki w pasku adresu przeglądarki, aby natychmiast przejść do tej zakładki.",
|
|
449
452
|
"yourSearchUrl": "Twój URL wyszukiwania",
|
|
@@ -444,6 +444,9 @@
|
|
|
444
444
|
"searchEngineGuide": {
|
|
445
445
|
"title": "Guia de configuração de mecanismo de pesquisa personalizado",
|
|
446
446
|
"description": "Aprenda como configurar um mecanismo de pesquisa personalizado no seu navegador para acessar rapidamente seus favoritos",
|
|
447
|
+
"tabChromium": "Baseado em Chromium",
|
|
448
|
+
"tabFirefox": "Firefox",
|
|
449
|
+
"stepTitle": "Passo {{n}}",
|
|
447
450
|
"howItWorks": "Como funciona",
|
|
448
451
|
"howItWorksDescription": "Ao configurar um mecanismo de pesquisa personalizado, você pode digitar uma palavra-chave (como 'go') seguida de um slug de favorito na barra de endereços do navegador para navegar instantaneamente para esse favorito.",
|
|
449
452
|
"yourSearchUrl": "Sua URL de pesquisa",
|
|
@@ -444,6 +444,9 @@
|
|
|
444
444
|
"searchEngineGuide": {
|
|
445
445
|
"title": "Руководство по настройке пользовательской поисковой системы",
|
|
446
446
|
"description": "Узнайте, как настроить пользовательскую поисковую систему в браузере для быстрого доступа к закладкам",
|
|
447
|
+
"tabChromium": "На базе Chromium",
|
|
448
|
+
"tabFirefox": "Firefox",
|
|
449
|
+
"stepTitle": "Шаг {{n}}",
|
|
447
450
|
"howItWorks": "Как это работает",
|
|
448
451
|
"howItWorksDescription": "Настроив пользовательскую поисковую систему, вы можете ввести ключевое слово (например, 'go'), за которым следует slug закладки в адресной строке браузера, чтобы мгновенно перейти к этой закладке.",
|
|
449
452
|
"yourSearchUrl": "Ваш URL для поиска",
|
|
@@ -444,6 +444,9 @@
|
|
|
444
444
|
"searchEngineGuide": {
|
|
445
445
|
"title": "自定义搜索引擎设置指南",
|
|
446
446
|
"description": "了解如何在浏览器中设置自定义搜索引擎以快速访问您的书签",
|
|
447
|
+
"tabChromium": "基于 Chromium",
|
|
448
|
+
"tabFirefox": "Firefox",
|
|
449
|
+
"stepTitle": "步骤 {{n}}",
|
|
447
450
|
"howItWorks": "工作原理",
|
|
448
451
|
"howItWorksDescription": "通过设置自定义搜索引擎,您可以在浏览器的地址栏中输入关键字(如'go'),后跟书签别名,即可立即导航到该书签。",
|
|
449
452
|
"yourSearchUrl": "您的搜索URL",
|
|
@@ -1,136 +1,239 @@
|
|
|
1
|
+
import { useState } from 'react';
|
|
1
2
|
import { useTranslation } from 'react-i18next';
|
|
2
|
-
import { ArrowLeft,
|
|
3
|
+
import { ArrowLeft, Code } from 'lucide-react';
|
|
3
4
|
import { Link } from 'react-router-dom';
|
|
4
5
|
import Button from '../components/ui/Button';
|
|
6
|
+
import { PageHeader } from '../components/PageHeader';
|
|
7
|
+
import { ScopeSegmentedControl } from '../components/ScopeSegmentedControl';
|
|
8
|
+
import { Card, CardContent, CardHeader, CardTitle } from '../components/ui/card';
|
|
5
9
|
import { useAppConfig } from '../contexts/AppConfigContext';
|
|
6
10
|
|
|
7
11
|
export default function SearchEngineGuide() {
|
|
8
12
|
const { t } = useTranslation();
|
|
9
13
|
const { pathPrefixForLinks } = useAppConfig();
|
|
10
14
|
const prefix = (pathPrefixForLinks || '').replace(/\/+/g, '/') || '';
|
|
15
|
+
const [activeTab, setActiveTab] = useState<'chromium' | 'firefox'>('chromium');
|
|
11
16
|
|
|
12
17
|
const baseUrl = window.location.origin;
|
|
13
18
|
const goPath = '/go/%s';
|
|
14
19
|
const searchUrl = `${baseUrl}${goPath}`;
|
|
15
20
|
|
|
21
|
+
const tabOptions = [
|
|
22
|
+
{ value: 'chromium', label: t('searchEngineGuide.tabChromium') },
|
|
23
|
+
{ value: 'firefox', label: t('searchEngineGuide.tabFirefox') },
|
|
24
|
+
];
|
|
25
|
+
|
|
16
26
|
return (
|
|
17
27
|
<div className="space-y-6 max-w-4xl mx-auto">
|
|
18
|
-
{/* Header */}
|
|
19
|
-
<div className="flex
|
|
28
|
+
{/* Header: back + PageHeader with tabs */}
|
|
29
|
+
<div className="flex flex-col gap-4">
|
|
20
30
|
<Link to={`${prefix}/bookmarks`}>
|
|
21
31
|
<Button variant="ghost" size="sm" icon={ArrowLeft}>
|
|
22
32
|
{t('common.back')}
|
|
23
33
|
</Button>
|
|
24
34
|
</Link>
|
|
25
|
-
<
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
35
|
+
<PageHeader
|
|
36
|
+
title={t('searchEngineGuide.title')}
|
|
37
|
+
subtitle={t('searchEngineGuide.description')}
|
|
38
|
+
actions={
|
|
39
|
+
<ScopeSegmentedControl
|
|
40
|
+
value={activeTab}
|
|
41
|
+
onChange={(v) => setActiveTab(v as 'chromium' | 'firefox')}
|
|
42
|
+
options={tabOptions}
|
|
43
|
+
ariaLabel={t('searchEngineGuide.title')}
|
|
44
|
+
/>
|
|
45
|
+
}
|
|
46
|
+
/>
|
|
34
47
|
</div>
|
|
35
48
|
|
|
36
49
|
{/* How it works */}
|
|
37
|
-
<
|
|
38
|
-
<
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
<
|
|
50
|
+
<Card className="bg-primary/10 border-primary/30">
|
|
51
|
+
<CardHeader>
|
|
52
|
+
<CardTitle className="text-xl text-foreground">
|
|
53
|
+
{t('searchEngineGuide.howItWorks')}
|
|
54
|
+
</CardTitle>
|
|
55
|
+
</CardHeader>
|
|
56
|
+
<CardContent className="space-y-4">
|
|
57
|
+
<p className="text-muted-foreground">
|
|
58
|
+
{t('searchEngineGuide.howItWorksDescription')}
|
|
59
|
+
</p>
|
|
60
|
+
<div className="bg-card rounded-lg p-4 border border-border">
|
|
61
|
+
<div className="flex items-center gap-2 text-sm font-mono text-foreground">
|
|
62
|
+
<Code className="h-4 w-4 text-primary" />
|
|
63
|
+
<span className="text-primary">go</span>
|
|
64
|
+
<span className="text-muted-foreground">your-slug</span>
|
|
65
|
+
</div>
|
|
49
66
|
</div>
|
|
50
|
-
</
|
|
51
|
-
</
|
|
67
|
+
</CardContent>
|
|
68
|
+
</Card>
|
|
52
69
|
|
|
53
70
|
{/* Your search URL */}
|
|
54
|
-
<
|
|
55
|
-
<
|
|
56
|
-
{t('searchEngineGuide.yourSearchUrl')}
|
|
57
|
-
</
|
|
58
|
-
<
|
|
59
|
-
<
|
|
60
|
-
{searchUrl}
|
|
61
|
-
</
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
</p>
|
|
66
|
-
</div>
|
|
71
|
+
<Card>
|
|
72
|
+
<CardHeader>
|
|
73
|
+
<CardTitle className="text-lg">{t('searchEngineGuide.yourSearchUrl')}</CardTitle>
|
|
74
|
+
</CardHeader>
|
|
75
|
+
<CardContent className="space-y-3">
|
|
76
|
+
<div className="bg-muted rounded-lg p-4 border border-border">
|
|
77
|
+
<code className="text-sm font-mono text-foreground break-all">{searchUrl}</code>
|
|
78
|
+
</div>
|
|
79
|
+
<p className="text-sm text-muted-foreground">{t('searchEngineGuide.urlNote')}</p>
|
|
80
|
+
</CardContent>
|
|
81
|
+
</Card>
|
|
67
82
|
|
|
68
|
-
{/* Chromium
|
|
69
|
-
|
|
70
|
-
<
|
|
71
|
-
<
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
<
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
</
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
83
|
+
{/* Chromium steps (only when active) */}
|
|
84
|
+
{activeTab === 'chromium' && (
|
|
85
|
+
<div className="space-y-4">
|
|
86
|
+
<h2 className="text-lg font-semibold text-foreground">
|
|
87
|
+
{t('searchEngineGuide.chromiumTitle')}
|
|
88
|
+
</h2>
|
|
89
|
+
<p className="text-muted-foreground text-sm">
|
|
90
|
+
{t('searchEngineGuide.chromiumDescription')}
|
|
91
|
+
</p>
|
|
92
|
+
<div className="space-y-4">
|
|
93
|
+
<Card>
|
|
94
|
+
<CardHeader className="pb-2">
|
|
95
|
+
<CardTitle className="text-base">
|
|
96
|
+
{t('searchEngineGuide.stepTitle', { n: 1 })}
|
|
97
|
+
</CardTitle>
|
|
98
|
+
</CardHeader>
|
|
99
|
+
<CardContent>
|
|
100
|
+
<p className="text-foreground">{t('searchEngineGuide.chromiumStep1')}</p>
|
|
101
|
+
</CardContent>
|
|
102
|
+
</Card>
|
|
103
|
+
<Card>
|
|
104
|
+
<CardHeader className="pb-2">
|
|
105
|
+
<CardTitle className="text-base">
|
|
106
|
+
{t('searchEngineGuide.stepTitle', { n: 2 })}
|
|
107
|
+
</CardTitle>
|
|
108
|
+
</CardHeader>
|
|
109
|
+
<CardContent>
|
|
110
|
+
<p className="text-foreground">{t('searchEngineGuide.chromiumStep2')}</p>
|
|
111
|
+
</CardContent>
|
|
112
|
+
</Card>
|
|
113
|
+
<Card>
|
|
114
|
+
<CardHeader className="pb-2">
|
|
115
|
+
<CardTitle className="text-base">
|
|
116
|
+
{t('searchEngineGuide.stepTitle', { n: 3 })}
|
|
117
|
+
</CardTitle>
|
|
118
|
+
</CardHeader>
|
|
119
|
+
<CardContent>
|
|
120
|
+
<p className="text-foreground">{t('searchEngineGuide.chromiumStep3')}</p>
|
|
121
|
+
</CardContent>
|
|
122
|
+
</Card>
|
|
123
|
+
<Card>
|
|
124
|
+
<CardHeader className="pb-2">
|
|
125
|
+
<CardTitle className="text-base">
|
|
126
|
+
{t('searchEngineGuide.stepTitle', { n: 4 })}
|
|
127
|
+
</CardTitle>
|
|
128
|
+
</CardHeader>
|
|
129
|
+
<CardContent className="space-y-2">
|
|
130
|
+
<p className="text-foreground">{t('searchEngineGuide.chromiumStep4')}</p>
|
|
131
|
+
<ul className="list-disc list-inside space-y-1 text-sm text-muted-foreground ml-2">
|
|
132
|
+
<li>{t('searchEngineGuide.chromiumStep4a')}</li>
|
|
133
|
+
<li>{t('searchEngineGuide.chromiumStep4b')}</li>
|
|
134
|
+
<li>{t('searchEngineGuide.chromiumStep4c')}</li>
|
|
135
|
+
</ul>
|
|
136
|
+
</CardContent>
|
|
137
|
+
</Card>
|
|
138
|
+
<Card>
|
|
139
|
+
<CardHeader className="pb-2">
|
|
140
|
+
<CardTitle className="text-base">
|
|
141
|
+
{t('searchEngineGuide.stepTitle', { n: 5 })}
|
|
142
|
+
</CardTitle>
|
|
143
|
+
</CardHeader>
|
|
144
|
+
<CardContent>
|
|
145
|
+
<p className="text-foreground">{t('searchEngineGuide.chromiumStep5')}</p>
|
|
146
|
+
</CardContent>
|
|
147
|
+
</Card>
|
|
148
|
+
</div>
|
|
149
|
+
</div>
|
|
150
|
+
)}
|
|
92
151
|
|
|
93
|
-
{/* Firefox */}
|
|
94
|
-
|
|
95
|
-
<
|
|
96
|
-
<
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
<
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
</
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
152
|
+
{/* Firefox steps (only when active) */}
|
|
153
|
+
{activeTab === 'firefox' && (
|
|
154
|
+
<div className="space-y-4">
|
|
155
|
+
<h2 className="text-lg font-semibold text-foreground">
|
|
156
|
+
{t('searchEngineGuide.firefoxTitle')}
|
|
157
|
+
</h2>
|
|
158
|
+
<p className="text-muted-foreground text-sm">
|
|
159
|
+
{t('searchEngineGuide.firefoxDescription')}
|
|
160
|
+
</p>
|
|
161
|
+
<div className="space-y-4">
|
|
162
|
+
<Card>
|
|
163
|
+
<CardHeader className="pb-2">
|
|
164
|
+
<CardTitle className="text-base">
|
|
165
|
+
{t('searchEngineGuide.stepTitle', { n: 1 })}
|
|
166
|
+
</CardTitle>
|
|
167
|
+
</CardHeader>
|
|
168
|
+
<CardContent>
|
|
169
|
+
<p className="text-foreground">{t('searchEngineGuide.firefoxStep1')}</p>
|
|
170
|
+
</CardContent>
|
|
171
|
+
</Card>
|
|
172
|
+
<Card>
|
|
173
|
+
<CardHeader className="pb-2">
|
|
174
|
+
<CardTitle className="text-base">
|
|
175
|
+
{t('searchEngineGuide.stepTitle', { n: 2 })}
|
|
176
|
+
</CardTitle>
|
|
177
|
+
</CardHeader>
|
|
178
|
+
<CardContent>
|
|
179
|
+
<p className="text-foreground">{t('searchEngineGuide.firefoxStep2')}</p>
|
|
180
|
+
</CardContent>
|
|
181
|
+
</Card>
|
|
182
|
+
<Card>
|
|
183
|
+
<CardHeader className="pb-2">
|
|
184
|
+
<CardTitle className="text-base">
|
|
185
|
+
{t('searchEngineGuide.stepTitle', { n: 3 })}
|
|
186
|
+
</CardTitle>
|
|
187
|
+
</CardHeader>
|
|
188
|
+
<CardContent>
|
|
189
|
+
<p className="text-foreground">{t('searchEngineGuide.firefoxStep3')}</p>
|
|
190
|
+
</CardContent>
|
|
191
|
+
</Card>
|
|
192
|
+
<Card>
|
|
193
|
+
<CardHeader className="pb-2">
|
|
194
|
+
<CardTitle className="text-base">
|
|
195
|
+
{t('searchEngineGuide.stepTitle', { n: 4 })}
|
|
196
|
+
</CardTitle>
|
|
197
|
+
</CardHeader>
|
|
198
|
+
<CardContent className="space-y-2">
|
|
199
|
+
<p className="text-foreground">{t('searchEngineGuide.firefoxStep4')}</p>
|
|
200
|
+
<ul className="list-disc list-inside space-y-1 text-sm text-muted-foreground ml-2">
|
|
201
|
+
<li>{t('searchEngineGuide.firefoxStep4a')}</li>
|
|
202
|
+
<li>{t('searchEngineGuide.firefoxStep4b')}</li>
|
|
203
|
+
<li>{t('searchEngineGuide.firefoxStep4c')}</li>
|
|
204
|
+
</ul>
|
|
205
|
+
</CardContent>
|
|
206
|
+
</Card>
|
|
207
|
+
<Card>
|
|
208
|
+
<CardHeader className="pb-2">
|
|
209
|
+
<CardTitle className="text-base">
|
|
210
|
+
{t('searchEngineGuide.stepTitle', { n: 5 })}
|
|
211
|
+
</CardTitle>
|
|
212
|
+
</CardHeader>
|
|
213
|
+
<CardContent>
|
|
214
|
+
<p className="text-foreground">{t('searchEngineGuide.firefoxStep5')}</p>
|
|
215
|
+
</CardContent>
|
|
216
|
+
</Card>
|
|
217
|
+
</div>
|
|
218
|
+
</div>
|
|
219
|
+
)}
|
|
117
220
|
|
|
118
221
|
{/* Usage example */}
|
|
119
|
-
<
|
|
120
|
-
<
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
222
|
+
<Card className="bg-primary/10 border-primary/30">
|
|
223
|
+
<CardHeader>
|
|
224
|
+
<CardTitle className="text-xl text-foreground">
|
|
225
|
+
{t('searchEngineGuide.usageExample')}
|
|
226
|
+
</CardTitle>
|
|
227
|
+
</CardHeader>
|
|
228
|
+
<CardContent className="space-y-3">
|
|
229
|
+
<p className="text-foreground">{t('searchEngineGuide.usageStep1')}</p>
|
|
230
|
+
<div className="bg-card rounded-lg p-3 border border-border">
|
|
231
|
+
<code className="text-sm font-mono text-foreground">go test</code>
|
|
127
232
|
</div>
|
|
128
|
-
<p className="
|
|
129
|
-
<p className="text-sm text-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
</div>
|
|
133
|
-
</div>
|
|
233
|
+
<p className="text-foreground">{t('searchEngineGuide.usageStep2')}</p>
|
|
234
|
+
<p className="text-sm text-muted-foreground">{t('searchEngineGuide.usageNote')}</p>
|
|
235
|
+
</CardContent>
|
|
236
|
+
</Card>
|
|
134
237
|
</div>
|
|
135
238
|
);
|
|
136
239
|
}
|