Tool RPGM SLR - Offline JP to EN Translation for RPG Maker VX, VX Ace, MV, MZ, and Pictures

RTS23

Newbie
Apr 10, 2018
54
84
Being completely new to this, I tried this tool so here's my feedback/experience.
You don't have permission to view the spoiler content. Log in or register now.

In summary, I appreciate even more now the translators, even those using AI because man, sometimes they can be really orthopedic for no reason. The translation is a bit off, specially because the local LLMs seems to be unable to understand who is talking on every line, mixing personas that may be talking about themselves in some sentence.

Whatever the case may be, it has been around 3 days (11 effective translation hours) of an experience that I consider to be good enough. So thanks for the tool.
 
  • Like
Reactions: Entai2965

Shisaye

Engaged Member
Modder
Dec 29, 2017
3,392
6,060
if I were to add something to it would be a "dictionary" of sorts, something like the context prompt used by DSLR so some specific terms are literally translated, even if this may be prone to error in some cases.
The differentiating factor of SLR compared to just using Sugoi is actually a dictionary with several thousand entries of pre-defined translations. It's just not particularly convenient to expand. You would add the thing you don't want sent to Sugoi to the TranslationEngineWrapper.js in the www>addons>SLRtrans>lib>TranslationEngine folder.
As a regex after the line that says "'//Specific pre defined translations',".
For example:
JavaScript:
/^購入する$/gi.toString() + ',',
If it is something that should only be replaced if it's alone in a cell.

Or:
JavaScript:
/[  ]*(?<=[^一-龠ぁ-ゔァ-ヴー々〆〤ヶレディファイッ]|^)購入する(?=[^一-龠ぁ-ゔァ-ヴー々〆〤ヶレディファイッ]|$)[  ❤♥♡…!?。、・♪]*/g.toString() + ',',
If it's an isolated text inside a cell with other stuff.

