Skip to content

IllusionMods/KKS-Translation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Koikatsu Sunshine Translations

English translation project for Koikatsu Sunshine

The translations are applied while the game is running and do not require replacing or modifying any game files.

Contents

Prerequisites

Installation

  1. Ensure you have the prerequisites installed.
  2. Go to the releases page and download the latest version. Alternatively, advanced users can get the latest beta translations by clicking on the "Clone or download" button above. If you are a translator, read the sections below to see how to contribute to the translations.
  3. Extract the zip and place the BepInEx folder inside your game folder (where the file game executable is).

Contribution

There are tens of thousands of unique lines of text that need translation and any help is appreciated. Regardless of your translation skill and Japanese knowledge you can still help with translations. Even if you have no experience, you can help by proofreading or using machine translation services such as Google Translate or DeepL (recommended). In the case of machine translations, clean up the translation using sanity and a little logic.

Translation done purely by machines must be kept in the designated files (zz_machineTranslation.txt files within RedirectedResources). These should be considered placeholders until manual translations are available (those should go into translation.txt). The goal is to have everything, manually translated.

  • Text - Normal text replacements and modifications.
  • Texture - Image replacements.

Basic operation and structure

Each translation line follows the pattern:

original text=translated text

Example:

悟飯=Food

Lines beginning with // are considered comments, i.e., they are not considered in the translation.

The translations are all inside the Bepinex\Translation\en folder. They are then split into the following directories:

  • RedirectedResources - Replaces the texts embedded in the game files. These translations are loaded only when the game needs the corresponding file, so it is preferable to use this directory instead of the Text directory because of its accuracy and performance. This directory mimics the structure of the game, placing a folder for each resource file (such as the ".unity3d" files).
  • Text - Generic translations that are loaded when the game opens. All texts that are not translated in RedirectedResources are checked into this directory. If there is no translation, then the original untranslated text is displayed in the game, Google Translator is called, the translated text is written to _AutoGeneratedTranslations.txt and only then the translation is displayed in the game. The text in this folder can be handled with regular expressions (Regex), resized, and separated by game scene instead of being separated by files. This directory is often used in user interfaces (UI) because of these features.
  • Text\Localizations - Strings under this folder were dumped via TextDump. Translations can be added for missing entries, but new entries should not be added or merging future dumps will become difficult.
  • Texture - Contains the translated version of game images. The game images are translated using image editing software. If available the source files (.psd, .xcf, etc.) files can be found in the project's Image Source Files folder.

Coordinate with other translators on the Koikatsu Discord #lingual-studies channel. To avoid translation conflicts please ask if anyone is working on a file. If you have any questions about the quality of your translations, ask for advice on the server.

AutoTranslator Config Changes

The following settings should be adjusted in your AutoTranslatorConfig.ini when working on translations.

Under [Behaviour]:

  • HandleRichText - this must be set to False when working on translations. When enabled this feature gives a better end user experience when encountering untranslated text, but will make it more difficult to see what needs to be translated.
  • EnableTextPathLogging - set to True to see what controls are being set to what text, and at what scope levels.
  • EnableTranslationHelper - set to True to see what files translated strings are loaded from as they are applied.

How to add or improve translations

  • If you want to make a simple edit simply open the file in question and click edit. After you are done editing, commit the changes and start a pull request.
  • If you have more translations to submit fork the repository. This will make a copy of the original project in your account. Upload your changes to the fork into your account, and then send a pull request to the original project. Your pull request will be reviewed and accepted after a quality check. Again, avoid raw machine translations. Proper capitalization, punctuation, and spelling is a must.

Text Translations

Texts that are not translated in RedirectedResources use the Text directory. In this directory the first translation found for a given text is used every time that this same text is found. But sometimes the same word can have different meanings depending on where you are in the game, in this case you can use the "scope level" feature to tell which translation should be used in that part of the game.

Scope Levels

To use scope levels, use the following structure:

#set level xxx
text=translation
text2=translation2
#unset level xxx

Where "xxx" represents the number of the desired scope level. Below is a table containing the known scope levels and their locations:

Known Scope Levels

Level Description Notes
-1 Global
1 Global Extended
3 Chara Maker
4 Main Menu
6 Main Game UI
8 H-Scenes Menus
9 H-Scenes Location
11 Free H Menu
13 Oil Minigame
14 ADV Dialogues
15 Chara Uploader
16 Chara Downloader
-1024 Tutorials Requires TextResourceRedirector

