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
781 changes: 0 additions & 781 deletions scripts/generators/generate-localized-tool-content.mjs

This file was deleted.

2 changes: 1 addition & 1 deletion src/core/i18n/translations/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -2349,7 +2349,7 @@
"use_template": "Nutzen",
"template_loaded": "Rezeptvorlage geladen",
"template_json_minify_base64url_title": "JSON minifizieren zu URL-sicherem Base64",
"template_json_minify_base64url_description": "Minifiziert ein JSON-Payload und kodiert es für URLs, Umgebungswerte oder Test-Fixtures.",
"template_json_minify_base64url_description": "Minifiziert eine JSON-Nutzlast und kodiert sie für URLs, Umgebungswerte oder Testdaten.",
"template_url_decode_json_title": "URL dekodieren und JSON formatieren",
"template_url_decode_json_description": "Dekodiert einen URL-kodierten JSON-Blob und formatiert ihn zur Prüfung.",
"template_clean_copied_config_title": "Kopierten Konfigurationstext bereinigen",
Expand Down
2 changes: 1 addition & 1 deletion src/core/i18n/translations/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -2349,7 +2349,7 @@
"use_template": "Utiliser",
"template_loaded": "Modèle de recette chargé",
"template_json_minify_base64url_title": "Minifier JSON vers Base64 compatible URL",
"template_json_minify_base64url_description": "Minifie un payload JSON, puis l’encode pour les URL, variables d’environnement ou fixtures de test.",
"template_json_minify_base64url_description": "Minifie une charge utile JSON, puis l’encode pour les URL, variables d’environnement ou jeux de test.",
"template_url_decode_json_title": "Décoder une URL et formater le JSON",
"template_url_decode_json_description": "Décode un blob JSON encodé en URL et le formate pour inspection.",
"template_clean_copied_config_title": "Nettoyer un texte de configuration copié",
Expand Down
2 changes: 1 addition & 1 deletion src/core/i18n/translations/ja.json
Original file line number Diff line number Diff line change
Expand Up @@ -2349,7 +2349,7 @@
"use_template": "使用",
"template_loaded": "Recipe テンプレートを読み込みました",
"template_json_minify_base64url_title": "JSON を圧縮して URL セーフ Base64 へ",
"template_json_minify_base64url_description": "JSON payload を圧縮し、URL、環境変数、テスト fixture に使いやすい文字列へエンコードします。",
"template_json_minify_base64url_description": "JSON ペイロードを圧縮し、URL、環境変数、テストデータに使いやすい文字列へエンコードします。",
"template_url_decode_json_title": "URL デコードして JSON を整形",
"template_url_decode_json_description": "URL エンコードされた JSON blob をデコードし、確認しやすい形に整形します。",
"template_clean_copied_config_title": "コピーした設定テキストを清掃",
Expand Down
2 changes: 1 addition & 1 deletion src/core/i18n/translations/ko.json
Original file line number Diff line number Diff line change
Expand Up @@ -2349,7 +2349,7 @@
"use_template": "사용",
"template_loaded": "Recipe 템플릿을 불러왔습니다",
"template_json_minify_base64url_title": "JSON 압축 후 URL 안전 Base64",
"template_json_minify_base64url_description": "JSON payload를 압축한 뒤 URL, 환경 변수, 테스트 fixture에 쓰기 좋은 문자열로 인코딩합니다.",
"template_json_minify_base64url_description": "JSON 페이로드를 압축한 뒤 URL, 환경 변수, 테스트 데이터에 쓰기 좋은 문자열로 인코딩합니다.",
"template_url_decode_json_title": "URL 디코드 후 JSON 정리",
"template_url_decode_json_description": "URL 인코딩된 JSON blob을 디코드하고 검토하기 쉽게 포맷합니다.",
"template_clean_copied_config_title": "복사한 설정 텍스트 정리",
Expand Down
2 changes: 1 addition & 1 deletion src/core/i18n/translations/zh-CN.json
Original file line number Diff line number Diff line change
Expand Up @@ -2349,7 +2349,7 @@
"use_template": "使用",
"template_loaded": "Recipe 模板已载入",
"template_json_minify_base64url_title": "JSON 压缩后转 URL 安全 Base64",
"template_json_minify_base64url_description": "先压缩 JSON payload,再编码成适合 URL、环境变量或测试 fixture 的文本。",
"template_json_minify_base64url_description": "先压缩 JSON 载荷,再编码成适合 URL、环境变量或测试样例的文本。",
"template_url_decode_json_title": "URL 解码并美化 JSON",
"template_url_decode_json_description": "解码 URL 编码的 JSON blob,并格式化成便于审查的结构。",
"template_clean_copied_config_title": "清理复制来的配置文本",
Expand Down
2 changes: 1 addition & 1 deletion src/core/i18n/translations/zh-TW.json
Original file line number Diff line number Diff line change
Expand Up @@ -2349,7 +2349,7 @@
"use_template": "使用",
"template_loaded": "Recipe 模板已載入",
"template_json_minify_base64url_title": "JSON 壓縮後轉 URL 安全 Base64",
"template_json_minify_base64url_description": "先壓縮 JSON payload,再編碼成適合 URL、環境變數或測試 fixture 的文字。",
"template_json_minify_base64url_description": "先壓縮 JSON 載荷,再編碼成適合 URL、環境變數或測試樣本的文字。",
"template_url_decode_json_title": "URL 解碼並美化 JSON",
"template_url_decode_json_description": "解碼 URL 編碼的 JSON blob,並格式化成便於審查的結構。",
"template_clean_copied_config_title": "清理複製來的設定文字",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10187,7 +10187,7 @@
"useCases": [
"Einen bestimmten verschachtelten Wert aus Kubernetes-, Docker-Compose- oder CI-Konfigurationen extrahieren.",
"Vor Änderungen an YAML-Overlays prüfen, ob ein Pfadausdruck den erwarteten Knoten trifft.",
"YAML-Ausschnitte nach JSON konvertieren, um sie in Debug-Requests, Dokumentation oder Test-Fixtures zu verwenden."
"YAML-Ausschnitte nach JSON konvertieren, um sie in Debug-Requests, Dokumentation oder Testdaten zu verwenden."
],
"inputExamples": [
{
Expand Down Expand Up @@ -10944,12 +10944,12 @@
"Es kodiert UTF-8-Text als RFC-4648-Base32 mit Padding, passend für Systeme mit Großbuchstabenalphabet und fester Blockgröße.",
"Es dekodiert Base32 zurück zu Text und weist ungültige Zeichen oder falsches Padding zurück, damit Kopier- und Transportfehler sichtbar werden.",
"Es unterstützt Bitcoin-artiges Base58, erhält führende Nullbytes und schließt verwechselbare Zeichen wie 0, O, I und l aus.",
"Die Konvertierung bleibt im Browser und eignet sich für Kennungen, Wallet-bezogene Beispiele, Bereitstellungscodes und Support-Fixtures ohne API-Upload."
"Die Konvertierung bleibt im Browser und eignet sich für Kennungen, Wallet-bezogene Beispiele, Bereitstellungscodes und Support-Testdaten ohne API-Upload."
],
"useCases": [
"Prüfen, ob ein Base32-Recovery-Code oder Bereitstellungswert sauber hin und zurück konvertiert.",
"Ein Base58-Kennungsbeispiel beim Debugging von Wallet-, Schlüssel- oder verteilten Systemen dekodieren.",
"Kompakte Kompakte Testdaten erstellen, wenn Base64-Zeichen in URLs, Shells oder Dokumentation stören.",
"Kompakte Testdaten erstellen, wenn Base64-Zeichen in URLs, Shells oder Dokumentation stören.",
"Kontrollieren, ob kopierte Werte durch E-Mail oder Chat Leerzeichen oder verwechselbare Zeichen enthalten.",
"Base32, Base58, Base64 und Hex vergleichen, bevor eine Darstellung für einen lokalen Workflow festgelegt wird."
],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10111,7 +10111,7 @@
],
"useCases": [
"Mesurer la taille Gzip de JSON, HTML, CSS ou extraits de logs.",
"Décoder des fixtures gzip Base64 copiées depuis des outils de debug.",
"Décoder des jeux de test gzip Base64 copiés depuis des outils de debug.",
"Comparer Gzip, Deflate et le support Brotli du navigateur."
],
"inputExamples": [
Expand Down Expand Up @@ -10187,7 +10187,7 @@
"useCases": [
"Extraire rapidement une valeur imbriquée depuis une configuration Kubernetes, Docker Compose ou CI.",
"Vérifier qu'une expression de chemin cible le bon noeud avant de modifier un overlay YAML.",
"Convertir un extrait YAML en JSON pour le coller dans une requête de débogage, une documentation ou un fixture de test."
"Convertir un extrait YAML en JSON pour le coller dans une requête de débogage, une documentation ou un jeu de test."
],
"inputExamples": [
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11524,7 +11524,7 @@
],
"useCases": [
"JSON、HTML、CSS、ログ断片の Gzip サイズを確認します。",
"デバッグツールからコピーした Base64 gzip fixture を展開します。",
"デバッグツールからコピーした Base64 gzip テストデータを展開します。",
"Gzip、Deflate、Brotli 対応状況を比較します。"
],
"inputExamples": [
Expand Down Expand Up @@ -12357,7 +12357,7 @@
"UTF-8 テキストを RFC 4648 のパディング付き Base32 に変換し、大文字アルファベットと固定ブロックを要求するシステムに合わせやすくします。",
"Base32 をテキストへ戻し、不正な文字や不正なパディングを拒否してコピーや転送時の問題を見逃しにくくします。",
"Bitcoin 形式の Base58 に対応し、先頭のゼロバイトを保持しつつ 0、O、I、l のような紛らわしい文字を除外します。",
"変換はブラウザ内で完結するため、識別子、ウォレット関連のサンプル、設定用コード、サポート用のテストデータ の確認に使えます。"
"変換はブラウザ内で完結するため、識別子、ウォレット関連のサンプル、設定用コード、サポート用のテストデータの確認に使えます。"
],
"useCases": [
"Base32 の復旧コードや設定値が安定して往復変換できるか確認する。",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10111,7 +10111,7 @@
],
"useCases": [
"JSON, HTML, CSS 또는 로그 조각의 Gzip 크기를 확인합니다.",
"디버깅 도구에서 복사한 Base64 gzip fixture를 해제합니다.",
"디버깅 도구에서 복사한 Base64 gzip 테스트 데이터를 해제합니다.",
"Gzip, Deflate, Brotli 지원 상태를 비교합니다."
],
"inputExamples": [
Expand Down Expand Up @@ -10996,7 +10996,7 @@
},
{
"error": "잘못된 알파벳을 선택했습니다",
"fix": "생성 시스템에 맞게 Base32 또는 Base58을 먼저 선택한 뒤 내용를 디버깅하세요."
"fix": "생성 시스템에 맞게 Base32 또는 Base58을 먼저 선택한 뒤 내용을 디버깅하세요."
},
{
"error": "인코딩을 보안 보호로 착각했습니다",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,7 @@
"intro": "为需要避免冲突的 ID、事件和记录批量生成 UUID,并提供适用于分布式系统和高吞吐量数据管道的存储、索引与迁移建议。",
"whatThisToolDoes": [
"它创建随机或按时间排序的标识符,并提供可配置数量和可直接复制的输出,适合工程工作流使用。",
"它可以帮助团队生成测试夹具、消息 ID 和合成数据集,而不会引入手工输入错误。",
"它可以帮助团队生成测试样例、消息 ID 和合成数据集,而不会引入手工输入错误。",
"当团队快速需要批量干净 ID 时,它为操作手册提供确定性生成点。"
],
"useCases": [
Expand Down Expand Up @@ -11508,7 +11508,7 @@
],
"useCases": [
"检查 JSON、HTML、CSS 或日志片段的 Gzip 体积。",
"解码调试工具中复制出的 Base64 gzip fixture。",
"解码调试工具中复制出的 Base64 gzip 测试样例。",
"比较 Gzip、Deflate 和浏览器 Brotli 支持状态。"
],
"inputExamples": [
Expand Down Expand Up @@ -11584,7 +11584,7 @@
"useCases": [
"从 Kubernetes、Docker Compose 或 CI 配置中快速抽取某个嵌套字段。",
"在修改 YAML 叠加文件前验证路径表达式是否命中预期节点。",
"把 YAML 片段转换为 JSON,方便粘贴到调试请求、文档或测试夹具中。"
"把 YAML 片段转换为 JSON,方便粘贴到调试请求、文档或测试样例中。"
],
"inputExamples": [
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10107,7 +10107,7 @@
],
"useCases": [
"檢查 JSON、HTML、CSS 或日誌片段的 Gzip 體積。",
"解碼除錯工具中複製出的 Base64 gzip fixture。",
"解碼除錯工具中複製出的 Base64 gzip 測試樣本。",
"比較 Gzip、Deflate 與瀏覽器 Brotli 支援狀態。"
],
"inputExamples": [
Expand Down Expand Up @@ -11031,13 +11031,13 @@
"選擇 Base32 或 Base58,並確認來源系統使用的字母表。",
"貼上樣本後先執行一次轉換,檢查是否有非法字元或填充錯誤。",
"把輸出再反向轉換回原始文字,確認往返一致。",
"寫入文件、測試樣本 或工單前移除敏感值。"
"寫入文件、測試樣本或工單前移除敏感值。"
],
"qualityChecklist": [
"確認編碼和解碼方向沒有選反。",
"檢查 Base32 的 = 填充只出現在結尾。",
"確認 Base58 樣本不包含 0、O、I 和 l。",
"分享前確認輸出不包含真實 權杖、金鑰或個人資訊。"
"分享前確認輸出不包含真實權杖、金鑰或個人資訊。"
],
"operationalNote": "Base32/Base58 轉換器適合放在識別碼除錯、測試樣本準備和文件複核環節,不能取代加密、簽章或正規的自動化測試。"
}
Expand Down
63 changes: 57 additions & 6 deletions tests/guards/localized-copy-guard.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1482,18 +1482,49 @@ const FILE_GUARDS: Array<{ file: string; forbidden: Array<string | RegExp> }> =
"The formatted ${mode.toUpperCase()} has been copied.",
],
},
]

