Tool RenPy Translation tool

5.00 star(s) 4 Votes

mert081

New Member
Mar 9, 2019
5
2
v01d_08
I don't have a free api anymore. When I create a new record, I can convert at most one game. It requests new credit card information every time, so I can't translate for free anymore. This program would be very nice if it was done again to do free automatic translation.
 
  • Like
Reactions: EnlyZ

v01d_08

Member
Modder
Jan 2, 2018
233
304
v01d_08
I don't have a free api anymore. When I create a new record, I can convert at most one game. It requests new credit card information every time, so I can't translate for free anymore. This program would be very nice if it was done again to do free automatic translation.
It is not actually "free", when you create a NEW account, Google gives you 300$ credit for free. So you can translate about 15m characters (20$ per 1 million).



Try it for yourself

If you're new to Google Cloud, create an account to evaluate how Cloud Translation performs in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
 
  • Like
Reactions: mert081

mert081

New Member
Mar 9, 2019
5
2
It is not actually "free", when you create a NEW account, Google gives you 300$ credit for free. So you can translate about 15m characters (20$ per 1 million).

I know, but its support in the country where I live will soon end, so it might be much better to produce a completely free system. Actually, I have a simple but complicated thought. Your program exports all dialogs from a renpy game into a .txt file. If we can write a simple program with an uncomplicated tool such as Visual studio, add the google free translation system (example:Translater++) and say "Translate the data written in the .txt file to the ones in quotation marks and write them back in quotation marks", this system seems possible. I can think of it, but it is very difficult for me to connect the API or make it translate certain text ranges through a program. My friend, don't misunderstand me, I have no intention of wisdom or teaching, it just makes me sad that I can't play the games I want in my language and I'm looking for a free solution. (Sorry for my English I wrote them using translation)
 

乃คяdaK

Engaged Member
Sep 28, 2018
2,053
17,597
I know, but its support in the country where I live will soon end, so it might be much better to produce a completely free system. Actually, I have a simple but complicated thought. Your program exports all dialogs from a renpy game into a .txt file. If we can write a simple program with an uncomplicated tool such as Visual studio, add the google free translation system (example:Translater++) and say "Translate the data written in the .txt file to the ones in quotation marks and write them back in quotation marks", this system seems possible. I can think of it, but it is very difficult for me to connect the API or make it translate certain text ranges through a program. My friend, don't misunderstand me, I have no intention of wisdom or teaching, it just makes me sad that I can't play the games I want in my language and I'm looking for a free solution. (Sorry for my English I wrote them using translation)
There is actually already a method without serving api. you need at least 40 minutes, not 15 :)

[Tool] - [Tutorial] Quickly translate renpy games without API (15 minutes) | F95zone
 

ktemanuel

Engaged Member
Mar 17, 2019
2,311
3,121
it seems that google will put some more limitations to the gcloud because it is giving failures when connecting to the site
 

eduard23

New Member
May 10, 2020
8
2
it's frustrating not being able to understand how translations are done, it should be easier. game creators should put the languages to choose in the playback. I think that would give the public a greater reach. surely there is a lot of work in those games that is devalued when playing them.
Creators please try to generate multi language games! creating a game without that option is like making a car that has no wheels.
 

mert081

New Member
Mar 9, 2019
5
2

ktemanuel

Engaged Member
Mar 17, 2019
2,311
3,121
is some kind of protection that when you want to extract the dialogs come out this way
# 0_0_1.rpy #6
# a2 "[dia1]"
a2 ""

# 0_0_1.rpy #12
# a2 "[dia2]"
a2 ""

# 0_0_1.rpy #18
# a2 "[dia3]"
a2 ""

# 0_0_1.rpy #24
# a2 "[dia4]"
a2 ""

How would you translate a game that brings this kind of dialogue? Sorry for my ignorance, but this is the second time I have come across this type of text
 

v01d_08

Member
Modder
Jan 2, 2018
233
304
What do you mean under "protection"? The tool handles this kind of string perfectly, here is an example of online translation with Google.
On the left - untranslated dialogues, on the right - result after translation.
1610558535483.png
 

moskyx

Engaged Member
Jun 17, 2019
3,963
12,770
Many doubts and "errors" I see posted on this thread are due to an incomplete understanding of the whole translation process and not to v01d_08 's translation tool. That's one of the reasons why I've written a comprehensive tutorial for those interested in translating Ren'Py games: sometimes learning how to walk is a good idea before start running

You can share you comments, suggestions and corrections in the tutorial's thread
 

v01d_08

Member
Modder
Jan 2, 2018
233
304
Many doubts and "errors" I see posted on this thread are due to an incomplete understanding of the whole translation process and not to v01d_08 's translation tool. That's one of the reasons why I've written a comprehensive tutorial for those interested in translating Ren'Py games: sometimes learning how to walk is a good idea before start running

You can share you comments, suggestions and corrections in the tutorial's thread
Wow, what a massive work you done writing that tutorial. If you don't mind, I've added a link to your thread to the first post.
 
  • Like
Reactions: xelion and moskyx

Ri-UK

New Member
Aug 24, 2020
4
4
v01d_08 how do i modify a screens.rpy to add the spanish language i can't find the files mentioned in the tuto
The game you are translating is a bit more complex than the conventional Ren'py games, the developer probably completely modified the UI of the game, in its file screens.rpy, on line 545, is where is located the preferences menu, all buttons have a hotspot, you will need to find a suitable hotspot for your language box for it to fit on the preferences screen.

Fortunately in the script there is already a language selection box, it is on line 600:
Python:
            hotspot (453, 385, 59, 34) action Language("russian")
            hotspot (458, 428, 58, 31) action Language(None)
