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
2 changes: 2 additions & 0 deletions src/app/[lang]/install-app/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ export default async function InstallAppPage({ params }: { params: Promise<{ lan
const copy = getInstallPageCopy(locale)
const allToolsLabel = t.common.all_tools
const trustCenterLabel = t.pages.trust_center_title
const localDataControlsLabel = t.common.local_data_controls.title
const offlineMatrixTitle = t.pages.trust_center_offline_matrix_title
const offlineMatrixDescription = t.pages.trust_center_offline_matrix_install_desc
const offlineMatrixLink = t.pages.trust_center_offline_matrix_link
Expand All @@ -24,6 +25,7 @@ export default async function InstallAppPage({ params }: { params: Promise<{ lan
copy={copy}
allToolsLabel={allToolsLabel}
trustCenterLabel={trustCenterLabel}
localDataControlsLabel={localDataControlsLabel}
offlineMatrixTitle={offlineMatrixTitle}
offlineMatrixDescription={offlineMatrixDescription}
offlineMatrixLink={offlineMatrixLink}
Expand Down
6 changes: 6 additions & 0 deletions src/app/[lang]/privacy/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,12 @@ export default function PrivacyPage() {
>
{p.trust_center_title}
</Link>
<Link
href="#local-data-controls"
className="mt-4 ml-2 inline-flex min-h-10 items-center rounded-md border border-border/75 bg-background/70 px-3 text-sm font-medium hover:border-primary/35 hover:text-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
>
{t.common.local_data_controls.title}
</Link>
</section>

<section className="grid gap-4">
Expand Down
9 changes: 8 additions & 1 deletion src/app/[lang]/trust-center/page.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import Link from "next/link"
import { notFound } from "next/navigation"
import { CheckCircle2, ExternalLink, FileText, Github, LockKeyhole, Network, ShieldCheck, WifiOff } from "lucide-react"
import { CheckCircle2, Database, ExternalLink, FileText, Github, LockKeyhole, Network, ShieldCheck, WifiOff } from "lucide-react"
import { isValidLocale, requireTranslationValue } from "@/core/i18n/i18n"
import { getTranslation } from "@/core/i18n/translations/catalog"
import { TOOL_REGISTRY } from "@/core/registry"
Expand Down Expand Up @@ -174,6 +174,13 @@ export default async function TrustCenterPage({
<WifiOff className="h-4 w-4" aria-hidden="true" />
{p.trust_center_offline_matrix_link}
</a>
<Link
href={`/${locale}/privacy#local-data-controls`}
className="inline-flex min-h-10 items-center gap-2 rounded-md border border-border/75 bg-background/70 px-3 text-sm font-medium hover:border-primary/35 hover:text-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
>
<Database className="h-4 w-4" aria-hidden="true" />
{common.local_data_controls.title}
</Link>
</div>
</section>

Expand Down
1 change: 1 addition & 0 deletions src/components/layout/server-footer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ export function ServerFooter({

const pageLinks = [
{ key: "install-app", slug: "install-app", label: requireTranslationValue(translations.common.install_app_label, "common.install_app_label") },
{ key: "local-data-controls", slug: "privacy#local-data-controls", label: requireTranslationValue(translations.common.local_data_controls.title, "common.local_data_controls.title") },
{ key: "about", slug: "about", label: requireTranslationValue(translations.pages.about_title, "pages.about_title") },
{ key: "privacy", slug: "privacy", label: requireTranslationValue(translations.pages.privacy_title, "pages.privacy_title") },
{ key: "trust-center", slug: "trust-center", label: requireTranslationValue(translations.pages.trust_center_title, "pages.trust_center_title") },
Expand Down
4 changes: 4 additions & 0 deletions src/core/analytics/preferences.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ export type AnalyticsPreference = "default" | "opted_out"

const ANALYTICS_OPT_OUT_KEY = "byteflow:analytics:opt-out"

export function getAnalyticsOptOutStorageKey(): string {
return ANALYTICS_OPT_OUT_KEY
}

export function getAnalyticsPreference(): AnalyticsPreference {
return readStorageString(ANALYTICS_OPT_OUT_KEY) === "1" ? "opted_out" : "default"
}
Expand Down
31 changes: 30 additions & 1 deletion src/core/i18n/translations/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,36 @@
"analytics_never_title": "Nie Analytics-Felder",
"analytics_never_fields": "Tool-Eingaben, Ausgaben, Payloads, Tokens, JWTs, Geheimnisse, Dateinamen, Dateiinhalte, Bildinhalte, Logtexte, Hashwerte, Suchtext, vollstaendige URLs, Nutzer-IDs und Sitzungs-IDs sind verboten.",
"analytics_privacy_link": "Datenschutzrichtlinie",
"analytics_trust_link": "Vertrauenszentrum"
"analytics_trust_link": "Vertrauenszentrum",
"no_payloads_notice": "Eingaben, Ausgaben, Dateien, Logs, Token und volle Adressen werden nicht gespeichert. Hier pruefen und loeschen Sie sicheren lokalen Zustand.",
"count_label": "{count} gespeichert",
"favorites_title": "Favoriten",
"favorites_description": "In diesem Browser gespeicherte Favoriten-IDs.",
"clear_favorites_button": "Favoriten loeschen",
"favorites_cleared_message": "{count} Favoriten-Werkzeuge geloescht.",
"recent_title": "Zuletzt verwendete Werkzeuge",
"recent_description": "Lokal gespeicherte letzte Werkzeug-IDs und Zeiten.",
"clear_recent_button": "Zuletzt verwendete Werkzeuge loeschen",
"recent_cleared_message": "{count} zuletzt verwendete Werkzeuge geloescht.",
"preferences_title": "Einstellungen und sichere Optionen",
"preferences_description": "Theme, Sprache, App-Hinweise, Seitenleiste und nicht sensible Werkzeugoptionen.",
"clear_preferences_button": "Einstellungen loeschen",
"preferences_cleared_message": "{count} Einstellungswerte geloescht.",
"recipes_title": "Gespeicherte Pipeline-Rezepte",
"recipes_description": "Pipeline-Rezepte nur mit Struktur. Laufzeit-Eingaben und Ausgaben sind ausgeschlossen.",
"clear_recipes_button": "Gespeicherte Rezepte loeschen",
"recipes_cleared_message": "{count} gespeicherte Rezepte geloescht.",
"recipes_unavailable_message": "Rezeptspeicher ist nicht verfuegbar.",
"cache_title": "Gecachte App-Dateien",
"cache_description": "App-Shell, Assets, Icons und Werkzeug-Code. Werkzeugdaten sind nicht enthalten.",
"clear_cache_button": "Gecachte App-Dateien loeschen",
"cache_cleared_message": "Gecachte App-Dateien wurden geloescht.",
"cache_none_message": "Keine gecachten App-Dateien gefunden.",
"cache_unavailable_message": "Cache-Loeschen ist nicht verfuegbar. Nutzen Sie Browser-Site-Daten.",
"browser_settings_title": "Browser- und App-Kontrollen",
"browser_settings_description": "Einige Browser verwalten App-Speicher und Site-Daten in Einstellungen. Nutzen Sie Installations- und Pruefschritte.",
"install_app_link": "Cache-Kontrollen fuer die installierte App",
"verification_link": "Pruefschritte in Entwicklerwerkzeugen"
},
"privacy_badge": {
"label": "Browser-lokal",
Expand Down
31 changes: 30 additions & 1 deletion src/core/i18n/translations/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,36 @@
"analytics_never_title": "Never analytics fields",
"analytics_never_fields": "Tool inputs, outputs, payloads, tokens, JWTs, secrets, file names, file contents, image contents, log bodies, hash values, search text, full URLs, user IDs, and session IDs are forbidden.",
"analytics_privacy_link": "Privacy Policy",
"analytics_trust_link": "Trust Center"
"analytics_trust_link": "Trust Center",
"no_payloads_notice": "Tool input, output, files, logs, tokens, and full URLs are not stored. Inspect and clear safe local state here.",
"count_label": "{count} saved",
"favorites_title": "Favorites",
"favorites_description": "Favorite tool IDs saved in this browser.",
"clear_favorites_button": "Clear favorites",
"favorites_cleared_message": "Cleared {count} favorite tools.",
"recent_title": "Recent tools",
"recent_description": "Recent tool IDs and timestamps saved locally.",
"clear_recent_button": "Clear recent tools",
"recent_cleared_message": "Cleared {count} recent tools.",
"preferences_title": "Safe preferences",
"preferences_description": "Theme, language, PWA prompts, sidebar state, and safe tool options.",
"clear_preferences_button": "Clear preferences",
"preferences_cleared_message": "Cleared {count} preference items.",
"recipes_title": "Saved Pipeline recipes",
"recipes_description": "Structure-only Pipeline recipes. Runtime inputs and outputs are excluded.",
"clear_recipes_button": "Delete saved recipes",
"recipes_cleared_message": "Deleted {count} saved recipes.",
"recipes_unavailable_message": "Recipe storage is unavailable.",
"cache_title": "Cached app files",
"cache_description": "PWA shell, assets, icons, and tool chunks. Tool payloads are excluded.",
"clear_cache_button": "Clear cached app files",
"cache_cleared_message": "Cached app files cleared.",
"cache_none_message": "No cached app files were found.",
"cache_unavailable_message": "Cache clearing is unavailable. Use browser site-data or app-storage settings.",
"browser_settings_title": "Browser controls",
"browser_settings_description": "Some browsers manage app storage and site data in settings. See Install App and Trust Center verification.",
"install_app_link": "Install App cache controls",
"verification_link": "DevTools verification steps"
},
"privacy_badge": {
"label": "Browser-local",
Expand Down
31 changes: 30 additions & 1 deletion src/core/i18n/translations/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,36 @@
"analytics_never_title": "Jamais dans les analytics",
"analytics_never_fields": "Entrees doutils, sorties, payloads, tokens, JWT, secrets, noms de fichiers, contenus de fichiers, contenus dimages, corps de logs, hashes, texte de recherche, URL completes, ID utilisateur et ID de session sont interdits.",
"analytics_privacy_link": "Politique de confidentialite",
"analytics_trust_link": "Centre de confiance"
"analytics_trust_link": "Centre de confiance",
"no_payloads_notice": "Entrees, sorties, fichiers, journaux, jetons et adresses completes ne sont pas stockes. Verifiez et supprimez l etat local sur ici.",
"count_label": "{count} enregistres",
"favorites_title": "Favoris",
"favorites_description": "Identifiants de favoris enregistres dans ce navigateur.",
"clear_favorites_button": "Effacer les favoris",
"favorites_cleared_message": "{count} outils favoris effaces.",
"recent_title": "Outils recents",
"recent_description": "Identifiants et dates recents stockes localement.",
"clear_recent_button": "Effacer les outils recents",
"recent_cleared_message": "{count} outils recents effaces.",
"preferences_title": "Preferences et reglages surs",
"preferences_description": "Theme, langue, invites d app, barre laterale et options non sensibles.",
"clear_preferences_button": "Effacer les preferences",
"preferences_cleared_message": "{count} preferences effacees.",
"recipes_title": "Recettes de pipeline enregistrees",
"recipes_description": "Recettes de pipeline structurelles. Les entrees et sorties d execution sont exclues.",
"clear_recipes_button": "Supprimer les recettes enregistrees",
"recipes_cleared_message": "{count} recettes enregistrees supprimees.",
"recipes_unavailable_message": "Le stockage des recettes est indisponible.",
"cache_title": "Fichiers d app en cache",
"cache_description": "Shell d app, ressources, icones et code d outils. Les donnees traitees ne sont pas incluses.",
"clear_cache_button": "Effacer les fichiers d app en cache",
"cache_cleared_message": "Fichiers d app en cache effaces.",
"cache_none_message": "Aucun fichier d app en cache trouve.",
"cache_unavailable_message": "L effacement du cache est indisponible. Utilisez les reglages de donnees de site.",
"browser_settings_title": "Controles du navigateur et de l app",
"browser_settings_description": "Certains navigateurs gerent stockage d app et donnees de site dans les reglages. Consultez installation et verification.",
"install_app_link": "Controles du cache de l app installee",
"verification_link": "Etapes de verification dans les outils de developpement"
},
"privacy_badge": {
"label": "Local au navigateur",
Expand Down
31 changes: 30 additions & 1 deletion src/core/i18n/translations/ja.json
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,36 @@
"analytics_never_title": "分析に含めないフィールド",
"analytics_never_fields": "ツール入力、出力、payload、token、JWT、secret、ファイル名、ファイル内容、画像内容、ログ本文、ハッシュ値、検索テキスト、完全な URL、ユーザー ID、セッション ID は禁止です。",
"analytics_privacy_link": "プライバシーポリシー",
"analytics_trust_link": "信頼センター"
"analytics_trust_link": "信頼センター",
"no_payloads_notice": "入力、出力、ファイル、ログ、トークン、完全なアドレスは保存しません。安全なローカル状態だけ確認、削除できます。",
"count_label": "{count} 件保存済み",
"favorites_title": "お気に入り",
"favorites_description": "このブラウザーに保存されたお気に入りツールの識別子です。",
"clear_favorites_button": "お気に入りを削除",
"favorites_cleared_message": "{count} 件のお気に入りツールを削除しました。",
"recent_title": "最近使ったツール",
"recent_description": "ローカル保存された最近のツール識別子と時刻です。",
"clear_recent_button": "最近使ったツールを削除",
"recent_cleared_message": "{count} 件の最近使ったツールを削除しました。",
"preferences_title": "設定と安全なオプション",
"preferences_description": "テーマ、言語、アプリ案内、サイドバー、機密ではないツール設定です。",
"clear_preferences_button": "設定を削除",
"preferences_cleared_message": "{count} 件の設定を削除しました。",
"recipes_title": "保存済みパイプライン手順",
"recipes_description": "構造だけのパイプライン手順です。実行時の入力と出力は除外されます。",
"clear_recipes_button": "保存済み手順を削除",
"recipes_cleared_message": "{count} 件の保存済み手順を削除しました。",
"recipes_unavailable_message": "手順の保存を利用できません。",
"cache_title": "キャッシュ済みアプリファイル",
"cache_description": "アプリ外枠、素材、アイコン、ツールコードです。処理内容は含みません。",
"clear_cache_button": "キャッシュ済みアプリファイルを削除",
"cache_cleared_message": "キャッシュ済みアプリファイルを削除しました。",
"cache_none_message": "キャッシュ済みアプリファイルはありません。",
"cache_unavailable_message": "キャッシュ削除を利用できません。ブラウザーのサイトデータ設定を使ってください。",
"browser_settings_title": "ブラウザーとアプリの操作",
"browser_settings_description": "一部のブラウザーはアプリ保存領域やサイトデータを設定で管理できます。案内ページと検証手順を確認してください。",
"install_app_link": "インストール済みアプリのキャッシュ操作",
"verification_link": "開発者ツールでの検証手順"
},
"privacy_badge": {
"label": "ブラウザローカル",
Expand Down
31 changes: 30 additions & 1 deletion src/core/i18n/translations/ko.json
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,36 @@
"analytics_never_title": "분석에 포함하지 않는 필드",
"analytics_never_fields": "도구 입력, 출력, payload, token, JWT, secret, 파일 이름, 파일 내용, 이미지 내용, 로그 본문, 해시값, 검색 텍스트, 전체 URL, 사용자 ID, 세션 ID는 금지됩니다.",
"analytics_privacy_link": "개인정보 처리방침",
"analytics_trust_link": "신뢰 센터"
"analytics_trust_link": "신뢰 센터",
"no_payloads_notice": "입력, 출력, 파일, 로그, 토큰, 전체 주소는 저장하지 않습니다. 안전한 로컬 상태만 확인하고 지울 수 있습니다.",
"count_label": "{count}개 저장됨",
"favorites_title": "즐겨찾기",
"favorites_description": "이 브라우저에 저장된 즐겨찾기 도구 식별자입니다.",
"clear_favorites_button": "즐겨찾기 지우기",
"favorites_cleared_message": "즐겨찾기 도구 {count}개를 지웠습니다.",
"recent_title": "최근 사용 도구",
"recent_description": "로컬에 저장된 최근 도구 식별자와 시간입니다.",
"clear_recent_button": "최근 사용 도구 지우기",
"recent_cleared_message": "최근 사용 도구 {count}개를 지웠습니다.",
"preferences_title": "환경설정과 안전 설정",
"preferences_description": "테마, 언어, 앱 안내, 사이드바, 민감하지 않은 도구 옵션입니다.",
"clear_preferences_button": "환경설정 지우기",
"preferences_cleared_message": "환경설정 {count}개를 지웠습니다.",
"recipes_title": "저장된 파이프라인 레시피",
"recipes_description": "구조만 담은 파이프라인 레시피입니다. 실행 입력과 출력은 제외됩니다.",
"clear_recipes_button": "저장된 레시피 삭제",
"recipes_cleared_message": "저장된 레시피 {count}개를 삭제했습니다.",
"recipes_unavailable_message": "레시피 저장소를 사용할 수 없습니다.",
"cache_title": "캐시된 앱 파일",
"cache_description": "앱 셸, 자산, 아이콘, 도구 코드입니다. 처리 내용은 포함하지 않습니다.",
"clear_cache_button": "캐시된 앱 파일 지우기",
"cache_cleared_message": "캐시된 앱 파일을 지웠습니다.",
"cache_none_message": "캐시된 앱 파일이 없습니다.",
"cache_unavailable_message": "캐시 지우기를 사용할 수 없습니다. 브라우저 사이트 데이터 설정을 사용하세요.",
"browser_settings_title": "브라우저와 앱 제어",
"browser_settings_description": "일부 브라우저는 앱 저장소와 사이트 데이터를 설정에서 관리합니다. 설치 안내와 검증 단계를 확인하세요.",
"install_app_link": "설치 앱 캐시 제어",
"verification_link": "개발자 도구 검증 단계"
},
"privacy_badge": {
"label": "브라우저 로컬",
Expand Down
Loading