107

这是我一直想知道的事情,我在网上的任何地方都找不到任何提及。当一家来自日本的商店写代码时,我能用英文阅读吗?或者像 C、PHP 之类的语言有他们编写的日语翻译吗?

我想我要问的是世界上每个编码员是否都知道足够的英语来使用与我完全相同的保留字?

这段代码:

If (i < size){
    switch
        case 1:
            print "hi there"
        default:
            print "no, thank you"
} else {
    print "yes, thank you"
}

显示与我现在用英语看到的完全相同,或者其他非英语国家的人会看到“if”、“switch”、“case”、“default”、“print”和“其他”用他们的母语?

编辑 - 是的,这很严重。我不知道一种语言的不同本地化是否有不同的关键字。或者是否有不同的本地化。

4

26 回答 26

161

如果我理解得很好,这个问题实际上是:“世界上每个程序员都知道足够的英语来使用与我完全相同的保留字吗?”

嗯..这里的主题不是英语,而是编程语言的保留字。我的意思是,当我大约 10 年前开始工作时,我对英语一无所知,即使我不知道它们的意思(英语),我仍然能够通过学习编程语言来编写简单的东西。事实上,这有助于我学习英语。

例如。我知道要做一个“迭代”(当然是迭代)我必须写:

 for( i = 0 ; i < 100 ; i++ ) {}

对我来说,“for”,“;” 和“++”,其中简单的外来词或符号。后来我知道“for”的意思是“para”,“while”的意思是“mientras”等等,但同时我不需要懂英语,但就我而言,我需要的是知道“C”。

当然,当我需要学习更多东西时,我必须学习英语,因为文档是用那种语言编写的。

所以答案是:不,我看不到我的母语中的 if、while、for 等。我看到它们是英文的,但它们对我来说并不意味着它们对编程语言意味着任何其他东西。

就像 bash 中的 switch 语句:case .. esac。什么是“esac”...对我来说是 bash 中 switch 语句的结尾。

我想这就是我们所说的“抽象”

于 2008-10-14T21:08:31.573 回答
28

在 Java 语言中,由于 JavaBeans 约定,某些方法必须(至少部分地)使用英语命名。

此约定要求通过一对 getX() 和 setX() 方法建立属性 X。在加拿大法语区,一些开发人员不得不用法语编写代码,这导致了以下讽刺:

interface Foo {

  Color getCouleur();

  void setCouleur(Color couleur);
}
于 2008-10-14T21:07:18.423 回答
28

我很难找到参考资料,但我想起了三个故事。

Lisp 黑客通过将诸如“cdr”和“car”之类的无意义函数与您的非母语编程进行比较来保护它们:http: //people.csail.mit.edu/gregs/ll1-discuss-archive-html/msg01171。 html

当 Yukihiro Matsumoto(“Matz”)开始开发 Ruby 时,他使用英文关键字,尽管他正在用日文编写所有文档!. 几年来没有 Ruby 的英文文档,而且很少有美国人使用该语言。但现在它是一门世界级的语言,它诞生于日本的事实仅具有历史意义。如果该语言一直在平假名中使用关键字,那么它就很难获得普及。

我曾经读过一篇文章——也许别人能找到它,谷歌今天没有帮助——这表明翻译关键词是被误导的,因为这些词实际上不是英语——它们是行话。不仅(使用上面的例子)parapour不完全具有英语中for的确切含义,对于非程序员来说,“for loop”这个短语是胡言乱语。即使是美国人也必须学习新的含义。因此,将单词的表面含义翻译成另一种语言更像是制作跨语言的双关语,而不是真正有帮助。

于 2008-11-15T21:19:45.277 回答
25

我以前真的没有过多考虑过用日语编程,但我们开始吧,使用问题的代码示例。

仅使用日语中的语言语句和英语中的变量:

// In Japanese, it makes more sense to put the keywords/modifiers as
// postfix expressions rather than prefix expressions.
(i < size)か {
     (l[i])は {
     1だ:
         「もしもし。」を書く;
     省略時値:
         「いいえ、いいですよ。」を書く;
     }
} ない {
     「はい、ありがとうございます。」を書く;
}
于 2008-11-14T15:39:54.623 回答
13

