翻译

标识与译名的双向查找。

星盘上每个字段都同时给出译名与 *_key 标识,通常不必手工翻译。 这两个函数用于手上只有标识(或只有某种语言的译名)、需要换算的场合。

from x_iztro import i18n

支持六种语言:zh-CNzh-TWen-USja-JPko-KRvi-VN


translate

用途 把任意标识译成指定语言。

签名

def translate(key: str, language: LanguageType = "zh-CN") -> str | None

参数

参数类型必填默认说明
keystr语言无关标识
languagestr"zh-CN"目标语言

覆盖十二类共 260 个标识:

类目数量
星耀162ziweiMajchangshengyunlu
宫位(含身宫、来因宫)14soulPalacewealthPalacebodyPalaceoriginalPalace
天干10jiaHeavenly
地支12ziEarthly
亮度7miaowang
四化4sihuaLu
五行局5water2nd
性别2malefemale
生肖12ratox
时辰13earlyRatHour
星座12aries
运限层级7decadalturn

返回值 译名;未知标识返回 None

示例

print(i18n.translate("ziweiMaj", "en-US"))
print(i18n.translate("soulPalace", "ja-JP"))
print(i18n.translate("ziweiMaj", "vi-VN"))
print(i18n.translate("bodyPalace"))
print(i18n.translate("nosuch"))

输出

emperor
命宮
Tử Vi
身宫
None

key_of

用途 由任意语言的译名反查标识。

签名

def key_of(text: str, key_filter: str | None = None) -> str | None

参数

参数类型必填默认说明
textstr任一支持语言下的译名
key_filterstr | NoneNone限定标识名须含的子串,用于消歧同形译名

返回值 标识;查不到返回 None

示例

print(i18n.key_of("紫微"))
print(i18n.key_of("emperor"))
print(i18n.key_of("자미"))
print(i18n.key_of("查无此名"))

输出

ziweiMaj
ziweiMaj
ziweiMaj
None

三种语言的译名都落到同一个标识。

边界与陷阱


all_keys

用途 取全部 260 个可翻译标识。

签名

def all_keys() -> list[str]

返回值 标识列表,顺序即 key_of 的反查次序: 运限层级、生肖、时辰、星座、五行局、天干、地支、亮度、四化、星耀、宫位、性别, 与 iztro 各语言翻译文件的合并次序一致。

示例

keys = i18n.all_keys()
print(len(keys))
print(keys[:4])
print(i18n.translate(keys[0]))

输出

260
['decadal', 'childhood', 'yearly', 'monthly']
大限

要遍历某一类目自己的标识时,用 enums 里的枚举或 data.constants() 更省事。


没有全局语言开关

x-iztro 不设「当前语言」这样的全局状态:排盘时语言随参数传入, 翻译函数每次调用都显式指定目标语言。

为什么

全局语言开关会让同一段代码在不同调用顺序下产出不同结果, 多线程环境尤其危险。显式传参使每次调用的结果只由入参决定。

要在一个进程里同时输出多种语言,直接排多张盘即可,互不干扰:

zh = Astro().by_solar("2000-8-16", 2, "female")
en = Astro().by_solar("2000-8-16", 2, "female", language="en-US")

print(zh.palace("soulPalace").major_stars[0].name,
      en.palace("soulPalace").major_stars[0].name)

输出

紫微 emperor

两张盘的 *_key 字段完全相同,因此任何基于标识的判断在两张盘上结果一致。

本页目录