Mod Summertime Saga: Translating the game (Guide)

Dogeek

Summertime Saga
Game Developer
Apr 20, 2018
74
510
Hi there,

I've seen people ask for translations for the game for the longest time, and we're on our way to create something more official, using crowdsourced translations. But, in the meantime, if you wish to translate the game, there are several tools at your disposal :

Calling labels, and how the game does it :

The game has a function in the Game class to select different dialogues based on the language class attribute defined there. To change that attribute, it's just a matter of writing this piece of code in a separate ".rpy" file.

Python:
init 1 python:
    Game.language = "es" # for spanish for instance, "fr" for french, etc
The game will then, every time a dialogue is called, look for the label name + the language string at the end. For instance, the label "bank_liu_account_info" has the english version in, to overwrite that dialogue, you'd have "bank_liu_account_info_fr" or "bank_liu_account_info_es" depending on the value of the language string.

This method can be used to translate any normal dialogues in the game.

For cutscenes :

For cutscenes, every cutscene uses the "FilteredText" displayable, which means that you have to set "config.say_menu_text_filter" to a function that will take the original string as an argument, and returned a changed string.
Python:
init 10 python:
    fr_translations = {"Using the key and stool, I was able to get into our attic.\nI had never been up there before.\nI was filled with excitement wondering what treasures {b}[deb_name]{/b} and dad had stashed away.": "En utilisant la clé et le tabouret, je suis allé dans le grenier.\nJe n'y avais jamais été auparavent.\nJ'étais excité de découvrir tous les trésors cachés par {b}[deb_name]{/b} là-haut."}

    def fr_text_filter(text):
        if text in fr_translations.keys():
            return fr_translations[text]
        else:
            return text
    
    config.say_menu_text_filter = fr_text_filter
Keep in mind that renpy won't handle dicts that are too large, if so, you can split the dictionnaries in several smallers dicts, and change the function like so :

Python:
def fr_text_filter(text):
    if text in fr_translations_1.keys():
        return fr_translations_[text]
    elif text in fr_translations_2.keys():
        return fr_translations_2[text]
    else:
        return text
Happy translating.
 
  • Like
Reactions: bas and Hefelo

Keitaro420

Member
Apr 17, 2018
418
1,004
I joined all the .rpy files in one, and eliminated all the lines that did not start with the variables of the characters, leaving something like this (Code), resulting in 36000 lines, I split it into files of 1000 lines to translate it with google, and I plan to insert those lines back into the code to revise the translation by hand and correct it, but problems arise because I'm not really a programmer, even if I try, at least I'll have to practice

Code:
label angelica_triggers_init:
label angelica_fsm_init:
label angelica_machine_init:
label angelica_dialogue:
label angelicas_room_dialogue:
label angelicas_room_dialogue_helen_route_pre:
ang "Good evening, {b}[firstname]{/b}. Have you come to assist in my training of {b}Helen{/b}?"
player_name "Only if you need my help."
ang "The {b}Lord{/b} always needs help from his followers."
ang "Besides, {b}Helen{/b} has been hoping you'd stop in again."
helen "I'm happy to see you here, {b}Master{/b}."
ang "{b}Helen{/b}, let's get you setup for tonight's ritual."
ang "I'm restraining you still, just in case you get some sinful impulse to cover yourself."
ang "I enjoy seeing you heeding my commands so submissively, {b}Helen{/b}."
ang "Now."
ang "Is there something you'd like to have done to {b}Helen{/b}?"
label angelicas_room_dialogue_helen_route_spanking:
player_name "I want to watch you... whip..."
player_name "Nevermind."
ang "Oh?"
ang "Are you to shy to ask me to punish {b}Helen{/b}?"
player_name "..."
ang "Don't worry, {b}[firstname]{/b}."
ang "{b}Helen{/b}, likes being whipped. Right, {b}Helen{/b}?"
helen "Yes, {b}Sister Angelica{/b}."
ang "Sit back, {b}[firstname]{/b} and enjoy the show."
ang "Repent, {b}Helen{/b}!"
ang "Feel the wrath of {b}God{/b} licking at your backside!"
helen "Ohhhh!"
ang "Beg for me... Beg me for more!"
helen "More! Punish my sinful flesh!"
ang "You are such a dirty woman..."
ang "Such a slut."
ang "Tell me...whose cock is better?"
helen "Wha-"
ang "I want to hear you say it, slut. Is {b}[firstname]{/b} penis better than {b}Harold's{/b}?"
helen "..."
helen "......"
helen "Ahhhhh!!! {b}[firstname]{/b}! I... love... his fat cock!"
ang "So vulgar, {b}Helen{/b}... Now ask me to whip you more, slut."
helen "Whip my slutty body, {b}Sister Angelica{/b}! Help me!"
helen "More {b}Sister{/b}... I want... more..."
helen "Why... are... you waiting?"
helen "Ohhhhhhh!!!"
ang "Such a greedy perverted sinner you are..."
 

Keitaro420

Member
Apr 17, 2018
418
1,004
I tried the method with "Game.language = "es"", but it doesn't work for all labels, like the label of "principals_office_smith_intro", the translation doesn't work. I think is because it have the form:
Jump("principals_office_smith_intro")
instead of:
Jump(game.dialog_select("principals_office_smith_intro"))

So that method isn't viable at the moment.
 

Larry Kubiac

Well-Known Member
Feb 4, 2018
1,895
10,099
Hi, I could see when translating the game is that only works with Diane and Daisy Path. And if you want to propose my translation to the French Patreon, it's with great pleasure. Maybe he'll stop clicking on the bit.link on Patreon post :p.