
Fluent是Mozilla为本地化制定的一系列规范,实现和实践。 现在,它已在Firefox浏览器中使用。 使用Fluent,翻译人员可以用其母语编写更多自然的翻译。 今天,我们将介绍Fluent 1.0版文件格式规范。 我们邀请翻译工具的开发人员尝试一下,并告诉您您的印象。
Fluent解决什么问题?
Firefox浏览器支持约一百种语言,并且在本地化方面对开发人员构成挑战。 使用传统方法很难解决许多问题。 软件本地化的主要原则是用源文本标记一对一的翻译。 源语言的语法(在Mozilla-英语的情况下)对翻译中表达手段的可用性施加了严格的限制。
考虑以下消息,当用户尝试关闭带有多个选项卡的Firefox窗口时出现。
tabs-close-warning-multiple = You are about to close {$count} tabs. Are you sure you want to continue?
仅当有2个或更多选项卡时才会显示一条消息。 在英语中,“ tab”一词始终以复数形式-“ tabs”。 会说英语的开发人员会对这样的消息感到满意。 对于任何$ count值,这听起来都是正确的。

用英语来说,对于$ count的所有值,消息的一种变体就足够了。
许多翻译人员会注意到单词选项卡可以根据$ count的值采用不同的形式。
在传统的本地化方法中,正确处理消息的责任在于翻译者。 他们必须考虑到,在其他语言中,该单词可以有多种形式,即使在英语中只是一种形式。 应用程序支持的语言越多,问题将变得越严重。
- 在某些语言中,名词具有性别,这需要改变形容词和分词。 在法语中,connecté,connectée,connectés和connectées一词被翻译为英语connected。
- 根据运行软件的平台,样式指南可能需要使用某些术语。 例如,在Firefox的英语版本中,Windows平台上使用设置,其他系统上使用首选项,以符合这些系统上采用的标准。 在日语中,差异可能更加有趣:某些计算机术语的书写系统的选择取决于操作系统。
- 应用程序的上下文和目标读者可能需要对文本进行其他修改。 用于会计的英语应用程序可能会使用与Internet常规站点上使用的数字格式不同的数字格式。 但是在其他语言中,这种分隔可能没有必要。
两种语言之间有许多语法和风格上的变化,不能直接相关。 使用传统方法来支持所有这些细微差别可能很困难。 在某些语言中,您必须妥协,而在其他语言中,根本没有合适的解决方案。
不对称本地化
流利的语言会改变本地化角色的分布。 Fluent并没有要求开发人员考虑所有语言的所有可能细微差别,而是尝试以最简单的形式保留源语言中的文本。
无论源文本如何,我们都可以传达其他语言的语法和样式。 一切都是孤立发生的。 一种语言可以在本地化中使用更高级的逻辑这一事实不会影响其他翻译语言。 程序中的每个本地化本身都决定了翻译文本的复杂程度。
例如,让我们看一下将有关关闭选项卡的消息翻译成捷克语。 单词panel(制表符)应采用以下两种形式之一:panely表示制表符2、3和4的数量,panelů表示所有其他值。
tabs-close-warning-multiple = {$count -> [few] Chystáte se zavřít {$count} panely. Opravdu chcete pokračovat? *[other] Chystáte se zavřít {$count} panelů. Opravdu chcete pokračovat? }
流利的语言使翻译人员能够编写语法正确的句子并自由使用其语言的表达方式。 感谢Fluent,捷克语翻译对任何可能的$计数值使用正确的复数形式。
在捷克语中,$的计数值为2、3和4,名词需要特殊的复数形式。同时,不需要更改源代码或代码。 捷克语本地化中的逻辑不会影响程序的所有其他本地化。 用法语,这句话将和英语一样简单:
tabs-close-warning-multiple = Vous êtes sur le point de fermer {$count} onglets. Voulez-vous vraiment continuer ?
非对称本地化的概念是Fluent的一项重要创新,这是由于Mozilla在20多年的多语言软件开发经验中得以实现的。 Fluent的许多关键思想是从ICU(Unicode的国际组件)的MessageFormat和XLIFF格式中借用的。
乍一看,Fluent像其他本地化解决方案一样,使您可以为多个名词和具有语法性别的单词使用单词变体。 相比之下,Fluent采用整体方法进行本地化。 Fluent通过定义用于存储翻译的整个文本文件的语法并允许从一条消息到另一条消息的链接来发展这些思想。
条款和链接
流利的文件可以包含许多消息,每条消息都翻译成翻译器的语言。 邮件可以引用同一文件中的其他邮件,也可以引用来自其他文件的邮件。 在运行时,Fluent将文件合并到包中,并在该集中解析链接。
链接到帖子是维护一致翻译的强大工具。 一旦某个翻译可以在其他翻译中重复使用。 Fluent支持一种称为该术语的特殊消息,非常适合重用。 术语标识符始终以短划线开头。
-sync-brand-name = Firefox
定义后,术语-sync-brand-name可以在其他消息中用作变量,始终返回正确的文本。 术语有助于根据样式准则引入统一性。 例如,可以对其进行修改以专门标记非官方版本或Beta版本。
sync-dialog-title = {-sync-brand-name} sync-headline-title = {-sync-brand-name}: The best way to bring your data always with you sync-signedout-account-title = {-sync-brand-name}
直接在句子的中间使用该术语可能会导致变形语言或具有其他文本大写规则的语言出现问题。 根据上下文,可以在几个方面定义该术语的含义。 考虑以下意大利语术语-sync-brand-name的定义。
-sync-brand-name = {$capitalization -> *[uppercase] Account Firefox [lowercase] account Firefox }
由于Fluent的非对称性质,意大利翻译人员可以定义两种形式来撰写品牌。 大写变体(默认)适合独立使用或在句子开头使用。 当在大句子中使用术语时,可以通过传递大写参数来请求小写选项。
sync-dialog-title = {-sync-brand-name} sync-headline-title = {-sync-brand-name}: il modo migliore per avere i tuoi dati sempre con te # . sync-signedout-account-title = Connetti il tuo {-sync-brand-name(capitalization: "lowercase")}
该术语几个变体的定义是一种方便的技术,它使您可以遵守多种语言的语法规则。 在下面的示例中,波兰语翻译可以使用declensions在sync-signout-account-title消息中构建正确的句子。
-sync-brand-name = {$case -> *[nominative] Konto Firefox [genitive] Konta Firefox [accusative] Kontem Firefox } sync-signedout-account-title = Zaloguj do {-sync-brand-name(case: "genitive")}
Fluent使您可以在需要的地方嵌入复杂的语言构造逻辑。 同时,简单的翻译仍然很简单。 Fluent不会将复杂的实现添加到简单的设计中。
sync-signedout-caption = Take Your Web With You sync-signedout-caption = Il tuo Web, sempre con te sync-signedout-caption = Zabierz swoją sieć ze sobą sync-signedout-caption = So haben Sie das Web überall dabei.
流利的语法
今天,我们宣布Fluent语法的第一个稳定版本。 这是用于存储翻译的文件格式的规范,也是JavaScript,Python和Rust的解析器的beta版本。
在上面的示例中,您了解了Fluent语法的全部含义。 它的创建目的是使技术知识很少的人都能理解它,并允许您检查和编辑带有最少错误数的文本。 错误恢复很重要:错误的翻译不会破坏整个文件或与之相邻的翻译。 注释对于传达特定消息或整个组的上下文很有用。 翻译可以使用多行,这有助于工作和标记较大的文本片段。
可以在任何文本编辑器中打开流利的文件,从而降低了开发人员和本地化人员的输入门槛。 Mozilla的开源Pontoon软件翻译平台已经支持该格式。
Fluent Playground是用于直接在浏览器中测试Fluent的沙箱。有关语法的详细信息,请参见《 Fluent语法指南》 。 可以在Fluent语法规范中找到正式的定义。 而且,如果您只想尝试Fluent,请使用Fluent Playground (带有片段的在线编辑器)进行共享。
意见反馈
Firefox是Fluent开发的主要因素。 Firefox已经使用了3,000多个Fluent帖子 。 从去年开始迁移到Fluent,现在正在如火如荼的进行中。 事实证明,Fluent格式是针对复杂界面(例如Firefox设置页面)的稳定,灵活的解决方案。 它还在许多Mozilla网页上使用,例如Firefox Send和Common Voice 。
我们相信Fluent是简单性和速度至关重要的应用程序的绝佳选择,但同时又需要根据许多变量显示界面元素。 特别是,Fluent帮助您在有限的移动界面空间中以不同的语言创建自然的句子; 在信息丰富的社交媒体平台上; 在游戏中传输游戏统计信息并向玩家解释机制。
我们希望听到Fluent开发人员或供应商的意见。 Fluent正在作为未来的标准开发,因此我们邀请所有人尝试一下,并告诉我们您在工作中还面临哪些其他问题。 在您的帮助下,我们将能够提高Fluent在许多平台和许多情况下的工作能力。
我们愿意接受建设性的批评。 在项目网站上了解有关Fluent的更多信息。 如果您有故事要讲,请通过Fluent Discourse与我们联系。
从翻译者那里: 俄语的语法文档 。