Feat/i18n (#92)
* feat: add vue-i18n * feat: add vue-i18n * feat: add vue-i18n * feat: add language class * add: en templates and configs * add: en names * refactor: name gender id and sect id * feat(i18n): add gettext infrastructure for dynamic text translation (#81) * feat(i18n): add gettext infrastructure for dynamic text translation - Add src/i18n/ module with t() translation function - Add .po/.mo files for zh_CN and en_US locales - Update LanguageManager to reload translations on language change - Add comprehensive tests (14 tests, all passing) - Add implementation spec at docs/specs/i18n-dynamic-text.md Phase 1 of i18n dynamic text implementation. * feat(i18n): expand .po files with comprehensive translation entries Add translation messages for: - Battle result messages (fatal/non-fatal outcomes) - Fortune event messages (item discovery, cultivation gains) - Misfortune event messages (losses, damage, regression) - Death reason messages - Item exchange messages (equip, sell, discard) - Single choice context and option labels - Common labels (weapon, auxiliary, technique, elixir) Both zh_CN and en_US locales updated with matching entries. * test: add .po file integrity tests * feat: i18n for actions * feat: i18n for effects * feat: i18n for gathering * feat: i18n for classes * feat: i18n for classes * feat: i18n for classes * feat: i18n for classes * fix bugs * fix bugs * fix bugs * fix bugs * fix bugs * fix bugs * fix bugs * fix bugs * update csv * update world info * update prompt * update prompt * fix bug * fix bug * fix bug * fix bug * fix bug * fix bug * fix bug * fix bug * fix bug * update * update * update * update * update * update * update --------- Co-authored-by: Zihao Xu <xzhseh@gmail.com>
This commit is contained in:
@@ -35,6 +35,7 @@ if TYPE_CHECKING:
|
||||
from src.classes.sect import Sect
|
||||
|
||||
from src.utils.config import CONFIG
|
||||
from src.classes.language import language_manager
|
||||
from src.sim.load.load_game import get_events_db_path
|
||||
|
||||
|
||||
@@ -99,6 +100,7 @@ def save_game(
|
||||
"version": CONFIG.meta.version,
|
||||
"save_time": datetime.now().isoformat(),
|
||||
"game_time": f"{world.month_stamp.get_year()}年{world.month_stamp.get_month().value}月",
|
||||
"language": str(language_manager),
|
||||
# SQLite 事件数据库信息。
|
||||
"events_db": str(events_db_path.name),
|
||||
"event_count": world.event_manager.count(),
|
||||
|
||||
@@ -18,6 +18,8 @@ from src.classes.celestial_phenomenon import get_random_celestial_phenomenon
|
||||
from src.classes.long_term_objective import process_avatar_long_term_objective
|
||||
from src.classes.death import handle_death
|
||||
from src.classes.death_reason import DeathReason
|
||||
from src.i18n import t
|
||||
from src.i18n import t
|
||||
|
||||
class Simulator:
|
||||
def __init__(self, world: World):
|
||||
@@ -85,7 +87,8 @@ class Simulator:
|
||||
# 记录事件
|
||||
event = Event(
|
||||
self.world.month_stamp,
|
||||
f"{avatar.name} 路过 {region.name},发现无主,将其占据。",
|
||||
t("{avatar_name} passed by {region_name}, found it ownerless, and occupied it.",
|
||||
avatar_name=avatar.name, region_name=region.name),
|
||||
related_avatars=[avatar.id]
|
||||
)
|
||||
events.append(event)
|
||||
@@ -204,7 +207,7 @@ class Simulator:
|
||||
# create_random_mortal 内部会获取 existing_avatars,需要确保它处理活人
|
||||
new_avatar = create_random_mortal(self.world, self.world.month_stamp, name, Age(age, Realm.Qi_Refinement))
|
||||
self.world.avatar_manager.register_avatar(new_avatar, is_newly_born=True)
|
||||
event = Event(self.world.month_stamp, f"{new_avatar.name}晋升为修士了。", related_avatars=[new_avatar.id])
|
||||
event = Event(self.world.month_stamp, t("{name} has ascended to a cultivator.", name=new_avatar.name), related_avatars=[new_avatar.id])
|
||||
events.append(event)
|
||||
return events
|
||||
|
||||
@@ -305,9 +308,9 @@ class Simulator:
|
||||
|
||||
desc = ""
|
||||
if is_init:
|
||||
desc = f"世界初开,天降异象!{new_phenomenon.name}:{new_phenomenon.desc}。"
|
||||
desc = t("world_creation_phenomenon", name=new_phenomenon.name, desc=new_phenomenon.desc)
|
||||
else:
|
||||
desc = f"{old_phenomenon.name}消散,天地异象再现!{new_phenomenon.name}:{new_phenomenon.desc}。"
|
||||
desc = t("phenomenon_change", old_name=old_phenomenon.name, new_name=new_phenomenon.name, new_desc=new_phenomenon.desc)
|
||||
|
||||
event = Event(
|
||||
self.world.month_stamp,
|
||||
|
||||
Reference in New Issue
Block a user