正如许多人已经指出的那样,在大多数编程语言中,您只需要学习一些关键字,因此如果它们是英语(或其他语言,就此而言)并不重要。它只是您与某些构造相关联的符号。例如,在 VB 中你有“THEN”,在许多 C 风格的语言中它是“{”,它在可读性上并没有太大的区别(好吧,至少我是这么认为的,作为一个非英语母语者)。

但是事情有时会变得棘手,而(自然)语言的选择在命名标识符方面很重要。如果变量、函数、类等的名称由于语言障碍而对您来说没有有意义的名称,那么即使是最简单的代码也可能相当具有挑战性。

我记得曾经有人给了我一段从某个博客中截取的 Actionscript 的简短片段。这些名字是德语的,因为我不会说那种语言,所以也可以将这些东西称为 var_123、var_562 或 func_333(也许我更容易记住这些名字,或者至少有一个无需复制和粘贴即可正确拼写)。由于这是一个简短的、独立的片段,我使用在线翻译器以我的母语(西班牙语)为这些变量和函数赋予有意义的名称,之后一切都变得清晰了。关键是代码实际上很简单,但是当我克服语言障碍时,我只能在没有太多(不必要的)额外努力的情况下理解它。

从那以后,我改用英语来命名标识符。不管你喜不喜欢,它都是编程、工程和一般技术方面的“通行证”。大多数 API 都是用英语编写的,大多数文档也是如此(您可以找到的最好的资源也可能是英语)。顺便说一句,它使您的代码与您可能与之交互的代码更加一致,而且我认为它比其他语言(如西班牙语)更紧凑和简洁(否则这将是我的自然选择)。

当然,如果你至少看不懂一些英语,问题还是一样的,所以这不是一个完美的解决方案。但是,考虑到来自许多不同国家的许多开发人员,他们交流的通用语言(通过代码,当然还有其他方式)很可能是英语。所以,选择英语也许是最好的选择,即使它不是解决这个问题的完美方法。

于 2008-10-15T02:24:23.073 回答
10

编程语言定义了关键字和标准类名,最好的做法是给用户定义的类型、变量和函数也提供英文名称(作为非母语人士,我可以说 ;-)。

所以是的,如果一切顺利,您将能够阅读代码。

然而,像 Java 和 Perl 这样的语言允许标识符的完整 Unicode 集,所以如果有人用汉字写他的类名,你可能会遇到问题。

更新:对于 Perl,有一个笑话模块允许您用拉丁文编写 Perl。但这真的只是一个笑话。没有人认真地使用这样的东西。

第二次更新:本地化编程语言的想法并不是那么荒谬。Excel 的宏语言是本地化的,但幸运的是它以一种规范语言(英语)存储在文件中,因此本地化只是普通事物之上的一层。这样的事情只对小的“程序”有意义,对于“真正的”程序,它变得难以维护。

于 2008-10-14T20:49:25.807 回答
7

实际上有一些英语的编程语言(维基百科)

我是挪威人,但除了输出之外的所有代码我一直使用英语(忽略学校的一些愚蠢代码)。实际上,我通常用英语写所有东西,然后使用 gettext (或其他东西)将其翻译成我的母语。

于 2008-11-12T13:40:34.153 回答
6

我是英国人,我们经常遇到的一个问题是美式/英式拼写冲突。这通常发生在与编程相关的术语中,例如 Initialise() 或 Initialize()、Analyse() 或 Analyze() 等。这可能(已经)导致尝试覆盖方法时出现问题,并且有时很难发现。

由于框架(在我们的例子中是 C#)是由美国人设计的,我们发现最好保持一致并使用美国拼写。我们甚至采用颜色。

我们的开发团队中有不同国籍的人,大多数非英国人自然倾向于使用美式拼写。

于 2008-11-27T14:51:54.073 回答
4

AppleScript 曾经有法语和日语方言版本。我不知道它为什么被撤回。

于 2008-10-15T02:44:37.027 回答
4

将其提升到一个新的水平,能够替换符号怎么样?

在看到像Brainf**kWhitespace这样的语言之后,我想到了制作这样一种语言:它与 C 相同,除了你使用右大括号打开、打开大括号关闭、交换 + 和 -、* 和 / 的含义, ; 和:、> 和< 等。

这个概念只不过是一个花哨的改变的 C 编译器。但是,就像以不同的方式思考关键字一样,如果您以前从未想过这些事情,它会挑战您重新思考一些基本假设。前任:

int foo)int i, char c( }
    int six = 2 / 3:
    int two = six + 4:
    if )i > 0( }
        printf)"i is negative"(:
    {
{
于 2008-11-13T21:10:27.887 回答
4

我在一个用 C# 开发软件系统的法国团队中。尽管编程语言的关键字表面上是英文的,但我想你会很难阅读代码,因为所有的函数名、变量、代码注释、数据库表和列、技术规范、协议等都在法语,包括那些可爱的重音字符 ç、é、è、ù 等。由于本地化错误,我什至不确定系统是否会在其他地方运行,例如依赖逗号作为默认的十进制分隔符。

否则,WinDev 是法国流行的编程平台,其编程语言 WLanguage 有法语或英语的关键字,请参见此处的示例:链接文本

于 2008-11-17T08:41:20.957 回答
4

我看到的唯一本地化语言是带有宏的 Excel。如果您尝试使用意大利语版本的 Office 对列求和,则必须编写SOMMA(A1:A10)而不是 SUM。真可惜。

顺便说一句,只是因为它很有趣,下面是你的代码在意大利语关键字下的样子:

se (i < size){
    commuta
        caso 1:
            stampa "hi there"
        normalmente:
            stampa "no, thank you"
} altrimenti {
    stampa "yes, thank you"
}
于 2009-08-16T13:31:15.650 回答
3

我已经看到 VBA 被翻译成类似西班牙语的命令。这是有史以来最丑陋的事情之一。我会很惭愧在我的电脑上有这样的东西。

PD:我碰巧认为西班牙语比英语好得多。但是翻译是错误的

于 2008-10-14T20:48:56.340 回答
3

好吧,正如其他人指出的那样,关键字和系统调用可能会保留为英文。

但是,理解语言的关键字只是理解代码的一小部分。变量名、函数名和注释都存在使用作者母语的风险。

编辑:我刚刚闪回到我的青年时代,我在 TRS-80 内置 BASIC 的映射表中将关键字切换为法语。我可以更改所有的关键字,但我不能让它们中的任何一个变大。为有趣的节目而生。

于 2008-10-14T20:52:33.430 回答
3

不要拿这个开玩笑。几年前,微软发布了 G#(German Sharp)——带有德语关键字和 API 的 C#。当然,这是一个愚人节玩笑,但整个网站看起来都非常真实和专业(并且在 microsoft.com 上)。可怕的。

在工作中,我们使用两个现场总线系统,它们都是在德语国家开发的,它们的标识符混合了可怕的德语和英语,包括一些可爱的假朋友。一团糟。

不,英文关键字和标识符都可以。虽然有些人可能会争论它应该是颜色还是颜色:)

于 2008-10-14T21:12:03.187 回答
3

在我从事的几个 VBA 项目中(是的,在我职业生涯的早期),我们必须检测安装在用户机器上的 office 版本,并相应地更改电子表格中使用的公式。

当我用葡萄牙语编程时,“SUM”必须翻译成“SOMA”等等。我只是无法想象以多种语言实现这一点的必要工作。有没有其他人遇到过这个问题?

于 2008-10-14T21:31:04.757 回答
3

有些语言已经翻译了关键字。例如,Excel 公式。如果您在电子表格中编写一些计算,这将使用您的语言。

幸运的是,这不是一种普遍的做法,即使像我这样不会说英语的人也感谢上帝有一个标准的关键字语言:

  • 分享你的工作更容易。
  • 它可以防止文档成为它已经成为的更大的噩梦。
  • 英语单词和句子通常很短且在句法上很实用。在文学方面,拉丁语要漂亮得多,但对于技术性的东西,英语却很出色。

在哪里停下来?你能想象古希腊语中的 C 吗?

关键字必须保持在一种语言中,而且,它以英语开头,让它保持这种状态。这可能是最糟糕的(亚洲语言?)。所以我们必须用英文写方法和注释。好的,我们需要做更多的工作,但至少国际代码库保持一致。

然而,在一种情况下,使用本地语言方法名称和注释可能是一种很好的做法:在第三世界国家。几个月后我要去塞内加尔管理一个 Django 项目。塞内加尔的字母表化率很高,因此他们花精力提高编程知识已经很棒了。法语是这里的母语,所以强迫他们同时学习计算和新语言是低效的。

顺便说一句,那将是您使用法语关键字的代码:

Si (i < taille) {
    cas par cas :
        cas 1:
            afficher "salut"
        défaut:
            afficher "non merci"
} sinon {
    afficher "oui, merci"
}

并不是说翻译关键字与翻译字符串无关。当然,我们已经用我们的语言翻译了“嗨,那里”。欧洲编码员甚至比美国编码员更倾向于使用 I18N,因此他们的服务可以覆盖更广泛的受众。

于 2009-08-16T13:34:12.827 回答
2

一般来说,大多数程序员都适应英语形式。我在 7 岁时学会了编程,并且只会说希伯来语(从右到左)并且不会说英语,这使它成为一次非常有趣的经历。

您通常会遇到的问题是文档、变量和函数名称。我已经看到我在使用英文字母的其他语言中的变量份额。

我熟悉的唯一被翻译的语言是古老的 Logo(直到今天仍然令人惊叹)。

于 2008-10-15T03:09:29.580 回答
2

当我还是个孩子的时候,我们去了法国,在我们去过的博物馆里,我记得我找到了一个展示如何编写计算机程序的展示。该语言是某种 BASIC 变体,我清楚地记得它使用 POUR 而不是 FOR,等等。我当时 7 岁,刚学 BASIC,对我来说,法国人会有这样的自己的方言对我来说似乎是完全自然的!

我想我看到的可能是LSE ?

于 2008-11-13T06:02:37.040 回答
2

Filemaker 的脚本语言已本地化。脚本(和数据!)以可怕的“某种规范”形式存储。

所以如果你用美版写了一个脚本,然后用法文打开它,所有的关键字和内置函数名都是法文的。但是为什么不运行?!啊哈!法语版本使用“,”作为小数点,因此为避免歧义使用“;” 分隔函数参数——美国版本使用“。” 和“,”分别。这个转换你必须自己做。

因此,您通过极其糟糕的脚本编辑界面(您不能将脚本编写为文本文件)来修复所有这些问题。它运行!伟大的!结果都是错的!不好了!啊哈!您在美国版本中输入的 Jan-7-2004 日期被解释为 July-1-2004 - 显然日期不仅显示,而且存储在与区域设置相关的顺序中。 我在开玩笑吗?不。

[注意:Filemaker 8 和 9 可能很正常——我只使用过 3 - 7。]

于 2008-11-14T14:59:28.683 回答
2

关于 Perl,您的问题是一个有趣的问题,因为它的语法旨在遵循(英语)自然语言。我想知道这是否会让非英语人士变得更加困难......

当然,Perl 和 Perlers 拒绝按常规规则行事。疯狂的科学家 Damian Conway 编写了Lingua::Romana::Perligata模块,它使用源过滤器的黑魔法让您可以用拉丁文编写 Perl!

于 2008-11-20T03:47:49.173 回答
2

在澳大利亚,我们仍然需要拼写color like color。但是,当其他(澳大利亚)开发人员在澳大利亚项目上工作时,我确实觉得这很烦人,他们决定内部变量名称需要以美国方式拼写。

于 2008-11-27T01:57:36.633 回答
1

恕我直言,对于 i18n 语言语法将毫无意义。它只会扼杀任何形式的可移植性。

唯一的例外是教育语言,例如 LOGO。它们是为便于学习而设计的,因此可移植性不是问题。

于 2008-10-14T20:51:07.380 回答
1

我读了很多代码,但问题总是出在变量/方法名称和注释上,如果他们用自己的语言注释代码,使用像日语或西里尔语这样的语言特殊字符,我们就有麻烦了!但我认为它们将保持英文原样的关键字。

于 2008-10-14T21:29:47.940 回答
1

用意大利语

se (i < dimensione){
    scegli
        caso 1:
            stampa "ciao"
        mancante:
            stampa "no, grazie"
} altrimenti {
    stampa "sì, grazie"
}

为了确认之前一些海报的担忧,我看到了一个带有宏的 Fortran 代码,包括将所有关键字从英语翻译成法语。请允许我不要继续说下去。

我还必须使用同时包含意大利语、德语、英语和法语标识符的代码,不仅因为它是在许多不同的地方开发的,还因为主要开发人员认为这很有趣并帮助他不重复标识符名称(当然,例行程序有 2000 行长....)

于 2009-08-16T13:43:52.987 回答
0

我认为 WordBasic 已本地化。在使用 VBA 之前,WordBasic 用于在 Word 中编写宏。

如果我没记错的话,只有英文版的 WordBasic 才能在所有本地化版本上执行。如果您要编写荷兰语版本,则只能在荷兰语单词上执行它。

于 2008-11-13T20:48:24.220 回答