代码“国际化”

11
我曾在不同的国家参与了各种项目,并注意到有时代码会变得国际化,例如:

SetLargeurEtHauteur()                           (对于SetWidthAndHeight,“fr”)
Dim_ListaDeObiecteas List(Of Object)   (对于_ObjectList,“ro”)
internal voidSohranenieUserov()             (对于SaveUsers,“ru”)
等等。

在拉丁字母表国家,这种混合更加明显,因为无需进行音译。

此外,通常编程“术语”是受项目规格语言启发的。有些情况下,“项目语言”中的术语具有英语中“不可翻译”的含义。

还有一些只有法国团队使用法语单词(例如,Personne,Vehicule,Projet 等)的项目。

在这种情况下,我个人会在规格说明中添加一个“词典”,以解释所有业务对象名称,而且只在其他(法语)语言中使用这些对象。

例如:

Collectif-包括Personnes的整体;

所有操作(Get、Set、Update、Modify、Load 等)都是英文的。

现在可以在代码中使用“强”名称:AddPersonneToCollectif

  • 您对“国际化”的方法是什么?

PS.

我很有趣地发现,Visual Studio 在 .NET 中编译和运行项目时使用了一些名为“btnAddÉlève”或“кпкСтоп”的按钮...
8个回答

14

我个人的方法,在编程社区中也有很多人采用,就是源代码应该是英文的,如果可能的话,所有开发工具也应该是英文的。

最重要的原因是能够像我们现在在StackOverflow上做的那样,与世界分享你的问题和解决方案,而不必每次都要翻译类名、错误消息、路径和其他工件等等。

这还有助于保持一致性,因为大多数库都是用英文编写的,混合两种语言的元素名称实际上对任何人都没有帮助,除了当动词像Add没有始终被翻译时,它是内部冲突的一个不断关注的焦点。

英文代码还使得添加外国人到项目中更容易,而不必担心理解和误解(尤其是在语言非常接近的情况下,比如西班牙语和葡萄牙语,它们有很多假同源词)

这个主题上的一个好链接:http://www.codinghorror.com/blog/2009/03/the-ugly-american-programmer.html

(如果有人想知道,我来自南美洲,英语不是我的母语)


4
关于开发工具:有时我需要强制框架以英文方式给出错误提示(如果我使用的是法语版的Visual Studio),因为这样更容易在互联网上找到解决方案。 - serhio
1
百分之百同意。源代码必须为英语,即使在我的母语中,我也不喜欢阅读方法名称,因为你永远不知道谁想要阅读代码。 - Mohnkuchenzentrale
另一方面,更新现有项目或将所有内容翻译成英语有时很困难。英语知识不太好的程序员会在规范之后发现代码很难理解。 - serhio
1
实际上,创建一个英语术语词典并在规范中使用它们并不难。我过去做过这样的事情。 - Diego Mijelshon
@Diego Mijelshon:如果规格是用西班牙语编写的,您会用西班牙语还是英语来解释字典词汇? - serhio
@serhio,如果规格是用西班牙语编写的,那么在涉及到实体、操作或任何会导致代码的业务特定项时,他们将使用英语术语;需要翻译(当它们不明显时,例如user = usuario)可以放在同一位置或单独的词汇表中。 - Diego Mijelshon

5
即使团队中的每个人都是优秀的英语演讲者(这并不是必然的),他们也可能不知道所有业务术语的英语对应词。我认为允许什么取决于项目本身,但通常容忍并在某些情况下鼓励使用本地语言的业务术语(例如实体名称),但不允许使用技术术语(即不要用Largeur / Hauteur代替Width / Height)。例如,在法国的金融界,每个人都知道OPCVM和FCP的含义-如果您尝试进行英语翻译,您可能会比允许混合语言更容易产生误解。

我在翻译巴士司机的法语单词“HautLePied”时也遇到了同样的“问题”。 - serhio
1
在没有翻译的情况下(例如您的示例中的OPVCM),应该鼓励使用本地术语来表示业务术语。 - Vinko Vrsalovic

2
我目前也遇到了挪威语的相同问题。我猜这取决于你在项目中的位置、可用时间和软件角色。
对于我的情况,我已经决定保留我正在使用的协议和库中的所有术语,并将其保持为挪威语。我可以合理地预期,多年来的行政工作人员已经习惯了这种术语,而且该库依赖于该协议。在面向国际项目的库包装器中,我逐字翻译了每个方法名,并添加了英文语言的方法文档。
代码的注释和文档都是英文的。
如果从头开始设计一个软件,我会尽量找到所有方法名称和业务术语的英文术语(如果合理的话。虽然我几乎想不出找不到术语的例子),以使其“可移植”。

2
如果你写的代码有可能被国际使用,那就用英文写。如果不确定,也要用英文写,即使是注释(尽管我想你可以在你工作语言中添加一些注释)。
这并不是只适用于编码。虽然英语不是我的母语,但我已经能够阅读许多技术论文,并参加与来自世界各地的人们的国际会议。如果每个人都用自己的本土语言发表文章,这些合作将根本行不通。
如果你觉得要不惜一切代价维护你的语言可能会很悲哀,但你必须现实一些。我想英语相对简单,达到基本水平比较容易:名词没有性别,动词没有时态和语态。