Resource Translations

The folder RedirectedResources is the main translation directory for the game, so it gets special treatment.

Inside each folder there is a file named translation.txt, this is the file where the translations should go. In some folders there is also the file zz_machineTranslation.txt which is where machine translations go, that usually have a lower quality.

Every translation.txt file has the raw Japanese text that needs translations. Each one starts commented out (// at the begining) so it will not be loaded. For your text to display correctly in game, put the translation on the right side of the equal sign and remove the // at the start of the line. Do not edit the Japanese text or the translation will not work. Example:

Before:

//Tシャツ=

After:

Tシャツ=T-shirt

If zz_machineTranslation.txt files are present only lines that are not translated by translation.txt will be used. If the file translation.txt has been fully translated, the file zz_machineTranslation.txt can be deleted. The goal of this translation project is that none of the zz_machineTranslation.txt files remain.

The assets folder inside of Bepinex\Translation\en\RedirectedResources can be compressed into a .zip archive to be read by the game (simply right-click on the assets folder and then compress to .zip). Uncompressed files under assets are also still loaded. The game has to be restarted in order to see updated translations.

The plugin TextResourceRedirector is required for these translations. Always keep it updated. (not ready yet, you early adopter!)

Structure of the "RedirectedResources" directory

Table with the localization of the translations for each part of the game:

Folder Description TextResourceRedirector Handler
action/list/clubinfo Clubs/Purpose of Stay ClubInfoHandler
action/list/monologue PC Monologue MonologueInfoHandler
action/list/prayinfo Prayers PrayInfoHandler
action/list/shopinfo Shop ShopInfoHandler
action/list/topic Topic Names TopicHandler
action/list/sound/se/env Environmental SFX EnvSEDataHandler
action/list/sound/se/footstep Footstep SFX FootSEDataHandler
action/list/wherelive Booking Descriptions WhereLiveDataHander
adv/scenario Cut Scene Text ScenarioDataHandler
communication/*/communication_* Heroine Dialog CommunicationInfoHandler
communication/*/communicationnpc_* NPC Dialog CommunicationNPCHandler
communication/*/optiondisplayitems_* Dialog Options ExcelDataHandler
communication/*/tips_* Tips Dialog TODO
communication/*/topiclisten* Listening Dialog TopicListenDataHandler
communication/*/topicpersonalitygroup_* Personality Names TopicPersonalityGroupHandler
communication/*/topictalkcommon* Topic Dialog TopicTalkCommonHandler
communication/*/topictalkrare* Topic Dialog TopicTalkRareHandler
custom/customscenelist Maker Dropdowns ExcelDataHandler
etcetra/list/config Personality Names VoiceInfoDataHandler
etcetra/list/nickname Call Names NickNameHandler
h/list/*/animationinfo_* Positions (game versions) AnimatioInfoDataHandler
h/list/*/personality_voice* H Subtitles VoiceAllDataHandler
h/list/*/result_topic* Topic Names TODO
list/characustom Maker Items, etc. MakerCustomDataHandler
list/random_name Random Names ExcelDataHandler
list/mapinfo Map Names MapInfoHandler
list/mapthumbnailinfo Map Names (Save/Load) MapThumnailInfoHandler

Personalities

Character Personalities
ID Name English Name Source
00 セクシー     Sexy Base Game
01 お嬢様      Ojousama Base Game
02 高飛車      Snobby Base Game
03 後輩キャラ    Kouhai Base Game
04 ミステリアス   Mysterious Base Game
05 電波       Weirdo Base Game
06 大和撫子     Yamato Nadeshiko Base Game
07 ボーイッシュ   Tomboy Base Game
08 純真無垢     Pure Base Game
09 単純       Simple Base Game
10 邪気眼      Delusional Base Game
11 母性的      Motherly Base Game
12 姉御肌      Big Sisterly Base Game
13 ギャル      Gyaru Base Game
14 不良少女     Delinquent Base Game
15 野生的      Wild Base Game
16 意識高いクール  Wannabe Base Game
17 ひねくれ     Reluctant Base Game
18 不幸少女     Jinxed Base Game
19 文学少女     Bookish Base Game
20 モジモジ     Timid Base Game
21 正統派ヒロイン  Typical Schoolgirl Base Game
22 ミーハー     Trendy Base Game
23 オタク女子    Otaku Base Game
24 ヤンデレ     Yandere Base Game
25 ものぐさ     Lazy Base Game
26 無口       Quiet Base Game
27 意地っ張り    Stubborn Base Game
28 のじゃっ子    Old-Fashioned Base Game
29 素直クール    Humble Base Game
30 気さく      Friendly Base Game
31 勝ち気      Willful Base Game
32 誠実       Honest Base Game
33 艶やか      Glamorous Base Game
34 帰国子女     Returnee Base Game
35 方言娘      Slangy Base Game
36 Sッ気      Sadistic Base Game
37 無感情      Emotionless Base Game
38 几帳面      Perfectionist Base Game
39 島っ娘      Island Girl Base Game
40 高潔       Noble KKS EX
41 ボクっ娘     Bokukko KKS EX
42 天真爛漫     Genuine KKS EX
43 ノリノリ     Hype KKS EX
NPC Personalities
ID Name Eng Name
-13 比嘉ひかり Hikari Higa

Personality Asset Locations

Type Location (replace ## with ID from table above)
Dialog (adv) adv/scenario/c##/*
Dialog (communication) communication/info_*/*_##
Call Names etcetra/list/nickname/*/c##
H Lines h/list/*/personality_voice_c##_*

Specialized translation lines

There are some specialized resources handled by the resource redirection that require some additional handling.

Format strings

Format strings have replacements in them processed by String.Format. The sections that are replaced by the game engine will look like {0}, {1}, {2}, etc. Usually they are a character name or the name of some item. The same replacements found in the original string should exist in the translated string.

Example:

{0}と仲がいいと思ってるわ=I think I'm good friends with {0}.

Optional Prefixes

There are a number of assets that support the use of optional prefixing to get a more exact match. This allows for more specific translations in cases where multiple assets might match the same replacement code. Matching for these assets will first try the prefixed match, then fall back to the standard un-prefixed match.

Prefixed lines should start with the prefix (e.g. SPECIAL:) followed by the text that needs to be translated. On the right side of the = you need only include the translated text without the prefix.

Given the following translation file:

PREFIX1:こんにちは=Hi!
こんにちは=Hello.

Trying to match こんにちは for an asset using PREFIX1 would return Hi!, where an asset using PREFIX2 would fall back to Hello..

Some prefixes can be combined with numbers, which limit them to matching specific table rows or columns.

asset location prefix Notes
communication/*/optiondisplayitems_* OPTION[x]: x will be an integer representing a question ID
etcetra/list/nickname SPECIAL:
list/random_name NAME[x]: x is the column (1-2 surname, 3-4 female given, 5-6 male given)

Tools

Status

Right now 44.8% of the game is translated and we are prioritizing the UI and game items. The project is evolving at a fast pace and things are constantly changing, so coordinate with other translators in the Koikatsu Discord #lingual-studies channel. To avoid translation conflicts please take a look in the To Do list on #whiteboard channel and ask if anyone is working on a file in #lingual-studies channel. If you have any questions about the quality of your translations, ask for advice on the server.

To Do List

Translate VR Module UI

Let us know which part are you doing :)

Translate the RedirectedResources folder

See the readme above on how to handle the MachineTranslations. The goal is to manually translate everything in the files translation.txt and clear all zz_MachineTranslation.txt files.

  • Translate items from the new DLC inRedirectedResources/assets/abdata/list/characustom/50
  • Check Nicknames in RedirectedResources\assets\abdata\etcetra\list\nickname\00 Taken by Dark Pulse
  • Translate Studio Animation Categories in RedirectedResources\assets\abdata\studio\info\01\animecategory_**_**\ (medium, 5 files) Taken by Dark Pulse
  • Translate Studio Animations in RedirectedResources\assets\abdata\studio\info\**\anime_**_**_**\ (long, 15 files) Taken by Dark Pulse
  • Translate Studio Item Categories in RedirectedResources\assets\abdata\studio\info\**\itemcategory_**_**\ (long, 9 files) Taken by Dark Pulse
  • Translate Studio Items in RedirectedResources\assets\abdata\studio\info\01\itemlist_**_**_***\ (very long, 16 files) Taken by Dark Pulse