code:
l_french:
 sub_suggestion_obedience_training_label: "Entrainer un partenaire"
 sub_suggestion_obedience_training: "Suggestion: Entrainer [recipient.GetShortUIName] à devenir un[recipient.Custom('FR_E')] $game_concept_sub_subservience_concept$"
 sub_suggestion_obedience_training_desc: "Votre [actor.Custom2('RelationToMeShort', SCOPE.sC('recipient'))] [recipient.GetShortUINameNoTooltip] peut etre entrainé[recipient.Custom('FR_E')] à devenir un[recipient.Custom('FR_E')] [sub_subservient_concept|E] offrant une variété de bénéfices personnels et politiques."
 sub_suggestion_obedience_training_click: "#Cliquer pour ouvrir l'interaction d'entrainement#!"


code:
l_french:
 trait_sub_subservient: "Asservissement"
 trait_sub_subservient_1: "élève (Obéissance)"
 trait_sub_subservient_1_desc: "Ce personnage a une idée basique de l'obéissance demandée à quelqu'un etant $game_concept_submissive$, mais guère plus."
 trait_sub_subservient_1_character_desc: "[ROOT.GetCharacter.GetFirstNameNoTooltip] a une idée basique de l'obéissance demandé[ROOT.GetCharacter.Custom('FR_E')] à un[ROOT.GetCharacter.Custom('FR_E')] $game_concept_submissive$, mais guère plus."
 trait_sub_subservient_2: "Respectueux"
 trait_sub_subservient_2_desc: "Ce personnage obéit rapidement et naturellement, et commence a trouver de la joie en le faisant."
 trait_sub_subservient_2_character_desc: "[ROOT.GetCharacter.GetFirstNameNoTooltip] obéit rapidement et naturellement, et commence a trouver de la joie en le faisant."
 trait_sub_subservient_3: "obéissant"
 trait_sub_subservient_3_desc: "Ce personnage a apprit tout ce qu'il y avait a savoir pour servir un $game_concept_dominant$. Tout ce qu'il reste a faire est que cela reste enraciné."
 trait_sub_subservient_3_character_desc: "[ROOT.GetCharacter.GetFirstNameNoTooltip] a apprit tout ce qu'il y avait a savoir pour servir un $game_concept_dominant$. Tout ce qu'il reste a faire est que cela reste enraciné."
 trait_sub_subservient_4: "Servile"
 trait_sub_subservient_4_desc: "Ce personnage a embrassé sa position en tant que $game_concept_submissive$. l'obéissance lui est devenue une seconde nature."
 trait_sub_subservient_4_character_desc: "[ROOT.GetCharacter.GetFirstNameNoTooltip] a embrassé sa position en tant que $game_concept_submissive$. l'obéissance lui est devenue une seconde nature."

 trait_sub_clothing_rules: "Règles d'Habillage"
 trait_sub_clothing_rule_1: "Accoutrement Révélateur"
 trait_sub_clothing_rule_1_desc: "Montrer plus de peau que normalement, mais pas suffisament pour facher un point de vue traditionnel."
 trait_sub_clothing_rule_1_character_desc: "[ROOT.GetCharacter.GetFirstNameNoTooltip] Montre plus de peau que normalement, mais pas suffisament pour facher un point de vue traditionnel."
 trait_sub_clothing_rule_2: "Accoutrement Scandaleux"
 trait_sub_clothing_rule_2_desc: "Porter tellement peu que ce qui est là est plus une formalité qu'un habit ayant une quelquonque utilité de couvrir quoi que ce soit."
 trait_sub_clothing_rule_2_character_desc: "[ROOT.GetCharacter.GetFirstNameNoTooltip] Porte tellement peu que ce qui est là est plus une formalités qu'un habit ayant une quelquonque utilité de couvrir quoi que ce soit."
 trait_sub_clothing_rule_3: "Nudité Forcée"
 trait_sub_clothing_rule_3_desc: "[ROOT.GetCharacter.GetSheHe] dénuder, qu'elle le veuille ou non."
 trait_sub_clothing_rule_3_character_desc: "[ROOT.GetCharacter.GetFirstNameNoTooltip] est forcé[ROOT.GetCharacter.Custom('FR_E')] d'être nu[ROOT.GetCharacter.Custom('FR_E')], qu'[ROOT.GetCharacter.GetSheHe] le veuille ou non."
 trait_sub_clothing_rule_4: "Règle d'Habillage 4"
 trait_sub_clothing_rule_4_desc: "Ce trait n'est pas censé etre utilisé. Vous ... n'avez pas TRICHE n'est-ce pas !?"

 trait_sub_chastity_rules: "Règles de Chasteté"
 trait_sub_chastity_rule_1: "Orgasmes limités"
 trait_sub_chastity_rule_1_desc: "Ce personnage se voit souvent refuser la jouissance, et sa libido est visiblement plus élevée."
 trait_sub_chastity_rule_1_character_desc: "[ROOT.GetCharacter.GetFirstNameNoTooltip] se voit souvent refuser la jouissance, et sa libido est visiblement plus élevée."
 trait_sub_chastity_rule_2: "Orgasmes Interdits"
 trait_sub_chastity_rule_2_desc: "Les orgasmes ne sont autorisés qu'a de rares exeptions, ce personnage passe le plus clair de ses heures éveillés dans un état de désirs - et la plupart de ses heures de sommeil aussi !"
 trait_sub_chastity_rule_2_character_desc: "Les orgasmes ne sont autorisés qu'a de rares exeptions, [ROOT.GetCharacter.GetFirstNameNoTooltip] passe le plus clair de ses heures éveillés dans un état de désirs - et la plupart de ses heures de sommeil aussi !"
 trait_sub_chastity_rule_3: "Masturbation interdit"
 trait_sub_chastity_rule_3_desc: "Interdit[ROOT.GetCharacter.Custom('FR_E')] de se masturber ou de se toucher de quelque façon que ce soit, et seulement authorisé[ROOT.GetCharacter.Custom('FR_E')] a jouir dans d'extremes rares cas, ce personnage frotte constament ses jambes l'une contre l'autre et lutte pour penser a autre chose qu'au sex."
 trait_sub_chastity_rule_3_character_desc: "Interdit[ROOT.GetCharacter.Custom('FR_E')] de se masturber ou de se toucher de quelque façon que ce soit, et seulement authorisé[ROOT.GetCharacter.Custom('FR_E')] a jouir dans d'extremes rares cas [ROOT.GetCharacter.GetFirstNameNoTooltip] frotte constament ses jambes l'une contre l'autre et lutte pour penser a autre chose qu'au sex."
 trait_sub_chastity_rule_4: "L'Effermer dans une ceinture de chasteté"
 trait_sub_chastity_rule_4_desc: "ce personnage a été Effermé dans une ceinture de chasteté. Seulement la pitié de s[ROOT.GetCharacter.Custom('FR_OnA')] [GetPlayer.Custom('SubMasterMistressPossessive')|U] peut délivrer ses parties intimes prison."
 trait_sub_chastity_rule_4_character_desc: "[ROOT.GetCharacter.GetFirstNameNoTooltip] a été Effermé[ROOT.GetCharacter.Custom('FR_E')] dans une ceinture de chasteté. Seulement la pitié [GetPlayer.Custom('SubMasterMistressPossessive')|U] peut délivrer ses parties intimes de sa prison."

repo_name: crusader/kings

license: mit


code:
l_german:
SUB_MASTER:0 "master"
SUB_MISTRESS:0 "mistress"
SUB_MASTER_POSSESSIVE:0 "master's"
SUB_MISTRESS_POSSESSIVE:0 "mistress'"
SUB_PENIS:0 "penis"
SUB_PUSSY:0 "pussy"
SUB_MALE_TORSO:0 "torso"
SUB_FEMALE_TORSO:0 "breasts"


code:
l_german:
sub_pose.0001.t:0 "Putting On A Show"
sub_pose.0001.desc.short:0 ""What do you desire, [actor.Custom('SubMasterMistress')|U]?""
sub_pose.0002.desc.short:0 ""I was hoping you would say that, [actor.Custom('SubMasterMistress')|U]. Perhaps when you're satisfied with my little show, we could move to the bed?""
sub_pose.0003.desc.short:0 ""Yes, a little... but you can look all you want, [actor.Custom('SubMasterMistress')|U]. Your pleasure is more important than my modesty.""
sub_pose.0004.desc.short:0 ""I will do my best, [actor.Custom('SubMasterMistress')|U], but having you watching me is very... distracting. Does this pose please you?""
sub_pose.0005.desc.short:0 ""Oh...! H-how long have you had shackles in here?! And m-more importantly, how long are you going to keep me locked up like this...?""

sub_pose.0001.a:0 "Actually the first pose was fine."
sub_pose.0001.b:0 "You look stunning."
sub_pose.0001.c:0 "Getting embarrassed at all?"
sub_pose.0001.d:0 "Just try to look natural."
sub_pose.0001.e:0 "Actually, I think you'd look best chained up!"
sub_pose.0001.f:0 "That will be all for now."

sub_rules.0001.t:0 "Changing Chastity Rules"
sub_rules.0001.desc.short:0 "You consider the different rules you could set for [recipient.GetFirstNameNoTooltip]'s orgasms."

sub_rules.0001.a:0 "Remove all restrictions on [recipient.GetHerHis] orgasms."
sub_rules.0001.b:0 "Occasional orgasm denial will do [recipient.GetHerHim] good."
sub_rules.0001.c:0 "Keep [recipient.GetHerHim] denied. Perhaps a few orgasms a year, if [recipient.GetSheHe] behaves."
sub_rules.0001.d:0 "Orgasms? Never! In fact, a no-touch rule is what [recipient.GetSheHe] needs."
sub_rules.0001.e:0 "Lock [recipient.GetHerHim] in a chastity belt. No orgasms, no touching, and no chance of pregnancy."
sub_rules.0001.f:0 "Nevermind."

sub_rules.0002.t:0 "Changing Clothing Rules"
sub_rules.0002.desc.short:0 "Dressing up [recipient.GetFirstNameNoTooltip] in the privacy of your chambers is enjoyable, of course, but you could also determine what [recipient.GetSheHe]'s allowed to wear the rest of the time..."

sub_rules.0002.a:0 "Let [recipient.GetHerHim] wear what [recipient.GetSheHe] likes."
sub_rules.0002.b:0 "Have [recipient.GetHerHim] dress provocatively."
sub_rules.0002.c:0 "Permit undergarments only."
sub_rules.0002.d:0 "Revoke all clothing privileges!"
sub_rules.0002.e:0 "Nevermind."


code:
l_german:
sub_recent_training_modifier:0 "Dominant Aura"
sub_training_milestone_scheme_power_1:0 "Prior Training"
sub_training_milestone_scheme_power_2:0 "Prior Training"
sub_training_milestone_scheme_power_3:0 "Prior Training"
sub_positive_trait_scheme_power:0 "Naturally Submissive"
sub_negative_trait_scheme_resistance:0 "Naturally Independent"
sub_highest_pos_opinion_scheme_power:0 "Enamored With You"
sub_high_pos_opinion_scheme_power:0 "Adores You"
sub_medium_pos_opinion_scheme_power:0 "Admires You"
sub_low_pos_opinion_scheme_power:0 "Likes You"
sub_highest_neg_opinion_scheme_resistance:0 "Loathes You"
sub_high_neg_opinion_scheme_resistance:0 "Detests You"
sub_medium_neg_opinion_scheme_resistance:0 "Hates You"
sub_low_neg_opinion_scheme_resistance:0 "Dislikes You"


code:
l_german:
sub_subservient_to_master:0 "Obedient to [GetPlayer.Custom('SubMasterMistress')|U]"
sub_made_me_go_naked:0 "What?! But everyone will see!"
sub_positive_training_start:0 "Enjoys being trained"
sub_negative_training_start:0 "Resents being trained"


code:
l_german:
game_concept_sub_train_obedience_scheme:0 "Obedience Training Scheme"
game_concept_sub_train_obedience_schemes:0 "Obedience Training Schemes"
game_concept_sub_train_obedience:0 "Obedience Training"
game_concept_sub_train_obedience_action:0 "Train"
game_concept_sub_train_obedience_scheme_single:0 "an Obedience Training Scheme"
game_concept_sub_train_obedience_scheme_desc:0 "The $game_concept_sub_train_obedience_scheme$ is a [personal_scheme|E] to train a character in [sub_subservience_concept|E], eventually making them your [submissive|E]. It is not [secret_scheme_single|E] and does not use [agents|E].\n\nYour [martial|E] has a slight effect on [scheme_power|E], but power is mostly based on the [scheme_target|E]'s personality and [opinion|E] of you. While eventual success is assured, low opinion or a willful personality can make it a long process. However, the rewards last a lifetime and are well worth the effort."

game_concept_sub_subservience_concept:0 "Subservience"
game_concept_sub_subservient_concept:0 "Subservient"
game_concept_sub_subservience_concept_desc:0 "$game_concept_sub_subservience_concept$ has many facets, and is taught through the [sub_train_obedience_scheme|E]. Characters who are $game_concept_sub_subservient_concept$ to a Master or Mistress tend to have an extremely high opinion of that character, strive to please them, and are open to following rules set by them.\n\nBeing $game_concept_sub_subservient_concept$ to someone is intimately related to being their [submissive|E], but they are not identical. Completing $game_concept_sub_train_obedience_scheme_single$ will make the trainee $game_concept_sub_subservient_concept$ for life, but the $game_concept_submissive$ [relation|E] depends upon the continued consent of both the $game_concept_submissive$ and the $game_concept_dominant$."


