Skip to main content

Extract fluent keys from python code and organize them in .ftl files

Project description

FTL-Extract

Description

FTL-Extract is a Python package that extracts Fluent keys from .py files and generates .ftl file with extracted keys.


🔥 Try fast-ftl-extract command.

It's Rust version of ftl extract command, that is 10-20 times faster than Python version.


Installation

Use the package manager pip to install FTL-Extract.

$ pip install FTL-Extract

Or use modern tool like UV to install FTL-Extract.

$ uv add --dev FTL-Extract

Usage

First of all, you should create locales directory in your project.

$ mkdir project_path/locales

Then, you can use the following command to extract keys from your code.

$ ftl extract project_path/code_path project_path/locales

By default, FTL-Extract will create a directory named en and put all keys into _default.ftl file.

In some cases, you may want to extract keys to specific .ftl files. So, there is new keyword argument _path in i18n.get and i18n.<key>.

# Before
i18n.get("key-1", arg1="value1", arg2="value2")

# After
i18n.get("key-1", arg1="value1", arg2="value2", _path="dir/ftl_file.ftl")

# Also
i18n.key_1(arg1="value1", arg2="value2", _path="dir/ftl_file.ftl")

# Or
i18n.some.key_1(arg1="value1", arg2="value2", _path="dir/ftl_file.ftl")

💁‍♂️ Explanation of the ftl extract command

$ ftl extract project_path/code_path project_path/locales
  • project_path/code_path - path to the project directory where the code is located.
  • project_path/locales - path to the project directory where the .ftl files will be located.

📚 Additional arguments

  • -l or --language - add a new language to the project.
  • -k or --i18n-keys - add additional i18n keys to the extractor.
  • -K or --i18n-keys-append - add additional i18n keys to the extractor and append them to the default list.
  • -p or --i18n-keys-prefix - add a prefix to the i18n keys. For example, self.i18n.<key>().
  • -e or --exclude-dirs - exclude specific directories from the extraction process.
  • -E or --exclude-dirs-append - add more directories to exclude from the extraction process.
  • -i or --ignore-attributes - ignore specific attributes of the i18n.* like i18n.set_locale.
  • -I or --append-ignore-attributes - add more attributes to ignore to the default list.
  • --ignore-kwargs - ignore specific kwargs of the i18n_keys like when=... in aiogram_dialog.I18nFormat(..., when=...).
  • --comment-junks - comments errored translations in the .ftl file.
  • --default-ftl-file - specify the default .ftl file name.
  • --comment-keys-mode - specify the comment keys mode. It will comment keys that are not used in the code or print warnings about them. Available modes: comment, warn.
  • -v or --verbose - print additional information about the process.
  • --dry-run - run the command without making any changes to the files.

💁‍♂️ Explanation of the ftl stub command

$ ftl stub 'project_path/locales/<locale>' 'project_path/code_path'
  • project_path/locales/<locale> - path to the locales directory where the <locale> directory (e.g. en) contains .ftl files located.
  • project_path/code_path - path to the directory where the stub.pyi will be located.

FAQ

❓ - How to add more languages to the project ?

# Here we add 3 languages: English, Ukrainian and Polish
$ ftl extract project_path/code_path project_path/locales -l en -l uk -l pl

❓ - How to detect another i18n keys like LazyProxy or L ?

# Here we extract ftl keys from i18n-keys like `LF`, `LazyProxy` and `L`
$ ftl extract project_path/code_path project_path/locales -K LF -K LazyProxy -K L

How I use FTL-Extract in most of my projects

$ fast-ftl-extract \
  'app/bot' \
  'app/bot/locales' \
  -l 'en' \
  -l 'uk' \
  -K 'LF' \
  -I 'core' \
  -E './tests/*' \
  --ignore-kwargs 'when' \
  --comment-junks \
  --comment-keys-mode 'comment' \
  --verbose

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Please make sure to update tests as appropriate.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

ftl_extract-0.9.0a11-py3-none-win_amd64.whl (1.7 MB view details)

Uploaded Python 3Windows x86-64

