Extracting FBTs
We provide
collectFbt.js
as a utility for collecting strings. It expects a JSON input of:
collectFbt.js
is also exposed as a binary named fbt-collect
from babel-plugin-fbt
enumManifestPath
doesn't need to point to a valid enum manifest, but if you use a shared enum it's required.
The enum-manifest should be a "JSON.parseable"
mapping from all known enums in your app to the key/value pairs they respectively represent:
We've provided manifest.js
as an easy way to generate this manifest from a given source tree.
manifest.js
is also exposed as a binary named fbt-manifest
from babel-plugin-fbt
collectFbt.js
will output a JSON object in the following format:
phrases
here represents all the source information we need to
process and produce an fbt._(...)
callsite's final payload. When
combined with corresponding translations to each hashToLeaf
entry we
can produce the translated payloads fbt._()
expects.
When it comes to moving from source text to translations, what is most
pertinent is the hashToLeaf
payload containing all relevant texts
with their identifying hash. You can provide a custom hash module to
collectFbts
if you so choose. It defaults to md5.
A note on hashes
In the FBT framework, there are 2 main places we uses hashes for
identification: text and fbt callsite. The hashToLeaf
mapping
above represents the hash (using whichever algorithm was chosen in
collectFbt
) of the text and its description. This is used
when building the translated payloads.
The hash of the callsite (defaulting to jenkins
hash) is used to
look up the payload in
FbtTranslations
.
This is basically the hash of the object you see in jsfbt
.
See Translating FBTs for getting your translations in the right format.