code:
l_german:
rule_sub_valid_subs:0 "#X Submissive Partners:#! Valid Sub Genders"
setting_sub_valid_subs_all_genders:0 "All Genders"
setting_sub_valid_subs_all_genders_desc:0 "Both male and female characters can become $game_concept_submissives$."
setting_sub_valid_subs_female_only:0 "#high Female Only#!"
setting_sub_valid_subs_female_only_desc:0 "Only female characters can become $game_concept_submissives$."
setting_sub_valid_subs_male_only:0 "#high Male Only#!"
setting_sub_valid_subs_male_only_desc:0 "Only male characters can become $game_concept_submissives$."

rule_sub_gender_attraction_requirement:0 "#X Submissive Partners:#! Gender Attraction Requirement"
setting_sub_gender_attraction_requirement_enabled:0 "Enabled"
setting_sub_gender_attraction_requirement_enabled_desc:0 "Characters will not enter into a $game_concept_dominant$/$game_concept_submissive$ relationship unless each is attracted to the other's gender."
setting_sub_gender_attraction_requirement_disabled:0 "#high Disabled#!"
setting_sub_gender_attraction_requirement_disabled_desc:0 "Characters can enter into a $game_concept_dominant$/$game_concept_submissive$ relationship regardless of gender attraction."


code:
l_german:
action_can_obedience_train:0 "Partner can be trained"
action_can_obedience_train_combined_group_label:0 "Partners can be trained"
action_can_obedience_train_combined_group_name:0 "$action_can_obedience_train_combined_group_label$"
action_can_obedience_train_desc:0 "One of your partners, [recipient.GetUIName], can be trained in [sub_subservience_concept|E]."
action_can_obedience_train_combined_group_description:0 "You can train partners in [sub_subservience_concept|E]."
action_can_obedience_train_label:0 "You can train [recipient.GetShortUINameNoTooltip] in $game_concept_sub_subservience_concept$"
action_can_obedience_train_combined_label:0 "[recipient.GetUINameNoTooltip]"
action_can_obedience_train_click:0 "#I Click to open Train Interaction#!"

action_can_accelerated_obedience_train:0 "Partner can be made obedient"
action_can_accelerated_obedience_train_combined_group_label:0 "Partners can be made obedient"
action_can_accelerated_obedience_train_combined_group_name:0 "$action_can_accelerated_obedience_train_combined_group_label$"
action_can_accelerated_obedience_train_desc:0 "One of your partners, [recipient.GetUIName], can be immediately made [sub_subservient_concept|E] to you."
action_can_accelerated_obedience_train_combined_group_description:0 "You can immediately make some of your partners [sub_subservient_concept|E] to you."
action_can_accelerated_obedience_train_label:0 "You can make [recipient.GetShortUIName] $game_concept_sub_subservient_concept$"
action_can_accelerated_obedience_train_combined_label:0 "[recipient.GetUINameNoTooltip]"
action_can_accelerated_obedience_train_click:0 "#I Click to open Interaction#!"


code:
l_german:
sub_show_pose_interaction:0 "Pose For Me"
sub_show_pose_interaction_desc:0 "Have [recipient.GetFirstNameNoTooltip] strike some poses."
sub_clothing_rules_interaction:0 "Set Clothing Rules"
sub_clothing_rules_interaction_desc:0 "Decide what clothing, if any, [recipient.GetShortUINameNoTooltip] should wear in public."
sub_chastity_rules_interaction:0 "Set Chastity Rules"
sub_chastity_rules_interaction_desc:0 "Decide how often [recipient.GetShortUINameNoTooltip] is allowed orgasms, or lock [recipient.GetHerHim] up in chastity to prevent pregnancy entirely."
sub_train_obedience_accelerated_interaction:0 "Instill Obedience"
sub_train_obedience_accelerated_interaction_desc:0 "Since [recipient.GetShortUINameNoTooltip] has already been superbly trained, [recipient.GetSheHe] will willingly become [sub_subservient_concept|E] to you."
sub_remove_submissive_interaction:0 "Set Aside $game_concept_submissive$"
sub_remove_submissive_interaction_desc:0 "While [recipient.GetHerHis] devotion and training will remain, sexually you will no longer consider [recipient.GetShortUINameNoTooltip] your [submissive|E]."
sub_remove_submissive_interaction_notification:0 "Set Aside $game_concept_submissive$"
sub_regain_submissive_interaction:0 "Take $game_concept_submissive$"
sub_regain_submissive_interaction_desc:0 "You once again desire to call [recipient.GetShortUINameNoTooltip] your [submissive|E]."
sub_regain_submissive_interaction_notification:0 "Took $game_concept_submissive$"

START_SUB_TRAINING:0 "Begin Training"

sub_accept_order:0 ""Of course, [actor.Custom('SubMasterMistress')|U]""
sub_train_obedience_interaction_toast:0 "$game_concept_sub_train_obedience$"
sub_train_obedience_accelerated_interaction_toast:0 "[recipient.GetFirstNameNoTooltip] professes [recipient.GetHerHis] loyalty"


code:
l_german:
sub_train_obedience_interaction:0 "$game_concept_sub_train_obedience$ #weak (Scheme)#!"
sub_train_obedience_interaction_desc:0 "[sub_train_obedience_action|E] [recipient.GetShortUINameNoTooltip] to be your [submissive|E]*\n\n*preview time to complete innacurate"

sub_train_obedience:0 "$game_concept_sub_train_obedience_scheme$"
sub_train_obedience_invalid:0 "I stop trying to [sub_train_obedience_action|E] [target.GetShortUINameNoTooltip] as [target.GetSheHe] can no longer become my [submissive|E]."

sub_train_obedience_action:0 "Train"
sub_train_obedience_desc:0 "$sub_train_obedience_action$ [SCHEME.GetTarget.GetShortUINameNoTooltip] in [sub_subservience_concept|E], eventually making [SCHEME.GetTarget.GetHerHim] your [submissive|E]."
sub_train_obedience_desc_general:0 "$sub_train_obedience_action$ a character in [sub_subservience_concept|E], eventually making them your [submissive|E]."
SUB_TRAIN_OBEDIENCE_SUCCESS_DESC:0 "[TARGET_CHARACTER.GetShortUINameNoTooltip] will become your [submissive|E], and be devoted and loyal to you for life"


code:
l_german:
sub_suggestion_obedience_training_label:0 "Train Partner"
sub_suggestion_obedience_training:0 "Suggestion: Train [recipient.GetShortUIName] in $game_concept_sub_subservience_concept$"
sub_suggestion_obedience_training_desc:0 "Your [actor.Custom2('RelationToMeShort', SCOPE.sC('recipient'))] [recipient.GetShortUINameNoTooltip] can be trained to be [sub_subservient_concept|E] to you, offering a variety of benefits both personally and politically."
sub_suggestion_obedience_training_click:0 "#I Click to open Train Interaction#!"


code:
l_german:
trait_sub_subservient:0 "Subservience"
trait_sub_subservient_1:0 "Trainee (Obedience)"
trait_sub_subservient_1_desc:0 "This character has a basic idea of the obedience expected of a $game_concept_submissive$, but not much more than that."
trait_sub_subservient_1_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] has a basic idea of the obedience expected of a $game_concept_submissive$, but not much more than that."
trait_sub_subservient_2:0 "Deferential"
trait_sub_subservient_2_desc:0 "This character obeys quickly and naturally, and has even started to find joy in doing so."
trait_sub_subservient_2_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] obeys quickly and naturally, and has even started to find joy in doing so."
trait_sub_subservient_3:0 "Obedient"
trait_sub_subservient_3_desc:0 "This character has learned everything there is to learn about obedience to a $game_concept_dominant$. All that's left to do is make the lessons stick."
trait_sub_subservient_3_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] has learned everything there is to learn about obedience to a $game_concept_dominant$. All that's left to do is make the lessons stick."
trait_sub_subservient_4:0 "Subservient"
trait_sub_subservient_4_desc:0 "This character has embraced their position as a $game_concept_submissive$. Obedience has become second nature to them."
trait_sub_subservient_4_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] has embraced [ROOT.GetCharacter.GetHerHis] position as a $game_concept_submissive$. Obedience has become second nature to [ROOT.GetCharacter.GetHerHim]."

trait_sub_clothing_rules:0 "Clothing Rules"
trait_sub_clothing_rule_1:0 "Revealing Attire"
trait_sub_clothing_rule_1_desc:0 "Showing more skin than usual, but not so much as to upset anyone with a more old-fashioned outlook."
trait_sub_clothing_rule_1_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] shows more skin than usual, but not so much as to upset anyone with a more old-fashioned outlook."
trait_sub_clothing_rule_2:0 "Scandalous Attire"
trait_sub_clothing_rule_2_desc:0 "Wears so little that what clothes are there seem more like a formality, rather than offering real coverage."
trait_sub_clothing_rule_2_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] wears so little that what clothes are there seem more like a formality, rather than offering real coverage."
trait_sub_clothing_rule_3:0 "Forced Nudity"
trait_sub_clothing_rule_3_desc:0 "Baring it all, whether they want to or not."
trait_sub_clothing_rule_3_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] is baring it all, whether [ROOT.GetCharacter.GetSheHe] wants to or not."
trait_sub_clothing_rule_4:0 "Clothing Rule 4"
trait_sub_clothing_rule_4_desc:0 "This trait isn't supposed to be used. You didn't... you didn't try to CHEAT, did you?!"

trait_sub_chastity_rules:0 "Chastity Rules"
trait_sub_chastity_rule_1:0 "Orgasms Restricted"
trait_sub_chastity_rule_1_desc:0 "This character is often denied release, and their libido has noticeably grown."
trait_sub_chastity_rule_1_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] is often denied release, and [ROOT.GetCharacter.GetHerHis] libido has noticeably grown."
trait_sub_chastity_rule_2:0 "Orgasms Forbidden"
trait_sub_chastity_rule_2_desc:0 "Only allowed orgasms as a rare treat, this character spends most of their waking hours filled with lust- and most of their sleeping hours, for that matter!"
trait_sub_chastity_rule_2_character_desc:0 "Only allowed orgasms as a rare treat, [ROOT.GetCharacter.GetFirstNameNoTooltip] spends most of [ROOT.GetCharacter.GetHerHis] waking hours filled with lust- and most of [ROOT.GetCharacter.GetHerHis] sleeping hours, for that matter!"
trait_sub_chastity_rule_3:0 "Touching Forbidden"
trait_sub_chastity_rule_3_desc:0 "Forbidden from touching themself in any way, and only allowed orgasms as the rarest of treats, this character constantly rubs their legs together subconsciously and struggles to think about anything other than sex."
trait_sub_chastity_rule_3_character_desc:0 "Forbidden from touching [ROOT.GetCharacter.GetHerselfHimself] in any way, and only allowed orgasms as the rarest of treats, [ROOT.GetCharacter.GetFirstNameNoTooltip] constantly rubs [ROOT.GetCharacter.GetHerHis] legs together subconsciously and struggles to think about anything other than sex."
trait_sub_chastity_rule_4:0 "Locked In Chastity"
trait_sub_chastity_rule_4_desc:0 "This character has been locked in a chastity belt. Only their [GetPlayer.Custom('SubMasterMistressPossessive')|U] mercy can free their genitals from their prison."
trait_sub_chastity_rule_4_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] has been locked in a chastity belt. Only [ROOT.GetCharacter.GetHerHis] [GetPlayer.Custom('SubMasterMistressPossessive')|U] mercy can free [ROOT.GetCharacter.GetHerHis] [ROOT.GetCharacter.Custom('SubGenderedGenitals')] from its prison."


code:
l_korean:
SUB_MASTER:0 "master"
SUB_MISTRESS:0 "mistress"
SUB_MASTER_POSSESSIVE:0 "master's"
SUB_MISTRESS_POSSESSIVE:0 "mistress'"
SUB_PENIS:0 "penis"
SUB_PUSSY:0 "pussy"
SUB_MALE_TORSO:0 "torso"
SUB_FEMALE_TORSO:0 "breasts"


code:
l_korean:
sub_pose.0001.t:0 "Putting On A Show"
sub_pose.0001.desc.short:0 ""What do you desire, [actor.Custom('SubMasterMistress')|U]?""
sub_pose.0002.desc.short:0 ""I was hoping you would say that, [actor.Custom('SubMasterMistress')|U]. Perhaps when you're satisfied with my little show, we could move to the bed?""
sub_pose.0003.desc.short:0 ""Yes, a little... but you can look all you want, [actor.Custom('SubMasterMistress')|U]. Your pleasure is more important than my modesty.""
sub_pose.0004.desc.short:0 ""I will do my best, [actor.Custom('SubMasterMistress')|U], but having you watching me is very... distracting. Does this pose please you?""
sub_pose.0005.desc.short:0 ""Oh...! H-how long have you had shackles in here?! And m-more importantly, how long are you going to keep me locked up like this...?""

