Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 22 additions & 22 deletions data/data-health.json
Original file line number Diff line number Diff line change
Expand Up @@ -73,59 +73,59 @@
},
"translationsByLocale": {
"de": {
"totalStrings": 423,
"totalStrings": 442,
"matchingEnglish": 106,
"matchingEnglishPercent": 25.1
"matchingEnglishPercent": 24
},
"es": {
"totalStrings": 423,
"totalStrings": 442,
"matchingEnglish": 98,
"matchingEnglishPercent": 23.2
"matchingEnglishPercent": 22.2
},
"fr": {
"totalStrings": 423,
"totalStrings": 442,
"matchingEnglish": 108,
"matchingEnglishPercent": 25.5
"matchingEnglishPercent": 24.4
},
"id": {
"totalStrings": 423,
"totalStrings": 442,
"matchingEnglish": 142,
"matchingEnglishPercent": 33.6
"matchingEnglishPercent": 32.1
},
"ja": {
"totalStrings": 423,
"totalStrings": 442,
"matchingEnglish": 100,
"matchingEnglishPercent": 23.6
"matchingEnglishPercent": 22.6
},
"ko": {
"totalStrings": 423,
"totalStrings": 442,
"matchingEnglish": 108,
"matchingEnglishPercent": 25.5
"matchingEnglishPercent": 24.4
},
"pt": {
"totalStrings": 423,
"totalStrings": 442,
"matchingEnglish": 108,
"matchingEnglishPercent": 25.5
"matchingEnglishPercent": 24.4
},
"ru": {
"totalStrings": 423,
"totalStrings": 442,
"matchingEnglish": 117,
"matchingEnglishPercent": 27.7
"matchingEnglishPercent": 26.5
},
"tr": {
"totalStrings": 423,
"totalStrings": 442,
"matchingEnglish": 119,
"matchingEnglishPercent": 28.1
"matchingEnglishPercent": 26.9
},
"zh-Hans": {
"totalStrings": 423,
"totalStrings": 442,
"matchingEnglish": 92,
"matchingEnglishPercent": 21.7
"matchingEnglishPercent": 20.8
},
"zh-Hant": {
"totalStrings": 423,
"totalStrings": 442,
"matchingEnglish": 92,
"matchingEnglishPercent": 21.7
"matchingEnglishPercent": 20.8
}
},
"issues": [
Expand Down
22 changes: 11 additions & 11 deletions docs/DATA-HEALTH.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,17 +37,17 @@ Exact English matches are a triage signal; product names and technical terms can

| Locale | Comparable strings | Exact English matches | Match rate |
| --- | ---: | ---: | ---: |
| de | 423 | 106 | 25.1% |
| es | 423 | 98 | 23.2% |
| fr | 423 | 108 | 25.5% |
| id | 423 | 142 | 33.6% |
| ja | 423 | 100 | 23.6% |
| ko | 423 | 108 | 25.5% |
| pt | 423 | 108 | 25.5% |
| ru | 423 | 117 | 27.7% |
| tr | 423 | 119 | 28.1% |
| zh-Hans | 423 | 92 | 21.7% |
| zh-Hant | 423 | 92 | 21.7% |
| de | 442 | 106 | 24% |
| es | 442 | 98 | 22.2% |
| fr | 442 | 108 | 24.4% |
| id | 442 | 142 | 32.1% |
| ja | 442 | 100 | 22.6% |
| ko | 442 | 108 | 24.4% |
| pt | 442 | 108 | 24.4% |
| ru | 442 | 117 | 26.5% |
| tr | 442 | 119 | 26.9% |
| zh-Hans | 442 | 92 | 20.8% |
| zh-Hant | 442 | 92 | 20.8% |

## Backlog by Issue Type

Expand Down
40 changes: 26 additions & 14 deletions src/app/[locale]/clis/comparison/page.client.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,13 @@ import { AppleIcon, LinuxIcon, WindowsIcon } from '@/components/controls/Platfor
import Footer from '@/components/Footer'
import Header from '@/components/Header'
import { Breadcrumb } from '@/components/navigation/Breadcrumb'
import ComparisonGuide, {
type ComparisonGuideContent,
type ComparisonGuideItem,
type ComparisonProfileItem,
} from '@/components/product/ComparisonGuide'
import ComparisonTable, { type ComparisonColumn } from '@/components/product/ComparisonTable'
import { PricingSummaryValue } from '@/components/product/ProductPricing'
import { Link } from '@/i18n/navigation'
import { withVendorCommunityUrlsForCatalog } from '@/lib/community-urls'
import { clisData, vendorsData } from '@/lib/generated'
import { getGithubStars } from '@/lib/generated/github-stars'
Expand All @@ -28,6 +32,19 @@ type Props = {
export default function CLIComparisonPageClient({ locale: _locale }: Props) {
const tPage = useTranslations('pages.comparison')
const tShared = useTranslations('shared')
const guideContent: ComparisonGuideContent = {
title: tPage('clis.guide.title'),
intro: tPage('clis.guide.intro', { count: clis.length }),
criteria: tPage.raw('clis.guide.criteria') as ComparisonGuideItem[],
shortlistTitle: tPage('clis.guide.shortlistTitle'),
shortlistIntro: tPage('clis.guide.shortlistIntro'),
steps: tPage.raw('clis.guide.steps') as ComparisonGuideItem[],
profilesTitle: tPage('clis.guide.profilesTitle'),
profilesIntro: tPage('clis.guide.profilesIntro'),
profiles: tPage.raw('clis.guide.profiles') as ComparisonProfileItem[],
faqTitle: tPage('clis.guide.faqTitle'),
faqs: tPage.raw('clis.guide.faqs') as ComparisonGuideItem[],
}

const columns: ComparisonColumn[] = [
{
Expand Down Expand Up @@ -279,7 +296,7 @@ export default function CLIComparisonPageClient({ locale: _locale }: Props) {
/>

{/* Page Header */}
<section className="py-[var(--spacing-lg)] border-[var(--color-border)]">
<section className="pt-[var(--spacing-lg)] pb-[var(--spacing-md)]">
<div className="max-w-8xl mx-auto px-[var(--spacing-md)]">
<h1 className="text-3xl font-semibold tracking-[-0.03em] mb-[var(--spacing-sm)]">
{tPage('clis.title')}
Expand All @@ -291,28 +308,23 @@ export default function CLIComparisonPageClient({ locale: _locale }: Props) {
</section>

{/* Comparison Table */}
<section className="pb-[var(--spacing-lg)] border-b border-[var(--color-border)]">
<section
id="comparison-table"
className="scroll-mt-32 pb-[var(--spacing-xl)] border-b border-[var(--color-border)]"
>
<div className="max-w-8xl mx-auto px-[var(--spacing-md)]">
<ComparisonTable
items={clis as unknown as Record<string, unknown>[]}
columns={columns}
itemLinkPrefix={`/clis`}
nameColumnLabel={tShared('labels.name')}
caption={tPage('clis.title')}
scrollHint={tPage('table.scrollHint')}
/>
</div>
</section>

{/* Back Navigation */}
<section className="py-[var(--spacing-lg)] border-b border-[var(--color-border)]">
<div className="max-w-8xl mx-auto px-[var(--spacing-md)]">
<Link
href="/clis"
className="inline-flex items-center gap-[var(--spacing-xs)] text-sm text-[var(--color-text-secondary)] hover:text-[var(--color-text)] transition-colors"
>
← {tPage('clis.backTo')}
</Link>
</div>
</section>
<ComparisonGuide content={guideContent} />

<Footer />
</>
Expand Down
37 changes: 23 additions & 14 deletions src/app/[locale]/extensions/comparison/page.client.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,13 @@ import { useTranslations } from 'next-intl'
import Footer from '@/components/Footer'
import Header from '@/components/Header'
import { Breadcrumb } from '@/components/navigation/Breadcrumb'
import ComparisonGuide, {
type ComparisonGuideContent,
type ComparisonGuideItem,
type ComparisonProfileItem,
} from '@/components/product/ComparisonGuide'
import ComparisonTable, { type ComparisonColumn } from '@/components/product/ComparisonTable'
import { PricingSummaryValue } from '@/components/product/ProductPricing'
import { Link } from '@/i18n/navigation'
import { withVendorCommunityUrlsForCatalog } from '@/lib/community-urls'
import { extensionsData, vendorsData } from '@/lib/generated'
import { getGithubStars } from '@/lib/generated/github-stars'
Expand All @@ -27,6 +31,19 @@ type Props = {
export default function ExtensionComparisonPageClient({ locale: _locale }: Props) {
const tPage = useTranslations('pages.comparison')
const tShared = useTranslations('shared')
const guideContent: ComparisonGuideContent = {
title: tPage('extensions.guide.title'),
intro: tPage('extensions.guide.intro', { count: extensions.length }),
criteria: tPage.raw('extensions.guide.criteria') as ComparisonGuideItem[],
shortlistTitle: tPage('extensions.guide.shortlistTitle'),
shortlistIntro: tPage('extensions.guide.shortlistIntro'),
steps: tPage.raw('extensions.guide.steps') as ComparisonGuideItem[],
profilesTitle: tPage('extensions.guide.profilesTitle'),
profilesIntro: tPage('extensions.guide.profilesIntro'),
profiles: tPage.raw('extensions.guide.profiles') as ComparisonProfileItem[],
faqTitle: tPage('extensions.guide.faqTitle'),
faqs: tPage.raw('extensions.guide.faqs') as ComparisonGuideItem[],
}

const columns: ComparisonColumn[] = [
{
Expand Down Expand Up @@ -265,7 +282,7 @@ export default function ExtensionComparisonPageClient({ locale: _locale }: Props
/>

{/* Page Header */}
<section className="py-[var(--spacing-lg)] border-[var(--color-border)]">
<section className="pt-[var(--spacing-lg)] pb-[var(--spacing-md)]">
<div className="max-w-8xl mx-auto px-[var(--spacing-md)]">
<h1 className="text-3xl font-semibold tracking-[-0.03em] mb-[var(--spacing-sm)]">
{tPage('extensions.title')}
Expand All @@ -277,28 +294,20 @@ export default function ExtensionComparisonPageClient({ locale: _locale }: Props
</section>

{/* Comparison Table */}
<section className="pb-[var(--spacing-lg)] border-b border-[var(--color-border)]">
<section className="pb-[var(--spacing-xl)] border-b border-[var(--color-border)]">
<div className="max-w-8xl mx-auto px-[var(--spacing-md)]">
<ComparisonTable
items={extensions as unknown as Record<string, unknown>[]}
columns={columns}
itemLinkPrefix={`/extensions`}
nameColumnLabel={tShared('labels.name')}
caption={tPage('extensions.title')}
scrollHint={tPage('table.scrollHint')}
/>
</div>
</section>

{/* Back Navigation */}
<section className="py-[var(--spacing-lg)] border-b border-[var(--color-border)]">
<div className="max-w-8xl mx-auto px-[var(--spacing-md)]">
<Link
href="/extensions"
className="inline-flex items-center gap-[var(--spacing-xs)] text-sm text-[var(--color-text-secondary)] hover:text-[var(--color-text)] transition-colors"
>
← {tPage('extensions.backTo')}
</Link>
</div>
</section>
<ComparisonGuide content={guideContent} />

<Footer />
</>
Expand Down
37 changes: 23 additions & 14 deletions src/app/[locale]/ides/comparison/page.client.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,13 @@ import { AppleIcon, LinuxIcon, WindowsIcon } from '@/components/controls/Platfor
import Footer from '@/components/Footer'
import Header from '@/components/Header'
import { Breadcrumb } from '@/components/navigation/Breadcrumb'
import ComparisonGuide, {
type ComparisonGuideContent,
type ComparisonGuideItem,
type ComparisonProfileItem,
} from '@/components/product/ComparisonGuide'
import ComparisonTable, { type ComparisonColumn } from '@/components/product/ComparisonTable'
import { PricingSummaryValue } from '@/components/product/ProductPricing'
import { Link } from '@/i18n/navigation'
import { withVendorCommunityUrlsForCatalog } from '@/lib/community-urls'
import { idesData, vendorsData } from '@/lib/generated'
import { getGithubStars } from '@/lib/generated/github-stars'
Expand All @@ -28,6 +32,19 @@ type Props = {
export default function IDEComparisonPageClient({ locale: _locale }: Props) {
const tPage = useTranslations('pages.comparison')
const tShared = useTranslations('shared')
const guideContent: ComparisonGuideContent = {
title: tPage('ides.guide.title'),
intro: tPage('ides.guide.intro', { count: ides.length }),
criteria: tPage.raw('ides.guide.criteria') as ComparisonGuideItem[],
shortlistTitle: tPage('ides.guide.shortlistTitle'),
shortlistIntro: tPage('ides.guide.shortlistIntro'),
steps: tPage.raw('ides.guide.steps') as ComparisonGuideItem[],
profilesTitle: tPage('ides.guide.profilesTitle'),
profilesIntro: tPage('ides.guide.profilesIntro'),
profiles: tPage.raw('ides.guide.profiles') as ComparisonProfileItem[],
faqTitle: tPage('ides.guide.faqTitle'),
faqs: tPage.raw('ides.guide.faqs') as ComparisonGuideItem[],
}

const columns: ComparisonColumn[] = [
{
Expand Down Expand Up @@ -279,7 +296,7 @@ export default function IDEComparisonPageClient({ locale: _locale }: Props) {
/>

{/* Page Header */}
<section className="py-[var(--spacing-lg)] border-[var(--color-border)]">
<section className="pt-[var(--spacing-lg)] pb-[var(--spacing-md)]">
<div className="max-w-8xl mx-auto px-[var(--spacing-md)]">
<h1 className="text-3xl font-semibold tracking-[-0.03em] mb-[var(--spacing-sm)]">
{tPage('ides.title')}
Expand All @@ -291,28 +308,20 @@ export default function IDEComparisonPageClient({ locale: _locale }: Props) {
</section>

{/* Comparison Table */}
<section className="pb-[var(--spacing-lg)] border-b border-[var(--color-border)]">
<section className="pb-[var(--spacing-xl)] border-b border-[var(--color-border)]">
<div className="max-w-8xl mx-auto px-[var(--spacing-md)]">
<ComparisonTable
items={ides as unknown as Record<string, unknown>[]}
columns={columns}
itemLinkPrefix={`/ides`}
nameColumnLabel={tShared('labels.name')}
caption={tPage('ides.title')}
scrollHint={tPage('table.scrollHint')}
/>
</div>
</section>

{/* Back Navigation */}
<section className="py-[var(--spacing-lg)] border-b border-[var(--color-border)]">
<div className="max-w-8xl mx-auto px-[var(--spacing-md)]">
<Link
href="/ides"
className="inline-flex items-center gap-[var(--spacing-xs)] text-sm text-[var(--color-text-secondary)] hover:text-[var(--color-text)] transition-colors"
>
← {tPage('ides.backTo')}
</Link>
</div>
</section>
<ComparisonGuide content={guideContent} />

<Footer />
</>
Expand Down
Loading
Loading