-
Notifications
You must be signed in to change notification settings - Fork 34
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
把最常用的开源的英文API进行中文化 #9
Comments
你可以搞个IntelliJ IDEA 插件来把这些API显示成中文 |
个人倾向于做库, 因为不会依赖具体某个IDE, 而且我还是用的Eclipse :) |
If we can display them in Chinese, by the same technique, we can display the reserved words in Chinese too. If the names are real Chinese there'll be lots of problems, like, we have to do lots of rewrite. |
对于已有的代码, 确实是个办法. 建个中英对照表, 然后通过插件方式显示成中文. 不过太久太久没有做插件所以不是很有动力 )) |
Eclipse sucks IntelliJ IDEA is much more powerful |
我個人認為 親像: update:
|
真棒,我终于装上中文输入法了 另外 重新做API的话 迁移现有库是比较困难的哟。 |
还有一个不是问题的问题——空格和分号你们觉得全角好还是半角好 |
Sorry! 竟然漏看了后三楼! @sih4sing5hong5 感觉我们都同意接口(API)本身汉化是有价值的. 就像你说的1-4, 这样可以让使用这些API的用户逐步适应和开始用母语编程. 请问你的倾向是用母语开发新的库, 而不是把现有库的接口翻译成母语吗? 那提到结巴的意思是新建一个它的branch, 然后在它的源码里修改所有接口吗? 比如:
@ice1000 确实, 已有代码换用汉化API会有工作量, 不过如果光是重命名的话应该还好, 毕竟没有改接口本身的设计. 刚在那个汇编器的测试代码里把assertEquals换成了'相等', 替换方法和import, 还算不麻烦. 关于空格和分号, 我现在把输入法设置成了"中文下使用英文标点", 所以包括(,“。;都是英文. 主要原因是省得每次输入"."都要切换输入法. 这样设置之后Java下中文开发感觉舒服了很多. 如果你指的是新的语言,那就是另一个问题了. |
关于汉化现存编程语言以及其库的问题,请允许本人稍微长篇大论一下拙见。 本人在这里提的观点是“汉化现存编程语言及其库的意义不大”,并给了个简单理由,即“汉化现存编程语言以及其库会难以维护且不利于非中文编程者贡献”,这个理由似乎还是普遍受认同的。本人在此提出另外两个理由。 API应当是国际化的就像在很多UI设计中我们用一些占位符来替代文本,然后在资源文件中给出对应不同区域语言的实际文本一样。代码库的API应该只是纯粹的符号,可以被符合规范的编译器处理,生成我们想要的程序。而至于API的语义应当由独立于程序之外的注释和文档来描述。虽然自注释的变量方法名可以提高对人类的可读性,但那并不是代码本身该做的事,代码该做的事是对编译器描述一段正确的程序。比起将代码库的API直接翻译成中文,是不是翻译API参考文档更好呢? 基于英语语法的语句难以翻译成妥当的中文举个可能不恰当的例子,将SQL语句 |
欢迎发表不同看法. 在建讨论组之前也看到过一些类似的. 虽然不一定能够完全说服对方, 不过就像迎新帖里说的, 中文编程的范围足够广, 总能找到一些自己愿意着力的方向并且有所突破. 至于其他暂时不认可的方向, 也请抱着宽容的心态进行探讨和建议. 也是一些个人看法:
对于现有的英文API, 并不一定要通过修改它的源码改成一个纯中文版本, 更可行的可能是对它作扩展, 比如汉化JUnit的assert系列方法.
不敢苟同. 听起来你认为API以及内部方法/变量的命名无关紧要. 有不少readablity相关的文章, 比如Writing for Readability
翻译参考文档从维护的工作量来说, 只会比通过扩展来汉化API更加大. 因为如果API本身被修改了, 文档的改动量肯定比API名称的改动量大. 当然, 同意翻译文档的价值.
你应该不是说, 英文自然语言很难翻译成妥当的中文吧? 如果特指英文编程语言的语法, 它们还远没有到自然语言的程度. SQL确实是最接近英文语法的语言之一, 不过即使汉化过的语句
个人感觉, 比如顶楼的例程, 不觉得使用了汉化API的代码有什么问题.
就像之前所说, 方向很多, 而它们的出成果速度/工作量/实现方法/难度/面向受众都很不同, 恐怕很难绝对地说哪种方向更好. 很欢迎选择一个你感兴趣的方向(issue)参与, 或者开新issue/创建代码库. 另外, 这里有个设计中文语法的DSL的尝试. |
https://github.com/icela/FriceEngine-DSL 我曾经其实不看好中文编程 |
@azige 漏说了一块:
这是个很值得探讨的问题. 我看到的现状是, 中文开发者自己开发的开源库/框架, 绝大多数的贡献者也都是中文开发者. 原因肯定是多方面的. 能够想到的有:
个人也不赞成100%的中文化. 需要和国外交流的项目肯定有. 但就像overview主页说的, 为了1%(假定的数字)的硬性需要而在99%的其他项目中强制使用英文编程, 恐怕是得不偿失. @ice1000 欣赏了魔改版, 虽然魔音缭绕, 但是颇为亲切 lol |
这点本人倒是支持,中文化的扩展还是有帮助的。但是本人是坚定的反对“把所有的一切都变成中文”
可能本人表达不准确。本人认为代码的可读性是很重要的,但通过注释和文档来描述API的使用方法和规则更重要。毕竟读为人类而写的文档比读为机器而写的代码肯定是更容易的,并且API的命名本身并不能包含其使用方法和规则。 关于那个SQL的例子,如果设计 给个本人在工作中实际使用中文编程的例子表明一下立场 😃 def 基础策略() { if (存在单位(是自己 & mp比例范围(0,0.05))){ 选择单位(敌方 & 活着的){ 攻击 选择结果集.随机目标 } } 选择单位(敌方 & 活着的){ if (选择结果集数量 > 2){ 使用技能 "XXX", 选择结果集.hp数值最低 } } 选择单位(敌方 & hp比例范围(0, 0.1)){ if (选择结果集数量 > 0) { 使用技能 "XXX", 选择结果集.hp数值最低 } } 选择单位(敌方 & 活着的){ if (选择结果集数量 > 1){ 使用技能 "XXX", 选择结果集.hp数值最低 } else { 使用技能 "XXX", 选择结果集.hp数值最低 } } } |
@nobodxbodon 当时也就随便写的,你们可以把它作为一个Demo hhh |
你们都不睡觉的吗 |
能预测到某个项目只会有中文编程者使用倒还好,那些预测不了的,即使是单人项目,都不知道哪一天会不会突然有国际友人参与进来(真实的例子,本人的 moebooru-viewer 原本是为了解决个人需要和某站被墙的问题弄的,结果突然某天有人提交了一个加入多语言支持的 PR 😭 ) 本人的观点基本上是“入乡随俗”,在Java中就使用英语,在易语言中就使用中文。因为学过Java的程序员应该有90%都是会英语的,而学过易语言的程序员应该有100%都是会中文的。 |
@ice1000 我这里现在时间是周日中午12:20 :) 现在吃不消熬夜啦 最多到1点
API的读者就是开发者吧?
个人对汉化编程语言的关键词兴趣其实不大(早先汉化过coffeescript的关键词). 现在觉得代码里主要的语义是自定义的类/方法/变量, 所以可以直接开始中文编程的实践, 不用先汉化语言关键词. 之前是就你的例子的个人观感而已. 我也同意如果要汉化某个编程语言的关键词, 还不如探索接近中文使用习惯和语法的新语言. 不过汉化API和汉化语言的关键词又有点不同. 大赞一下你的Groovy框架和例程. 不知框架能不能开源? 一起学习一下.
多谢分享! 当然希望看到更多的国外开发者参与项目. 不过我的出发点有些不同. 除去预测得到是否会有国外开发者参与的情况, 剩下的自己发起的项目, 我首要考虑的是对自己的开发和维护最有利的编程方式. 因为在可以预见的将来, 我自己会是最主要的贡献者. 如果我自己的开发和维护成本随着项目变大而变得不可持续, 那么在项目成型和能够吸引其他开发者参与之前可能就夭折了. 我自己的感觉是用中文命名是我更熟悉和容易的方式.
我发现的另一个问题是, osc上一些即使很热火的开源框架, 比如JFinal, 大多只有极少的其他开发者贡献. 个人认为一个很重要的原因, 就是代码很难阅读, 而英文命名是一个主要的障碍. 也许对于开发者本人来说, 随着项目的开展, 一些开始时有些别扭的英文命名自己也习惯了, 但是对于刚拿到整个代码的新开发者(中文用户), 任何不妥当的英文命名都会导致迷惑和时间的浪费, 想要短时间了解脉络几乎是不可能的任务. 为了吸引理论上的几千万国外开发者, 而不优先选择对几百万的中文开发者(包括自己)阅读代码有利的编程方式, 个人认为这种思路是很值得商榷和分情况探讨的, 而不是简单的"入乡随俗". 话说回来, 在下还真没有一个有影响力的开源项目, 所以现在很大程度是纸上谈兵 :) 现在开展的一些实验项目就是为在英文编程语言里用中文命名吃螃蟹. 另外, 多数英文编程语言支持unicode命名, 起初的动因虽然不清楚, 但说明多数语言开发社区是认可这种需求的. 个人不认为, "只应该"在中文编程语言中用中文命名, 而"不应该"在英文编程语言中使用. |
大家好! |
@buyouyuan 赞一下. 求同存异最好. 不过好像没有发现谁把全部中文化作为当前目标的 :) |
嗯~实在不知道怎么表达了,简单的说把 关于代码可读性的话本人无法提供合适的论述,在本人看来只要命名良好,英文和中文是等价的(但是中文的参考文档对中文编程者来说更可读)。
虽然不太妥当,但是既然在osc上发表的话就是适合”入乡随俗“使用中文的场景呀(笑)
这点可能就是非常的视个人习惯而定了。本人觉得使用了自己会的英文单词,然后附上必要的中文注释,就足够维护自己开发的项目了,至少我自己是这样。虽然也可能因为英文能力不足出现蹩脚的命名,但那些对英语母语的人来说应该还是能理解的,而对中文编程者来说还有中文注释能参考。 要在自己的项目里使用什么语言就自己决定好了,让其他人”入乡随俗“吧。但是一个考虑到要国际化的项目最好还是用国际化的语言的。 |
@azige 嗯, 对于中文代码的可读性提高(对于中文母语的开发者), 是个暂时没有考据的论题. 也正是我现在进行实践想要探索的.
如果这么说, 好像也对 :) 说起来在osc上还没有好好挖掘过中文代码的项目, 嗯, 有空试试
关于注释和命名, 在我之前的工作环境里, 是我第一次接触正式的可读性审核. 可惜自己没有正式成为可读性审核员, 不过也吃过猪肉(每个commit都被审核过). 有个印象是, 审核员会尽量倾向于减少注释量, 而强调代码本身的可读性(其中最重要的因素之一就是命名). 审核里会不时出现"这个方法名已经self-explaining了,注释就不用了"之类的评语. 虽然没有当面确认过, 但写注释和维护注释的额外工作量应该也是这种倾向的动因之一. 算是我对于命名对于可读性的意义的实践体会吧. 对于从开头就希望融入外语开发者社区的项目, 如果能够吸引外语开发者的参与, 并且成型和壮大, 绝对是喜而乐见的. 说起来有点"围城", 个人还是会更侧重于为那些主要面向中文开发者的项目(包括自己的项目)尝试更加"自然"和熟悉的编程方式, 也是一种精神寄托吧. |
突然想提一下Java。Java是本人很喜欢的一个平台,原因之一就是他对中文用户非常友好,本人的很多对中文化编程方向的观点也来自于对使用Java平台的体验。 Java平台没有什么?
Java平台有什么?
@nobodxbodon 关于“入乡随俗”,Java中有个无论如何都回避不掉的问题就是JavaBeans规范一定要你使用set/get命名。除去Java本身之外,Java生态圈里很多命名约定也都是基于英文的(例如maven版本号的 |
据我所知没有任何一个语言/标准库/第三方库有中文命名的API的. #6 就是希望搜集这类项目.
确实在实践中碰到混用的情况, 我基本上是能用多少中文就用多少. 如果想在Java里用中文编写代码, 中英混用是不可能避免的. 关于开发中文API, 还是具体情况具体分析吧. 刚顺便汉化了JUnit的assert系列方法, 自己先在项目里试用着. |
@nobodxbodon 别忘了易语言~本人的观点是“最好不要汉化现存的基于英语的编程语言,而是开发新的基于中文的编程语言”,或者基于一些语言设计纯净的中文DSL也是很好的选择。(就像汉化junit的那些方法一样,本人还是支持的 😃 ) |
握爪.
刚开始的项目汉化JUnit4就是这个方式.
|
是的(Java对UTF-8支持是非常好的,包名、类名、函数名都可以是中文,一点问题都没有)。铁板是只解决不了的问题吗?首先,我觉得这个方向是没有问题的。方法可以改变一下,不要上来就一个类一个类的翻译,先把整体工作内容和量整理出来,规划好再做。就像写程序的时候先把算法想清楚,再下手码代码一个道理。像帖子中你提到的同样的单词要有统一命名,这个问题在脑子里谋划时就可以先预见到。 具体讲:
大体上是这样一个步骤,步骤3的实施过程可以根据步骤2的结果看看复杂性如何,是否可以引入一些方便的工具来进一步降低难度和效率(比如开发一个源码自动修改、打包的工具,只需要翻译人员提供一个特定格式的文本文件,工具读取文件,自动修改英文原版源码,并作打包)。 |
嗯. 已经实践过一些
没记错的话我尝试了不止一种汉化方式(帖子里应该有, 回头小结一下). 那个铁板好像在新建Iterable对应汉化接口的时候碰到的. 能开始就有完善规划是最好, 不过我那些尝试都只是在趟雷而已. 感觉还没找到一条可行而且工作量可控的路. 请问你设想的技术路线是? |
@nobodxbodon 有雷我们解决不了,不代表别人解决不了,我们把任务列出来,标记上进度和阻塞原因,可以继续做其他的。除非原理我们很清楚,并且确定完全规避不了。 |
汉化我最近思考了下,是不是采用新建库的方式更好?我们只需要起一个新的中文包/类/方法名,然后调用原始类库即可,相当于包装了一层。 这样既不会破坏原有代码的兼容性,又能快速把新库应用到实际开发中,毕竟整个工程量是很大的,不能等全部翻译完了再去使用。 使用封装的形式也简单很多。对照API文档就可以翻译了。相当于前期的整理工作都不用做了。 @program-in-chinese/all |
@hummerstudio JUnit4就是新建了库. 之前的JDK汉化也是, 其中两种不同汉化方法(封装/翻译源码)碰到的技术问题也在那里详述了. 请多指教. |
看到这个知乎回复:
尤其其中对于discuz之类框架的汉化, 感觉可以归到这个主题里. |
对外网站刚发文: 用中文命名API的意义和途径. 欢迎批评, PR, issue. |
@htwx program-in-chinese/Java#1 (comment) 内容更适合这里讨论:
你说的API应该是核心库部分吧? 关于CTS, 个人觉得汉化关键词可以先出一个版本. |
@MikaGuraN 的Android开发库: #51 (comment) |
@yozman 在#40 (comment) 中提出:
这与上面有共鸣. 个人也很赞同(program-in-chinese/quan1#1 (comment) 讨论中也大致确定将PHP作为优先的中文命名实践方向). |
我也是,只显示成中文的话,调试的时候还是遇到英文,反而摸不着头脑了。并且调试找BUG在编程中是占了很大比例的,不得不重视这个问题。 |
我让代码是中文,将可以显示成English,调试bug也将可以显示English |
不知实现方式是否和#25 (comment) 类似(在注释中自定义词典条目)? 那里有一些相关讨论. |
几个优先考虑的因素:
除了传统的库 (library),也包括在线 API,比如之前听说过百度的某些API 的 JSON 键名为中文。类似汉化本地库,也可以对在线 API 进行封装。 |
用某种编程语言的大多数项目里都依赖的第三方库可能就几十个 (比如Java里的JUnit, Log4j, Guava, ApacheCommon等等 - Java's top 20: The most used Java libraries on GitHub). 而这些库里最常用的接口可能不到10%,所以中文化可以增量进行,维护的工作量应该比较可控.
另外, 对核心库的中文化是个工作量更大的挑战, 因为包括文档的翻译, 而且可能会有不可能汉化的部分(比如无法用一个新interface取代Iterable的问题). 这里是尝试对Java核心库的汉化. 比如ArrayList汉化成"数组列表", 单元测试示例如下:
请大家头脑风暴一下. 这个思路是否可行,或者对哪些语言比较可行.
The text was updated successfully, but these errors were encountered: