chore(i18n): add Claude-powered translation script and fill missing PO translations

- Add `packages/i18n/scripts/claude.ts` — a Bun script that translates empty PO entries via the Claude Code CLI, supporting batch mode, dry-run, optional AI context from `crowdin-context.jsonl`, and structured JSON output validation
- Add `i18n:claude` root script (`bun packages/i18n/scripts/claude.ts`) as a convenience alias
- Fill all previously empty msgstr entries across de, es, fr, it, pt PO catalogs and recompile `.ts` catalogs
- Polish README with badges (license, CI status, release, language, Crowdin localization) and minor formatting fixes
This commit is contained in:
2026-03-18 20:42:01 -04:00
parent 9b2d7caa3f
commit 7b0c07ad3c
23 changed files with 7775 additions and 7110 deletions
+9 -2
View File
@@ -8,8 +8,8 @@ export const metadata: Metadata = {
export default function PrivacyPolicyPage() {
return (
<article className="prose prose-sm prose-invert [&_a]:text-fd-primary hover:[&_a]:text-fd-primary/80 [&_h2]:font-display [&_h3]:font-display [&_p]:text-fd-muted-foreground [&_li]:text-fd-muted-foreground [&_strong]:text-fd-foreground mx-auto max-w-3xl px-6 py-16 [&_a]:underline [&_a]:underline-offset-4 [&_h2]:mt-10 [&_h2]:mb-4 [&_h2]:border-b [&_h2]:pb-2 [&_h2]:text-2xl [&_h3]:mt-8 [&_h3]:mb-3 [&_h3]:text-xl [&_li]:text-[15px] [&_li]:leading-relaxed [&_p]:text-[15px] [&_p]:leading-relaxed [&_strong]:font-medium [&_ul]:space-y-1">
<h1 className="font-display mb-2 text-3xl tracking-tight">Privacy Policy</h1>
<article className="prose prose-sm prose-invert [&_a]:text-fd-primary hover:[&_a]:text-fd-primary/80 [&_h2]:font-display [&_h3]:font-display [&_p]:text-fd-muted-foreground [&_li]:text-fd-muted-foreground [&_strong]:text-fd-foreground mx-auto max-w-3xl px-6 py-16 [&_a]:underline [&_a]:underline-offset-4 [&_h2]:mt-10 [&_h2]:mb-4 [&_h2]:border-b [&_h2]:pb-2 [&_h2]:text-2xl [&_h2]:font-semibold [&_h3]:mt-8 [&_h3]:mb-3 [&_h3]:text-xl [&_h3]:font-normal [&_li]:text-[15px] [&_li]:leading-relaxed [&_p]:text-[15px] [&_p]:leading-relaxed [&_strong]:font-medium [&_ul]:space-y-1">
<h1 className="font-display mb-2 text-3xl font-semibold tracking-tight">Privacy Policy</h1>
<p className="text-fd-muted-foreground/60 !mt-0 mb-8 text-sm">Last updated: March 16, 2026</p>
<p>
@@ -95,6 +95,13 @@ export default function PrivacyPolicyPage() {
<strong>disabled by default</strong> and must be explicitly enabled by an admin. See the{" "}
<Link href="/docs/telemetry">telemetry documentation</Link> for full details.
</li>
<li>
<strong>Import helper</strong> &mdash; when importing watch history from Trakt or Simkl,
your server proxies OAuth device-code authorization through{" "}
<code>public-api.sofa.watch</code> so that a single OAuth client ID can be shared across
all instances. Only the provider&rsquo;s device code and token responses are relayed; no
personal data, watch history, or instance identifiers are included in the requests.
</li>
</ul>
<h3>PostHog (Mobile App Only)</h3>