You can translate custom apps in Frappe using CSV files. Here’s an example from a custom app, check_run.
The translations are stored in the standard translations folder with locale-specific CSV files. For example, here’s the British English file: check_run/translations/en-GB.csv
Separately, I also maintain a GitHub Action to help translate Markdown files in the docs/ folder of your app. This is useful if you want multilingual documentation alongside your app: translate-docs GitHub Action
Can you use that method to also translate Javascript?
HTML just translates perfectly, but when it comes to Javascript it simply doesn’t parse the translation strings. If I do bench get-untranslated, those untranslated strings will never show up.