/GoTranslation

无限YY中...

Primary LanguageGoMIT LicenseMIT

Go翻译

文件命名:

参考官方对文件的命名方式,给文件名加_zh,_tw等后缀用于区分相应的语言。 比如log包,可以将翻译文件命名为log_zh.go,log_tw.go等文件。

文件内容:

为一个纯注释文件(或是类似于buitin),这样不会影响现在代码的运行。 以空行分隔每一条翻译项。每个翻译项包含以下内容:

第一行:定位信息。第一个空格之前的内容为一个包级别唯一的名称,
即为该方法、常量、变量或是结构的的名称;
空格之后的为文件行号等信息,仅供翻译者定位代码;

第二行:对应英文的md5码,方便更新之后检测是否需要重要翻译;

第三行开始为真正的翻译内容。

比如:

// log log.go:13
// 70004e66d9e9597f3c382ba69c21b6ac
// log是一个简单的日志服务包...

// Ldate log.go:30
// 97a2bfe63f97ea05044844d9d0a3c18e
// 翻译内容

// Printf log.go:196
// fd1cb0abc49dec36d3f8456732b8945d
// Printf翻译

// const log.go:24
// fd1cb0abc49dec36d3f8456732b8945d
// These flags define which...

// const log.go:26
// fd1cb0abc49dec36d3f8456732b8945d
// Bits or'ed together to

枚举:

以下是来自官方log中的一段代码:

1)// These flags define which text to prefix to each log entry generated by the Logger.
const (
2)  // Bits or'ed together to control what's printed. There is no control over the
	// order they appear (the order listed here) or the format they present (as
	// described in the comments).  A colon appears after these items:
	// 2009/01/23 01:23:23.123123 /a/b/c/d.go:23: message
	Ldate         = 1 << iota     // the date: 2009/01/23
	Ltime                         // the time: 01:23:23
)

以上代码的1)和2)处,无法通过一个包级别唯一的名称来表示, 只能通过该段字符串的md5码来进行比对,此时定位信息const可用于减少定位的范围。 var()也有相同的问题。

TODO

const()类型的代码有没有更简单统一的处理方式?

如何处理TODO,bugs等注释?忽略?

xxx_windows.go与xxx_linux.go,含有相同的接口,但注释稍有不同。应该如何处理?

工具

通过以下命令提取翻译文件,package为包名,locale为语种标记:

xx package locale

比如:

xx log zh

将在log包目录下产生一个log_zh.go的文件,若本身已经存在log_zh.go文件, 则标记哪些项需要重新翻译。 之后翻译人员只需要翻译log_zh.go中的内容即可,无须改动库的源码。

godoc

改写godoc,添加-lang选项。

优点

不会对源码造成任何影响;

版本更新,直接覆盖即可;

缺点

需要自行实现提取工具及godoc。

碰撞?