翻译

标识与译名的双向查找。

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

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


Translate

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

签名

func Translate(key string, language Language) (string, error)

参数

参数类型必填默认说明
keystring语言无关标识
languageLanguage目标语言

覆盖十二类共 260 个标识:

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

返回值 译名;未知标识返回空串(不是错误)。

示例

a, _ := iztro.Translate(iztro.StarZiweiMaj, iztro.LanguageEnUS)
b, _ := iztro.Translate(iztro.PalaceSoul, iztro.LanguageJaJP)
c, _ := iztro.Translate("nosuch", iztro.LanguageZhCN)

fmt.Printf("%q %q %q\n", a, b, c)

输出

"emperor" "命宮" ""

边界与陷阱

未知标识返回空串而非错误

标识查不到不算异常,返回空串。要区分「译名恰好是空串」与「标识不存在」时, 先确认标识在上表的类目内。


KeyOf

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

签名

func KeyOf(text string) (string, error)
func KeyOfIn(text, keyFilter string) (string, error)

参数

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

返回值 标识;查不到返回空串。

示例

a, _ := iztro.KeyOf("紫微")
b, _ := iztro.KeyOf("emperor")
c, _ := iztro.KeyOf("자미")
d, _ := iztro.KeyOf("查无此名")

fmt.Printf("%q %q %q %q\n", a, b, c, d)

输出

"ziweiMaj" "ziweiMaj" "ziweiMaj" ""

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

边界与陷阱


AllKeys

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

签名

func AllKeys() ([]string, error)

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

示例

keys, _ := iztro.AllKeys()
first, _ := iztro.Translate(keys[0], iztro.LanguageZhCN)

fmt.Println(len(keys), keys[:4], first)

输出

260 [decadal childhood yearly monthly] 大限

要遍历某一类目自己的标识时,用 keys.go 的常量或 GetConstants() 更省事。


没有全局语言开关

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

为什么

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

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

zh, _ := iztro.BySolar("2000-8-16", 2, iztro.GenderFemale, true, iztro.LanguageZhCN, nil)
en, _ := iztro.BySolar("2000-8-16", 2, iztro.GenderFemale, true, iztro.LanguageEnUS, nil)

fmt.Println(zh.Palace(iztro.PalaceSoul).MajorStars[0].Name,
    en.Palace(iztro.PalaceSoul).MajorStars[0].Name)

输出

紫微 emperor

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

本页目录