Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于简化关键词汉化的一些建议 #91

Closed
4b5ent1 opened this issue Oct 3, 2018 · 3 comments
Closed

关于简化关键词汉化的一些建议 #91

4b5ent1 opened this issue Oct 3, 2018 · 3 comments
Labels
APL +组合逻辑/tacit族 术语词典
Milestone

Comments

@4b5ent1
Copy link
Member

4b5ent1 commented Oct 3, 2018

主题:

  1. 如果英文字符组合比汉字方便,则用英文字符
  2. 如果中文比英文字符组合更直观,再用汉字
  3. 定义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
@4b5ent1 4b5ent1 added 中文化 术语词典 APL +组合逻辑/tacit族 labels Oct 3, 2018
@4b5ent1 4b5ent1 changed the title 关于简化关键词汉化的一些建议 关于简化关键词汉化的一些建议:把每个字母当作单个中文字符 Oct 3, 2018
@4b5ent1 4b5ent1 changed the title 关于简化关键词汉化的一些建议:把每个字母当作单个中文字符 关于简化关键词汉化的一些建议 Oct 3, 2018
@nobodxbodon
Copy link
Member

如果英文字符组合比汉字方便

如果关键词如此简化, 为何命名要用中文?

@4b5ent1 4b5ent1 added this to the 2018戊戌 milestone Oct 3, 2018
@4b5ent1
Copy link
Member Author

4b5ent1 commented Oct 3, 2018

@nobodxbodon 如果关键词如此简化, 为何命名要用中文?

中文命名主要时方便业务逻辑。而目前的一些关键词汉化,其实并没有让代码的视觉可读性提升。比如【公开 甲:整数】里面的[公开],这种属于次一级的语法元素,用英文反而可以降低视觉上的优先级,从而更focus中文部分。换句话说:

bc 人{  cc( tp 姓名:文字,tp 性别:T性别,tp 年龄:数字){}
    cc(i){cc(i.姓名,i.性别,i.年龄) }
}

这段代码里,把[类别,公开]换成[tp,bc],可以减少视觉上的噪音

@4b5ent1
Copy link
Member Author

4b5ent1 commented Oct 3, 2018

准备合并讨论。合并前简单总结一下:

  1. 方案2太极端
  2. 有些关键词可以不用翻译,但可以简化
  3. 应该思考一下语法兼容的问题。比如for in是英文的语法,跟中文的表达有出入

ref:
#40 (comment)

https://en.cppreference.com/w/cpp/keyword
github.com/microsoft/TypeScript/issues/2536

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
APL +组合逻辑/tacit族 术语词典
Projects
None yet
Development

No branches or pull requests

2 participants