sub_pose.0001.a:0 "Actually the first pose was fine."
sub_pose.0001.b:0 "You look stunning."
sub_pose.0001.c:0 "Getting embarrassed at all?"
sub_pose.0001.d:0 "Just try to look natural."
sub_pose.0001.e:0 "Actually, I think you'd look best chained up!"
sub_pose.0001.f:0 "That will be all for now."

sub_rules.0001.t:0 "Changing Chastity Rules"
sub_rules.0001.desc.short:0 "You consider the different rules you could set for [recipient.GetFirstNameNoTooltip]'s orgasms."

sub_rules.0001.a:0 "Remove all restrictions on [recipient.GetHerHis] orgasms."
sub_rules.0001.b:0 "Occasional orgasm denial will do [recipient.GetHerHim] good."
sub_rules.0001.c:0 "Keep [recipient.GetHerHim] denied. Perhaps a few orgasms a year, if [recipient.GetSheHe] behaves."
sub_rules.0001.d:0 "Orgasms? Never! In fact, a no-touch rule is what [recipient.GetSheHe] needs."
sub_rules.0001.e:0 "Lock [recipient.GetHerHim] in a chastity belt. No orgasms, no touching, and no chance of pregnancy."
sub_rules.0001.f:0 "Nevermind."

sub_rules.0002.t:0 "Changing Clothing Rules"
sub_rules.0002.desc.short:0 "Dressing up [recipient.GetFirstNameNoTooltip] in the privacy of your chambers is enjoyable, of course, but you could also determine what [recipient.GetSheHe]'s allowed to wear the rest of the time..."

sub_rules.0002.a:0 "Let [recipient.GetHerHim] wear what [recipient.GetSheHe] likes."
sub_rules.0002.b:0 "Have [recipient.GetHerHim] dress provocatively."
sub_rules.0002.c:0 "Permit undergarments only."
sub_rules.0002.d:0 "Revoke all clothing privileges!"
sub_rules.0002.e:0 "Nevermind."


code:
l_korean:
sub_recent_training_modifier:0 "Dominant Aura"
sub_training_milestone_scheme_power_1:0 "Prior Training"
sub_training_milestone_scheme_power_2:0 "Prior Training"
sub_training_milestone_scheme_power_3:0 "Prior Training"
sub_positive_trait_scheme_power:0 "Naturally Submissive"
sub_negative_trait_scheme_resistance:0 "Naturally Independent"
sub_highest_pos_opinion_scheme_power:0 "Enamored With You"
sub_high_pos_opinion_scheme_power:0 "Adores You"
sub_medium_pos_opinion_scheme_power:0 "Admires You"
sub_low_pos_opinion_scheme_power:0 "Likes You"
sub_highest_neg_opinion_scheme_resistance:0 "Loathes You"
sub_high_neg_opinion_scheme_resistance:0 "Detests You"
sub_medium_neg_opinion_scheme_resistance:0 "Hates You"
sub_low_neg_opinion_scheme_resistance:0 "Dislikes You"


code:
l_korean:
sub_subservient_to_master:0 "Obedient to [GetPlayer.Custom('SubMasterMistress')|U]"
sub_made_me_go_naked:0 "What?! But everyone will see!"
sub_positive_training_start:0 "Enjoys being trained"
sub_negative_training_start:0 "Resents being trained"


code:
l_korean:
game_concept_sub_train_obedience_scheme:0 "Obedience Training Scheme"
game_concept_sub_train_obedience_schemes:0 "Obedience Training Schemes"
game_concept_sub_train_obedience:0 "Obedience Training"
game_concept_sub_train_obedience_action:0 "Train"
game_concept_sub_train_obedience_scheme_single:0 "an Obedience Training Scheme"
game_concept_sub_train_obedience_scheme_desc:0 "The $game_concept_sub_train_obedience_scheme$ is a [personal_scheme|E] to train a character in [sub_subservience_concept|E], eventually making them your [submissive|E]. It is not [secret_scheme_single|E] and does not use [agents|E].\n\nYour [martial|E] has a slight effect on [scheme_power|E], but power is mostly based on the [scheme_target|E]'s personality and [opinion|E] of you. While eventual success is assured, low opinion or a willful personality can make it a long process. However, the rewards last a lifetime and are well worth the effort."

game_concept_sub_subservience_concept:0 "Subservience"
game_concept_sub_subservient_concept:0 "Subservient"
game_concept_sub_subservience_concept_desc:0 "$game_concept_sub_subservience_concept$ has many facets, and is taught through the [sub_train_obedience_scheme|E]. Characters who are $game_concept_sub_subservient_concept$ to a Master or Mistress tend to have an extremely high opinion of that character, strive to please them, and are open to following rules set by them.\n\nBeing $game_concept_sub_subservient_concept$ to someone is intimately related to being their [submissive|E], but they are not identical. Completing $game_concept_sub_train_obedience_scheme_single$ will make the trainee $game_concept_sub_subservient_concept$ for life, but the $game_concept_submissive$ [relation|E] depends upon the continued consent of both the $game_concept_submissive$ and the $game_concept_dominant$."


code:
l_korean:
rule_sub_valid_subs:0 "#X Submissive Partners:#! Valid Sub Genders"
setting_sub_valid_subs_all_genders:0 "All Genders"
setting_sub_valid_subs_all_genders_desc:0 "Both male and female characters can become $game_concept_submissives$."
setting_sub_valid_subs_female_only:0 "#high Female Only#!"
setting_sub_valid_subs_female_only_desc:0 "Only female characters can become $game_concept_submissives$."
setting_sub_valid_subs_male_only:0 "#high Male Only#!"
setting_sub_valid_subs_male_only_desc:0 "Only male characters can become $game_concept_submissives$."

rule_sub_gender_attraction_requirement:0 "#X Submissive Partners:#! Gender Attraction Requirement"
setting_sub_gender_attraction_requirement_enabled:0 "Enabled"
setting_sub_gender_attraction_requirement_enabled_desc:0 "Characters will not enter into a $game_concept_dominant$/$game_concept_submissive$ relationship unless each is attracted to the other's gender."
setting_sub_gender_attraction_requirement_disabled:0 "#high Disabled#!"
setting_sub_gender_attraction_requirement_disabled_desc:0 "Characters can enter into a $game_concept_dominant$/$game_concept_submissive$ relationship regardless of gender attraction."


code:
l_korean:
action_can_obedience_train:0 "Partner can be trained"
action_can_obedience_train_combined_group_label:0 "Partners can be trained"
action_can_obedience_train_combined_group_name:0 "$action_can_obedience_train_combined_group_label$"
action_can_obedience_train_desc:0 "One of your partners, [recipient.GetUIName], can be trained in [sub_subservience_concept|E]."
action_can_obedience_train_combined_group_description:0 "You can train partners in [sub_subservience_concept|E]."
action_can_obedience_train_label:0 "You can train [recipient.GetShortUINameNoTooltip] in $game_concept_sub_subservience_concept$"
action_can_obedience_train_combined_label:0 "[recipient.GetUINameNoTooltip]"
action_can_obedience_train_click:0 "#I Click to open Train Interaction#!"

action_can_accelerated_obedience_train:0 "Partner can be made obedient"
action_can_accelerated_obedience_train_combined_group_label:0 "Partners can be made obedient"
action_can_accelerated_obedience_train_combined_group_name:0 "$action_can_accelerated_obedience_train_combined_group_label$"
action_can_accelerated_obedience_train_desc:0 "One of your partners, [recipient.GetUIName], can be immediately made [sub_subservient_concept|E] to you."
action_can_accelerated_obedience_train_combined_group_description:0 "You can immediately make some of your partners [sub_subservient_concept|E] to you."
action_can_accelerated_obedience_train_label:0 "You can make [recipient.GetShortUIName] $game_concept_sub_subservient_concept$"
action_can_accelerated_obedience_train_combined_label:0 "[recipient.GetUINameNoTooltip]"
action_can_accelerated_obedience_train_click:0 "#I Click to open Interaction#!"


code:
l_korean:
sub_show_pose_interaction:0 "Pose For Me"
sub_show_pose_interaction_desc:0 "Have [recipient.GetFirstNameNoTooltip] strike some poses."
sub_clothing_rules_interaction:0 "Set Clothing Rules"
sub_clothing_rules_interaction_desc:0 "Decide what clothing, if any, [recipient.GetShortUINameNoTooltip] should wear in public."
sub_chastity_rules_interaction:0 "Set Chastity Rules"
sub_chastity_rules_interaction_desc:0 "Decide how often [recipient.GetShortUINameNoTooltip] is allowed orgasms, or lock [recipient.GetHerHim] up in chastity to prevent pregnancy entirely."
sub_train_obedience_accelerated_interaction:0 "Instill Obedience"
sub_train_obedience_accelerated_interaction_desc:0 "Since [recipient.GetShortUINameNoTooltip] has already been superbly trained, [recipient.GetSheHe] will willingly become [sub_subservient_concept|E] to you."
sub_remove_submissive_interaction:0 "Set Aside $game_concept_submissive$"
sub_remove_submissive_interaction_desc:0 "While [recipient.GetHerHis] devotion and training will remain, sexually you will no longer consider [recipient.GetShortUINameNoTooltip] your [submissive|E]."
sub_remove_submissive_interaction_notification:0 "Set Aside $game_concept_submissive$"
sub_regain_submissive_interaction:0 "Take $game_concept_submissive$"
sub_regain_submissive_interaction_desc:0 "You once again desire to call [recipient.GetShortUINameNoTooltip] your [submissive|E]."
sub_regain_submissive_interaction_notification:0 "Took $game_concept_submissive$"

START_SUB_TRAINING:0 "Begin Training"

sub_accept_order:0 ""Of course, [actor.Custom('SubMasterMistress')|U]""
sub_train_obedience_interaction_toast:0 "$game_concept_sub_train_obedience$"
sub_train_obedience_accelerated_interaction_toast:0 "[recipient.GetFirstNameNoTooltip] professes [recipient.GetHerHis] loyalty"


code:
l_korean:
sub_train_obedience_interaction:0 "$game_concept_sub_train_obedience$ #weak (Scheme)#!"
sub_train_obedience_interaction_desc:0 "[sub_train_obedience_action|E] [recipient.GetShortUINameNoTooltip] to be your [submissive|E]*\n\n*preview time to complete innacurate"

sub_train_obedience:0 "$game_concept_sub_train_obedience_scheme$"
sub_train_obedience_invalid:0 "I stop trying to [sub_train_obedience_action|E] [target.GetShortUINameNoTooltip] as [target.GetSheHe] can no longer become my [submissive|E]."

sub_train_obedience_action:0 "Train"
sub_train_obedience_desc:0 "$sub_train_obedience_action$ [SCHEME.GetTarget.GetShortUINameNoTooltip] in [sub_subservience_concept|E], eventually making [SCHEME.GetTarget.GetHerHim] your [submissive|E]."
sub_train_obedience_desc_general:0 "$sub_train_obedience_action$ a character in [sub_subservience_concept|E], eventually making them your [submissive|E]."
SUB_TRAIN_OBEDIENCE_SUCCESS_DESC:0 "[TARGET_CHARACTER.GetShortUINameNoTooltip] will become your [submissive|E], and be devoted and loyal to you for life"


code:
l_korean:
sub_suggestion_obedience_training_label:0 "Train Partner"
sub_suggestion_obedience_training:0 "Suggestion: Train [recipient.GetShortUIName] in $game_concept_sub_subservience_concept$"
sub_suggestion_obedience_training_desc:0 "Your [actor.Custom2('RelationToMeShort', SCOPE.sC('recipient'))] [recipient.GetShortUINameNoTooltip] can be trained to be [sub_subservient_concept|E] to you, offering a variety of benefits both personally and politically."
sub_suggestion_obedience_training_click:0 "#I Click to open Train Interaction#!"


code:
l_korean:
trait_sub_subservient:0 "Subservience"
trait_sub_subservient_1:0 "Trainee (Obedience)"
trait_sub_subservient_1_desc:0 "This character has a basic idea of the obedience expected of a $game_concept_submissive$, but not much more than that."
trait_sub_subservient_1_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] has a basic idea of the obedience expected of a $game_concept_submissive$, but not much more than that."
trait_sub_subservient_2:0 "Deferential"
trait_sub_subservient_2_desc:0 "This character obeys quickly and naturally, and has even started to find joy in doing so."
trait_sub_subservient_2_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] obeys quickly and naturally, and has even started to find joy in doing so."
trait_sub_subservient_3:0 "Obedient"
trait_sub_subservient_3_desc:0 "This character has learned everything there is to learn about obedience to a $game_concept_dominant$. All that's left to do is make the lessons stick."
trait_sub_subservient_3_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] has learned everything there is to learn about obedience to a $game_concept_dominant$. All that's left to do is make the lessons stick."
trait_sub_subservient_4:0 "Subservient"
trait_sub_subservient_4_desc:0 "This character has embraced their position as a $game_concept_submissive$. Obedience has become second nature to them."
trait_sub_subservient_4_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] has embraced [ROOT.GetCharacter.GetHerHis] position as a $game_concept_submissive$. Obedience has become second nature to [ROOT.GetCharacter.GetHerHim]."

