OK, you’ve got a very different answer from one of the other translators. That’s very valuable input - and sounds like you’ve actually found scenarios of obsolete strings. Based on this I’ll definitely look into writing a tool to try and find such scenarios.
I’m assuming the obsolete string in question is now gone, but by any chance do you remember roughly when you found it, what it was, and when it was nuked? Sounds like a good test case for such a tool.
I haven’t been able to find these entries in the gui (after using any tool/slider):
HISTORY_MSG_581;Local - deNoise lum f 1
HISTORY_MSG_582;Local - deNoise lum c
Those are just a couple entries. There may be more.
By the way, this is a perfect example of what you face when translating RT: if you don’t have full control and knowledge about all the tools, then you most probably won’t know what this means (what have you done in that history step).
That means you first have to know where the entry is located or how it is triggered, so you know what does it refer to. Then, you can translate it.
Oh, and if by any means those are not orphaned or obsolete, would you please post a screen capture showing where or how are they triggered?
A good proof of concept for such a script - my rough plan was to, for each entry in default, grep everywhere but rtdata/languages for the reference, and flag anything that got no hits. I now have a known test case.
I have been translating GUI into Japanese and never felt that I waisted my time.
I check the language page more often than before (especially, I see a notice about a new tool) whether the default is updated. Once a certain number of strings (addition, deletions and amendments) is accumulated I post the updated GUI in Beep 5681.
Last of all, in this posting occasion, I want to mention my appreciation to the developments member of RawTherapee for the work and careful thoughts.
@XavAL is correct in describing the way to find a entry you cannot find in the GUI. You need to shut down RT, restart with the new translation, search the entry… as he described. It indeed takes a lot of time. I am there since about two years and still working on it.
Yes, the answer sounds different. In my case, i think, the time wasn’t wasted, because i learned a lot of RT and i still do.
Over the night I was wondering if something like this might be the case - numbers like 581 and 582 are, um, unusual outside of the context of something like that. Looks like I’ll have to find the events table, parse it, and look for gaps.
Edit: Found the table, procevents.h
But at least that hints at where @XavAL might find these, from the looks of it, it would be in the history box, and judging from the text, some of the new local adjustments operations. Looks like a luminance denoise, not sure what f 1 and c are.
Look at the wonderful can of worms we’ve opened here!
Finding some way to automate the analysis is definitely going to be useful. Obviously the scope of that has increased significantly and requires more thinking.
Seeing “AUTOEXP” for all of the local stuff kinda seems strange to me - maybe all of the local adjustments stuff should have had its own category???
@XavAL definitely seems to think it’s problematic - although so far what seemed to be an orphaned entry was not actually orphaned. I think it is worth at least ATTEMPTING to do an orphaned-entry search both for now and the future, at least a partial semi-automated solution.
I can easily find strings outside of HISTORY_MSG_NNN that are orphaned in the source code
I should be able to find HISTORY_MSG_NNN orphans without too much trouble
Limitations will be:
If it exists in source but is commented out, I won’t flag it with any currently planned approaches. Most likely the good reviewing @heckflosse and @floessie have been doing will prevent most if not all occurrences of this from happening
If it exists in source, but is in a code path that is somehow dead/inaccessible, an automated tool won’t detect this. Again, hopefully mostly if not entirely prevented by our code reviewers.
To be fair, I think my explanation make you miss my point: I’m not worried at all about duplicated, orphaned or obsolete entries. I know how to deal with them. The point is that translators also work hard in RT, and their (our) work is not something done in a few minutes, whenever we are bored and don’t know what else to do.
By the way, the brand new Spanish translation was ready a few months ago, with the invaluable help of @paco.lores . We are just waiting a final (?) English version to re-check our translations.
And thus I think it’s a responsibility to try and reduce your effort required if possible.
Longterm that might be something like crowdin or weblate (weblate seems to be 100% FOSS and there’s already an instance hosted on the pixls infrastructure, so while my past familiarity is with crowdin, weblate may be a better longterm option, although translator input would be beneficial here on the future roadmap too!)
Short term, if I can parse those tables and find obvious orphans with a few hours of work, it seems like I should.
Dupes are going to be harder, obsolete entries that are still somehow present in the source code will be too. But obvious orphans seems to be low-hanging fruit to me.
Edit: Side note, timing is slightly bad this week due to the upcoming Easter holiday.
It might be useful to translators to use something like Andy’s script on different commit levels and run the outputs through diff to see what has changes since they last checked.
It turns out buried in tools, there’s already a script that does some of what I was intending to do - see @Thanatomanic 's comment on Removal of obsolete strings · Issue #6457 · Beep6581/RawTherapee · GitHub - but traversing the history events table to find its orphans is new, so after poking at the legacy script, I’ll likely be de-scoping mine to focus on events table maintenance.
@Thanatomanic also pointed out generateTranslationDiffs which I was already aware of - that appears to/should handle the task of flagging new untranslated strings for translators. The main issue is that it is dependent on default being in good shape, and reviewing that was one of the final tasks that M was going to do.
We already found a confirmed bug due to some cruft in default that should not be there.