Documentation
¶
Overview ¶
Package codei18n 是 CodeI18n 的库入口:以项目根目录为单位打开项目,执行扫描、映射更新、翻译、改写等长任务。
同一进程中可以同时打开多个 Project,彼此互不影响(没有全局可变状态)。库代码不打印、不调用 os.Exit, 日志通过 Logger 注入,进度通过 ProgressFunc 回调发出,所有长任务都接受 context.Context 并可取消。
p, err := codei18n.Open(root, codei18n.WithLogger(myLogger))
res, err := p.UpdateMappings(ctx, codei18n.MapOptions{Progress: onProgress})
Index ¶
- Constants
- Variables
- func ValidateProfileName(name string) error
- type CommentRecord
- type ConvertOptions
- type ConvertResult
- type Event
- type Failure
- type Global
- func (g *Global) CopyProfile(from, to string) error
- func (g *Global) DeleteProfile(name string) error
- func (g *Global) DeleteProfileToken(profile string) error
- func (g *Global) File() (*config.File, error)
- func (g *Global) MigratePlaintextTokens() ([]MigratedToken, error)
- func (g *Global) Path() string
- func (g *Global) PlaintextTokens() ([]PlaintextToken, error)
- func (g *Global) ProfileTokenStatus(profile string) (saved bool, last4 string, err error)
- func (g *Global) Profiles() ([]string, error)
- func (g *Global) RenameProfile(from, to string) error
- func (g *Global) SaveProfile(name string, fields config.ProviderFields) error
- func (g *Global) SetProfileToken(profile string, s Secret) error
- func (g *Global) Update(fn func(*config.File) error) error
- type InitOptions
- type Logger
- type MapOptions
- type MapUpdateResult
- type MigratedToken
- type Option
- type Phase
- type PlaintextToken
- type ProgressFunc
- type Project
- func (p *Project) Comments() ([]CommentRecord, error)
- func (p *Project) Config() (*config.Effective, error)
- func (p *Project) ConfigPath() string
- func (p *Project) Convert(ctx context.Context, opts ConvertOptions) (*ConvertResult, error)
- func (p *Project) DataDir() string
- func (p *Project) DeleteProjectToken(profile string) error
- func (p *Project) EnsureGitignore() (bool, error)
- func (p *Project) Failures() ([]Failure, error)
- func (p *Project) Files() (global, project *config.File, err error)
- func (p *Project) GlobalConfigPath() string
- func (p *Project) HooksInstalled() bool
- func (p *Project) Init(opts InitOptions) error
- func (p *Project) Initialized() bool
- func (p *Project) InstallHooks() error
- func (p *Project) IsGitRepo() bool
- func (p *Project) MigratePlaintextTokens() ([]MigratedToken, error)
- func (p *Project) Root() string
- func (p *Project) Scan(ctx context.Context, opts ScanOptions) (*ScanResult, error)
- func (p *Project) SetCommentLanguage(id, lang string) error
- func (p *Project) SetProjectToken(profile string, s Secret) error
- func (p *Project) SetTranslation(id, lang, text string) error
- func (p *Project) Status() (*Status, error)
- func (p *Project) TokenStatus() (*TokenStatus, error)
- func (p *Project) Translate(ctx context.Context, opts TranslateOptions) (*TranslateResult, error)
- func (p *Project) TranslateText(ctx context.Context, text, from, to string) (string, error)
- func (p *Project) UpdateConfig(fn func(*config.File) error) error
- func (p *Project) UpdateMappings(ctx context.Context, opts MapOptions) (*MapUpdateResult, error)
- type ScanOptions
- type ScanResult
- type Secret
- type SecretStore
- type Status
- type TokenSource
- type TokenStatus
- type TranslateOptions
- type TranslateResult
Constants ¶
const ( EnvAPIKey = "CODEI18N_API_KEY" EnvLegacyAPIKey = "OPENAI_API_KEY" )
环境变量名。
const ( PhaseDiscover = events.PhaseDiscover PhaseScan = events.PhaseScan PhaseMap = events.PhaseMap PhaseIndex = events.PhaseIndex PhaseTranslate = events.PhaseTranslate PhaseSave = events.PhaseSave PhaseConvert = events.PhaseConvert PhaseDone = events.PhaseDone )
进度阶段。
Variables ¶
var ( ErrProfileExists = errors.New("配置档已存在") ErrProfileNotFound = errors.New("配置档不存在") )
ErrProfileExists / ErrProfileNotFound 用于配置档管理。
var ErrAlreadyInitialized = errors.New("配置文件已存在")
ErrAlreadyInitialized 表示项目已初始化且未要求覆盖。
var ErrBusy = errors.New("项目正在执行其他任务")
ErrBusy 表示该项目正在执行另一个会写入映射的长任务。
var ErrNoToken = errors.New("未找到 API 令牌")
ErrNoToken 表示找不到可用的令牌。
var ErrNotInitialized = errors.New("项目尚未初始化")
ErrNotInitialized 表示项目尚未初始化(没有 .codei18n/config.json)。
var ErrUnknownComment = errors.New("未知的注释 ID")
ErrUnknownComment 表示 mappings.json 中没有该 ID。
var Version = "dev"
Version 是库版本,写入 index.json 的 generator 字段;CLI 构建时可覆盖。
Functions ¶
func ValidateProfileName ¶
ValidateProfileName 检查配置档名:非空,不含 / \ 与空白(它会成为凭据库 account 的一部分)。
Types ¶
type CommentRecord ¶
type CommentRecord struct {
ID string `json:"id"`
// File 相对于项目根目录;没有 index.json 时为空。
File string `json:"file"`
// Language 是编程语言标识。
Language string `json:"language"`
Type string `json:"type"`
Range index.Range `json:"range"`
Parts int `json:"parts"`
Symbol string `json:"symbol"`
Lang string `json:"lang"`
LangSource string `json:"langSource"`
// SourceKey 是原文所在的 mappings 语言键。
SourceKey string `json:"sourceKey"`
// Original 是原文。
Original string `json:"original"`
// Texts 是全部语言的文本(含原文)。
Texts map[string]string `json:"texts"`
// Error 是上次翻译失败的错误信息(已脱敏),没有失败时为空。
Error string `json:"error,omitempty"`
}
CommentRecord 是注释浏览器中的一条记录:index.json 的位置信息 + mappings.json 的文本。
func (*CommentRecord) Translation ¶
func (r *CommentRecord) Translation(lang string) string
Translation 返回该记录在 lang(按等价语言码查找)下的文本。
type ConvertOptions ¶
type ConvertOptions struct {
File string
Dir string
To string
DryRun bool
Progress ProgressFunc
}
ConvertOptions 配置源码改写。
type Global ¶
type Global struct {
// contains filtered or unexported fields
}
Global 管理全局配置(~/.codei18n/config.json)中的 provider 配置档及其令牌,不依赖任何项目。
func OpenGlobal ¶
OpenGlobal 打开全局配置。支持 WithGlobalDir、WithSecretStore、WithLogger、WithEnv。
func (*Global) CopyProfile ¶
CopyProfile 复制配置档的字段为新名称。令牌不复制(避免在凭据库中悄悄产生副本),需要单独保存。
func (*Global) DeleteProfile ¶
DeleteProfile 删除配置档,并一并删除它在凭据库中的全局令牌与各项目覆盖令牌。
func (*Global) DeleteProfileToken ¶
DeleteProfileToken 删除配置档的全局令牌;不存在时返回 secrets.ErrNotFound。
func (*Global) MigratePlaintextTokens ¶
func (g *Global) MigratePlaintextTokens() ([]MigratedToken, error)
MigratePlaintextTokens 把全局配置中的明文令牌迁入凭据库:顶层 / translationConfig 中的字段迁到 profile/default,profiles.<name>.* 迁到 profile/<name>;然后从文件中删除这些字段(原子写)。
func (*Global) PlaintextTokens ¶
func (g *Global) PlaintextTokens() ([]PlaintextToken, error)
PlaintextTokens 列出全局配置中的明文令牌字段(不含值)。
func (*Global) ProfileTokenStatus ¶
ProfileTokenStatus 返回配置档全局令牌是否已保存及末 4 位。
func (*Global) RenameProfile ¶
RenameProfile 重命名配置档,并把全局令牌与各项目的覆盖令牌迁移到新名称;全局 profile 选择同步更新。 项目配置文件中对旧名称的 profile 引用无法枚举,需要由调用方(桌面端对已知项目)更新。
func (*Global) SaveProfile ¶
func (g *Global) SaveProfile(name string, fields config.ProviderFields) error
SaveProfile 新建或覆盖一个配置档的字段(不涉及令牌)。
func (*Global) SetProfileToken ¶
SetProfileToken 保存配置档的全局令牌到系统凭据库。保存后 CLI 与 git hook 立即可用。
type InitOptions ¶
type InitOptions struct {
SourceLanguage *string
LocalLanguage *string
ExcludePatterns []string
Profile *string
// Provider 写入旧版 translationProvider 字段(与 CLI --provider 一致)。
Provider *string
// Snapshot 非 nil 时把这份扁平配置的全部字段写入项目文件(旧版 CLI init 的行为)。
Snapshot *config.Config
// Force 覆盖已存在的配置文件(保留原有 projectId)。
Force bool
}
InitOptions 配置项目初始化。nil / 空值表示不写该字段(继承全局或默认值)。
type MapOptions ¶
type MapOptions struct {
// ScanDir 为空时扫描项目根目录。
ScanDir string
DryRun bool
// Prune 删除源码中已不存在的条目(孤儿)。只能在扫描整个项目根目录时使用;默认只在结果中报告数量。
Prune bool
// NoCache 禁用增量扫描缓存。
NoCache bool
// Workers 并行解析的 worker 数,<=0 时为 CPU 核数。
Workers int
Progress ProgressFunc
}
MapOptions 配置映射更新。
type MigratedToken ¶
type MigratedToken struct {
PlaintextToken
Account string `json:"account"`
}
MigratedToken 描述一次明文迁移。
type Option ¶
type Option func(*settings)
Option 配置 Open。
func WithConfigFile ¶
WithConfigFile 只使用指定的配置文件(作为项目层),不读取全局与项目默认位置的配置。 对应 CLI 的 --config。
func WithOverrides ¶
WithOverrides 设置调用方覆盖(优先级最高,不写入文件)。
func WithTranslator ¶
func WithTranslator(t core.Translator) Option
WithTranslator 注入翻译后端(测试或自定义后端),忽略配置中的 provider。
type PlaintextToken ¶
type PlaintextToken struct {
// Layer 为 global 或 project。
Layer config.Layer `json:"layer"`
Path string `json:"path"`
Location string `json:"location"`
Profile string `json:"profile,omitempty"`
}
PlaintextToken 描述配置文件中发现的一个旧版明文令牌字段(不含值)。
type Project ¶
type Project struct {
// contains filtered or unexported fields
}
Project 是一个已打开的项目。方法可以从多个 goroutine 调用;写映射的长任务在同一项目上互斥(返回 ErrBusy)。
func (*Project) Comments ¶
func (p *Project) Comments() ([]CommentRecord, error)
Comments 返回项目中全部注释记录,按文件与位置排序;不在 index.json 中的条目排在最后。
func (*Project) Convert ¶
func (p *Project) Convert(ctx context.Context, opts ConvertOptions) (*ConvertResult, error)
Convert 在源码中原地改写注释为目标语言(源码改写逻辑与旧版一致)。
func (*Project) DeleteProjectToken ¶
DeleteProjectToken 删除项目级覆盖令牌;不存在时返回 secrets.ErrNotFound。
func (*Project) EnsureGitignore ¶
EnsureGitignore 确保 .gitignore 中忽略 .codei18n/;返回是否修改了文件。
func (*Project) GlobalConfigPath ¶
GlobalConfigPath 返回全局配置文件路径;使用 WithConfigFile 时为空。
func (*Project) HooksInstalled ¶
HooksInstalled 判断 hook 是否已安装。
func (*Project) Init ¶
func (p *Project) Init(opts InitOptions) error
Init 写入项目配置 .codei18n/config.json,并生成 projectId。
func (*Project) Initialized ¶
Initialized 判断项目是否已初始化(存在项目配置文件)。
func (*Project) InstallHooks ¶
InstallHooks 安装 pre-commit 与 commit-msg hook。
func (*Project) MigratePlaintextTokens ¶
func (p *Project) MigratePlaintextTokens() ([]MigratedToken, error)
MigratePlaintextTokens 把项目配置中的明文令牌迁入系统凭据库(项目级覆盖令牌),并从文件中删除这些字段(原子写)。 同一位置有多个明文字段时取优先级最高的一个,其余一并删除。先写凭据库再改文件,失败时不会丢失令牌。
func (*Project) Scan ¶
func (p *Project) Scan(ctx context.Context, opts ScanOptions) (*ScanResult, error)
Scan 只读地扫描注释,不写任何文件。
func (*Project) SetCommentLanguage ¶
SetCommentLanguage 纠正某条注释识别出的原语言。结果持久化到 overrides.json,下次扫描不会覆盖; 同时把原文移到新语言对应的 mappings 键下,并更新 index.json 中的条目。lang 为空表示撤销纠正 (撤销后的语言在下次 map update 时重新识别)。
func (*Project) SetProjectToken ¶
SetProjectToken 把项目级覆盖令牌存入系统凭据库(项目没有 projectId 时生成并写入项目配置)。
func (*Project) SetTranslation ¶
SetTranslation 手动设置某条注释某种语言的文本,原子写回 mappings.json。text 为空时删除该语言文本。
func (*Project) TokenStatus ¶
func (p *Project) TokenStatus() (*TokenStatus, error)
TokenStatus 返回当前生效 profile 的令牌状态。
func (*Project) Translate ¶
func (p *Project) Translate(ctx context.Context, opts TranslateOptions) (*TranslateResult, error)
Translate 翻译缺失的条目。取消后已完成的结果已落盘,返回的错误为 ctx.Err(),结果中 Canceled 为 true。
func (*Project) TranslateText ¶
TranslateText 用项目配置的后端翻译一段文本;from/to 为空时为源语言 → 本地语言。
func (*Project) UpdateConfig ¶
UpdateConfig 原子地修改项目配置文件(保留未识别字段)。
func (*Project) UpdateMappings ¶
func (p *Project) UpdateMappings(ctx context.Context, opts MapOptions) (*MapUpdateResult, error)
UpdateMappings 扫描源码,把新注释加入 mappings.json,并原子写出 index.json。
type ScanOptions ¶
type ScanOptions struct {
// Dir 为空时扫描项目根目录。
Dir string
Progress ProgressFunc
}
ScanOptions 配置只读扫描。
type Status ¶
type Status struct {
Initialized bool `json:"initialized"`
HasMappings bool `json:"hasMappings"`
HasIndex bool `json:"hasIndex"`
// Comments 是 mappings.json 中的注释条数。
Comments int `json:"comments"`
// Translated 是本地语言文本已存在的条数。
Translated int `json:"translated"`
// Pending 是待翻译任务数(与 Translate 的任务数一致)。
Pending int `json:"pending"`
// Failed 是上次翻译失败的条数。
Failed int `json:"failed"`
// Languages 统计 index.json 中各原语言的注释数。
Languages map[string]int `json:"languages"`
// IndexGeneratedAt 是 index.json 的生成时间。
IndexGeneratedAt string `json:"indexGeneratedAt,omitempty"`
}
Status 是项目的"快速载入"状态:只读 mappings、index 与缓存,不触发扫描。
type TokenSource ¶
type TokenSource string
TokenSource 表示最终生效的令牌来自哪一层。
const ( TokenSourceEnv TokenSource = "env" // 环境变量 TokenSourceProject TokenSource = "project" // 系统凭据库中的项目级覆盖令牌 TokenSourceGlobal TokenSource = "global" // 系统凭据库中所选 profile 的全局令牌 TokenSourceFile TokenSource = "config-file" // 配置文件中的旧版明文字段(应迁移) TokenSourceNone TokenSource = "none" )
type TokenStatus ¶
type TokenStatus struct {
Profile string `json:"profile"`
// Required 表示当前 provider 需要令牌(ollama / mock 不需要)。
Required bool `json:"required"`
Source TokenSource `json:"source"`
Last4 string `json:"last4,omitempty"`
// EnvVar 是生效的环境变量名(Source 为 env 时)。
EnvVar string `json:"envVar,omitempty"`
ProjectAccount string `json:"projectAccount,omitempty"`
ProjectSaved bool `json:"projectSaved"`
ProjectLast4 string `json:"projectLast4,omitempty"`
GlobalAccount string `json:"globalAccount"`
GlobalSaved bool `json:"globalSaved"`
GlobalLast4 string `json:"globalLast4,omitempty"`
// GlobalBlocked 表示项目配置把 baseUrl / endpoint 改成了与全局配置不同的地址,因此不使用全局令牌,
// 防止随仓库分发的配置把用户的令牌发往不受信任的主机。
GlobalBlocked bool `json:"globalBlocked,omitempty"`
Plaintext []PlaintextToken `json:"plaintext,omitempty"`
// StoreError 是凭据库不可用时的错误(例如非 Windows 平台)。
StoreError string `json:"storeError,omitempty"`
}
TokenStatus 描述某个 profile 的令牌状态。不包含任何明文,只有末 4 位。
type TranslateOptions ¶
type TranslateOptions struct {
// Concurrency <=0 时使用配置值。
Concurrency int
// OnlyIDs 非空时只翻译这些注释(失败重试)。
OnlyIDs []string
Progress ProgressFunc
}
TranslateOptions 配置翻译。
Directories
¶
| Path | Synopsis |
|---|---|
|
commentgroup
Package commentgroup 实现所有语言统一的"物理注释 → 注释记录"规则: 连续行注释合并、空注释丢弃、注释类型判定。
|
Package commentgroup 实现所有语言统一的"物理注释 → 注释记录"规则: 连续行注释合并、空注释丢弃、注释类型判定。 |
|
csharp
Package csharp 实现 C#(.cs)的注释提取 adapter。
|
Package csharp 实现 C#(.cs)的注释提取 adapter。 |
|
dart
Package dart 实现 Dart 语言的注释提取 adapter。
|
Package dart 实现 Dart 语言的注释提取 adapter。 |
|
dart/grammar
Package grammar 是 tree-sitter-dart 语法的 cgo 绑定,写法与 smacker/go-tree-sitter 自带的各语言子包(如 kotlin、csharp)一致:parser.c、scanner.c、parser.h 平铺在本目录, 由 cgo 自动编译。
|
Package grammar 是 tree-sitter-dart 语法的 cgo 绑定,写法与 smacker/go-tree-sitter 自带的各语言子包(如 kotlin、csharp)一致:parser.c、scanner.c、parser.h 平铺在本目录, 由 cgo 自动编译。 |
|
kotlin
Package kotlin 实现 Kotlin(.kt / .kts)的注释提取 adapter。
|
Package kotlin 实现 Kotlin(.kt / .kts)的注释提取 adapter。 |
|
cmd
|
|
|
codei18n
command
|
|
|
docfmt
Package docfmt 实现文档注释的结构化翻译预处理与还原。
|
Package docfmt 实现文档注释的结构化翻译预处理与还原。 |
|
events
Package events 定义长任务发出的结构化进度事件。
|
Package events 定义长任务发出的结构化进度事件。 |
|
gitint
Package gitint 负责与 Git 的集成:安装 / 卸载 hook、维护 .gitignore。
|
Package gitint 负责与 Git 的集成:安装 / 卸载 hook、维护 .gitignore。 |
|
index
Package index 读写位置索引 .codei18n/index.json。
|
Package index 读写位置索引 .codei18n/index.json。 |
|
langcode
Package langcode 提供全项目统一的 BCP 47 语言码规范化与等价判断。
|
Package langcode 提供全项目统一的 BCP 47 语言码规范化与等价判断。 |
|
langdetect
Package langdetect 识别注释文本的原语言。
|
Package langdetect 识别注释文本的原语言。 |
|
logging
Package logging 定义库代码使用的可注入日志接口。
|
Package logging 定义库代码使用的可注入日志接口。 |
|
secrets
Package secrets 管理 API 令牌:只存系统凭据库(本次实现 Windows 凭据管理器),绝不写入配置文件或日志。
|
Package secrets 管理 API 令牌:只存系统凭据库(本次实现 Windows 凭据管理器),绝不写入配置文件或日志。 |
|
internal
|
|
|
atomicfile
Package atomicfile 提供"写临时文件 + rename"的原子写入,读方永远不会读到半截文件。
|
Package atomicfile 提供"写临时文件 + rename"的原子写入,读方永远不会读到半截文件。 |
|
benchgen
Package benchgen 生成用于性能基准的中型样例项目(确定性:相同参数生成相同内容)。
|
Package benchgen 生成用于性能基准的中型样例项目(确定性:相同参数生成相同内容)。 |
|
scripts
|
|
|
genbench
command
genbench 生成性能基准用的中型样例项目。
|
genbench 生成性能基准用的中型样例项目。 |
|
specs
|
|
|
tests
|
|
|
third_party
|
|
|
lingua
Package lingua accurately detects the natural language of written text, be it long or short.
|
Package lingua accurately detects the natural language of written text, be it long or short. |