比起简单掌握的重要性,更重要的是事实上几乎所有主要自动语言翻译系统都支持英语。 - bta
潜在地,任何商业项目都有可能成为国际化项目,我相信我们不是在谈论“hello world”家庭应用程序。即使我写一个布尔干第安国家的网站,作为一个布尔干第安开发者,我是否应该用英语编写呢? :) - serhio

2
一般来说,与编程语言相关的语言概念代码应该使用相同母语(即英语 - for、while、string都是英语单词)。在本地语言中使用变量和领域概念是可以的(但不是很好),但绝对不要将List、Object、Decimal等翻译成需要程序员更多工作才能协调两种语言的术语。即使如此,我仍然强烈建议将非常常见的领域概念(如Collection、Membership、Person、User)以及可能较少见的领域概念(如Invoice、Receipt)限制在英语中,如果可能的话。这就像在VB和C#中编写一半的类 - 你的大脑必须进行认知转换。虽然这对于混合应用程序(Web上的JavaScript和后端的C#)很有好处,因为它可以帮助您清晰地保留正在运行的内容,但对于一般编程来说并不好。此外,将所有内容都使用英语可以更好地让领域和语言词汇协同工作。总会有例外情况。某些情况下,您会使用本地单词 - 单词最能描述该领域的情况。例如,在我们(英文)的代码库中,我们引用了墨西哥西班牙语词汇,用于描述仅适用于在墨西哥运行我们软件的人的某些概念。通常,日本术语是按照音标/罗马字拼写的 - 这对于非日本人来说很难发音象形文字;-)。

1
我认为我会称这样的代码库为“糟糕的”,而不是“国际化的”,但我一直听到的一般规则是,如果你认为除了说你的语言的人之外,其他人可能会接触代码,请用英语编写。

即使没有人会说法语的团队来处理它,我们仍然会有Get Voila混合物... - serhio
那太糟糕了。选择法语或英语,但要“一致”! - Daenyth
由于语言语法中的Get、Set、Then和Else,您无法与英语保持一致。 - serhio

1

我认为良好的设计准则是使用英文名称编写代码,并仅使用英文注释(当然,如果您的团队有能力这样做,在国际团队的情况下,选择英语似乎是自然的选择,因为它是最流行的语言,特别是在IT世界中)。

这种准则的好解释是,大多数编程语言中的关键字都来自英语,因此使用英文名称编写代码可以使其外观更加一致,从而使您得到更易于阅读的代码。

另一个原因是,大多数编译器只能处理ASCII字符作为类、方法等的名称,因此当您决定使用包含非ASCII字符的语言时,可能会出现奇怪的名称

我想到的第三个原因是在像SO这样的网站上分享您的代码。今天我打开了一个帖子,其中类具有西班牙语名称。对我来说很难猜出这个类的目的(即使有时不必要,但当您阅读代码并理解所有使用的单词时,这是很好的)。

总的来说,我认为代码国际化不是一个好主意。你可以想象编程语言中的关键字(例如class、try、while)也可能被本地化,也许你也可以想象那时候生活会有多么艰难...

0
为了保持一致性,我建议将代码语言与编程语言保持一致。也就是说,如果编程语言使用英文关键字(如forswitchpublic等),那么其余的代码也应该使用英文。如果你正在使用一个识别(比如)斯瓦希里语关键字的编译器,那么其余的代码也应该使用斯瓦希里语。
许多API都有标准化的命名方案,无论使用哪种(人类)语言,都要遵循这些方案,并根据需要翻译相应的文档(而不是源代码)。
无论选择哪种(人类)语言,都要坚持使用它。我宁愿阅读德语源代码,也不愿意看到混合了德语和英语的代码。

如果你正在使用一个认识斯瓦希里语的编译器,那么将代码的其余部分保持为斯瓦希里语。如果它同时认识斯瓦希里和姆布希里语,应该选择哪种语言呢? :) - serhio
从另一方面来看,我从未见过(只是听说过)使用非英语关键字的编程语言。 - serhio
@serhio- 如果你的编译器/编程语言使用多种语言的关键字,我建议选择一种并保持一致(最重要的是)。为了获得最佳结果,选择两种语言中更常见的一种,或者拥有最好的可用翻译工具的语言。 - bta
是啊... "一致性","更常见","最好的工具"... 那么,你知道哪个编译器可以使用多种语言呢? - serhio
我见过Perl用拉丁语,Python用普通话,C用多种语言。虽然我没见过一个可以处理多种语言的编译器,但其实我也没见过那么多不同的编译器:) 更重要的是,这只是一个纯粹假设的例子来说明一个一般性概念。我的回答要点在于保持一致性。如果你所用的所有编译器都使用英文关键字,那就得到了你的答案。 - bta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接