trait_sub_clothing_rules:0 "Clothing Rules"
trait_sub_clothing_rule_1:0 "Revealing Attire"
trait_sub_clothing_rule_1_desc:0 "Showing more skin than usual, but not so much as to upset anyone with a more old-fashioned outlook."
trait_sub_clothing_rule_1_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] shows more skin than usual, but not so much as to upset anyone with a more old-fashioned outlook."
trait_sub_clothing_rule_2:0 "Scandalous Attire"
trait_sub_clothing_rule_2_desc:0 "Wears so little that what clothes are there seem more like a formality, rather than offering real coverage."
trait_sub_clothing_rule_2_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] wears so little that what clothes are there seem more like a formality, rather than offering real coverage."
trait_sub_clothing_rule_3:0 "Forced Nudity"
trait_sub_clothing_rule_3_desc:0 "Baring it all, whether they want to or not."
trait_sub_clothing_rule_3_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] is baring it all, whether [ROOT.GetCharacter.GetSheHe] wants to or not."
trait_sub_clothing_rule_4:0 "Clothing Rule 4"
trait_sub_clothing_rule_4_desc:0 "This trait isn't supposed to be used. You didn't... you didn't try to CHEAT, did you?!"

trait_sub_chastity_rules:0 "Chastity Rules"
trait_sub_chastity_rule_1:0 "Orgasms Restricted"
trait_sub_chastity_rule_1_desc:0 "This character is often denied release, and their libido has noticeably grown."
trait_sub_chastity_rule_1_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] is often denied release, and [ROOT.GetCharacter.GetHerHis] libido has noticeably grown."
trait_sub_chastity_rule_2:0 "Orgasms Forbidden"
trait_sub_chastity_rule_2_desc:0 "Only allowed orgasms as a rare treat, this character spends most of their waking hours filled with lust- and most of their sleeping hours, for that matter!"
trait_sub_chastity_rule_2_character_desc:0 "Only allowed orgasms as a rare treat, [ROOT.GetCharacter.GetFirstNameNoTooltip] spends most of [ROOT.GetCharacter.GetHerHis] waking hours filled with lust- and most of [ROOT.GetCharacter.GetHerHis] sleeping hours, for that matter!"
trait_sub_chastity_rule_3:0 "Touching Forbidden"
trait_sub_chastity_rule_3_desc:0 "Forbidden from touching themself in any way, and only allowed orgasms as the rarest of treats, this character constantly rubs their legs together subconsciously and struggles to think about anything other than sex."
trait_sub_chastity_rule_3_character_desc:0 "Forbidden from touching [ROOT.GetCharacter.GetHerselfHimself] in any way, and only allowed orgasms as the rarest of treats, [ROOT.GetCharacter.GetFirstNameNoTooltip] constantly rubs [ROOT.GetCharacter.GetHerHis] legs together subconsciously and struggles to think about anything other than sex."
trait_sub_chastity_rule_4:0 "Locked In Chastity"
trait_sub_chastity_rule_4_desc:0 "This character has been locked in a chastity belt. Only their [GetPlayer.Custom('SubMasterMistressPossessive')|U] mercy can free their genitals from their prison."
trait_sub_chastity_rule_4_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] has been locked in a chastity belt. Only [ROOT.GetCharacter.GetHerHis] [GetPlayer.Custom('SubMasterMistressPossessive')|U] mercy can free [ROOT.GetCharacter.GetHerHis] [ROOT.GetCharacter.Custom('SubGenderedGenitals')] from its prison."


code:
l_russian:
SUB_MASTER:0 "master"
SUB_MISTRESS:0 "mistress"
SUB_MASTER_POSSESSIVE:0 "master's"
SUB_MISTRESS_POSSESSIVE:0 "mistress'"
SUB_PENIS:0 "penis"
SUB_PUSSY:0 "pussy"
SUB_MALE_TORSO:0 "torso"
SUB_FEMALE_TORSO:0 "breasts"


code:
l_russian:
sub_pose.0001.t:0 "Putting On A Show"
sub_pose.0001.desc.short:0 ""What do you desire, [actor.Custom('SubMasterMistress')|U]?""
sub_pose.0002.desc.short:0 ""I was hoping you would say that, [actor.Custom('SubMasterMistress')|U]. Perhaps when you're satisfied with my little show, we could move to the bed?""
sub_pose.0003.desc.short:0 ""Yes, a little... but you can look all you want, [actor.Custom('SubMasterMistress')|U]. Your pleasure is more important than my modesty.""
sub_pose.0004.desc.short:0 ""I will do my best, [actor.Custom('SubMasterMistress')|U], but having you watching me is very... distracting. Does this pose please you?""
sub_pose.0005.desc.short:0 ""Oh...! H-how long have you had shackles in here?! And m-more importantly, how long are you going to keep me locked up like this...?""

sub_pose.0001.a:0 "Actually the first pose was fine."
sub_pose.0001.b:0 "You look stunning."
sub_pose.0001.c:0 "Getting embarrassed at all?"
sub_pose.0001.d:0 "Just try to look natural."
sub_pose.0001.e:0 "Actually, I think you'd look best chained up!"
sub_pose.0001.f:0 "That will be all for now."

sub_rules.0001.t:0 "Changing Chastity Rules"
sub_rules.0001.desc.short:0 "You consider the different rules you could set for [recipient.GetFirstNameNoTooltip]'s orgasms."

sub_rules.0001.a:0 "Remove all restrictions on [recipient.GetHerHis] orgasms."
sub_rules.0001.b:0 "Occasional orgasm denial will do [recipient.GetHerHim] good."
sub_rules.0001.c:0 "Keep [recipient.GetHerHim] denied. Perhaps a few orgasms a year, if [recipient.GetSheHe] behaves."
sub_rules.0001.d:0 "Orgasms? Never! In fact, a no-touch rule is what [recipient.GetSheHe] needs."
sub_rules.0001.e:0 "Lock [recipient.GetHerHim] in a chastity belt. No orgasms, no touching, and no chance of pregnancy."
sub_rules.0001.f:0 "Nevermind."

sub_rules.0002.t:0 "Changing Clothing Rules"
sub_rules.0002.desc.short:0 "Dressing up [recipient.GetFirstNameNoTooltip] in the privacy of your chambers is enjoyable, of course, but you could also determine what [recipient.GetSheHe]'s allowed to wear the rest of the time..."

sub_rules.0002.a:0 "Let [recipient.GetHerHim] wear what [recipient.GetSheHe] likes."
sub_rules.0002.b:0 "Have [recipient.GetHerHim] dress provocatively."
sub_rules.0002.c:0 "Permit undergarments only."
sub_rules.0002.d:0 "Revoke all clothing privileges!"
sub_rules.0002.e:0 "Nevermind."


code:
l_russian:
sub_recent_training_modifier:0 "Dominant Aura"
sub_training_milestone_scheme_power_1:0 "Prior Training"
sub_training_milestone_scheme_power_2:0 "Prior Training"
sub_training_milestone_scheme_power_3:0 "Prior Training"
sub_positive_trait_scheme_power:0 "Naturally Submissive"
sub_negative_trait_scheme_resistance:0 "Naturally Independent"
sub_highest_pos_opinion_scheme_power:0 "Enamored With You"
sub_high_pos_opinion_scheme_power:0 "Adores You"
sub_medium_pos_opinion_scheme_power:0 "Admires You"
sub_low_pos_opinion_scheme_power:0 "Likes You"
sub_highest_neg_opinion_scheme_resistance:0 "Loathes You"
sub_high_neg_opinion_scheme_resistance:0 "Detests You"
sub_medium_neg_opinion_scheme_resistance:0 "Hates You"
sub_low_neg_opinion_scheme_resistance:0 "Dislikes You"


code:
l_russian:
sub_subservient_to_master:0 "Obedient to [GetPlayer.Custom('SubMasterMistress')|U]"
sub_made_me_go_naked:0 "What?! But everyone will see!"
sub_positive_training_start:0 "Enjoys being trained"
sub_negative_training_start:0 "Resents being trained"


code:
l_russian:
game_concept_sub_train_obedience_scheme:0 "Obedience Training Scheme"
game_concept_sub_train_obedience_schemes:0 "Obedience Training Schemes"
game_concept_sub_train_obedience:0 "Obedience Training"
game_concept_sub_train_obedience_action:0 "Train"
game_concept_sub_train_obedience_scheme_single:0 "an Obedience Training Scheme"
game_concept_sub_train_obedience_scheme_desc:0 "The $game_concept_sub_train_obedience_scheme$ is a [personal_scheme|E] to train a character in [sub_subservience_concept|E], eventually making them your [submissive|E]. It is not [secret_scheme_single|E] and does not use [agents|E].\n\nYour [martial|E] has a slight effect on [scheme_power|E], but power is mostly based on the [scheme_target|E]'s personality and [opinion|E] of you. While eventual success is assured, low opinion or a willful personality can make it a long process. However, the rewards last a lifetime and are well worth the effort."

game_concept_sub_subservience_concept:0 "Subservience"
game_concept_sub_subservient_concept:0 "Subservient"
game_concept_sub_subservience_concept_desc:0 "$game_concept_sub_subservience_concept$ has many facets, and is taught through the [sub_train_obedience_scheme|E]. Characters who are $game_concept_sub_subservient_concept$ to a Master or Mistress tend to have an extremely high opinion of that character, strive to please them, and are open to following rules set by them.\n\nBeing $game_concept_sub_subservient_concept$ to someone is intimately related to being their [submissive|E], but they are not identical. Completing $game_concept_sub_train_obedience_scheme_single$ will make the trainee $game_concept_sub_subservient_concept$ for life, but the $game_concept_submissive$ [relation|E] depends upon the continued consent of both the $game_concept_submissive$ and the $game_concept_dominant$."


code:
l_russian:
rule_sub_valid_subs:0 "#X Submissive Partners:#! Valid Sub Genders"
setting_sub_valid_subs_all_genders:0 "All Genders"
setting_sub_valid_subs_all_genders_desc:0 "Both male and female characters can become $game_concept_submissives$."
setting_sub_valid_subs_female_only:0 "#high Female Only#!"
setting_sub_valid_subs_female_only_desc:0 "Only female characters can become $game_concept_submissives$."
setting_sub_valid_subs_male_only:0 "#high Male Only#!"
setting_sub_valid_subs_male_only_desc:0 "Only male characters can become $game_concept_submissives$."

rule_sub_gender_attraction_requirement:0 "#X Submissive Partners:#! Gender Attraction Requirement"
setting_sub_gender_attraction_requirement_enabled:0 "Enabled"
setting_sub_gender_attraction_requirement_enabled_desc:0 "Characters will not enter into a $game_concept_dominant$/$game_concept_submissive$ relationship unless each is attracted to the other's gender."
setting_sub_gender_attraction_requirement_disabled:0 "#high Disabled#!"
setting_sub_gender_attraction_requirement_disabled_desc:0 "Characters can enter into a $game_concept_dominant$/$game_concept_submissive$ relationship regardless of gender attraction."


code:
l_russian:
action_can_obedience_train:0 "Partner can be trained"
action_can_obedience_train_combined_group_label:0 "Partners can be trained"
action_can_obedience_train_combined_group_name:0 "$action_can_obedience_train_combined_group_label$"
action_can_obedience_train_desc:0 "One of your partners, [recipient.GetUIName], can be trained in [sub_subservience_concept|E]."
action_can_obedience_train_combined_group_description:0 "You can train partners in [sub_subservience_concept|E]."
action_can_obedience_train_label:0 "You can train [recipient.GetShortUINameNoTooltip] in $game_concept_sub_subservience_concept$"
action_can_obedience_train_combined_label:0 "[recipient.GetUINameNoTooltip]"
action_can_obedience_train_click:0 "#I Click to open Train Interaction#!"

action_can_accelerated_obedience_train:0 "Partner can be made obedient"
action_can_accelerated_obedience_train_combined_group_label:0 "Partners can be made obedient"
action_can_accelerated_obedience_train_combined_group_name:0 "$action_can_accelerated_obedience_train_combined_group_label$"
action_can_accelerated_obedience_train_desc:0 "One of your partners, [recipient.GetUIName], can be immediately made [sub_subservient_concept|E] to you."
action_can_accelerated_obedience_train_combined_group_description:0 "You can immediately make some of your partners [sub_subservient_concept|E] to you."
action_can_accelerated_obedience_train_label:0 "You can make [recipient.GetShortUIName] $game_concept_sub_subservient_concept$"
action_can_accelerated_obedience_train_combined_label:0 "[recipient.GetUINameNoTooltip]"
action_can_accelerated_obedience_train_click:0 "#I Click to open Interaction#!"


