翻译
标识与译名的双向查找。
星盘上每个字段都同时给出译名与 *Key 标识,通常不必手工翻译。
这两个函数用于手上只有标识(或只有某种语言的译名)、需要换算的场合。
支持六种语言:zh-CN、zh-TW、en-US、ja-JP、ko-KR、vi-VN。
Translate
用途 把任意标识译成指定语言。
签名
func Translate(key string, language Language) (string, error)参数
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
key | string | 是 | — | 语言无关标识 |
language | Language | 是 | — | 目标语言 |
覆盖十二类共 260 个标识:
| 类目 | 数量 | 例 |
|---|---|---|
| 星耀 | 162 | ziweiMaj、changsheng、yunlu |
| 宫位(含身宫、来因宫) | 14 | soulPalace、wealthPalace、bodyPalace、originalPalace |
| 天干 | 10 | jiaHeavenly |
| 地支 | 12 | ziEarthly |
| 亮度 | 7 | miao、wang |
| 四化 | 4 | sihuaLu |
| 五行局 | 5 | water2nd |
| 性别 | 2 | male、female |
| 生肖 | 12 | rat、ox |
| 时辰 | 13 | earlyRatHour |
| 星座 | 12 | aries |
| 运限层级 | 7 | decadal、turn |
返回值 译名;未知标识返回空串(不是错误)。
示例
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)参数
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
text | string | 是 | — | 任一支持语言下的译名 |
keyFilter | string | 是 | — | 限定标识名须含的子串,用于消歧同形译名 |
返回值 标识;查不到返回空串。
示例
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 字段完全相同,因此任何基于标识的判断在两张盘上结果一致。