Re: Asking for help: Update German translation of NR using LLM
Tina Petzel <[email protected]> Thu, 23 Jul 2026 13:32:09 +0200
| Newsgroups | gmane.comp.gnu.lilypond.devel,gmane.comp.gnu.lilypond.general |
|---|---|
| Message-ID | <[email protected]> |
--nextPartC8WVDt_AS1yEBChqaf6lEQ Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8"; protected-headers="v1" From: Tina Petzel <[email protected]> To: [email protected], [email protected] Cc: Werner LEMBERG <[email protected]> Subject: Re: Asking for help: Update German translation of NR using LLM Date: Thu, 23 Jul 2026 13:32:09 +0200 Message-ID: <[email protected]> In-Reply-To: <[email protected]> References: <[email protected]> MIME-Version: 1.0 Hello Werner, > While you can press a button in most web browsers to translate English > pages on the fly, due to the many musical and LilyPond-specific > technical terms there are inevitably flaws, that make the results > misleading. Such online translations also don't give you translated > PDF manuals. >=20 > I thus wonder whether a guy with LLM experience could help with > updating the German translation of the Notation Reference =E2=80=93 or ra= ther, > generating a complete translation from scratch, since the German > translation is severely outdated. Today, websites like Google > Translate provide translations (both German-to-English and > English-to-German) that are nearly perfect even for quite complicated > grammatical structures, which still amazes me. >=20 > This is intended as an experiment that could start with a few > chapters, say, to find out whether such an approach is feasible. Of > course, we would have to discuss the conditions for the LLM to get a > good result. In spite of the grammatical quality I expect that a lot > of technical terms will be mistranslated; we thus have to proofread > the results (I volunteer for that). >=20 > What do you think? I don=E2=80=99t thinks this solves the underlying problem. I think the prob= lem here stems from having individual independent documentation files, which induces a mas= sive workload to contributors and translators for keeping up with changes and sy= nc them to translations. And I think even if we were to use LLMs to automatically translate the docu= mentation =E2=80=94 we=E2=80=98ll still need to keep documentation synced, so someone would need to realize: Translation= is not up to date, so trigger the LLM, check output, update translation. I suppose if LLMs were 1= 00% reliable we could get rid of the localisations in the first place and translate docs on the fly, = which would solve this. But that is not realistic. But then, the Documentations are filled with texts that are more or less tr= ivial to translate, where probably the effort of updating the translation is not more than checking t= he output of the LLM and potentially correcting that. The main issue in translation is keeping a= ll changes synced up. It would rather be thinkable have the english documentation as a master doc= ument and use automated tooling to create the localizations from diffs =E2=80=94 = recognizing outdated blocks on the fly and potentially falling back to the original English text, as is done i= n pretty much any concept of software localization out there. And this would be fairly easy: Our documentation is naturally made up of no= des looking like ``` @node Title =2E.. content ... ``` Rather than replicating this for translations we could translate things by = node, that is to say, have a script collect all nodes in the main documentation, looking at the t= ranslation pool for a translation for the same node which would have a fingerprint of the origina= l node annotated, check the fingerprint, and if it matches replace the content of the node, e= lse issue a warning and use the original node. E.g. for ``` @node Text @chapter Text @lilypondfile[quote]{snippets/text-headword.ly} This section explains how to include text (with various formatting) in music scores. @node Writing text @section Writing text This section introduces different ways of adding text to a score. @cindex text, other languages @warning{To write accented and special text (such as characters from other languages), simply insert the characters directly into the LilyPond file. The file must be saved as UTF-8. For more information, see @ref{Text encoding}.} ``` the translation could specify ``` @ignore source-commit: e5a609e373eae846857f9a6d70a402a3d42b7d94 source-sha256: c746ad20e3ba4ddde5e132499c2e85a432fe0dadb875bee03b0a3980= 782a0edc @end ignore @node Text @chapter Text @lilypondfile[quote]{snippets/text-headword.ly} Dieser Abschnitt erkl=C3=A4rt, wie man Text (mit vielf=C3=A4ltiger =46ormatierung) in Partituren einf=C3=BCgt. @noindent Einige Textelemente, die hier nicht behandelt werden, finden sich in anderen Abschnitten: @ref{Vocal music}, @ref{Titles and headers}. @ignore source-commit: e5a609e373eae846857f9a6d70a402a3d42b7d94 source-sha256: bb4896a713969c135ecd1eda8a477dcb2582291e47742cd50def8455= d58c552b @end ignore @node Writing text @section Text eingeben Dieser Abschnitt zeigt verschiedene Arten, wie Text in die Partitur eingef=C3=BCgt werden kann. @cindex Text, andere Sprachen @warning{Wenn man Zeichen mit Akzenten und Umlaute oder besondere Zeichen (wie etwa Text mit anderen Alphabeten) eingeben m=C3=B6chte, kann man die Zeichen einfach direkt in die Datei einf=C3=BCgen. Die Datei muss als UTF-8 gespeichert werden. F=C3=BCr mehr Information siehe @ref{Text encoding}.} ``` So now a script would take the node =E2=80=9CText=E2=80=9D in the original,= find the translation node =E2=80=9CText=E2=80=9D, would check if the hash matches, and if so replace the original node by the= translation node. If the translation node does not exist it would issue a warning: "Translati= on of node `xyz` does not exists", similar if the hash does not match it would issue a warning: "Translation o= f node `xyz` is outdated". Additionally the script could identify translation nodes that are no longer= needed. Then the translators would get a precise pinpoint where they need to update= things and at any point (even if parts of the translation are outdated) the content of the tr= anslation is up to date. At least for me this would make translation much easier. The biggest blocke= r for me to just invest a bit of time to fix up the German docs is that my brain is completely over= whelmed by syncing the structure. Not saying LLMs cannot be helpful in assisting translation, especially when= you don=E2=80=99t speak a language perfectly and have issues finding the right words. Cheers, Tina P.S.: Translating this small part of the notation reference via chatGPT giv= es ``` @node Text @chapter Text @lilypondfile[quote]{snippets/text-headword.ly} In diesem Abschnitt wird erl=C3=A4utert, wie Text (mit verschiedenen =46ormatierungen) in Notens=C3=A4tze eingef=C3=BCgt werden kann. @node Text schreiben @section Text schreiben Dieser Abschnitt stellt verschiedene M=C3=B6glichkeiten vor, Text zu einem Notensatz hinzuzuf=C3=BCgen. @cindex Text, andere Sprachen @warning{Um Zeichen mit Akzenten oder andere Sonderzeichen (z. B. Zeichen aus anderen Sprachen) zu schreiben, f=C3=BCgen Sie diese einfach direkt in die LilyPond-Datei ein. Die Datei muss im UTF-8-Format gespeichert werden. Weitere Informationen finden Sie unter @ref{Textkodierung}.} ``` which is ... well, okay, but not very well written German. Yes, by addition= al prompt we could get it to be more idiomatic. But still this shows that the output from some= thing like chatGPT is just a machine translation. --nextPartC8WVDt_AS1yEBChqaf6lEQ Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part. Content-Transfer-Encoding: 7Bit -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQS0sdUK2Lu8of48K2+FHhaCPe7BywUCamH7uQAKCRCFHhaCPe7B y6rvAQDl/HuVGVh90YTY31CpK/OW9brjxKYAsEdm4GuKpJ2fBwD+PzbkaaSHpjEJ RTPdefb6IZFAULBWXicptSI0hLOTXQw= =E8p1 -----END PGP SIGNATURE----- --nextPartC8WVDt_AS1yEBChqaf6lEQ--