关于简化关键词汉化的一些建议
4b5ent1 opened this issue · 3 comments
主题:
- 如果英文字符组合比汉字方便,则用英文字符
- 如果中文比英文字符组合更直观,再用汉字
- 定义token时,把每个字母当作单个中文字符(参考USB等英文缩写
for example:program-in-chinese/CTS#10
这是一种汉化typescript的方案(记为方案1
枚举 性别_ {男,女}
类别 人{
构造(公开 姓名:文字,
公开 性别:性别_,公开 年龄:数字){}
}
类别 学生 扩展 人 {
构造(公开 基本信息:人,公开 学校:文字){
父级(基本信息.姓名,
基本信息.性别,基本信息.年龄);
}
}
函数 问好(那谁:人){
如果(那谁 身为 学生){
返回 那谁.性别 === 性别_.男?
`${那谁.学校}的小男孩 ${那谁.姓名} 真乖.`
: `${那谁.学校}的小女孩 ${那谁.姓名} 真乖.`
}
}
常量 问好语句 = 问好(新建 学生(新建 人(“黄xx”,性别_.男,15,
“八小”));
文档.体.内部HTML = 问好语句
控制台.日志(问好语句)
方案1使用的映射表目测为:
token | origin | token | origin | token | origin |
---|---|---|---|---|---|
类别 | class | 函数 | function | 枚举 | enum |
构造 | constructor | 公开 | public | 父级 | super |
文字 | String | 数字 | Number | 如果 | if |
身为 | instanceof | 返回 | return | 新建 | new |
常量 | const | 文档 | document | 体 | body |
内部HTML | innerHTML | 控制台 | console | 日志 | log |
个人觉得方案一有些地方可以优化,比如class->类别这种的,可以改写成bc。基于此法,则有方案二:
vE T性别 {男,女}
bc 人{
cc( tp 姓名:文字,
tp 性别:T性别,
tp 年龄:数字){}
cc(i){
cc(i.姓名,i.性别,i.年龄)
}
}
bc 学生 be 人 {
cc(tp 信息:人,tp 学校:文字){
bs(信息);
}
va 性别为男 = ()=> 此.性别 为 T性别.男
}
bf 问好(某人:人){
vf(某人 从 学生){
va 某校 = 某人.学校
va 某某某 = 某人.姓名
返回 某人.性别为男?
`${某校}的小男孩 ${某某某} 真乖.`
: `${某校}的小女孩 ${某某某} 真乖.`
}
}
vc v问好 = 问好(vn 学生(vn 人(“黄xx”,性别.男,15,
“八小”));
网页.内容.内部HTML = v问好
控.印(v问好)
方案二使用的映射表为:
// b=基础/basic,T=类型/type,v=值/value
// 规范:预定义type用小写t开头,自定义用大写T开头
token | origin | alternative | token | origin | alternative |
---|---|---|---|---|---|
bc | class | b类 | be | extends | c从,be |
cc | constructor | bcc,b构 | ci | implements | 实现 |
co | instanceof | bv,例为 | cs | super | 源、父级 |
bf | function | b函 | bi | interface | 接口 |
tp | public | 公开 | vE | enum | b枚,te |
pp | private | 私有 | vc | const | 常量 |
vb | let | 令 | va | var | 变量 |
vn | new | v新 | vR | return | 返回 |
vf | if | 如果 | ff | for | vff/fo,复 |
vw | while | 当,为真 | vs | switch | 断 |
此 | this | vt | se | case | 若 |
ve | else | 然 | 空 | null | v0 |
无 | undefined | vu | 破 | break | br |
为 | === | ii | 是 | == | vi |
文字 | String | tS,t文 | 数字 | Number | tn,t数 |
// i=info=信息,控.印=console.log
// 网页.内容.内HTML = document.body.innerHTML
// 类似for .. in的 in 这种,不需要再简化了
备注:方案二并不是一个最优化的版本,如何在英文字母组合和汉字间取舍,需要经过实践检验。
关于va vb vc这样的缩写,主要是受星际争霸快捷键的启发(玩游戏的时候按快捷键都是不用想的),故方案2也可以称作星际汉化法【说白了,就是把字母当汉字使
PS:vim的:wq,也是类似的逻辑(w=write,q=quit),但这是基于英语的,不适合中文语境
方案二在微信群里争议比较大,故折中考虑,来一个方案三:
enum T性别 {男,女}
class 人{
构造( pub 姓名:文字,
pub 性别:T性别,
pub 年龄:数字){}
构造(i){
cc(i.姓名,i.性别,i.年龄)
}
}
class 学生 <- 人 {
构造(pub 信息:人,pub 学校:文字){
super(信息);
}
var 性别为男 = ()=> 此.性别 为 T性别.男
}
fn 问好(某人:人){
if(某人 从 学生){
var 某校 = 某人.学校
var 某某某 = 某人.姓名
return 某人.性别为男?
`${某校}的小男孩 ${某某某} 真乖.`
: `${某校}的小女孩 ${某某某} 真乖.`
}
}
const v问好 = 问好(new 学生(new 人(“黄xx”,性别.男,15,“八小”));
网页.内容.内部HTML = v问好
控.印(v问好)
方案3使用的映射表为:
token | origin | alternative | token | origin | alternative |
---|---|---|---|---|---|
cls | class | 类 | <- | extends | 扩展 |
构造 | constructor | cc | impl | implements | 实现 |
insof | instanceof | 例为 | super | - | 父级 |
fn | function | F | 接口 | interface | |
pub | public | enum | - | 枚举 | |
priv | private | 私 | const | - | 常量 |
let | - | 令 | var | - | 变量 |
new | - | 新 | return | - | 返回 |
if | - | 如果 | for | - | 复 |
while | - | 当,为真 | switch | - | 断,sw |
此 | this | case | - | 若 | |
else | - | 然 | 空 | null | |
无 | undefined | break | - | 破 | |
为 | === | 全等 | 是 | == | 等于 |
文字 | String | 数字 | Number |
如果英文字符组合比汉字方便
如果关键词如此简化, 为何命名要用中文?
@nobodxbodon 如果关键词如此简化, 为何命名要用中文?
中文命名主要时方便业务逻辑。而目前的一些关键词汉化,其实并没有让代码的视觉可读性提升。比如【公开 甲:整数】里面的[公开],这种属于次一级的语法元素,用英文反而可以降低视觉上的优先级,从而更focus中文部分。换句话说:
bc 人{ cc( tp 姓名:文字,tp 性别:T性别,tp 年龄:数字){}
cc(i){cc(i.姓名,i.性别,i.年龄) }
}
这段代码里,把[类别,公开]换成[tp,bc],可以减少视觉上的噪音
准备合并讨论。合并前简单总结一下:
- 方案2太极端
- 有些关键词可以不用翻译,但可以简化
- 应该思考一下语法兼容的问题。比如for in是英文的语法,跟中文的表达有出入
ref:
#40 (comment)
https://en.cppreference.com/w/cpp/keyword
github.com/microsoft/TypeScript/issues/2536