Our core of our app is a JavaScript SPA that's used in Hybrid containers, so we're not using LWC etc. for the UI, but we still leverage custom labels:
- How do you decide what becomes a label and what does not?
Simple rule: every single text string in the UI is a label enabling localization
- How do you fight redundancy among your labels without inventing complicated dependencies?
They're grouped using category by functional area of the app, but our app is pretty specific in domain so there's no real clash as such of label usage
- How do you modularize your labels and version them in GIT? Or just a single messy file?
One big file, as @PhilW says - we add them all by hand, never through the UI. Pull the file seems to randomly mess the order around. Tend to add them always at the bottom to simplify merges etc.
- Which tools do you use for translation? Are there external tools that simplify handling and actual translation?
We simply send CSV files out to third parties and get the responses back, though we don't actually package translations and just distribute them as part of implementation.
- Can I allow or restrict subscribers to adjust my translations?
I don't believe so, but there's a benefit in not doing this - even if all your customers use the same language, they may want to re-label things in the app, this provides a simple mechanism for them to put their own spin on your solution.