code:
l_russian:
sub_show_pose_interaction:0 "Pose For Me"
sub_show_pose_interaction_desc:0 "Have [recipient.GetFirstNameNoTooltip] strike some poses."
sub_clothing_rules_interaction:0 "Set Clothing Rules"
sub_clothing_rules_interaction_desc:0 "Decide what clothing, if any, [recipient.GetShortUINameNoTooltip] should wear in public."
sub_chastity_rules_interaction:0 "Set Chastity Rules"
sub_chastity_rules_interaction_desc:0 "Decide how often [recipient.GetShortUINameNoTooltip] is allowed orgasms, or lock [recipient.GetHerHim] up in chastity to prevent pregnancy entirely."
sub_train_obedience_accelerated_interaction:0 "Instill Obedience"
sub_train_obedience_accelerated_interaction_desc:0 "Since [recipient.GetShortUINameNoTooltip] has already been superbly trained, [recipient.GetSheHe] will willingly become [sub_subservient_concept|E] to you."
sub_remove_submissive_interaction:0 "Set Aside $game_concept_submissive$"
sub_remove_submissive_interaction_desc:0 "While [recipient.GetHerHis] devotion and training will remain, sexually you will no longer consider [recipient.GetShortUINameNoTooltip] your [submissive|E]."
sub_remove_submissive_interaction_notification:0 "Set Aside $game_concept_submissive$"
sub_regain_submissive_interaction:0 "Take $game_concept_submissive$"
sub_regain_submissive_interaction_desc:0 "You once again desire to call [recipient.GetShortUINameNoTooltip] your [submissive|E]."
sub_regain_submissive_interaction_notification:0 "Took $game_concept_submissive$"

START_SUB_TRAINING:0 "Begin Training"

sub_accept_order:0 ""Of course, [actor.Custom('SubMasterMistress')|U]""
sub_train_obedience_interaction_toast:0 "$game_concept_sub_train_obedience$"
sub_train_obedience_accelerated_interaction_toast:0 "[recipient.GetFirstNameNoTooltip] professes [recipient.GetHerHis] loyalty"


code:
l_russian:
sub_train_obedience_interaction:0 "$game_concept_sub_train_obedience$ #weak (Scheme)#!"
sub_train_obedience_interaction_desc:0 "[sub_train_obedience_action|E] [recipient.GetShortUINameNoTooltip] to be your [submissive|E]*\n\n*preview time to complete innacurate"

sub_train_obedience:0 "$game_concept_sub_train_obedience_scheme$"
sub_train_obedience_invalid:0 "I stop trying to [sub_train_obedience_action|E] [target.GetShortUINameNoTooltip] as [target.GetSheHe] can no longer become my [submissive|E]."

sub_train_obedience_action:0 "Train"
sub_train_obedience_desc:0 "$sub_train_obedience_action$ [SCHEME.GetTarget.GetShortUINameNoTooltip] in [sub_subservience_concept|E], eventually making [SCHEME.GetTarget.GetHerHim] your [submissive|E]."
sub_train_obedience_desc_general:0 "$sub_train_obedience_action$ a character in [sub_subservience_concept|E], eventually making them your [submissive|E]."
SUB_TRAIN_OBEDIENCE_SUCCESS_DESC:0 "[TARGET_CHARACTER.GetShortUINameNoTooltip] will become your [submissive|E], and be devoted and loyal to you for life"


code:
l_russian:
sub_suggestion_obedience_training_label:0 "Train Partner"
sub_suggestion_obedience_training:0 "Suggestion: Train [recipient.GetShortUIName] in $game_concept_sub_subservience_concept$"
sub_suggestion_obedience_training_desc:0 "Your [actor.Custom2('RelationToMeShort', SCOPE.sC('recipient'))] [recipient.GetShortUINameNoTooltip] can be trained to be [sub_subservient_concept|E] to you, offering a variety of benefits both personally and politically."
sub_suggestion_obedience_training_click:0 "#I Click to open Train Interaction#!"


code:
l_russian:
trait_sub_subservient:0 "Subservience"
trait_sub_subservient_1:0 "Trainee (Obedience)"
trait_sub_subservient_1_desc:0 "This character has a basic idea of the obedience expected of a $game_concept_submissive$, but not much more than that."
trait_sub_subservient_1_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] has a basic idea of the obedience expected of a $game_concept_submissive$, but not much more than that."
trait_sub_subservient_2:0 "Deferential"
trait_sub_subservient_2_desc:0 "This character obeys quickly and naturally, and has even started to find joy in doing so."
trait_sub_subservient_2_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] obeys quickly and naturally, and has even started to find joy in doing so."
trait_sub_subservient_3:0 "Obedient"
trait_sub_subservient_3_desc:0 "This character has learned everything there is to learn about obedience to a $game_concept_dominant$. All that's left to do is make the lessons stick."
trait_sub_subservient_3_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] has learned everything there is to learn about obedience to a $game_concept_dominant$. All that's left to do is make the lessons stick."
trait_sub_subservient_4:0 "Subservient"
trait_sub_subservient_4_desc:0 "This character has embraced their position as a $game_concept_submissive$. Obedience has become second nature to them."
trait_sub_subservient_4_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] has embraced [ROOT.GetCharacter.GetHerHis] position as a $game_concept_submissive$. Obedience has become second nature to [ROOT.GetCharacter.GetHerHim]."

trait_sub_clothing_rules:0 "Clothing Rules"
trait_sub_clothing_rule_1:0 "Revealing Attire"
trait_sub_clothing_rule_1_desc:0 "Showing more skin than usual, but not so much as to upset anyone with a more old-fashioned outlook."
trait_sub_clothing_rule_1_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] shows more skin than usual, but not so much as to upset anyone with a more old-fashioned outlook."
trait_sub_clothing_rule_2:0 "Scandalous Attire"
trait_sub_clothing_rule_2_desc:0 "Wears so little that what clothes are there seem more like a formality, rather than offering real coverage."
trait_sub_clothing_rule_2_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] wears so little that what clothes are there seem more like a formality, rather than offering real coverage."
trait_sub_clothing_rule_3:0 "Forced Nudity"
trait_sub_clothing_rule_3_desc:0 "Baring it all, whether they want to or not."
trait_sub_clothing_rule_3_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] is baring it all, whether [ROOT.GetCharacter.GetSheHe] wants to or not."
trait_sub_clothing_rule_4:0 "Clothing Rule 4"
trait_sub_clothing_rule_4_desc:0 "This trait isn't supposed to be used. You didn't... you didn't try to CHEAT, did you?!"

trait_sub_chastity_rules:0 "Chastity Rules"
trait_sub_chastity_rule_1:0 "Orgasms Restricted"
trait_sub_chastity_rule_1_desc:0 "This character is often denied release, and their libido has noticeably grown."
trait_sub_chastity_rule_1_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] is often denied release, and [ROOT.GetCharacter.GetHerHis] libido has noticeably grown."
trait_sub_chastity_rule_2:0 "Orgasms Forbidden"
trait_sub_chastity_rule_2_desc:0 "Only allowed orgasms as a rare treat, this character spends most of their waking hours filled with lust- and most of their sleeping hours, for that matter!"
trait_sub_chastity_rule_2_character_desc:0 "Only allowed orgasms as a rare treat, [ROOT.GetCharacter.GetFirstNameNoTooltip] spends most of [ROOT.GetCharacter.GetHerHis] waking hours filled with lust- and most of [ROOT.GetCharacter.GetHerHis] sleeping hours, for that matter!"
trait_sub_chastity_rule_3:0 "Touching Forbidden"
trait_sub_chastity_rule_3_desc:0 "Forbidden from touching themself in any way, and only allowed orgasms as the rarest of treats, this character constantly rubs their legs together subconsciously and struggles to think about anything other than sex."
trait_sub_chastity_rule_3_character_desc:0 "Forbidden from touching [ROOT.GetCharacter.GetHerselfHimself] in any way, and only allowed orgasms as the rarest of treats, [ROOT.GetCharacter.GetFirstNameNoTooltip] constantly rubs [ROOT.GetCharacter.GetHerHis] legs together subconsciously and struggles to think about anything other than sex."
trait_sub_chastity_rule_4:0 "Locked In Chastity"
trait_sub_chastity_rule_4_desc:0 "This character has been locked in a chastity belt. Only their [GetPlayer.Custom('SubMasterMistressPossessive')|U] mercy can free their genitals from their prison."
trait_sub_chastity_rule_4_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] has been locked in a chastity belt. Only [ROOT.GetCharacter.GetHerHis] [GetPlayer.Custom('SubMasterMistressPossessive')|U] mercy can free [ROOT.GetCharacter.GetHerHis] [ROOT.GetCharacter.Custom('SubGenderedGenitals')] from its prison."


code:
l_simp_chinese:
SUB_MASTER:0 "master"
SUB_MISTRESS:0 "mistress"
SUB_MASTER_POSSESSIVE:0 "master's"
SUB_MISTRESS_POSSESSIVE:0 "mistress'"
SUB_PENIS:0 "penis"
SUB_PUSSY:0 "pussy"
SUB_MALE_TORSO:0 "torso"
SUB_FEMALE_TORSO:0 "breasts"


code:
l_simp_chinese:
sub_pose.0001.t:0 "Putting On A Show"
sub_pose.0001.desc.short:0 ""What do you desire, [actor.Custom('SubMasterMistress')|U]?""
sub_pose.0002.desc.short:0 ""I was hoping you would say that, [actor.Custom('SubMasterMistress')|U]. Perhaps when you're satisfied with my little show, we could move to the bed?""
sub_pose.0003.desc.short:0 ""Yes, a little... but you can look all you want, [actor.Custom('SubMasterMistress')|U]. Your pleasure is more important than my modesty.""
sub_pose.0004.desc.short:0 ""I will do my best, [actor.Custom('SubMasterMistress')|U], but having you watching me is very... distracting. Does this pose please you?""
sub_pose.0005.desc.short:0 ""Oh...! H-how long have you had shackles in here?! And m-more importantly, how long are you going to keep me locked up like this...?""

sub_pose.0001.a:0 "Actually the first pose was fine."
sub_pose.0001.b:0 "You look stunning."
sub_pose.0001.c:0 "Getting embarrassed at all?"
sub_pose.0001.d:0 "Just try to look natural."
sub_pose.0001.e:0 "Actually, I think you'd look best chained up!"
sub_pose.0001.f:0 "That will be all for now."

sub_rules.0001.t:0 "Changing Chastity Rules"
sub_rules.0001.desc.short:0 "You consider the different rules you could set for [recipient.GetFirstNameNoTooltip]'s orgasms."

sub_rules.0001.a:0 "Remove all restrictions on [recipient.GetHerHis] orgasms."
sub_rules.0001.b:0 "Occasional orgasm denial will do [recipient.GetHerHim] good."
sub_rules.0001.c:0 "Keep [recipient.GetHerHim] denied. Perhaps a few orgasms a year, if [recipient.GetSheHe] behaves."
sub_rules.0001.d:0 "Orgasms? Never! In fact, a no-touch rule is what [recipient.GetSheHe] needs."
sub_rules.0001.e:0 "Lock [recipient.GetHerHim] in a chastity belt. No orgasms, no touching, and no chance of pregnancy."
sub_rules.0001.f:0 "Nevermind."

sub_rules.0002.t:0 "Changing Clothing Rules"
sub_rules.0002.desc.short:0 "Dressing up [recipient.GetFirstNameNoTooltip] in the privacy of your chambers is enjoyable, of course, but you could also determine what [recipient.GetSheHe]'s allowed to wear the rest of the time..."

sub_rules.0002.a:0 "Let [recipient.GetHerHim] wear what [recipient.GetSheHe] likes."
sub_rules.0002.b:0 "Have [recipient.GetHerHim] dress provocatively."
sub_rules.0002.c:0 "Permit undergarments only."
sub_rules.0002.d:0 "Revoke all clothing privileges!"
sub_rules.0002.e:0 "Nevermind."


code:
l_simp_chinese:
sub_recent_training_modifier:0 "Dominant Aura"
sub_training_milestone_scheme_power_1:0 "Prior Training"
sub_training_milestone_scheme_power_2:0 "Prior Training"
sub_training_milestone_scheme_power_3:0 "Prior Training"
sub_positive_trait_scheme_power:0 "Naturally Submissive"
sub_negative_trait_scheme_resistance:0 "Naturally Independent"
sub_highest_pos_opinion_scheme_power:0 "Enamored With You"
sub_high_pos_opinion_scheme_power:0 "Adores You"
sub_medium_pos_opinion_scheme_power:0 "Admires You"
sub_low_pos_opinion_scheme_power:0 "Likes You"
sub_highest_neg_opinion_scheme_resistance:0 "Loathes You"
sub_high_neg_opinion_scheme_resistance:0 "Detests You"
sub_medium_neg_opinion_scheme_resistance:0 "Hates You"
sub_low_neg_opinion_scheme_resistance:0 "Dislikes You"


code:
l_simp_chinese:
sub_subservient_to_master:0 "Obedient to [GetPlayer.Custom('SubMasterMistress')|U]"
sub_made_me_go_naked:0 "What?! But everyone will see!"
sub_positive_training_start:0 "Enjoys being trained"
sub_negative_training_start:0 "Resents being trained"


