forked from L1Z0/NoN-Translations
Compare commits
12
Commits
807e452c01
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c653bfcfb3 | ||
|
|
d81dd3b4e7 | ||
|
|
2d79ca30a1 | ||
|
|
a64fee7321 | ||
|
|
a5319c4411 | ||
|
|
2da54c1f80 | ||
|
|
81b8efb095 | ||
|
|
eb17c4e383 | ||
|
|
669acbc2c8 | ||
|
|
37f924ea9e | ||
|
|
4531bb2372 | ||
|
|
2d7932a48e |
@@ -1 +0,0 @@
|
||||
/node_modules/
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"item.needsofnature.flower_mix": "花卉混合物",
|
||||
"item.needsofnature.iron_plug": "钻石肛塞",
|
||||
"item.needsofnature.protector_v": "小穴保护器",
|
||||
"item.needsofnature.protector_a": "后庭保护器",
|
||||
"item.needsofnature.protector_av": "通用保护器",
|
||||
"item.needsofnature.iron_plug": "铁塞",
|
||||
"item.needsofnature.protector_v": "小穴贞操带",
|
||||
"item.needsofnature.protector_a": "菊花贞操带",
|
||||
"item.needsofnature.protector_av": "通用贞操带",
|
||||
"item.needsofnature.diaphragm": "避孕套",
|
||||
"item.needsofnature.strapon": "可穿戴假阳具",
|
||||
"item.needsofnature.strapon_advanced": "储液式可穿戴假阳具",
|
||||
@@ -33,16 +33,16 @@
|
||||
"item.needsofnature.horse_liquid_collector": "种马取精器",
|
||||
"item.needsofnature.mixed_liquid_bottle": "混合精液瓶",
|
||||
"entity.needsofnature.horse_liquid_collector": "种马取精器",
|
||||
"trinkets.slot.legs.v": "小穴V",
|
||||
"trinkets.slot.legs.a": "后门a",
|
||||
"trinkets.slot.legs.d": "肉棒d",
|
||||
"trinkets.slot.legs.v": "小穴",
|
||||
"trinkets.slot.legs.a": "菊花",
|
||||
"trinkets.slot.legs.d": "肉棒",
|
||||
"key.needsofnature.start_manual_peak": "开始自慰",
|
||||
"config.needsofnature.category.liquid": "精液",
|
||||
"config.needsofnature.category.pregnancy": "怀孕",
|
||||
"config.needsofnature.pregnancy_title": "自然之需怀孕",
|
||||
"config.needsofnature.liquid_settings_title": "自然之需精液",
|
||||
"config.needsofnature.debug_spin_mode": "SFW 模式:",
|
||||
"config.needsofnature.convert_male_v_to_a": "将男性专用V注入转换为A:",
|
||||
"config.needsofnature.convert_male_v_to_a": "对于男性,将小穴动画获得的精液注入菊花:",
|
||||
"config.needsofnature.peak_loop_seconds": "高潮阶段秒数(1-300):",
|
||||
"config.needsofnature.player_skin_model.section.belly": "孕肚",
|
||||
"config.needsofnature.belly_settings": "孕肚设置...",
|
||||
@@ -50,11 +50,9 @@
|
||||
"config.needsofnature.belly_rendering": "你的孕肚:",
|
||||
"config.needsofnature.max_liquid_belly_size": "最大精液量时孕肚大小:",
|
||||
"config.needsofnature.max_pregnancy_belly_size": "怀孕最大值孕肚大小:",
|
||||
"config.needsofnature.intiface_energized_level": "性压抑 %s 基础/脉冲:",
|
||||
"config.needsofnature.intiface_peak_reactiveimpact": "高潮冲击:",
|
||||
"config.needsofnature.intiface_oscillator_peak_speed": "高潮阶段速度:",
|
||||
"config.needsofnature.intiface_stroker_peak_duration": "高潮阶段移动时长:",
|
||||
"config.needsofnature.section.intiface_energized": "性压抑心跳",
|
||||
"config.needsofnature.section.liquid_based_pregnancy": "基于精液的怀孕",
|
||||
"config.needsofnature.section.pregnancy_timing": "怀孕时机",
|
||||
"config.needsofnature.section.pregnancy_behavior": "怀孕行为",
|
||||
@@ -67,7 +65,6 @@
|
||||
"config.needsofnature.keep_liquid_tank_after_death": "死后保留精液槽:",
|
||||
"config.needsofnature.keep_pregnancy_after_death": "死后保留怀孕状态:",
|
||||
"config.needsofnature.pvp_max_heat_escape_strength_percent": "最大性压抑时的逃脱强度(0-200%):",
|
||||
"config.needsofnature.pvp_zero_heat_attack_strength_percent": "零性压抑时的攻击强度(0-200%):",
|
||||
"config.needsofnature.attack_outcome_failsafe_threshold": "攻击者连续高潮次数(1-50):",
|
||||
"config.needsofnature.give_up_chained_peaks": "连续高潮后可“放弃”的次数 (1-50):",
|
||||
"config.needsofnature.attack_creative_players": "允许创造模式玩家被动进入性行为:",
|
||||
@@ -108,7 +105,6 @@
|
||||
"config.needsofnature.tooltip.belly_rendering": "开启:始终显示你的孕肚。原始躯干:仅当你的角色使用原始玩家躯干时显示。关闭:对所有玩家隐藏你的孕肚。",
|
||||
"config.needsofnature.tooltip.max_liquid_belly_size": "完全填满精液槽时达到的最大孕肚动画大小。",
|
||||
"config.needsofnature.tooltip.max_pregnancy_belly_size": "临产时达到的最大孕肚动画大小。",
|
||||
"config.needsofnature.tooltip.intiface_energized": "性压抑激活时的基础振动,加上与心跳脉冲同步的心跳峰值强度。左滑块为基础,右滑块为脉冲峰值。",
|
||||
"config.needsofnature.tooltip.intiface_peak_reactiveimpact": "高潮反应式冲击提示的强度滑块和持续时间(毫秒)。",
|
||||
"config.needsofnature.tooltip.intiface_oscillator_peak_speed": "您在高潮动画阶段时的振荡器速度。设为0%以禁用。",
|
||||
"config.needsofnature.tooltip.intiface_stroker_peak_duration": "高潮反应式冲击提示时,活塞API移动到最大或最小位置所用的毫秒数。设为0ms以禁用。",
|
||||
@@ -146,7 +142,6 @@
|
||||
"config.needsofnature.tooltip.offspring_count_reset": "将怀孕配置文件行重置为NoNpack默认值。",
|
||||
"config.needsofnature.tooltip.liquid_gain_entry_ml": "该实体作为注入器时提供的精液获取毫升数。",
|
||||
"config.needsofnature.tooltip.entity_profile_entry_chance": "该实体的怀孕几率覆盖。留空以使用显示的默认/全局值。",
|
||||
"effect.needsofnature.energized": "充满性压抑",
|
||||
"effect.needsofnature.fertility_increaser": "易孕",
|
||||
"effect.needsofnature.filled": "精液过载",
|
||||
"effect.needsofnature.pregnant": "怀孕",
|
||||
@@ -184,38 +179,38 @@
|
||||
"item.minecraft.potion.effect.needsofnature.liquid": "精液瓶",
|
||||
"stat.needsofnature.peaked_animations_total": "NoN:高潮动画",
|
||||
"stat.needsofnature.liquid_gained_ml_total": "NoN:获取精液总量(毫升)",
|
||||
"stat.needsofnature.attack_animations_started_total": "NoN:被战败次数",
|
||||
"stat.needsofnature.attack_escapes_success_total": "NoN:从战败中逃脱次数",
|
||||
"stat.needsofnature.attack_animations_started_total": "NoN:被强奸次数",
|
||||
"stat.needsofnature.attack_escapes_success_total": "NoN:从强奸中逃脱次数",
|
||||
"stat.needsofnature.m_injector_peaks_ml_total": "NoN:口交精液量(毫升)",
|
||||
"stat.needsofnature.manual_peaks_total": "NoN:手动高潮次数",
|
||||
"stat.needsofnature.bottles_filled_total": "NoN:收集精液瓶次数",
|
||||
"stat.needsofnature.pregnancies_started_total": "NoN:受精次数",
|
||||
"stat.needsofnature.pregnancies_completed_total": "NoN:生产次数",
|
||||
"advancements.needsofnature.natural_curiosity.title": "伊甸园的禁果",
|
||||
"advancements.needsofnature.natural_curiosity.description": "首次进入高潮。",
|
||||
"advancements.needsofnature.root.description": "春天来了,万物复苏,又到了动物们交配的季节。",
|
||||
"advancements.needsofnature.natural_curiosity.description": "达到高潮。",
|
||||
"advancements.needsofnature.filled_to_the_brim.description": "完全填满你的精液槽。",
|
||||
"advancements.needsofnature.favouritism.description": "仅被一种生物类型灌满精液。",
|
||||
"advancements.needsofnature.mother_nature.description": "孕育了 25 次生命。",
|
||||
"advancements.needsofnature.group_activity.title": "淫趴",
|
||||
"advancements.needsofnature.group_activity.description": "与三个生物做爱。",
|
||||
"advancements.needsofnature.tossed_around.description": "连续触发五次战败动画。你就是故意来看动画的",
|
||||
"advancements.needsofnature.collectors_habit.title": "禁止套娃",
|
||||
"advancements.needsofnature.tossed_around.title": "无限高潮",
|
||||
"advancements.needsofnature.tossed_around.description": "连续触发五次战败动画。",
|
||||
"advancements.needsofnature.collectors_habit.description": "用你体内的精液填满 25 个玻璃瓶。",
|
||||
"advancements.needsofnature.field_research.title": "赴一线进行实地调研",
|
||||
"advancements.needsofnature.field_research.description": "在一个游戏日之内榨取五种不同的生物的精液。",
|
||||
"advancements.needsofnature.bad_idea_beacon.title": "电脑配件配送员",
|
||||
"advancements.needsofnature.bad_idea_beacon.description": "衣物完全破损时达到最大性压抑。",
|
||||
"advancements.needsofnature.udderly_unfortunate.description": "孕期不要喝牛奶。",
|
||||
"advancements.needsofnature.emergency_snack.description": "在饥饿难耐时,喝下精液。味道有点腥。",
|
||||
"advancements.needsofnature.bad_idea_beacon.title": "性欲信标",
|
||||
"advancements.needsofnature.bad_idea_beacon.description": "衣服全破并性压抑爆表。",
|
||||
"advancements.needsofnature.productive_pregnancy.description": "一次产下了多个幼崽。",
|
||||
"advancements.needsofnature.udderly_unfortunate.description": "孕期喝牛奶。",
|
||||
"advancements.needsofnature.emergency_snack.description": "通过口交或饮用精液瓶缓解饥饿。",
|
||||
"advancements.needsofnature.stable_diet.description": "连续喝下三次精液,中间不食用其他食物。",
|
||||
"advancements.needsofnature.acquire_hardware.description": "使用胡萝卜或金胡萝卜自慰。",
|
||||
"advancements.needsofnature.bad.description": "对着发情满级的生物用喷液枪,喷水。",
|
||||
"advancements.needsofnature.special_delivery.description": "用你体内的“精液”给别人做一次面部护理。对方没躲开就算成功喵。",
|
||||
"advancements.needsofnature.shocking_experience.description": "与一只闪电苦力怕亲密接触。感受它体内电光火石的一哆嗦~。",
|
||||
"advancements.needsofnature.baby_on_board.description": "孕期骑上任意载具。震得宝宝都在里面翻跟头了喵~小心别把羊水颠出来哟。",
|
||||
"advancements.needsofnature.bad.description": "当某个生物性兴奋到极致时,给它一点警告。",
|
||||
"advancements.needsofnature.shocking_experience.description": "与一只闪电苦力怕亲密接触。",
|
||||
"advancements.needsofnature.baby_on_board.title": "宝宝巴士",
|
||||
"advancements.needsofnature.baby_on_board.description": "孕期骑上任意载具。",
|
||||
"advancements.needsofnature.head_in_the_clouds.description": "这个高潮可真是物理意义的高。",
|
||||
"advancements.needsofnature.absolute_bottom.description": "在 Y<-55 的位置高潮",
|
||||
"advancements.needsofnature.dimensional_traveler.title": "跟我一起迷失吧",
|
||||
"advancements.needsofnature.absolute_bottom.description": "在 Y<-55 的位置高潮。",
|
||||
"advancements.needsofnature.dimensional_traveler.title": "三界通吃",
|
||||
"advancements.needsofnature.dimensional_traveler.description": "在主世界、下界、末地处处留情。",
|
||||
"gui.needsofnature.player_profiles.tooltip": "设置您的默认和每位玩家的动画请求偏好。\n(自动通过请求动画点左下角允许的配置文件/满压抑左键强制性交)",
|
||||
"gui.needsofnature.player_request.protected": "装备的贞操带阻止了动画。",
|
||||
|
||||
@@ -25,18 +25,3 @@ These might look incorrect but with `%s` inserted it will be things like
|
||||
- `destroyed skin` and `ripped skin` refer to NoN's ripped-clothing appearance. Prefer wording about a damaged appearance, outfit, or clothing when a literal translation would imply bodily injury.
|
||||
- Keep filenames and paths such as `destroyed_skin.png`, `destroyed_skin_mask_%s.png`, and `config/needsofnature` unchanged.
|
||||
- Keep mod and project names such as `Quick Skin`, `Skin Overrides`, `CPM`, `Figura`, `NoFigura`, and `NoN` unchanged.
|
||||
|
||||
## Translation Utility
|
||||
|
||||
make.ts merges multiple language files into one for easy editing, then splits them back into separate files. This tool lets you:
|
||||
- find the original text without searching another file
|
||||
- automatically remove duplicate text to save space
|
||||
- sort your i18n files according to the official order
|
||||
|
||||
### Usage
|
||||
|
||||
1. Open `make.ts` and edit the `targetLangFiles` and the `workFile` fields, change `zh_cn` to your language. please notice that The `suffix` and `file` values must be unique.
|
||||
2. Run `./make.ts` (or `ts-node make.ts` / `deno make.ts`). The language files will be merged into the `workFile` location (e.g. `zh_cn.json`).
|
||||
3. Edit the output file.
|
||||
4. Run `./make.ts` again. If the workfile is newer than the other files, the script will write the changes back to the language files (at the locations specified by `targetLangFiles`).
|
||||
5. If you don't want a language to be written back, add `ro: true` to its entry in `targetLangFiles`.
|
||||
@@ -4,11 +4,11 @@
|
||||
"item.needsofnature.energy_augmenter": "性压抑提升器",
|
||||
"item.needsofnature.energy_diminisher": "性压抑减弱器",
|
||||
"item.needsofnature.energy_stabilizer": "性压抑稳定器",
|
||||
"item.needsofnature.iron_plug": "钻石插件",
|
||||
"item.needsofnature.protector_v": "中庭锁(女用防交配神器)",
|
||||
"item.needsofnature.protector_a": "后庭锁(男用防后入神器)",
|
||||
"item.needsofnature.protector_av": "通用锁(人售保险)",
|
||||
"item.needsofnature.diaphragm": "当幸福来敲门",
|
||||
"item.needsofnature.iron_plug": "铁插件",
|
||||
"item.needsofnature.protector_v": "前庭保护器",
|
||||
"item.needsofnature.protector_a": "后庭保护器",
|
||||
"item.needsofnature.protector_av": "通用保护器",
|
||||
"item.needsofnature.diaphragm": "计生用具",
|
||||
"item.needsofnature.strapon": "穿戴式用具",
|
||||
"item.needsofnature.strapon_advanced": "穿戴式注液用具",
|
||||
"item.needsofnature.accessory.tooltip.liquid_decay_reduced": "液体衰减 %s",
|
||||
@@ -39,9 +39,9 @@
|
||||
"item.needsofnature.accessory.tooltip.player_energy_aura.reduced": "性压抑光环 %s",
|
||||
"item.needsofnature.accessory.tooltip.near_animation_mob_energy.increased": "附近动画生物性压抑 %s",
|
||||
"item.needsofnature.accessory.tooltip.near_animation_mob_energy.reduced": "附近动画生物性压抑 %s",
|
||||
"item.needsofnature.accessory.tooltip.blocks_injector_v": "阻止中庭动画",
|
||||
"item.needsofnature.accessory.tooltip.blocks_injector_v": "阻止前庭动画",
|
||||
"item.needsofnature.accessory.tooltip.blocks_injector_a": "阻止后庭动画",
|
||||
"item.needsofnature.accessory.tooltip.blocks_injector_av": "阻止中庭/后庭动画",
|
||||
"item.needsofnature.accessory.tooltip.blocks_injector_av": "阻止前庭/后庭动画",
|
||||
"item.needsofnature.accessory.tooltip.occupies_av": "同时占据前后庭",
|
||||
"item.needsofnature.accessory.tooltip.ignore_injector_slot_effect_suppression": "在对应的动画期间保持激活",
|
||||
"item.needsofnature.accessory.tooltip.blocks_pregnancy": "防止中奖",
|
||||
@@ -54,13 +54,13 @@
|
||||
"item.needsofnature.mixed_liquid_bottle": "混合液体瓶",
|
||||
"entity.needsofnature.horse_liquid_collector": "种马收集器",
|
||||
"itemGroup.needsofnature.main": "自然之需",
|
||||
"trinkets.slot.legs.v": "V中庭",
|
||||
"trinkets.slot.legs.a": "A后庭",
|
||||
"trinkets.slot.legs.d": "D棒子",
|
||||
"trinkets.slot.legs.v": "前庭",
|
||||
"trinkets.slot.legs.a": "后庭",
|
||||
"trinkets.slot.legs.d": "香肠",
|
||||
"key.categories.needsofnature": "自然之需",
|
||||
"key.categories.needsofnature.main": "自然之需",
|
||||
"key.category.needsofnature.main": "自然之需",
|
||||
"key.needsofnature.start_manual_peak": "安抚动画",
|
||||
"key.needsofnature.start_manual_peak": "手动动画",
|
||||
"key.needsofnature.player_preferences": "打开玩家偏好",
|
||||
"key.needsofnature.give_up": "放弃",
|
||||
"key.needsofnature.model_alignment": "调整动画参与者对齐",
|
||||
@@ -188,7 +188,7 @@
|
||||
"config.needsofnature.debug_chat_mode": "调试聊天模式:",
|
||||
"config.needsofnature.debug_spin_mode": "调试旋转模式:",
|
||||
"config.needsofnature.debug_spin_mode.value": "%s",
|
||||
"config.needsofnature.convert_male_v_to_a": "将男性中庭重定向到后庭:",
|
||||
"config.needsofnature.convert_male_v_to_a": "将男性前庭重定向到后庭:",
|
||||
"config.needsofnature.destroyed_skin_tint": "破损Minecraft皮肤的色调:",
|
||||
"config.needsofnature.destroyed_skin_tint.pick": "选择破损Minecraft皮肤的色调...",
|
||||
"config.needsofnature.destroyed_skin_tint.pick_title": "选择破损Minecraft皮肤的色调",
|
||||
@@ -408,7 +408,7 @@
|
||||
"config.needsofnature.offset_profiles.reload": "重新加载",
|
||||
"config.needsofnature.offset_profiles.open": "打开文件夹",
|
||||
"config.needsofnature.offset_profiles.name": "形象名称",
|
||||
"config.needsofnature.offset_profiles.model_mismatch": "警告:此配置文件是为其他型号创建的。它仍然可以选择安抚兼容性设置。",
|
||||
"config.needsofnature.offset_profiles.model_mismatch": "警告:此配置文件是为其他型号创建的。它仍然可以选择手动兼容性设置。",
|
||||
"config.needsofnature.tooltip.offset_profiles.active": "打开形象列表。切换在动画期间立即应用。",
|
||||
"config.needsofnature.tooltip.offset_profiles.local_avatar": "未选择便携式配置文件。正在使用活动 Figura 头像中保存的偏移量。",
|
||||
"config.needsofnature.tooltip.offset_profiles.create": "创建并选择下一个 <model name>01、<model name>02...配置文件。",
|
||||
@@ -486,7 +486,7 @@
|
||||
"config.needsofnature.female_gender.momentum": "晃动:",
|
||||
"config.needsofnature.female_gender.preview_unavailable": "预览不可用",
|
||||
"config.needsofnature.armor_shed_effect": "护甲脱落的动画效果:",
|
||||
"config.needsofnature.action_sound_volume": "行为音量:",
|
||||
"config.needsofnature.action_sound_volume": "动作音量:",
|
||||
"config.needsofnature.action_sound_volume.value": "%s%%",
|
||||
"config.needsofnature.intiface_title": "自然之需 Buttplug.io",
|
||||
"config.needsofnature.intiface_toy_title": "玩具设置",
|
||||
@@ -498,7 +498,7 @@
|
||||
"config.needsofnature.intiface_auto_connect": "加入世界时自动连接:",
|
||||
"config.needsofnature.intiface_stop_on_disconnect": "断开时停止:",
|
||||
"config.needsofnature.intiface_animation_baseline": "动画基线:",
|
||||
"config.needsofnature.intiface_energized_level": "性欲 %s 基础/脉冲:",
|
||||
"config.needsofnature.intiface_energized_level": "性压抑 %s 基础/脉冲:",
|
||||
"config.needsofnature.intiface_reactiveimpact": "普通冲击:",
|
||||
"config.needsofnature.intiface_peak_reactiveimpact": "最终冲击:",
|
||||
"config.needsofnature.intiface_cooldown": "脉冲冷却(毫秒):",
|
||||
@@ -568,7 +568,7 @@
|
||||
"config.needsofnature.section.intiface_connection": "Buttplug.io连接",
|
||||
"config.needsofnature.section.intiface_libraries": "Buttplug.io库",
|
||||
"config.needsofnature.section.intiface_baseline": "动画基线",
|
||||
"config.needsofnature.section.intiface_energized": "性欲心跳",
|
||||
"config.needsofnature.section.intiface_energized": "性压抑心跳",
|
||||
"config.needsofnature.section.intiface_reactiveimpact": "反应式冲击",
|
||||
"config.needsofnature.section.intiface_controls": "连接控制",
|
||||
"config.needsofnature.section.intiface_toy_settings": "玩具设置",
|
||||
@@ -641,7 +641,7 @@
|
||||
"config.needsofnature.pvp_full_health_escape_bonus_percent": "满血逃脱强度加成(0-200%):",
|
||||
"config.needsofnature.pvp_critical_health_mash_strength_percent": "濒死逃脱强度(0-200%):",
|
||||
"config.needsofnature.pvp_max_heat_escape_strength_percent": "满压抑逃脱强度(0-200%):",
|
||||
"config.needsofnature.pvp_zero_heat_attack_strength_percent": "零压抑攻击强度(0-200%):",
|
||||
"config.needsofnature.pvp_zero_heat_attack_strength_percent": "零性压抑时的攻击强度(0-200%):",
|
||||
"config.needsofnature.attack_escape_invulnerability_seconds": "逃脱后无敌秒数(0-10):",
|
||||
"config.needsofnature.attack_escape_animation_protection_seconds": "逃脱后性行为保护秒数(0-10):",
|
||||
"config.needsofnature.post_escape_gather_max_mobs": "逃脱后追击人数(0-64):",
|
||||
@@ -764,13 +764,13 @@
|
||||
"config.needsofnature.tooltip.category.liquid": "液体获取、衰减、瓶装和液体过载效果设置。",
|
||||
"config.needsofnature.tooltip.category.pregnancy": "中奖几率、时长和卵孵化设置。",
|
||||
"config.needsofnature.tooltip.category.interface": "移动 NoN HUD 元素以获得更好的对齐。",
|
||||
"config.needsofnature.tooltip.category.intiface": "Buttplug.io(蓝牙链接玩具,用于您自己玩具进行动画互动,下载 Intiface Central 并链接玩具)。",
|
||||
"config.needsofnature.tooltip.category.intiface": "Buttplug.io(蓝牙链接玩具,用于您自己玩具进行动画互动。需要下载 Intiface Central 并链接玩具)。",
|
||||
"config.needsofnature.tooltip.category.debug_advanced": "调试输出和面向性能的高级选项。",
|
||||
"config.needsofnature.tooltip.category.disabled_in_toggles": "在“开关”中已禁用。",
|
||||
"config.needsofnature.tooltip.toggle.pregnancy": "全局启用或禁用中奖机制。",
|
||||
"config.needsofnature.tooltip.toggle.liquid_tank": "全局启用或禁用玩家液体槽机制。",
|
||||
"config.needsofnature.tooltip.toggle.mess_system": "全局启用或禁用液体渍获取、清理和可见液体渍覆盖层。",
|
||||
"config.needsofnature.tooltip.toggle.destroyed_skin_system": "全局启用或禁用撕裂衣服损坏、修复、安抚剪切和可见损坏的 Minecraft 皮肤覆盖层。",
|
||||
"config.needsofnature.tooltip.toggle.destroyed_skin_system": "全局启用或禁用撕裂衣服损坏、修复、手动剪切和可见损坏的 Minecraft 皮肤覆盖层。",
|
||||
"config.needsofnature.tooltip.toggle.vanilla_overrides": "全局启用或禁用所有NoN原版覆盖机制。",
|
||||
"config.needsofnature.tooltip.initial_energy_max": "生物生成时自带的最大随机性压抑值。",
|
||||
"config.needsofnature.tooltip.energy_gain_rate": "生物自然性压抑数值获取的全局倍率。",
|
||||
@@ -832,7 +832,7 @@
|
||||
"config.needsofnature.tooltip.intiface_auto_connect": "加入世界时自动连接 Buttplug.io 。",
|
||||
"config.needsofnature.tooltip.intiface_stop_on_disconnect": "离开世界时向已连接设备发送停止命令。",
|
||||
"config.needsofnature.tooltip.intiface_animation_baseline": "您在动画期间的低强度振动。反应式冲击会暂时在其之上产生峰值。设为0%以禁用。",
|
||||
"config.needsofnature.tooltip.intiface_energized": "性欲激活时的基础振动,加上与心跳脉冲同步的心跳峰值强度。左滑块为基础,右滑块为脉冲峰值。",
|
||||
"config.needsofnature.tooltip.intiface_energized": "性压抑激活时的基础振动,加上与心跳脉冲同步的心跳峰值强度。左滑块为基础,右滑块为脉冲峰值。",
|
||||
"config.needsofnature.tooltip.intiface_reactiveimpact": "普通反应式冲击提示的强度滑块和持续时间(毫秒)。",
|
||||
"config.needsofnature.tooltip.intiface_peak_reactiveimpact": "收尾阶段反应式冲击提示的强度滑块和持续时间(毫秒)。",
|
||||
"config.needsofnature.tooltip.intiface_cooldown": "脉冲之间的最小毫秒数。设为0以允许每个匹配提示。",
|
||||
@@ -856,7 +856,7 @@
|
||||
"config.needsofnature.tooltip.female_gender.breast_physics": "为此破损阶段配置文件启用或禁用女性性别模组胸部物理。",
|
||||
"config.needsofnature.tooltip.female_gender.dual_physics": "开启使用独立的左右物理。关闭则写入女性性别模组的“单胸”设置。",
|
||||
"config.needsofnature.tooltip.armor_shed_effect": "客户端视觉效果,当您进入新的动画时,装备的护甲会飞脱。",
|
||||
"config.needsofnature.tooltip.manual_peak_selection_hold_time": "打开动画选择界面前,必须按住安抚动画键的时长。更早松开会执行普通快捷操作。",
|
||||
"config.needsofnature.tooltip.manual_peak_selection_hold_time": "打开动画选择界面前,必须按住手动动画键的时长。更早松开会执行普通快捷操作。",
|
||||
"config.needsofnature.tooltip.action_sound_volume": "缩放从动画声音提示解析的NoN动作音量。Minecraft的正常声音分类滑块仍然适用。",
|
||||
"config.needsofnature.tooltip.male_male_chance": "同性男性配对进行的随机几率。",
|
||||
"config.needsofnature.tooltip.female_female_chance": "同性女性配对进行的随机几率。",
|
||||
@@ -939,7 +939,7 @@
|
||||
"config.needsofnature.tooltip.destroyed_skin_tint.disabled_system": "已禁用,因为损坏的 Minecraft 皮肤系统在切换中处于关闭状态。",
|
||||
"config.needsofnature.tooltip.destroyed_skin_tint.default_skin": "已禁用,因为所选的默认 Minecraft 皮肤有其自己损坏的 Minecraft 皮肤纹理。默认损坏的 Minecraft 皮肤会忽略生成的 Minecraft 皮肤色调。",
|
||||
"config.needsofnature.tooltip.destroyed_skin_system.disabled_setting": "已禁用,因为损坏的 Minecraft 皮肤系统在切换中处于关闭状态。",
|
||||
"config.needsofnature.tooltip.destroyed_skin_tint.auto": "清除安抚色调,以便 NoN 再次从您的 Minecraft 皮肤中自动检测到它。",
|
||||
"config.needsofnature.tooltip.destroyed_skin_tint.auto": "清除手动色调,以便 NoN 再次从您的 Minecraft 皮肤中自动检测到它。",
|
||||
"config.needsofnature.tooltip.cpm_texture_profile": "为选中的自定义纹理CPM模型创建破损皮肤和污渍模板。",
|
||||
"config.needsofnature.tooltip.cpm_texture_profile.create": "创建所有缺失的配置文件而不替换现有编辑,然后打开文件夹。",
|
||||
"config.needsofnature.tooltip.cpm_texture_profile.refresh": "仅用模型当前最终纹理图集替换 reference_texture.png。",
|
||||
@@ -1079,62 +1079,62 @@
|
||||
"stat.needsofnature.attack_animations_started_total": "NoN:开始被攻击动画次数",
|
||||
"stat.needsofnature.attack_escapes_success_total": "NoN:从攻击中逃脱次数",
|
||||
"stat.needsofnature.m_injector_peaks_ml_total": "NoN:摄入液体量(毫升)",
|
||||
"stat.needsofnature.manual_peaks_total": "NoN:安抚动画次数",
|
||||
"stat.needsofnature.manual_peaks_total": "NoN:手动动画次数",
|
||||
"stat.needsofnature.bottles_filled_total": "NoN:收集液体瓶次数",
|
||||
"stat.needsofnature.pregnancies_started_total": "NoN:中奖次数",
|
||||
"stat.needsofnature.pregnancies_completed_total": "NoN:兑奖次数",
|
||||
"stat.needsofnature.offspring_spawned_total": "NoN:产下后代数量",
|
||||
"advancements.needsofnature.root.title": "自然之需",
|
||||
"advancements.needsofnature.root.description": "丛林躁动不安",
|
||||
"advancements.needsofnature.root.description": "春天来了,万物复苏...",
|
||||
"advancements.needsofnature.natural_curiosity.title": "自然之趣",
|
||||
"advancements.needsofnature.natural_curiosity.description": "完成动画。",
|
||||
"advancements.needsofnature.filled_to_the_brim.title": "热腾腾的",
|
||||
"advancements.needsofnature.filled_to_the_brim.description": "装满液一瓶体。",
|
||||
"advancements.needsofnature.favouritism.title": "偏爱",
|
||||
"advancements.needsofnature.filled_to_the_brim.title": "满满当当",
|
||||
"advancements.needsofnature.filled_to_the_brim.description": "装满一瓶液体。",
|
||||
"advancements.needsofnature.favouritism.title": "三千宠爱于一身",
|
||||
"advancements.needsofnature.favouritism.description": "使用一种生物的液体灌满槽位。",
|
||||
"advancements.needsofnature.first_pregnancy.title": "第一胎",
|
||||
"advancements.needsofnature.first_pregnancy.description": "一个新生命悄然萌芽。",
|
||||
"advancements.needsofnature.mother_nature.title": "好女孩",
|
||||
"advancements.needsofnature.first_pregnancy.description": "生下你的第一个孩子。",
|
||||
"advancements.needsofnature.mother_nature.title": "自然之母",
|
||||
"advancements.needsofnature.mother_nature.description": "出产 25 次。",
|
||||
"advancements.needsofnature.messed_up.title": "这是人体彩绘!",
|
||||
"advancements.needsofnature.messed_up.description": "满身污渍AVM三个部位完全充满污垢。",
|
||||
"advancements.needsofnature.group_activity.title": "这是共斗游戏?",
|
||||
"advancements.needsofnature.group_activity.description": "生出两个以上孩子。",
|
||||
"advancements.needsofnature.tossed_around.title": "战败cg享受者",
|
||||
"advancements.needsofnature.tossed_around.description": "连续进行五次动画。你是故意看动画的?",
|
||||
"advancements.needsofnature.collectors_habit.title": "禁止套娃!",
|
||||
"advancements.needsofnature.messed_up.title": "狼狈不堪",
|
||||
"advancements.needsofnature.messed_up.description": "身上每个部位都充满污垢。",
|
||||
"advancements.needsofnature.group_activity.title": "团建",
|
||||
"advancements.needsofnature.group_activity.description": "与三个生物共赴巫山。",
|
||||
"advancements.needsofnature.tossed_around.title": "控到死",
|
||||
"advancements.needsofnature.tossed_around.description": "连续进行五次动画。",
|
||||
"advancements.needsofnature.collectors_habit.title": "收集癖",
|
||||
"advancements.needsofnature.collectors_habit.description": "从自身液体槽收集 25 个液体瓶。",
|
||||
"advancements.needsofnature.field_research.title": "实地调查研究",
|
||||
"advancements.needsofnature.field_research.description": "在一个游戏日之内从五种不同的生物身上提取液体。",
|
||||
"advancements.needsofnature.bad_idea_beacon.title": "恶堕",
|
||||
"advancements.needsofnature.bad_idea_beacon.title": "坏念头信标",
|
||||
"advancements.needsofnature.bad_idea_beacon.description": "衣服全破并欲望爆表。",
|
||||
"advancements.needsofnature.productive_pregnancy.title": "多子多福",
|
||||
"advancements.needsofnature.productive_pregnancy.description": "一次产下了2个以上的幼崽。",
|
||||
"advancements.needsofnature.udderly_unfortunate.title": "《以撒的结合:重开》",
|
||||
"advancements.needsofnature.productive_pregnancy.description": "多胞胎。",
|
||||
"advancements.needsofnature.udderly_unfortunate.title": "乳糖不耐",
|
||||
"advancements.needsofnature.udderly_unfortunate.description": "有些时候不适合喝牛奶。",
|
||||
"advancements.needsofnature.emergency_snack.title": "酸面包",
|
||||
"advancements.needsofnature.emergency_snack.description": "喝下一瓶液体。",
|
||||
"advancements.needsofnature.stable_diet.title": "百家饭",
|
||||
"advancements.needsofnature.emergency_snack.title": "应急零食",
|
||||
"advancements.needsofnature.emergency_snack.description": "通过M注入或饮用一瓶液体来缓解饥饿。",
|
||||
"advancements.needsofnature.stable_diet.title": "稳定膳食",
|
||||
"advancements.needsofnature.stable_diet.description": "连续喝下三次液体,中间不食用其他食物。",
|
||||
"advancements.needsofnature.acquire_hardware.title": "刹那抓住了未来",
|
||||
"advancements.needsofnature.acquire_hardware.description": "使用萝卜等物品自行解决问题。",
|
||||
"advancements.needsofnature.bad.title": "静心",
|
||||
"advancements.needsofnature.bad.description": "对着满身爱心的生物用喷液枪,喷水。",
|
||||
"advancements.needsofnature.measured_dose.title": "电脑配件",
|
||||
"advancements.needsofnature.measured_dose.description": "有些药水也不一定非得喝下去。",
|
||||
"advancements.needsofnature.special_delivery.title": "全弹发射",
|
||||
"advancements.needsofnature.special_delivery.description": "用液体给别人做一次面部护理。",
|
||||
"advancements.needsofnature.sweet_tooth.title": "哈基米爱好者",
|
||||
"advancements.needsofnature.sweet_tooth.description": "把蜂蜜瓶装填进喷液枪里,然后瞄准关键部位。",
|
||||
"advancements.needsofnature.shocking_experience.title": "触核电,轻而易举啊!",
|
||||
"advancements.needsofnature.shocking_experience.description": "与一只闪电苦力怕“触电”。",
|
||||
"advancements.needsofnature.baby_on_board.title": "宝宝巴士",
|
||||
"advancements.needsofnature.acquire_hardware.title": "安装插件",
|
||||
"advancements.needsofnature.acquire_hardware.description": "使用物品自行解决问题。",
|
||||
"advancements.needsofnature.bad.title": "不乖!",
|
||||
"advancements.needsofnature.bad.description": "当某个生物兴奋到极致时,给它一点警告。",
|
||||
"advancements.needsofnature.measured_dose.title": "定量给药",
|
||||
"advancements.needsofnature.measured_dose.description": "有些时候不一定非得喝下去。",
|
||||
"advancements.needsofnature.special_delivery.title": "白色污渍",
|
||||
"advancements.needsofnature.special_delivery.description": "这可不好洗。",
|
||||
"advancements.needsofnature.sweet_tooth.title": "甜食爱好者",
|
||||
"advancements.needsofnature.sweet_tooth.description": "瞄准关键部位。",
|
||||
"advancements.needsofnature.shocking_experience.title": "触电般的体验",
|
||||
"advancements.needsofnature.shocking_experience.description": "与闪电苦力怕共舞。",
|
||||
"advancements.needsofnature.baby_on_board.title": "车内有宝宝",
|
||||
"advancements.needsofnature.baby_on_board.description": "中奖状态下骑上任意载具。",
|
||||
"advancements.needsofnature.head_in_the_clouds.title": "熙熙攘攘我们的城市",
|
||||
"advancements.needsofnature.head_in_the_clouds.title": "神游云外",
|
||||
"advancements.needsofnature.head_in_the_clouds.description": "这首歌的高潮部分可真是物理意义的高。",
|
||||
"advancements.needsofnature.absolute_bottom.title": "我在奈落之底等你",
|
||||
"advancements.needsofnature.absolute_bottom.title": "谁在下面?",
|
||||
"advancements.needsofnature.absolute_bottom.description": "Y<-55 的深层矿区又湿又滑……",
|
||||
"advancements.needsofnature.dimensional_traveler.title": "和我一起迷失吧!",
|
||||
"advancements.needsofnature.dimensional_traveler.title": "巡回演出",
|
||||
"advancements.needsofnature.dimensional_traveler.description": "在主世界、下界、末地都进行过动画。",
|
||||
"gui.needsofnature.player_profiles.title": "玩家互动配置文件",
|
||||
"gui.needsofnature.player_profiles.tooltip": "设置您的默认和每位玩家的动画请求偏好。",
|
||||
@@ -1152,7 +1152,7 @@
|
||||
"gui.needsofnature.player_profiles.mode.requests_and_attacks": "除请求外,攻击强制性交",
|
||||
"gui.needsofnature.player_profiles.mode.auto_accept": "自动接受请求",
|
||||
"gui.needsofnature.manual_peak_selection.title": "选择动画",
|
||||
"gui.needsofnature.manual_peak_selection.none": "没有可用的已启用安抚、挑逗、受困或败北动画。",
|
||||
"gui.needsofnature.manual_peak_selection.none": "没有可用的已启用手动、挑逗、受困或败北动画。",
|
||||
"gui.needsofnature.manual_peak_selection.section.tease": "挑逗动画",
|
||||
"gui.needsofnature.manual_peak_selection.section.available": "可用动画",
|
||||
"gui.needsofnature.manual_peak_selection.section.defeated": "败北动画",
|
||||
@@ -1225,7 +1225,7 @@
|
||||
"config.needsofnature.animation.force_vanilla_entity_textures": "强制使用原版实体贴图(忽略资源包)",
|
||||
"config.needsofnature.animation.block_search_radius": "方块搜索半径",
|
||||
"config.needsofnature.animation.auto_switch_third_person": "动画开始时自动切换到第三人称",
|
||||
"config.needsofnature.manual_peak_selection_hold_time": "安抚动画菜单按住时长:",
|
||||
"config.needsofnature.manual_peak_selection_hold_time": "手动动画菜单按住时长:",
|
||||
"config.needsofnature.animation.debug_menu": "调试选项",
|
||||
"config.needsofnature.animation.open": "打开",
|
||||
"config.needsofnature.animation.debug_title": "自然之需 动画调试",
|
||||
|
||||
@@ -1,109 +0,0 @@
|
||||
#!/usr/bin/env ts-node
|
||||
|
||||
import fs from 'fs';
|
||||
|
||||
// a sample tool that merge (zh|en)(sfw|nsfw) ver together for edit faster
|
||||
// for other language translator: if you need to use this script, just edit `targetLangFiles` and `workFile`.
|
||||
|
||||
const targetLangFiles: LanguageInstance[] = [
|
||||
{suffix: "en_us_nsfw", file: "NSFW (Default Pack)/en_us.json", overrideSuffix: "en_us_sfw", ro: true},
|
||||
{suffix: "en_us_sfw", file: "SFW (baked in NoN)/en_us.json", ro: true},
|
||||
{suffix: "zh_cn_nsfw", file: "NSFW (Default Pack)/zh_cn.json", overrideSuffix: "zh_cn_sfw"},
|
||||
{suffix: "zh_cn_sfw", file: "SFW (baked in NoN)/zh_cn.json"}
|
||||
]
|
||||
const workFile = "zh_cn.json"
|
||||
|
||||
type LanguageInstance = {
|
||||
suffix: string,
|
||||
file: string,
|
||||
data?: Record<string, string>,
|
||||
overrideSuffix?: string,
|
||||
override?: LanguageInstance,
|
||||
ro?: boolean // read only, don't edit.
|
||||
}
|
||||
|
||||
const mainLangFile = "SFW (baked in NoN)/en_us.json";
|
||||
|
||||
const targetLangFilesBySuffix: Record<string, LanguageInstance> = {}
|
||||
for (let l of targetLangFiles) {
|
||||
if (!l.suffix.match(/^[a-z0-9-_]+$/i)) throw new Error(`bad Suffix: ${JSON.stringify(l.suffix)} that not match ^[a-z0-9-_]+$ (ignore case)`)
|
||||
targetLangFilesBySuffix[l.suffix] = l
|
||||
}
|
||||
for (let l of targetLangFiles) {
|
||||
if (l.overrideSuffix) l.override = targetLangFilesBySuffix[l.overrideSuffix]
|
||||
}
|
||||
|
||||
|
||||
type KVPair = [string, string];
|
||||
|
||||
function parseOrdered(src: string): KVPair[] {
|
||||
const o: KVPair[] = [];
|
||||
JSON.parse(src, (k, v) => {
|
||||
if (k === '') return v
|
||||
if (typeof k !== "string" || typeof v !== "string") throw new Error(`unexpected k/v:${JSON.stringify([k, v])}`)
|
||||
o.push([k, v])
|
||||
return v;
|
||||
});
|
||||
return o;
|
||||
}
|
||||
|
||||
function stringify(data: KVPair[]): string {
|
||||
const s = JSON.stringify
|
||||
const body = data.map(([k, v]) => ` ${s(k)}: ${s(v)}`).join(",\n")
|
||||
return `{\n${body}\n}\n`
|
||||
}
|
||||
|
||||
const keyOrder = parseOrdered(fs.readFileSync(mainLangFile, "utf-8")).map(([k, v]) => k)
|
||||
|
||||
|
||||
function genMergedLang(): void {
|
||||
for (const l of targetLangFiles) {
|
||||
l.data = JSON.parse(fs.readFileSync(l.file, "utf-8")) as Record<string, string>
|
||||
}
|
||||
|
||||
const output: KVPair[] = []
|
||||
for (let key of keyOrder) {
|
||||
for (let l of targetLangFiles) {
|
||||
let value = l.data?.[key];
|
||||
if (l.override?.data?.[key] === value) value = undefined
|
||||
if (value) output.push([`${key}.${l.suffix}`, value])
|
||||
}
|
||||
}
|
||||
fs.writeFileSync(workFile, stringify(output))
|
||||
}
|
||||
|
||||
function writeBackLang() {
|
||||
let mixed = parseOrdered(fs.readFileSync(workFile, "utf-8"));
|
||||
const buffer: Record<string, KVPair[]> = {}
|
||||
for (const key of Object.keys(targetLangFilesBySuffix)) buffer[key] = []
|
||||
|
||||
for (const [k, v] of mixed) {
|
||||
const [key, suffix] = k.split(/\.(?=[^.]*$)/);
|
||||
if (!buffer[suffix]) throw new Error(`can't parse the suffix: ${JSON.stringify(suffix)} from key: ${JSON.stringify(k)}`)
|
||||
buffer[suffix].push([key, v])
|
||||
}
|
||||
|
||||
for (let suffix in buffer) {
|
||||
if (targetLangFilesBySuffix[suffix].ro) continue
|
||||
fs.writeFileSync(targetLangFilesBySuffix[suffix].file, stringify(buffer[suffix]))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
;(() => {
|
||||
let files = [targetLangFiles.map(l => l.file), workFile].flat()
|
||||
let latestFile = files.reduce<{ mtime: Date, fileName: string } | null>(
|
||||
(latest, file) => {
|
||||
if (!fs.existsSync(file)) return latest
|
||||
let stat = fs.statSync(file);
|
||||
if (!latest) return {mtime: stat.mtime, fileName: file};
|
||||
return stat.mtime > latest.mtime ? {mtime: stat.mtime, fileName: file} : latest
|
||||
}, null);
|
||||
if (!latestFile) return
|
||||
|
||||
if (latestFile.fileName === workFile)
|
||||
writeBackLang()
|
||||
else
|
||||
genMergedLang()
|
||||
|
||||
})();
|
||||
Generated
-29
@@ -1,29 +0,0 @@
|
||||
{
|
||||
"name": "NoN-Translations",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"devDependencies": {
|
||||
"@types/node": "^26.6.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "26.6.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.2.tgz",
|
||||
"integrity": "sha512-X1P21scMv4zGKLYqjdGjaKa7COa0RKVYYZZN/NfvLQ1JegxFhdhpZG/Lyn8AXx6CDUavKAd11v6BvfpkDByK8g==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"undici-types": "~8.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/undici-types": {
|
||||
"version": "8.9.0",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.9.0.tgz",
|
||||
"integrity": "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"devDependencies": {
|
||||
"@types/node": "^26.6.2"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"module": "nodenext",
|
||||
"types": ["node"]
|
||||
}
|
||||
}
|
||||
-3042
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user