ftl_extract-0.9.0a11-py3-none-musllinux_1_2_x86_64.whl (1.8 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

ftl_extract-0.9.0a11-py3-none-musllinux_1_2_aarch64.whl (1.7 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

ftl_extract-0.9.0a11-py3-none-manylinux_2_28_x86_64.whl (1.8 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

ftl_extract-0.9.0a11-py3-none-manylinux_2_28_aarch64.whl (1.7 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

ftl_extract-0.9.0a11-py3-none-macosx_11_0_arm64.whl (1.6 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

File details

Details for the file ftl_extract-0.9.0a11-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for ftl_extract-0.9.0a11-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 2c372b291dc95849ee7279d41434c3f961227549f916b4fcd448a991516e086e
MD5 0faebf457b0b2fc57ce2cf8f5dc152ab
BLAKE2b-256 cad6f34abbf5aadaa42ad92f5dc2bd6b541580c1c561f2867c8e0b71dd2ba9d7

See more details on using hashes here.

Provenance

The following attestation bundles were made for ftl_extract-0.9.0a11-py3-none-win_amd64.whl:

Publisher: pypi-release.yml on andrew000/FTL-Extract

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ftl_extract-0.9.0a11-py3-none-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for ftl_extract-0.9.0a11-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6afa47f33d31e69d7c1d0c606517ed1b0cb3a91ee95a1f690b57a5061b7ec181
MD5 94f4e441b8e9695e2465a5c8e8fdbc65
BLAKE2b-256 f0cb745e49d7ee2d0c28b235ef6384db9f0563f3f2f883948c20af08117cffcb

See more details on using hashes here.

Provenance

The following attestation bundles were made for ftl_extract-0.9.0a11-py3-none-musllinux_1_2_x86_64.whl:

Publisher: pypi-release.yml on andrew000/FTL-Extract

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ftl_extract-0.9.0a11-py3-none-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for ftl_extract-0.9.0a11-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 5208dc2b6013b7d5dfea7c5737da556eb4613968c6640373b4d625e026d534ee
MD5 9f5f6b5dac29cc179b272fb3b53a40b8
BLAKE2b-256 3293ef6820c4d0251ef7f7a2c782dca0adc6bef434adc25a96be0041874e2678

See more details on using hashes here.

Provenance

The following attestation bundles were made for ftl_extract-0.9.0a11-py3-none-musllinux_1_2_aarch64.whl:

Publisher: pypi-release.yml on andrew000/FTL-Extract

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ftl_extract-0.9.0a11-py3-none-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ftl_extract-0.9.0a11-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ba5c2cebd7876de31566ea178a01edc607fd8fa5373635b38bec731d9d120b37
MD5 0f9790232670d1e145f77dd0ded7399f
BLAKE2b-256 82238ffda89aebbe52824de938d9e0fd0320f88c5a106a2013c97525eba1d715

See more details on using hashes here.

Provenance

The following attestation bundles were made for ftl_extract-0.9.0a11-py3-none-manylinux_2_28_x86_64.whl:

Publisher: pypi-release.yml on andrew000/FTL-Extract

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ftl_extract-0.9.0a11-py3-none-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for ftl_extract-0.9.0a11-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3581dae5d1c0d0c848bb8f167a511615339561227b496efe2f58b6042969220f
MD5 49ad4bb40e81e0cca9d670f4f743cc8a
BLAKE2b-256 484faa74e24a5b7ba81122b915c64bea99ff20cd5703f07158aa2b3bceff9513

See more details on using hashes here.

Provenance

The following attestation bundles were made for ftl_extract-0.9.0a11-py3-none-manylinux_2_28_aarch64.whl:

Publisher: pypi-release.yml on andrew000/FTL-Extract

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ftl_extract-0.9.0a11-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ftl_extract-0.9.0a11-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cb3e7694ffd698741cc9efd263c792bbb204ce41b9a82483e87f95914290db22
MD5 08629dd7cd49bf5d58dccc23a00d3610
BLAKE2b-256 a1569c16658214abe987b1de89815ae919c4abbdbdbed241f2c9c4f891393eb4

See more details on using hashes here.

Provenance

The following attestation bundles were made for ftl_extract-0.9.0a11-py3-none-macosx_11_0_arm64.whl:

Publisher: pypi-release.yml on andrew000/FTL-Extract

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page