Then you would add another regex with the actual translation to the transredbatch.js in the www>addons>SLRbatch folder.
After the "//Predefined Translations" line.
Example:
JavaScript:
shistuff = shistuff.replaceAll(/(?<=[^一-龠ぁ-ゔァ-ヴー々〆〤ヶレディファイッ]|^)(?<!\\G\[|\\fs\[|\\RB\[|\\rb\[|\\p\[|\\l\[|\\r\[|\\F\[|\\FF\[|\\FFF\[|\\FFFF\[|\\FFFFF\[|\\FFFFFF\[|\\FFFFFFF\[|\\FFFFFFFF\[|\\FFFFFFFFF\[|\\FFFFFFFFFF\[|\\A\[|\\AA\[|\\AAA\[|\\AAAA\[|\\AAAAA\[|\\AAAAAA\[|\\AAAAAAA\[|\\AAAAAAAA\[|\\AAAAAAAAA\[|\\AAAAAAAAAA\[|\\p\[|\\FH\[|\\SVVN\[|\\se\[|\\SE\[|\\_SE\[|\\M\[|\\i\[|\\v\[|\\oc\[|\\VS\[|\\NA\[|\\vs\[|\\na\[|\\PICN\[|\\PICE\[|\\picn\[|\\pice\[)購入する(?=[^一-龠ぁ-ゔァ-ヴー々〆〤ヶレディファイッ]|$)/g, "Buy");
You can just copy that and replace the "購入する" with the original text and "Buy" with the replacement. The rest of that is just failsafe stuff to make sure it doesn't replace the wrong thing.

I thought about remaking the system to be more convenient to expand, but with sugoiV4 being very outdated at this point I kinda gave up on expanding it. If LLM progress continues at this pace, my dictionary is likely fully obsolete soon.
Does the options I set at SLRTranslator overwrite those in LM Studio server?
Changing the options in DSLR means it will send those specific parameters on each request, overriding defaults set by LM Studio. You do not need to touch the LM studio settings, unless it's about a setting not present in the DSLR options menu.
4- The save translation progressper batch should, in my opinion, be enabled by default, because for instance I lost like 4 hours without knowing aborting would delete all progress and not keep it for resuming later.
That makes it quite a bit slower though, so someone with high end hardware might be annoyed by it.
And when using not properly tested LLM the user might not always want to keep the translations.

If you are worried about loosing progress a better way would be to keep persistent cache enabled. (Which is on by default on SLR)
Even when it crashes you can just start the batch translation again and it will continue where it left off after filling in the translations from cache.
5- The search feature is a bit barebones in my experience. I would like to search at specific columns so the original text is unnaffected by any replace change or discarded from the search (useful when trying to reduce line breaks from the translation column).
I would use regex or custom scripts for that, and you can turn on regexp in the search/replace menu. I'm honestly not sure how I could make that more user friendly. GUI stuff is not exactly my strong suit.
6- Maybe it's not something solvable because it may be UI things, but after searching something that is found at a cell near the end of a file, then clicking any other cell to see the area found would move the UI downwards past the last row of the file. I don't really know why it happens, but it's a bit annoying.
Yeah I noticed that, too. The problem is I didn't make the UI and I have no idea what could be causing that. it's either a node.js issue in general or some dreamsavior fuckup.
7- Copying a cell and pasting it elsewhere does not copy the cell, but splits each line within the copied cell to multiple cells where it is pasted. If this is a feature, it is prone to error in my opinion.
It does copy the cell if you click into the field at the bottom first. It only tries to distribute stuff if you just have a cell selected in the grid.
8- The text wrapper feature doesn't get explained with enough detail or I'm stupid (most probably). I would guess that if I set it to 60/56, it means that the text will wrap anytime the text goes over the 60 character in non-avatar windows and 56 in avatar ones. However, this doesn't seem to be the case for me, because after testing many values 32/30 seem to be the adequate for what I was searching. I tested the options mentioned by the window and none seemed to work well in my case.
It's not "characters" it's "monospace characters". The issue with just using characters is that for example a "i" is a lot shorter than a "O".
As a result just counting characters means 10 can be
iiiiiiiiii
and
OOOOOOOOOO
Even though the latter takes much more space.
Because of that I'm instead counting in fixed width characters.
This special space for example " " is exactly 1 monospace wide.
They will always be that width regardless which font you use.

As for the shortcuts, they are specifically for using Stint ultra condensed font, or a font size of 16, because those are my preferred options for trying to make things fit in option menus. Since English takes so much more space than Japanese trying to fit English in standard font only very rarely works. (In an automated fashion)
9- Also with the text wrapper feature, for some reason it usually cuts early even if the limit wouldn't be reached whenever there's a comma in the sentence. For instance, "As a newcomer, I'm confused about how to act..." would be cut as "As a newcomer,\nI'm confused about how to act...".
I made it an elaborate script trying to find "natural" break points so it doesn't look stupid in-game. If you just want "dumb" wrapping you can actually do that, too, by right-clicking an object and choosing wrap there. That one also uses the "normal" character count, since it's the original wrapping system of dreamsavior.
 
Last edited:
  • Like
Reactions: RTS23

RTS23

Newbie
Apr 10, 2018
54
84
Thanks forthe answers.

The differentiating factor of SLR compared to just using Sugoi is actually a dictionary with several thousand entries of pre-defined translations. It's just not particularly convenient to expand. You would add the thing you don't want sent to Sugoi to the TranslationEngineWrapper.js in the www>addons>SLRtrans>lib>TranslationEngine folder.
As a regex after the line that says "'//Specific pre defined translations',".
For example:
JavaScript:
/^購入する$/gi.toString() + ',',
If it is something that should only be replaced if it's alone in a cell.

Or:
JavaScript:
/[  ]*(?<=[^一-龠ぁ-ゔァ-ヴー々〆〤ヶレディファイッ]|^)購入する(?=[^一-龠ぁ-ゔァ-ヴー々〆〤ヶレディファイッ]|$)[  ❤♥♡…!?。、・♪]*/g.toString() + ',',
If it's an isolated text inside a cell with other stuff.
Great to know. I thought of something like that, but seeing that it would be too much work (I have +250 terms, too many because of splitting name and surname) I just tried out an LLM to check it out.

Changing the options in DSLR means it will send those specific parameters on each request, overriding defaults set by LM Studio. You do not need to touch the LM studio settings, unless it's about a setting not present in the DSLR options menu.
That explains why the context prompt did only work if it was passed through SLRTranslator.
I would annotate that on the help manual. I would say is the kind of thing that seems obvious but it's not for a fool like me (probably did not help trying to figure out multiple software at the same time, mixing instructions to different things).

That makes it quite a bit slower though, so someone with high end hardware might be annoyed by it.
And when using not properly tested LLM the user might not always want to keep the translations.

If you are worried about loosing progress a better way would be to keep persistent cache enabled. (Which is on by default on SLR)
Even when it crashes you can just start the batch translation again and it will continue where it left off after filling in the translations from cache.
Oh, I did disable the cache as stated in the help manual for DSLR, though I did use a local LLM instead of comercial one, so I guess I should have moved away from that configuration example.

I would use regex or custom scripts for that, and you can turn on regexp in the search/replace menu. I'm honestly not sure how I could make that more user friendly. GUI stuff is not exactly my strong suit.
Yeah, I used regex but that only allows to differentiate between text, not columns. I guess I didn't realize there's a difference between japanese and english typesets that maybe can be differentiated using regex, but a GUI selector with column and cell color tag would make easier changes without 3rd party tools or specific scripts.
I exported to .ods spreadsheets, but it's way too conversome to check every different file. Scripts would help but did not read anything on the help manual, so I just left it as last resort once I figured out what I really want to do.

It does copy the cell if you click into the field at the bottom first. It only tries to distribute stuff if you just have a cell selected in the grid.
No idea what did I do before, that now it's working as expected.

It's not "characters" it's "monospace characters". The issue with just using characters is that for example a "i" is a lot shorter than a "O".
As a result just counting characters means 10 can be
iiiiiiiiii
and
OOOOOOOOOO
Even though the latter takes much more space.
Because of that I'm instead counting in fixed width characters.
This special space for example " " is exactly 1 monospace wide.
They will always be that width regardless which font you use.
Oh, right. I didn't remember about that since the game I'm trying it out uses a monospaced font, so both strings are equally long. That's why I wasn't understanding the feature.

You don't have permission to view the spoiler content. Log in or register now.



I made it an elaborate script trying to find "natural" break points so it doesn't look stupid in-game. If you just want "dumb" wrapping you can actually do that, too, by right-clicking an object and choosing wrap there. That one also uses the "normal" character count, since it's the original wrapping system of dreamsavior.
I did get the feeling of that. The problem is that the "right-click object/wrap" overwrites from one column to another, even if the cell of origin is empty. If I first get column 1 to 3 using wrap, then column 2 empty cells will overwrite 3 when I wrap that.
The only solution in this case is 3rd party or script, at least if I did not miss anything.
 

Shisaye

Engaged Member
Modder
Dec 29, 2017
3,392
6,060
Oh, I did disable the cache as stated in the help manual for DSLR, though I did use a local LLM instead of comercial one, so I guess I should have moved away from that configuration example.
The issue with the cache is that you only have a single one for DSLR, that means if you change LLM it will still pull cache data from the old LLM. So you need to actually delete the cache manually when switching models.

Another issue is that if something is pulled from cache it's not being sent to the LLM, which means the LLM could loose out on context for the missing translations. (Less relevant for small LLMs without custom context prompts though)
But of course not using the cache can make the whole deal take ages, or in case of a premium service be pretty expensive.

It's a balancing act I guess.

If you know you are going to use the translations because they're not actually overwriting cells right now, then the saving after each batch option probably makes more sense. :unsure:

That stuff was a non issue when this was only using Sugoi, which can't even use context...
There's actually almost a million individual cached translations for Sugoi included in SLR Translator, because there's basically never a reason to not save the cache with that one.

The translation engine cache files are located in the www>addons>SLRtrans folder.
 

RTS23

Newbie
Apr 10, 2018
54
84
Oh, then disabling the cache was the good option for a "full free" translation like mine.

I tried to make a Automation script, but I just realized that the right-click option will not show the scripts. Am I doing something wrong like not importing the script first or what? I did write the script using the "Create Automation" option.

If that doesn't work, then any suggestion on how to script column modifications (copying, moving cells conditionally)? Libreoffice Calc is just too slow because there're too many files, and the record feature it has doesn't record paste skipping empty cells (another option would be to do a BASIC script, which I hate). Thought about using the "comma separated values" (CSV) export, but I feel it's not safe since who knows if the text has ", somewhere.
I even tried to modify the program so the top wrapper button does the right-click wrapper function, but there're too many packages within packages and is out of my capabilities.

EDIT: I forgot about something. The program does append " - Modified with SLR Translator v2.0" at the title of the window on System.json. The problem is that it doesn't seem to check if the append was already done by a previous run (I believe it appends it during translation), so I ended up with "<game_title> - Modified with SLR Translator v2.0 - Modified with SLR Translator v2.0 - Modified with SLR Translator v2.0 - Modified with SLR Translator v2.0". Maybe the program should check if the title has already the text before appending it.
 

Shisaye

Engaged Member
Modder
Dec 29, 2017
3,392
6,060
I tried to make a Automation script, but I just realized that the right-click option will not show the scripts. Am I doing something wrong like not importing the script first or what? I did write the script using the "Create Automation" option.
Did you actually add it to favorites? There should be a checkbox for that.
 
  • Like
Reactions: RTS23

Shisaye

Engaged Member
Modder
Dec 29, 2017
3,392
6,060
EDIT: I forgot about something. The program does append " - Modified with SLR Translator v2.0" at the title of the window on System.json. The problem is that it doesn't seem to check if the append was already done by a previous run (I believe it appends it during translation), so I ended up with "<game_title> - Modified with SLR Translator v2.0 - Modified with SLR Translator v2.0 - Modified with SLR Translator v2.0 - Modified with SLR Translator v2.0". Maybe the program should check if the title has already the text before appending it.
Ah shit, that's probably happening because the version number got a lot shorter from 1.144 to 2.0 and the cleanup step is looking for more digits.
I'll fix that next update.

If you want to just get rid of the step adding it, it is at the very end of the transredbatch.js, the "ReplacerGameTitle" function.
Just change that function to be empty.

Edit: Not sure when I'll actually release another update though, I don't really have any set plans.
I was expecting a bit more feedback from people regarding the new SEP addition, but I guess there's not much to say.
cool.jpeg
 
Last edited:

RTS23

Newbie
Apr 10, 2018
54
84
On the wrapper function, maybe I'm wrong, but I would say what it lacks is a check that if it surpasses 4 lines (makes another window) force squishing text, skipping the part of the script to make text beautiful. Of course, if the text contains a character name, it should take into account the maximum length that it can be to avoid overflowing the screen, something I suppose it already does.

Also, I don't know if your wrapper scripts skip color commands (eg \C[1]), but the right-click option clearly doesn't. Maybe adding a non-monospace function to your wrapper mode would help to specific cases like mine, though I manage with Automation scripts + right-click wrapper (the only thing I'm missing is that I cannot differentiate between avatar and non-avatar windows, but it's fine for an amateur translation like mine).

About DSLR mode, does the LLM actually understand who is talking? Could be there a way to tell from the RPG Maker code so the AI is able to comprehend a bit better conversations. Maybe is something that is already being done, but since the LLM I'm using is a bit wonky and I don't really know what I'm doing most of the time, I cannot know for sure.

Don't worry about updating the tool too much. Give it time for the changes to be meaningful enough for an update. Otherwise, people start not worrying about updating all togheter because of too many updates, which bring many other problems.
 

LinkR34

Member
Dec 9, 2017
295
261
For some reason this happened:

1756657459898.png

Instead of only translating

\V[401]回
\V[681]ml

It added "I am sorry. I am sorry." to all lines with those characters, and when I ran the automatic word wrapping it tagged them "indigo".

And the translation ended like this:
\V[401]ct I am sorry. I am sorry. \V[681]ml

I'm trying to translate this game: https://f95zone.to/threads/translat...-netorimurano-rj01256651.226551/post-15625983

(i'm using SLR v2.0)
 
Last edited:

Samjaza

Newbie
Jun 10, 2017
34
16
For some reason this happened:

View attachment 5205162

Instead of only translating

\V[401]回
\V[681]ml

It added "I am sorry. I am sorry." to all lines with those characters, and when I ran the automatic word wrapping it tagged them "indigo".

And the translation ended like this:
\V[401]ct I am sorry. I am sorry. \V[681]ml

I'm trying to translate this game: https://f95zone.to/threads/translat...-netorimurano-rj01256651.226551/post-15625983

(i'm using SLR v2.0)
Ive had issues in the past with SugoiV4 doing that
 

Shisaye

Engaged Member
Modder
Dec 29, 2017
3,392
6,060
For some reason this happened:

View attachment 5205162

Instead of only translating

\V[401]回
\V[681]

It added "I am sorry. I am sorry." to all lines with those characters, and when I ran the automatic word wrapping it tagged them "indigo".

And the translation ended like this:
\V[401]ct I am sorry. I am sorry. \V[681]ml

I'm trying to translate this game: https://f95zone.to/threads/translat...-netorimurano-rj01256651.226551/post-15625983

(i'm using SLR v2.0)
That means Sugoi received a task it is unable to understand and basically completely crashed out.
But there's no reason why it should crash out here, since all it should have been sent was 回, everything else should have been filtered.
So I assume that it was somehow sent special whitespace, or something like that. You should see what it was actually sent in the console, but I'll run some tests myself with that game.

Edit: Yep it's being sent whitespace because the dev for some reason added non breaking spaces at the end between linebreaks.
I'll fix that next update by making my filter system more aggressive.
 
Last edited:
  • Heart
Reactions: LinkR34

Shisaye

Engaged Member
Modder
Dec 29, 2017
3,392
6,060
I've released SLR v2.001.

Instead of only translating

\V[401]回
\V[681]ml

It added "I am sorry. I am sorry." to all lines with those characters, and when I ran the automatic word wrapping it tagged them "indigo".
Fixed it by more aggressively removing whitespace at the start and end of cells if there are linebreaks.
I even tried to modify the program so the top wrapper button does the right-click wrapper function, but there're too many packages within packages and is out of my capabilities.
I actually have a pre-made custom button for that, but I guess you didn't find it in the mess that is transredbatch.
I've added a new bit to the help menu to explain how to enable/use it.
EDIT: I forgot about something. The program does append " - Modified with SLR Translator v2.0" at the title of the window on System.json. The problem is that it doesn't seem to check if the append was already done by a previous run (I believe it appends it during translation), so I ended up with "<game_title> - Modified with SLR Translator v2.0 - Modified with SLR Translator v2.0 - Modified with SLR Translator v2.0 - Modified with SLR Translator v2.0". Maybe the program should check if the title has already the text before appending it.
Should be fixed now.
 
  • Like
Reactions: RTS23