const LOCALIZED_JSON_COPY_GUARDS: Array<{ globRoot: string; forbidden: Array<string | RegExp> }> = [
{
file: "scripts/generators/generate-localized-tool-content.mjs",
globRoot: "src/core/i18n/translations",
forbidden: [
"sert 脿 la ${intentTerm} directement dans le navigateur.",
"utile pour valider la ${intentTerm} dans le navigateur",
"au flux de ${intentTerm}",
"dans la phase de ${intentTerm}",
"doit 锚tre utilis茅 comme 茅tape de v茅rification rapide",
"测试 fixture",
"測試 fixture",
"テスト fixture",
"테스트 fixture",
"Test-Fixtures",
"fixtures de test",
],
},
{
globRoot: "src/core/seo/components/tool-content-template-modules/generated",
forbidden: [
"测试夹具",
"測試夾具",
"测试 fixture",
"測試 fixture",
"テスト fixture",
"Base64 gzip fixture",
"fixture de test",
"fixtures de test",
"Test-Fixtures",
"Support-Fixtures",
"Kompakte Kompakte",
"内容를",
"測試樣本 或",
"真實 權杖",
"テストデータ の",
],
},
]

const listJsonFiles = (root: string): string[] => {
const absoluteRoot = path.join(PROJECT_ROOT, root)
return fs.readdirSync(absoluteRoot)
.filter((file) => file.endsWith(".json"))
.map((file) => path.join(root, file))
}

describe("localized copy regression guard", () => {
it("rejects previously degraded de/fr copy fragments", () => {
const violations: string[] = []
Expand All @@ -1512,4 +1543,24 @@ describe("localized copy regression guard", () => {

expect(violations, `Found degraded localized copy fragments:\n${violations.join("\n")}`).toEqual([])
})

it("rejects known low-quality localized JSON fragments", () => {
const violations: string[] = []

for (const guard of LOCALIZED_JSON_COPY_GUARDS) {
for (const file of listJsonFiles(guard.globRoot)) {
const source = fs.readFileSync(path.join(PROJECT_ROOT, file), "utf8")
for (const fragment of guard.forbidden) {
const found = typeof fragment === "string"
? source.includes(fragment)
: fragment.test(source)
if (found) {
violations.push(`${file}: ${String(fragment)}`)
}
}
}
}

expect(violations, `Found low-quality localized JSON fragments:\n${violations.join("\n")}`).toEqual([])
})
})