Fbt 升级到 v1.0.0

"我们成年啦!🥳🥂🍺🎉"

两年多来,我们一直在对 JS Fbt 库进行重大重构。 该项目经历了 600 多个内部代码审查,并帮助识别了 facebook.com 域上的数千个字符串,这些字符串将受益于重新翻译。 2022 年 1 月 26 日,我们将其部署在 facebook.com 上,一个月后,又将其部署在 Android 和 iOS 平台的 Facebook 移动应用程序的 React Native 视图上。 经过了足够的时间,可以认为此版本是稳定的。

这个新版本显著提高了从 www 和 RN 上的 JS 代码库中提取的字符串的准确性; 从而为翻译人员提供更好的机会来生成高质量的翻译。

我们现在准备将其作为 JS Fbt 库的 v1.0.0 版本发布!

有哪些变化?

主要功能

🚨 突破性更改: 由于以下重大更改,fbt-collect 脚本可能会提取需要重新翻译的新字符串。 请参阅 此页面,了解有关如何升级的更多信息。

  1. 包含嵌套 React 元素(“富内容 fbt 字符串”)的字符串现在将产生更准确的字符串描述。

    为什么?
    虽然旧版本的 fbt 库已经能够进行“自动参数化”,但它存在很多错误,并且导致生成无意义的字符串 - 导致翻译质量问题,因为翻译人员将缺乏必要的文本上下文来完成他们的工作。

    例如,提取的字符串可能显示为 "{=} uploaded {=one photo} that you haven't seen yet." {=} 是谁或什么? 如果有很多照片,复数形式会怎么样?

    用于为我们的嵌套 fbt 字符串生成描述的旧算法有时会缺少关键词,并且无法跟踪由特殊 fbt 构造(例如 <fbt:pronoun>(例如 he/she/they))发出的字符串变体。

    在 Facebook 网站的规模上,我们发现了数千个可以通过此重大 fbt 更新来改进的字符串。

  2. 修复了对空白字符的处理。

    为什么?
    在旧版本的 Fbt 库中,我们注意到空白字符(即 &nbsp; 字符)从文本和描述中被静默删除。 出于 UI 布局的目的,有时需要使用它们,因此我们确保它们现在可以正确保留。

    • ⚠️ 您仍然应该确保翻译人员了解它们的存在,以便他们也可以在他们的翻译中保留它们。

次要功能

  1. 添加了使用 fbs API 编写纯文本 fbt 字符串的功能
    有时,我们需要确保某些可本地化字符串仅由纯文本组成。 例如,文本输入字段的 placeholder HTML 属性。 为此,我们引入了 fbs API 来定义纯文本字符串。
  2. 添加了向 <fbt> / fbt() 调用点公开任意选项的功能。
    它使 fbt 用户可以自定义如何在客户端生成 FbtResult 对象。
  3. 支持没有值的 fbt common 属性

鸣谢

这个主要版本是我 2 年多工作的成果,并且在 John Watson (@jrwats) 和 Yisong Qin (@pkqinys) 的帮助下才得以实现。

作为 JS Fbt 库的原始维护者,John 帮助我更好地理解了原始代码库的字符串提取和翻译工作流程,并且在我为该项目设计高级技术解决方案时,他是一个很好的倾听者。 他还通过将更多 JS Fbt 代码与 Meta infra 的其余部分分离来帮助改善整体开发者体验。 非常感谢 Yisong Qin - 他于 2021 年加入我们 - 帮助我将这个项目推向终点。 他通过重写 fbt 客户端代码生成器和 OSS 翻译有效负载摄取器的重要部分做出了重大贡献; 尽管在 Meta-infra 级别还有更多事情。 尽管他是 node.js 编程的新手,但他表现出了从头开始学习的毅力,并对项目成果产生了巨大影响。

🕊 最后,我们希望您在使用 JS Fbt 库的最新版本中发现更好的价值。 请随时通过评论此帖子或打开 Github 上的新讨论主题分享任何问题/反馈。

干杯!

David (@kayhadrin)