code:
l_simp_chinese:
game_concept_sub_train_obedience_scheme:0 "Obedience Training Scheme"
game_concept_sub_train_obedience_schemes:0 "Obedience Training Schemes"
game_concept_sub_train_obedience:0 "Obedience Training"
game_concept_sub_train_obedience_action:0 "Train"
game_concept_sub_train_obedience_scheme_single:0 "an Obedience Training Scheme"
game_concept_sub_train_obedience_scheme_desc:0 "The $game_concept_sub_train_obedience_scheme$ is a [personal_scheme|E] to train a character in [sub_subservience_concept|E], eventually making them your [submissive|E]. It is not [secret_scheme_single|E] and does not use [agents|E].\n\nYour [martial|E] has a slight effect on [scheme_power|E], but power is mostly based on the [scheme_target|E]'s personality and [opinion|E] of you. While eventual success is assured, low opinion or a willful personality can make it a long process. However, the rewards last a lifetime and are well worth the effort."

game_concept_sub_subservience_concept:0 "Subservience"
game_concept_sub_subservient_concept:0 "Subservient"
game_concept_sub_subservience_concept_desc:0 "$game_concept_sub_subservience_concept$ has many facets, and is taught through the [sub_train_obedience_scheme|E]. Characters who are $game_concept_sub_subservient_concept$ to a Master or Mistress tend to have an extremely high opinion of that character, strive to please them, and are open to following rules set by them.\n\nBeing $game_concept_sub_subservient_concept$ to someone is intimately related to being their [submissive|E], but they are not identical. Completing $game_concept_sub_train_obedience_scheme_single$ will make the trainee $game_concept_sub_subservient_concept$ for life, but the $game_concept_submissive$ [relation|E] depends upon the continued consent of both the $game_concept_submissive$ and the $game_concept_dominant$."


code:
l_simp_chinese:
rule_sub_valid_subs:0 "#X Submissive Partners:#! Valid Sub Genders"
setting_sub_valid_subs_all_genders:0 "All Genders"
setting_sub_valid_subs_all_genders_desc:0 "Both male and female characters can become $game_concept_submissives$."
setting_sub_valid_subs_female_only:0 "#high Female Only#!"
setting_sub_valid_subs_female_only_desc:0 "Only female characters can become $game_concept_submissives$."
setting_sub_valid_subs_male_only:0 "#high Male Only#!"
setting_sub_valid_subs_male_only_desc:0 "Only male characters can become $game_concept_submissives$."

rule_sub_gender_attraction_requirement:0 "#X Submissive Partners:#! Gender Attraction Requirement"
setting_sub_gender_attraction_requirement_enabled:0 "Enabled"
setting_sub_gender_attraction_requirement_enabled_desc:0 "Characters will not enter into a $game_concept_dominant$/$game_concept_submissive$ relationship unless each is attracted to the other's gender."
setting_sub_gender_attraction_requirement_disabled:0 "#high Disabled#!"
setting_sub_gender_attraction_requirement_disabled_desc:0 "Characters can enter into a $game_concept_dominant$/$game_concept_submissive$ relationship regardless of gender attraction."


code:
l_simp_chinese:
action_can_obedience_train:0 "Partner can be trained"
action_can_obedience_train_combined_group_label:0 "Partners can be trained"
action_can_obedience_train_combined_group_name:0 "$action_can_obedience_train_combined_group_label$"
action_can_obedience_train_desc:0 "One of your partners, [recipient.GetUIName], can be trained in [sub_subservience_concept|E]."
action_can_obedience_train_combined_group_description:0 "You can train partners in [sub_subservience_concept|E]."
action_can_obedience_train_label:0 "You can train [recipient.GetShortUINameNoTooltip] in $game_concept_sub_subservience_concept$"
action_can_obedience_train_combined_label:0 "[recipient.GetUINameNoTooltip]"
action_can_obedience_train_click:0 "#I Click to open Train Interaction#!"

action_can_accelerated_obedience_train:0 "Partner can be made obedient"
action_can_accelerated_obedience_train_combined_group_label:0 "Partners can be made obedient"
action_can_accelerated_obedience_train_combined_group_name:0 "$action_can_accelerated_obedience_train_combined_group_label$"
action_can_accelerated_obedience_train_desc:0 "One of your partners, [recipient.GetUIName], can be immediately made [sub_subservient_concept|E] to you."
action_can_accelerated_obedience_train_combined_group_description:0 "You can immediately make some of your partners [sub_subservient_concept|E] to you."
action_can_accelerated_obedience_train_label:0 "You can make [recipient.GetShortUIName] $game_concept_sub_subservient_concept$"
action_can_accelerated_obedience_train_combined_label:0 "[recipient.GetUINameNoTooltip]"
action_can_accelerated_obedience_train_click:0 "#I Click to open Interaction#!"


code:
l_simp_chinese:
sub_show_pose_interaction:0 "Pose For Me"
sub_show_pose_interaction_desc:0 "Have [recipient.GetFirstNameNoTooltip] strike some poses."
sub_clothing_rules_interaction:0 "Set Clothing Rules"
sub_clothing_rules_interaction_desc:0 "Decide what clothing, if any, [recipient.GetShortUINameNoTooltip] should wear in public."
sub_chastity_rules_interaction:0 "Set Chastity Rules"
sub_chastity_rules_interaction_desc:0 "Decide how often [recipient.GetShortUINameNoTooltip] is allowed orgasms, or lock [recipient.GetHerHim] up in chastity to prevent pregnancy entirely."
sub_train_obedience_accelerated_interaction:0 "Instill Obedience"
sub_train_obedience_accelerated_interaction_desc:0 "Since [recipient.GetShortUINameNoTooltip] has already been superbly trained, [recipient.GetSheHe] will willingly become [sub_subservient_concept|E] to you."
sub_remove_submissive_interaction:0 "Set Aside $game_concept_submissive$"
sub_remove_submissive_interaction_desc:0 "While [recipient.GetHerHis] devotion and training will remain, sexually you will no longer consider [recipient.GetShortUINameNoTooltip] your [submissive|E]."
sub_remove_submissive_interaction_notification:0 "Set Aside $game_concept_submissive$"
sub_regain_submissive_interaction:0 "Take $game_concept_submissive$"
sub_regain_submissive_interaction_desc:0 "You once again desire to call [recipient.GetShortUINameNoTooltip] your [submissive|E]."
sub_regain_submissive_interaction_notification:0 "Took $game_concept_submissive$"

START_SUB_TRAINING:0 "Begin Training"

sub_accept_order:0 ""Of course, [actor.Custom('SubMasterMistress')|U]""
sub_train_obedience_interaction_toast:0 "$game_concept_sub_train_obedience$"
sub_train_obedience_accelerated_interaction_toast:0 "[recipient.GetFirstNameNoTooltip] professes [recipient.GetHerHis] loyalty"


code:
l_simp_chinese:
sub_train_obedience_interaction:0 "$game_concept_sub_train_obedience$ #weak (Scheme)#!"
sub_train_obedience_interaction_desc:0 "[sub_train_obedience_action|E] [recipient.GetShortUINameNoTooltip] to be your [submissive|E]*\n\n*preview time to complete innacurate"

sub_train_obedience:0 "$game_concept_sub_train_obedience_scheme$"
sub_train_obedience_invalid:0 "I stop trying to [sub_train_obedience_action|E] [target.GetShortUINameNoTooltip] as [target.GetSheHe] can no longer become my [submissive|E]."

sub_train_obedience_action:0 "Train"
sub_train_obedience_desc:0 "$sub_train_obedience_action$ [SCHEME.GetTarget.GetShortUINameNoTooltip] in [sub_subservience_concept|E], eventually making [SCHEME.GetTarget.GetHerHim] your [submissive|E]."
sub_train_obedience_desc_general:0 "$sub_train_obedience_action$ a character in [sub_subservience_concept|E], eventually making them your [submissive|E]."
SUB_TRAIN_OBEDIENCE_SUCCESS_DESC:0 "[TARGET_CHARACTER.GetShortUINameNoTooltip] will become your [submissive|E], and be devoted and loyal to you for life"


code:
l_simp_chinese:
sub_suggestion_obedience_training_label:0 "Train Partner"
sub_suggestion_obedience_training:0 "Suggestion: Train [recipient.GetShortUIName] in $game_concept_sub_subservience_concept$"
sub_suggestion_obedience_training_desc:0 "Your [actor.Custom2('RelationToMeShort', SCOPE.sC('recipient'))] [recipient.GetShortUINameNoTooltip] can be trained to be [sub_subservient_concept|E] to you, offering a variety of benefits both personally and politically."
sub_suggestion_obedience_training_click:0 "#I Click to open Train Interaction#!"


code:
l_simp_chinese:
trait_sub_subservient:0 "Subservience"
trait_sub_subservient_1:0 "Trainee (Obedience)"
trait_sub_subservient_1_desc:0 "This character has a basic idea of the obedience expected of a $game_concept_submissive$, but not much more than that."
trait_sub_subservient_1_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] has a basic idea of the obedience expected of a $game_concept_submissive$, but not much more than that."
trait_sub_subservient_2:0 "Deferential"
trait_sub_subservient_2_desc:0 "This character obeys quickly and naturally, and has even started to find joy in doing so."
trait_sub_subservient_2_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] obeys quickly and naturally, and has even started to find joy in doing so."
trait_sub_subservient_3:0 "Obedient"
trait_sub_subservient_3_desc:0 "This character has learned everything there is to learn about obedience to a $game_concept_dominant$. All that's left to do is make the lessons stick."
trait_sub_subservient_3_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] has learned everything there is to learn about obedience to a $game_concept_dominant$. All that's left to do is make the lessons stick."
trait_sub_subservient_4:0 "Subservient"
trait_sub_subservient_4_desc:0 "This character has embraced their position as a $game_concept_submissive$. Obedience has become second nature to them."
trait_sub_subservient_4_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] has embraced [ROOT.GetCharacter.GetHerHis] position as a $game_concept_submissive$. Obedience has become second nature to [ROOT.GetCharacter.GetHerHim]."

trait_sub_clothing_rules:0 "Clothing Rules"
trait_sub_clothing_rule_1:0 "Revealing Attire"
trait_sub_clothing_rule_1_desc:0 "Showing more skin than usual, but not so much as to upset anyone with a more old-fashioned outlook."
trait_sub_clothing_rule_1_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] shows more skin than usual, but not so much as to upset anyone with a more old-fashioned outlook."
trait_sub_clothing_rule_2:0 "Scandalous Attire"
trait_sub_clothing_rule_2_desc:0 "Wears so little that what clothes are there seem more like a formality, rather than offering real coverage."
trait_sub_clothing_rule_2_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] wears so little that what clothes are there seem more like a formality, rather than offering real coverage."
trait_sub_clothing_rule_3:0 "Forced Nudity"
trait_sub_clothing_rule_3_desc:0 "Baring it all, whether they want to or not."
trait_sub_clothing_rule_3_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] is baring it all, whether [ROOT.GetCharacter.GetSheHe] wants to or not."
trait_sub_clothing_rule_4:0 "Clothing Rule 4"
trait_sub_clothing_rule_4_desc:0 "This trait isn't supposed to be used. You didn't... you didn't try to CHEAT, did you?!"

trait_sub_chastity_rules:0 "Chastity Rules"
trait_sub_chastity_rule_1:0 "Orgasms Restricted"
trait_sub_chastity_rule_1_desc:0 "This character is often denied release, and their libido has noticeably grown."
trait_sub_chastity_rule_1_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] is often denied release, and [ROOT.GetCharacter.GetHerHis] libido has noticeably grown."
trait_sub_chastity_rule_2:0 "Orgasms Forbidden"
trait_sub_chastity_rule_2_desc:0 "Only allowed orgasms as a rare treat, this character spends most of their waking hours filled with lust- and most of their sleeping hours, for that matter!"
trait_sub_chastity_rule_2_character_desc:0 "Only allowed orgasms as a rare treat, [ROOT.GetCharacter.GetFirstNameNoTooltip] spends most of [ROOT.GetCharacter.GetHerHis] waking hours filled with lust- and most of [ROOT.GetCharacter.GetHerHis] sleeping hours, for that matter!"
trait_sub_chastity_rule_3:0 "Touching Forbidden"
trait_sub_chastity_rule_3_desc:0 "Forbidden from touching themself in any way, and only allowed orgasms as the rarest of treats, this character constantly rubs their legs together subconsciously and struggles to think about anything other than sex."
trait_sub_chastity_rule_3_character_desc:0 "Forbidden from touching [ROOT.GetCharacter.GetHerselfHimself] in any way, and only allowed orgasms as the rarest of treats, [ROOT.GetCharacter.GetFirstNameNoTooltip] constantly rubs [ROOT.GetCharacter.GetHerHis] legs together subconsciously and struggles to think about anything other than sex."
trait_sub_chastity_rule_4:0 "Locked In Chastity"
trait_sub_chastity_rule_4_desc:0 "This character has been locked in a chastity belt. Only their [GetPlayer.Custom('SubMasterMistressPossessive')|U] mercy can free their genitals from their prison."
trait_sub_chastity_rule_4_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] has been locked in a chastity belt. Only [ROOT.GetCharacter.GetHerHis] [GetPlayer.Custom('SubMasterMistressPossessive')|U] mercy can free [ROOT.GetCharacter.GetHerHis] [ROOT.GetCharacter.Custom('SubGenderedGenitals')] from its prison."