(if you are not going to use Russian) You can simply replace it with:

Python:
            hotspot (453, 385, 59, 34) action Language("spanish")  #in quotation marks you should put the name you named when generating the translations.
            hotspot (458, 428, 58, 31) action Language(None)
or if you want to leave the Russian language selection:

Python:
            hotspot (453, 385, 59, 34) action Language("russian")
            hotspot (a, b, c, d, e) action Language("spanish")   #in quotation marks you should put the name you named when generating the translations.
            hotspot (458, 428, 58, 31) action Language(None)

but you will need to find a location that fits the screen.
In my example I represented by (a, b, c, d, e)
 

pantil

Newbie
Apr 21, 2019
30
44
After an investigation I came to a point that this is a possible bug in RenPy SDK. When you click "Generate translations" there, it creates a new game/tl/lang_name folder, and generates dialogues with emty translations. Then for each line it generates a label, like this:

Code:
# game/story/prologue/scenes/pro_s02.rpy:358
translate French pro_s02_44ce1024:

    # char "Well, that is definitely not appropriate."
    char ""
See, the label for this translations line is pro_s02_44ce1024. But for choice scenes it does not create it, all choice dialoges are moved to the end of the file, and even if you translate them manually (even without using my tool, just edit the .rpa file), the game will not recognize that translation for this line exists, becouse there is no label. So I think this is the reason why you can't translate it.
Ofcource there is always a chance that something wrong with the game itself, for example I managed to generate translations only from the third time, after I firstly launched the game several times. But sorry mate, I can't help you here.
machine translator

It works for me so far I don't know if it works for everyone it doesn't hurt to try.
I create this line manually.
I use a text editor of my choice to find a line.

Create manually
# game/scripts/hannahAndAthena.rpy:429
old "Mistress Hanna, I got you your latte."
new "Senhora Hanna, Trouxe o seu café com leite."

# game / scripts / -> paw of the file hannahAndAthena.rpy-> file name: 429-> line of text
old "Mistress Hanna, I got you your latte." -> original text
new "Senhora Hanna, Trouxe o seu café com leite." -> translated text

is some kind of protection that when you want to extract the dialogs come out this way
# 0_0_1.rpy #6
# a2 "[dia1]"
a2 ""

# 0_0_1.rpy #12
# a2 "[dia2]"
a2 ""

# 0_0_1.rpy #18
# a2 "[dia3]"
a2 ""

# 0_0_1.rpy #24
# a2 "[dia4]"
a2 ""

How would you translate a game that brings this kind of dialogue? Sorry for my ignorance, but this is the second time I have come across this type of text
the creator of the game is using a pointer
[day1] is an address pointer

the text is in another file
on MY SECRET FEVER is dialogues.rpy

define dia1 = Character ("My name is [name]. [int1]")




# 0_0_1.rpy :6
# a2 "[dia1]"
a2 ""
 
  • Like
Reactions: ktemanuel

ktemanuel

Engaged Member
Mar 17, 2019
2,311
3,121
machine translator

It works for me so far I don't know if it works for everyone it doesn't hurt to try.
I create this line manually.
I use a text editor of my choice to find a line.

Create manually
# game/scripts/hannahAndAthena.rpy:429
old "Mistress Hanna, I got you your latte."
new "Senhora Hanna, Trouxe o seu café com leite."

# game / scripts / -> paw of the file hannahAndAthena.rpy-> file name: 429-> line of text
old "Mistress Hanna, I got you your latte." -> original text
new "Senhora Hanna, Trouxe o seu café com leite." -> translated text



the creator of the game is using a pointer
[day1] is an address pointer

the text is in another file
on MY SECRET FEVER is dialogues.rpy

define dia1 = Character ("My name is [name]. [int1]")




# 0_0_1.rpy :6
# a2 "[dia1]"
a2 ""
is there a way to decrypt this file and translate it?
 

Tacito

Forum Fanatic
Jul 15, 2017
5,289
42,199
Hi v01d_08 thanks for your help.
Im trying to translate Light of my Life by naughtyroad from english to french.
I see this post only now ... so sorry for the delay.
The problem is not related to renpy or translation tool but how the author change the choices before output them.
Create a new .rpy and put your new screen choice in priority.
Old must match exactly to be translated , "Mom" is different from "1. Mom" "2. Mom" ...
You can see the new code and the old code
loml.jpg

Python:
init 10:
    screen choice(items):
        style_prefix "choice"

        vbox:
            for i in items:
                textbutton i.caption action i.action


    # screen choice(items):
        # style_prefix "choice"

        # vbox:
            # $ the_key = 0
            # for i in items:
                # $ the_key += 1
                # $ the_key_disp = the_key % 10
                # if i.action and persistent.choice_menu_hotkeys_enabled and renpy.variant("pc") and the_key_disp <= 10:
                    # textbutton "{alpha=*0.5}{size=-15}[the_key_disp]. {/size}{/alpha}" + i.caption action i.action
                # else:
                    # textbutton i.caption action i.action

            # if persistent.choice_menu_hotkeys_enabled and renpy.variant("pc"):
                # $ the_key = 0
                # for i in items:
                    # $ the_key += 1
                    # $ the_key_disp = the_key % 10
                    # if i.action and persistent.choice_menu_hotkeys_enabled and renpy.variant("pc") and the_key_disp <= 10:
                        # key ("K_" + str(the_key_disp)) action i.action
                        # key ("K_KP" + str(the_key_disp)) action i.action
 
Last edited:
5.00 star(s) 4 Votes