English copy — the PILOT: privatebin, paperless-ngx, romm (R-560 slice 5)
gates / gates (push) Failing after 2s

89 of 1 032 strings. No Hungarian byte moved; no image, pin, catalog_since or
compose line changed. EN_MISSING_CEILING 1032 -> 943 in this commit.

Chosen for SHAPE: privatebin exercises the plain case (description, tagline, lists);
paperless-ngx adds select options, a placeholder and a customer-facing folder label;
romm carries the catalog's only optional_config block, whose group has no id of its
own and is matched by `match_group` — the Hungarian group name it translates. All
three run on the demo box, so the English pages can be fetched rather than reasoned
about.

Two gate defects fixed while translating, each found by its own decoy rather than by
reading: coverage was counted only for the apps NAMED on the command line, so
`check-copy-i18n.py privatebin` reported 47 more missing strings than the same tree
unscoped and either number could have been made to "pass"; and the ASCII-Hungarian
stems matched as bare substrings, so „ird be" convicted "the third best" and „angol"
convicted "Angola". Both now have their own case in the decoy suite.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
2026-09-20 14:34:22 +02:00
parent 84e058463b
commit e81d41e527
6 changed files with 285 additions and 24 deletions
+72
View File
@@ -165,3 +165,75 @@ healthcheck:
checks:
- type: http
port: 8000
# --- English copy (localisation slice 5, R-560) --------------------------------------------
# The Hungarian above is UNCHANGED. A box on English reads this block field by field; a missing
# field shows the Hungarian one; a controller older than 0.257.0 ignores the block entirely.
i18n:
en:
description: "Digitise your documents and keep them in order"
data_paths:
- path: paperless
label: "Documents to read in"
deploy_fields:
- env_var: DOMAIN
label: "Domain"
description: "The server domain name"
- env_var: SUBDOMAIN
label: "Subdomain"
description: "The subdomain this app answers on"
- env_var: DB_PASSWORD
label: "Database password"
- env_var: PAPERLESS_SECRET_KEY
label: "Encryption key"
- env_var: PAPERLESS_ADMIN_USER
label: "Admin user name"
- env_var: PAPERLESS_ADMIN_PASSWORD
label: "Admin password"
description: "For the first sign-in. You can change it in the app afterwards."
- env_var: HDD_PATH
label: "Data storage path"
placeholder: "/mnt/felhom-drives/hdd_1"
description: "The path to the external hard drive where the documents are kept"
- env_var: PAPERLESS_OCR_LANGUAGE
label: "OCR language"
description: "The language the text recognition reads"
options:
- value: "hun"
label: "Hungarian"
- value: "eng"
label: "English"
- value: "hun+eng"
label: "Hungarian + English"
- value: "deu+eng"
label: "German + English"
app_info:
tagline: 'A digital filing cabinet - scanning, OCR and automatic sorting'
use_cases:
- 'Turn paper documents into files and keep them in order'
- 'Automatic OCR text recognition on scanned documents'
- 'Smart automatic sorting and tagging'
- 'Full text search across every document'
- 'Documents that arrive by e-mail are processed automatically'
first_steps:
- 'Open paperless.DOMAIN in your browser'
- 'Sign in: user "admin". The password is on the Settings page, under Automatically generated values'
- 'Upload a document in the app, OR drop it into the import/paperless folder in the File manager (FileBrowser) - it is read in and processed with OCR from there. The File manager sign-in is on the File manager app page'
- 'You can upload many documents at once: they are processed one by one, and a larger batch takes a few minutes'
- 'Create tags and correspondents so new documents sort themselves'
prerequisites:
- 'An external hard drive is recommended to keep the documents on'
- 'At least 1 GB of free RAM (for the OCR work)'
+32
View File
@@ -58,3 +58,35 @@ healthcheck:
checks:
- type: http
port: 8080
# --- English copy (localisation slice 5, R-560) --------------------------------------------
# The Hungarian above is UNCHANGED and is what a Hungarian household reads. A box on English
# reads this block field by field; a field missing here shows the Hungarian one, and a
# controller older than 0.257.0 ignores the whole block.
i18n:
en:
description: "Encrypted note and text sharing"
app_info:
tagline: "Encrypted text sharing - the server never sees the content"
use_cases:
- 'Share sensitive text safely'
- 'End-to-end encryption - the server cannot reach the content'
- 'You choose how long it lasts (5 minutes to 1 year, or never)'
- 'Optional: delete it automatically after it is read'
- 'Password protection for extra safety'
first_steps:
- 'Open paste.DOMAIN in your browser'
- 'Type your text and select Send'
- 'Share the link you get - the encryption key is part of the URL'
deploy_fields:
- env_var: DOMAIN
label: "Domain"
description: "The server domain name"
- env_var: SUBDOMAIN
label: "Subdomain"
description: "The subdomain this app answers on"
+87
View File
@@ -147,3 +147,90 @@ healthcheck:
checks:
- type: http
port: 8080
# --- English copy (localisation slice 5, R-560) --------------------------------------------
# The Hungarian above is UNCHANGED. A box on English reads this block field by field; a missing
# field shows the Hungarian one; a controller older than 0.257.0 ignores the block entirely.
i18n:
en:
description: "Retro game collection manager"
data_paths:
- path: roms
label: "ROM collection"
deploy_fields:
- env_var: DOMAIN
label: "Domain"
description: "The server domain name"
- env_var: SUBDOMAIN
label: "Subdomain"
description: "The subdomain this app answers on"
- env_var: DB_PASSWORD
label: "Database password"
- env_var: MYSQL_ROOT_PASSWORD
label: "MariaDB root password"
- env_var: ROMM_AUTH_SECRET_KEY
label: "Sign-in encryption key"
- env_var: HDD_PATH
label: "Data storage path"
placeholder: "/mnt/felhom-drives/hdd_1"
description: "The path to the external hard drive where the ROMs and cover art are kept"
app_info:
tagline: "Retro game collection manager, browser and player"
default_creds: "admin / admin"
use_cases:
- "Sort and browse a retro game collection in your browser"
- "Game details download themselves - cover art, descriptions, ratings"
- "Filter and search the whole collection by platform"
- "Upload and download ROM files in your browser"
- "Several people in the household can have their own account"
first_steps:
- "Open arcade.DOMAIN in your browser"
- "Sign in with the default admin / admin account"
- "Change the password straight away, in the Settings menu"
- "Upload the ROM files into the roms/ folder in the File manager (FileBrowser), sorted into platform folders (for example roms/gba/, roms/snes/)"
- "Start a Scan from the menu on the left to read the ROMs in"
- "Optional: set up metadata providers so cover art and descriptions download themselves (see below)"
prerequisites:
- "An external hard drive is needed to keep the ROM files and cover art on"
- "At least 1 GB of free RAM is recommended (MariaDB + Redis + RomM)"
- "ROM files sorted into platform folders (for example roms/gba/, roms/snes/)"
optional_config:
- match_group: "Metaadat-szolgáltatók"
group: "Metadata providers"
description: "So that cover art, descriptions and ratings download themselves. IGDB is the one worth setting up first. All of them are free after you sign up."
fields:
- env_var: IGDB_CLIENT_ID
label: "IGDB Client ID"
help_text: '1) Sign up or sign in on the Twitch developer portal (dev.twitch.tv). 2) Create a new application (any name will do). 3) Copy the Client ID across.'
- env_var: IGDB_CLIENT_SECRET
label: "IGDB Client Secret"
help_text: 'The Client Secret of your Twitch application (the "New Secret" button makes one).'
- env_var: STEAMGRIDDB_API_KEY
label: "SteamGridDB API Key"
help_text: 'Sign up on SteamGridDB, then select the "Generate API key" button under Preferences -> API.'
- env_var: SCREENSCRAPER_USER
label: "ScreenScraper user name"
help_text: 'Sign up on screenscraper.fr. Your account name is the API user name.'
- env_var: SCREENSCRAPER_PASSWORD
label: "ScreenScraper password"
help_text: 'The password of your screenscraper.fr account.'
- env_var: MOBYGAMES_API_KEY
label: "MobyGames API Key"
help_text: 'Sign up on MobyGames, then ask for a key on the API page. It gives detailed game information and credits.'