code:
l_spanish:
SUB_MASTER:0 "master"
SUB_MISTRESS:0 "mistress"
SUB_MASTER_POSSESSIVE:0 "master's"
SUB_MISTRESS_POSSESSIVE:0 "mistress'"
SUB_PENIS:0 "penis"
SUB_PUSSY:0 "pussy"
SUB_MALE_TORSO:0 "torso"
SUB_FEMALE_TORSO:0 "breasts"


code:
l_spanish:
sub_pose.0001.t:0 "Putting On A Show"
sub_pose.0001.desc.short:0 ""What do you desire, [actor.Custom('SubMasterMistress')|U]?""
sub_pose.0002.desc.short:0 ""I was hoping you would say that, [actor.Custom('SubMasterMistress')|U]. Perhaps when you're satisfied with my little show, we could move to the bed?""
sub_pose.0003.desc.short:0 ""Yes, a little... but you can look all you want, [actor.Custom('SubMasterMistress')|U]. Your pleasure is more important than my modesty.""
sub_pose.0004.desc.short:0 ""I will do my best, [actor.Custom('SubMasterMistress')|U], but having you watching me is very... distracting. Does this pose please you?""
sub_pose.0005.desc.short:0 ""Oh...! H-how long have you had shackles in here?! And m-more importantly, how long are you going to keep me locked up like this...?""

sub_pose.0001.a:0 "Actually the first pose was fine."
sub_pose.0001.b:0 "You look stunning."
sub_pose.0001.c:0 "Getting embarrassed at all?"
sub_pose.0001.d:0 "Just try to look natural."
sub_pose.0001.e:0 "Actually, I think you'd look best chained up!"
sub_pose.0001.f:0 "That will be all for now."

sub_rules.0001.t:0 "Changing Chastity Rules"
sub_rules.0001.desc.short:0 "You consider the different rules you could set for [recipient.GetFirstNameNoTooltip]'s orgasms."

sub_rules.0001.a:0 "Remove all restrictions on [recipient.GetHerHis] orgasms."
sub_rules.0001.b:0 "Occasional orgasm denial will do [recipient.GetHerHim] good."
sub_rules.0001.c:0 "Keep [recipient.GetHerHim] denied. Perhaps a few orgasms a year, if [recipient.GetSheHe] behaves."
sub_rules.0001.d:0 "Orgasms? Never! In fact, a no-touch rule is what [recipient.GetSheHe] needs."
sub_rules.0001.e:0 "Lock [recipient.GetHerHim] in a chastity belt. No orgasms, no touching, and no chance of pregnancy."
sub_rules.0001.f:0 "Nevermind."

sub_rules.0002.t:0 "Changing Clothing Rules"
sub_rules.0002.desc.short:0 "Dressing up [recipient.GetFirstNameNoTooltip] in the privacy of your chambers is enjoyable, of course, but you could also determine what [recipient.GetSheHe]'s allowed to wear the rest of the time..."

sub_rules.0002.a:0 "Let [recipient.GetHerHim] wear what [recipient.GetSheHe] likes."
sub_rules.0002.b:0 "Have [recipient.GetHerHim] dress provocatively."
sub_rules.0002.c:0 "Permit undergarments only."
sub_rules.0002.d:0 "Revoke all clothing privileges!"
sub_rules.0002.e:0 "Nevermind."


code:
l_spanish:
sub_recent_training_modifier:0 "Dominant Aura"
sub_training_milestone_scheme_power_1:0 "Prior Training"
sub_training_milestone_scheme_power_2:0 "Prior Training"
sub_training_milestone_scheme_power_3:0 "Prior Training"
sub_positive_trait_scheme_power:0 "Naturally Submissive"
sub_negative_trait_scheme_resistance:0 "Naturally Independent"
sub_highest_pos_opinion_scheme_power:0 "Enamored With You"
sub_high_pos_opinion_scheme_power:0 "Adores You"
sub_medium_pos_opinion_scheme_power:0 "Admires You"
sub_low_pos_opinion_scheme_power:0 "Likes You"
sub_highest_neg_opinion_scheme_resistance:0 "Loathes You"
sub_high_neg_opinion_scheme_resistance:0 "Detests You"
sub_medium_neg_opinion_scheme_resistance:0 "Hates You"
sub_low_neg_opinion_scheme_resistance:0 "Dislikes You"


code:
l_spanish:
sub_subservient_to_master:0 "Obedient to [GetPlayer.Custom('SubMasterMistress')|U]"
sub_made_me_go_naked:0 "What?! But everyone will see!"
sub_positive_training_start:0 "Enjoys being trained"
sub_negative_training_start:0 "Resents being trained"


code:
l_spanish:
game_concept_sub_train_obedience_scheme:0 "Obedience Training Scheme"
game_concept_sub_train_obedience_schemes:0 "Obedience Training Schemes"
game_concept_sub_train_obedience:0 "Obedience Training"
game_concept_sub_train_obedience_action:0 "Train"
game_concept_sub_train_obedience_scheme_single:0 "an Obedience Training Scheme"
game_concept_sub_train_obedience_scheme_desc:0 "The $game_concept_sub_train_obedience_scheme$ is a [personal_scheme|E] to train a character in [sub_subservience_concept|E], eventually making them your [submissive|E]. It is not [secret_scheme_single|E] and does not use [agents|E].\n\nYour [martial|E] has a slight effect on [scheme_power|E], but power is mostly based on the [scheme_target|E]'s personality and [opinion|E] of you. While eventual success is assured, low opinion or a willful personality can make it a long process. However, the rewards last a lifetime and are well worth the effort."

game_concept_sub_subservience_concept:0 "Subservience"
game_concept_sub_subservient_concept:0 "Subservient"
game_concept_sub_subservience_concept_desc:0 "$game_concept_sub_subservience_concept$ has many facets, and is taught through the [sub_train_obedience_scheme|E]. Characters who are $game_concept_sub_subservient_concept$ to a Master or Mistress tend to have an extremely high opinion of that character, strive to please them, and are open to following rules set by them.\n\nBeing $game_concept_sub_subservient_concept$ to someone is intimately related to being their [submissive|E], but they are not identical. Completing $game_concept_sub_train_obedience_scheme_single$ will make the trainee $game_concept_sub_subservient_concept$ for life, but the $game_concept_submissive$ [relation|E] depends upon the continued consent of both the $game_concept_submissive$ and the $game_concept_dominant$."


code:
l_spanish:
rule_sub_valid_subs:0 "#X Submissive Partners:#! Valid Sub Genders"
setting_sub_valid_subs_all_genders:0 "All Genders"
setting_sub_valid_subs_all_genders_desc:0 "Both male and female characters can become $game_concept_submissives$."
setting_sub_valid_subs_female_only:0 "#high Female Only#!"
setting_sub_valid_subs_female_only_desc:0 "Only female characters can become $game_concept_submissives$."
setting_sub_valid_subs_male_only:0 "#high Male Only#!"
setting_sub_valid_subs_male_only_desc:0 "Only male characters can become $game_concept_submissives$."

rule_sub_gender_attraction_requirement:0 "#X Submissive Partners:#! Gender Attraction Requirement"
setting_sub_gender_attraction_requirement_enabled:0 "Enabled"
setting_sub_gender_attraction_requirement_enabled_desc:0 "Characters will not enter into a $game_concept_dominant$/$game_concept_submissive$ relationship unless each is attracted to the other's gender."
setting_sub_gender_attraction_requirement_disabled:0 "#high Disabled#!"
setting_sub_gender_attraction_requirement_disabled_desc:0 "Characters can enter into a $game_concept_dominant$/$game_concept_submissive$ relationship regardless of gender attraction."


code:
l_spanish:
action_can_obedience_train:0 "Partner can be trained"
action_can_obedience_train_combined_group_label:0 "Partners can be trained"
action_can_obedience_train_combined_group_name:0 "$action_can_obedience_train_combined_group_label$"
action_can_obedience_train_desc:0 "One of your partners, [recipient.GetUIName], can be trained in [sub_subservience_concept|E]."
action_can_obedience_train_combined_group_description:0 "You can train partners in [sub_subservience_concept|E]."
action_can_obedience_train_label:0 "You can train [recipient.GetShortUINameNoTooltip] in $game_concept_sub_subservience_concept$"
action_can_obedience_train_combined_label:0 "[recipient.GetUINameNoTooltip]"
action_can_obedience_train_click:0 "#I Click to open Train Interaction#!"

action_can_accelerated_obedience_train:0 "Partner can be made obedient"
action_can_accelerated_obedience_train_combined_group_label:0 "Partners can be made obedient"
action_can_accelerated_obedience_train_combined_group_name:0 "$action_can_accelerated_obedience_train_combined_group_label$"
action_can_accelerated_obedience_train_desc:0 "One of your partners, [recipient.GetUIName], can be immediately made [sub_subservient_concept|E] to you."
action_can_accelerated_obedience_train_combined_group_description:0 "You can immediately make some of your partners [sub_subservient_concept|E] to you."
action_can_accelerated_obedience_train_label:0 "You can make [recipient.GetShortUIName] $game_concept_sub_subservient_concept$"
action_can_accelerated_obedience_train_combined_label:0 "[recipient.GetUINameNoTooltip]"
action_can_accelerated_obedience_train_click:0 "#I Click to open Interaction#!"


code:
l_spanish:
sub_show_pose_interaction:0 "Pose For Me"
sub_show_pose_interaction_desc:0 "Have [recipient.GetFirstNameNoTooltip] strike some poses."
sub_clothing_rules_interaction:0 "Set Clothing Rules"
sub_clothing_rules_interaction_desc:0 "Decide what clothing, if any, [recipient.GetShortUINameNoTooltip] should wear in public."
sub_chastity_rules_interaction:0 "Set Chastity Rules"
sub_chastity_rules_interaction_desc:0 "Decide how often [recipient.GetShortUINameNoTooltip] is allowed orgasms, or lock [recipient.GetHerHim] up in chastity to prevent pregnancy entirely."
sub_train_obedience_accelerated_interaction:0 "Instill Obedience"
sub_train_obedience_accelerated_interaction_desc:0 "Since [recipient.GetShortUINameNoTooltip] has already been superbly trained, [recipient.GetSheHe] will willingly become [sub_subservient_concept|E] to you."
sub_remove_submissive_interaction:0 "Set Aside $game_concept_submissive$"
sub_remove_submissive_interaction_desc:0 "While [recipient.GetHerHis] devotion and training will remain, sexually you will no longer consider [recipient.GetShortUINameNoTooltip] your [submissive|E]."
sub_remove_submissive_interaction_notification:0 "Set Aside $game_concept_submissive$"
sub_regain_submissive_interaction:0 "Take $game_concept_submissive$"
sub_regain_submissive_interaction_desc:0 "You once again desire to call [recipient.GetShortUINameNoTooltip] your [submissive|E]."
sub_regain_submissive_interaction_notification:0 "Took $game_concept_submissive$"

START_SUB_TRAINING:0 "Begin Training"

sub_accept_order:0 ""Of course, [actor.Custom('SubMasterMistress')|U]""
sub_train_obedience_interaction_toast:0 "$game_concept_sub_train_obedience$"
sub_train_obedience_accelerated_interaction_toast:0 "[recipient.GetFirstNameNoTooltip] professes [recipient.GetHerHis] loyalty"


code:
l_spanish:
sub_train_obedience_interaction:0 "$game_concept_sub_train_obedience$ #weak (Scheme)#!"
sub_train_obedience_interaction_desc:0 "[sub_train_obedience_action|E] [recipient.GetShortUINameNoTooltip] to be your [submissive|E]*\n\n*preview time to complete innacurate"

sub_train_obedience:0 "$game_concept_sub_train_obedience_scheme$"
sub_train_obedience_invalid:0 "I stop trying to [sub_train_obedience_action|E] [target.GetShortUINameNoTooltip] as [target.GetSheHe] can no longer become my [submissive|E]."

sub_train_obedience_action:0 "Train"
sub_train_obedience_desc:0 "$sub_train_obedience_action$ [SCHEME.GetTarget.GetShortUINameNoTooltip] in [sub_subservience_concept|E], eventually making [SCHEME.GetTarget.GetHerHim] your [submissive|E]."
sub_train_obedience_desc_general:0 "$sub_train_obedience_action$ a character in [sub_subservience_concept|E], eventually making them your [submissive|E]."
SUB_TRAIN_OBEDIENCE_SUCCESS_DESC:0 "[TARGET_CHARACTER.GetShortUINameNoTooltip] will become your [submissive|E], and be devoted and loyal to you for life"


code:
l_spanish:
sub_suggestion_obedience_training_label:0 "Train Partner"
sub_suggestion_obedience_training:0 "Suggestion: Train [recipient.GetShortUIName] in $game_concept_sub_subservience_concept$"
sub_suggestion_obedience_training_desc:0 "Your [actor.Custom2('RelationToMeShort', SCOPE.sC('recipient'))] [recipient.GetShortUINameNoTooltip] can be trained to be [sub_subservient_concept|E] to you, offering a variety of benefits both personally and politically."
sub_suggestion_obedience_training_click:0 "#I Click to open Train Interaction#!"


code:
l_spanish:
trait_sub_subservient:0 "Subservience"
trait_sub_subservient_1:0 "Trainee (Obedience)"
trait_sub_subservient_1_desc:0 "This character has a basic idea of the obedience expected of a $game_concept_submissive$, but not much more than that."
trait_sub_subservient_1_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] has a basic idea of the obedience expected of a $game_concept_submissive$, but not much more than that."
trait_sub_subservient_2:0 "Deferential"
trait_sub_subservient_2_desc:0 "This character obeys quickly and naturally, and has even started to find joy in doing so."
trait_sub_subservient_2_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] obeys quickly and naturally, and has even started to find joy in doing so."
trait_sub_subservient_3:0 "Obedient"
trait_sub_subservient_3_desc:0 "This character has learned everything there is to learn about obedience to a $game_concept_dominant$. All that's left to do is make the lessons stick."
trait_sub_subservient_3_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] has learned everything there is to learn about obedience to a $game_concept_dominant$. All that's left to do is make the lessons stick."
trait_sub_subservient_4:0 "Subservient"
trait_sub_subservient_4_desc:0 "This character has embraced their position as a $game_concept_submissive$. Obedience has become second nature to them."
trait_sub_subservient_4_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] has embraced [ROOT.GetCharacter.GetHerHis] position as a $game_concept_submissive$. Obedience has become second nature to [ROOT.GetCharacter.GetHerHim]."

trait_sub_clothing_rules:0 "Clothing Rules"
trait_sub_clothing_rule_1:0 "Revealing Attire"
trait_sub_clothing_rule_1_desc:0 "Showing more skin than usual, but not so much as to upset anyone with a more old-fashioned outlook."
trait_sub_clothing_rule_1_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] shows more skin than usual, but not so much as to upset anyone with a more old-fashioned outlook."
trait_sub_clothing_rule_2:0 "Scandalous Attire"
trait_sub_clothing_rule_2_desc:0 "Wears so little that what clothes are there seem more like a formality, rather than offering real coverage."
trait_sub_clothing_rule_2_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] wears so little that what clothes are there seem more like a formality, rather than offering real coverage."
trait_sub_clothing_rule_3:0 "Forced Nudity"
trait_sub_clothing_rule_3_desc:0 "Baring it all, whether they want to or not."
trait_sub_clothing_rule_3_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] is baring it all, whether [ROOT.GetCharacter.GetSheHe] wants to or not."
trait_sub_clothing_rule_4:0 "Clothing Rule 4"
trait_sub_clothing_rule_4_desc:0 "This trait isn't supposed to be used. You didn't... you didn't try to CHEAT, did you?!"

trait_sub_chastity_rules:0 "Chastity Rules"
trait_sub_chastity_rule_1:0 "Orgasms Restricted"
trait_sub_chastity_rule_1_desc:0 "This character is often denied release, and their libido has noticeably grown."
trait_sub_chastity_rule_1_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] is often denied release, and [ROOT.GetCharacter.GetHerHis] libido has noticeably grown."
trait_sub_chastity_rule_2:0 "Orgasms Forbidden"
trait_sub_chastity_rule_2_desc:0 "Only allowed orgasms as a rare treat, this character spends most of their waking hours filled with lust- and most of their sleeping hours, for that matter!"
trait_sub_chastity_rule_2_character_desc:0 "Only allowed orgasms as a rare treat, [ROOT.GetCharacter.GetFirstNameNoTooltip] spends most of [ROOT.GetCharacter.GetHerHis] waking hours filled with lust- and most of [ROOT.GetCharacter.GetHerHis] sleeping hours, for that matter!"
trait_sub_chastity_rule_3:0 "Touching Forbidden"
trait_sub_chastity_rule_3_desc:0 "Forbidden from touching themself in any way, and only allowed orgasms as the rarest of treats, this character constantly rubs their legs together subconsciously and struggles to think about anything other than sex."
trait_sub_chastity_rule_3_character_desc:0 "Forbidden from touching [ROOT.GetCharacter.GetHerselfHimself] in any way, and only allowed orgasms as the rarest of treats, [ROOT.GetCharacter.GetFirstNameNoTooltip] constantly rubs [ROOT.GetCharacter.GetHerHis] legs together subconsciously and struggles to think about anything other than sex."
trait_sub_chastity_rule_4:0 "Locked In Chastity"
trait_sub_chastity_rule_4_desc:0 "This character has been locked in a chastity belt. Only their [GetPlayer.Custom('SubMasterMistressPossessive')|U] mercy can free their genitals from their prison."
trait_sub_chastity_rule_4_character_desc:0 "[ROOT.GetCharacter.GetFirstNameNoTooltip] has been locked in a chastity belt. Only [ROOT.GetCharacter.GetHerHis] [GetPlayer.Custom('SubMasterMistressPossessive')|U] mercy can free [ROOT.GetCharacter.GetHerHis] [ROOT.GetCharacter.Custom('SubGenderedGenitals')] from its prison."


code:
"""
CK3 Localization Helper script by erri120 under GPLv3.

Usage:

Updating translations:

python localization_helper.py update --lang german

Viewing statistics:

python localization_helper.py stats

Viewing statistics for a specific language:

python localization_helper.py stats --lang german

"""

import os;
import argparse;
import sys;
import glob;
import shutil;
from typing import Tuple, List;

#key, value, translated, comment
Yaml = Tuple[str, str, bool, bool];

BASE_LANGUAGE = 'english';
ENCODING = 'utf-8-sig';

localization_dir = os.path.abspath('localization');
base_dir = os.path.join(localization_dir, BASE_LANGUAGE);

def create_empty_list(count: int) -> List[str]:
    """Creates a new empty list"""
    return [''] * count;

def is_empty(string: str) -> bool:
    """Checks if the string is empty or only has whitespaces"""

    if not string:
        return True;
    return string.isspace();

def get_lang_name(lang: str) -> str:
    """Returns the name ending for a language."""

    return 'l_'+lang;

def get_yaml(string: str) -> Yaml:
    """Gets a YAML Tuple for the current line"""

    empty = ('', '', False, False);

    if is_empty(string):
        return empty;

    line = string.strip();
    comment_index = -1;

    try:
        comment_index = line.index('#');
        if comment_index == 0:
            return ('', '', False, True);
    except ValueError:
        pass;

    line_len = len(line);
    index = -1;
    key = '';
    value = '';
    translated = False;

    try:
        index = line.index(':');
    except ValueError:
        print('Unable to get index of : in line \"'+line+'\"');
        return empty;

    key = line[0:index];

    if line_len <= index+1:
        return (key, value, translated, False);

    if not is_empty(line[index+1]):
        translation_value = line[index+1];
        if not translation_value in ('0', '1'):
            print('Unknown translation value \"'+translation_value+'\" in line \"'+line+'\"');
        else:
            translated = translation_value == '1';
        value = line[index+2:].strip();
    else:
        value = line[index+1:].strip();

    result = (key, value, translated, False);
    return result;

def get_yaml_from_file(path: str) -> List[Yaml]:
    """Reads a file and returns a list of all YAML values"""

    yaml = list();
    with open(path, 'r', encoding=ENCODING) as file_stream:
        line = file_stream.readline();
        while line:
            yaml.append(get_yaml(line));
            line = file_stream.readline();

    return yaml;

def yaml_to_string(yaml: Yaml, include_translate: bool = True) -> str:
    """Converst a YAML Tuple to string"""
    translate_str = '' if not include_translate else '1' if yaml[2] else '0';
    return yaml[0]+':'+translate_str+' '+yaml[1]+'\n';

def update_translation_file(input_path: str, output_path: str, output_lang: str):
    """Updates the provided file with new translations"""

    output_lang_name = get_lang_name(output_lang);

    print('Updating file '+output_path);

    if not os.path.exists(output_path):
        print('File does not exist, copying from '+input_path+' to '+output_path);
        shutil.copyfile(input_path, output_path);

    input_yaml = get_yaml_from_file(input_path);
    output_yaml = get_yaml_from_file(output_path);

    input_len = len(input_yaml);
    output_len = len(output_yaml);
    new_lines = create_empty_list(input_len);

    if output_len != input_len:
        print('Input length does not equal output length: '+str(input_len)+'!='+str(output_len));

    for i in range(input_len):
        cur_input = input_yaml[i];
        # is comment
        if cur_input[3]:
            continue;

        if i == 0:
            new_lines[0] = output_lang_name+':\n';
            continue;

        if is_empty(cur_input[0]):
            new_lines[i] = '\n';
            continue;

        # searching for a YAML tuple with the same key as the current
        found_in_output = next((x for x in output_yaml if x[0] == cur_input[0]), ('', '', False));

        # not found means we just add the input
        if not found_in_output[0]:
            print('Missing key '+ cur_input[0]);
            new_lines[i] = yaml_to_string(cur_input);
            continue;

        # if we found it in the output file we check if it's translated
        if found_in_output[2]:
            new_lines[i] = yaml_to_string(found_in_output);
            continue;

        # if it's not translated then we copy the input
        new_lines[i] = yaml_to_string(cur_input);

    with open(output_path, 'w', encoding=ENCODING) as file_stream:
        file_stream.writelines(new_lines);

def copy_base_translations(input_dir: str, output_dir: str, input_lang: str, output_lang: str):
    """
    Recursively copies the contents of one folder to another and
    calls the updateFile function on every file.
    """

    input_lang_file_name = get_lang_name(input_lang)+'.yml';
    output_lang_file_name = get_lang_name(output_lang)+'.yml';

    if not os.path.exists(output_dir):
        os.mkdir(output_dir);
    items = glob.glob(input_dir + '/*');
    for item in items:
        if os.path.isdir(item):
            path = os.path.join(output_dir, item.split(os.path.sep)[-1]);
            copy_base_translations(item, path, input_lang, output_lang);
        else:
            file_name = item.split(os.path.sep)[-1];
            if file_name.endswith(input_lang_file_name):
                file_name = file_name.replace(input_lang_file_name, output_lang_file_name);
            path = os.path.join(output_dir, file_name);
            update_translation_file(item, path, output_lang);

def updating(output_language: str):
    """Updates all Translations"""

    print('Updating Translation for Language: '+output_language);
    output_dir = os.path.join(localization_dir, output_language);

    print('Using '+BASE_LANGUAGE+' Translations from '+base_dir+' in '+output_dir);
    copy_base_translations(base_dir, output_dir, BASE_LANGUAGE, output_language);

def get_translation_stats_file(base: str, path: str, cur_lang: str, detail: bool) -> Tuple[str, int, int]:
    """Gets the number of translated and not translated string of a file"""

    yaml = get_yaml_from_file(path);

    total = 0;
    translated = 0;
    not_translated = 0;

    lang_name = get_lang_name(cur_lang);

    for x in yaml:
        if x[3]:
            continue;
        if is_empty(x[0]):
            continue;
        if x[0] == lang_name:
            continue;

        total += 1;
        if x[2]:
            translated += 1;
        else:
            if detail:
                print(path+' '+x[0]);
            not_translated += 1;

    return (path.replace(base, ''), translated, not_translated);

def get_translation_stats_folder(base: str, folder: str, cur_lang: str, detail: bool) -> List[Tuple[str, int, int]]:
    """Gets Translation stats for a folder"""

    result = list();

    items = glob.glob(folder + '\\*');
    for item in items:
        if os.path.isdir(item):
            dir_stats = get_translation_stats_folder(base, item, cur_lang, detail);
            for stat in dir_stats:
                result.append(stat);
        else:
            file_stats = get_translation_stats_file(base, item, cur_lang, detail);
            result.append(file_stats);

    return result;

def add(enumerable: List[int]) -> int:
    """Adds all numbers of a list"""

    i = 0;
    for x in enumerable:
        i += x;
    return i;

def stats(lang: str):
    """Displays Translation Statistics"""

    print('Translation Statistics:\n');
    print('%-15s %10s %7s %7s' % ('Language ', 'Translated', 'Missing', 'Ratio'))

    languages = glob.glob(localization_dir+'\\*');
    detail = lang != '';
    for language in languages:
        name = language.replace(localization_dir+'\\', '');
        if name == BASE_LANGUAGE:
            continue;
        if detail and lang != name:
            continue;
        lang_stats = get_translation_stats_folder(language+'\\', language, name, detail);
        translated = list(map(lambda x: x[1], lang_stats));
        missing = list(map(lambda x: x[2], lang_stats));
        total_translated = add(translated);
        total_missing = add(missing);
        total = total_translated+total_missing;
        ratio = (total_translated/total)*100;

        ratio_str = f'{ratio:.2f}%';

        print('%-15s %10s %7s %7s' % (name, total_translated, total_missing, ratio_str))

def main():
    """Main"""
    parser = argparse.ArgumentParser('Localization Helper',
        description='Localization Helper by erri120',
        allow_abbrev=False);
    parser.add_argument('verb',
        help='Translation Update or Statistics',
        choices=('update', 'stats'));
    parser.add_argument('--lang',
        action='store',
        type=str,
        metavar='Language',
        help='Language for Translation Updates');
    args = parser.parse_args();

    lang = args.lang;
    if args.verb == 'update':
        if lang is None:
            print('update requires --lang to be set!');
            sys.exit(-1);
        updating(lang);
    else:
        if lang is None:
            stats('');
        else:
            stats(lang);

if __name__ == '__main__':
    main();