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 Distribution

ftl_extract-0.10.0a2.tar.gz (36.7 kB view details)

Uploaded Source

Built Distributions

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

ftl_extract-0.10.0a2-py3-none-win_amd64.whl (1.9 MB view details)

Uploaded Python 3Windows x86-64

ftl_extract-0.10.0a2-py3-none-musllinux_1_2_x86_64.whl (1.9 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

ftl_extract-0.10.0a2-py3-none-musllinux_1_2_aarch64.whl (1.8 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

ftl_extract-0.10.0a2-py3-none-manylinux_2_28_x86_64.whl (1.8 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

ftl_extract-0.10.0a2-py3-none-manylinux_2_28_aarch64.whl (1.7 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

ftl_extract-0.10.0a2-py3-none-macosx_11_0_arm64.whl (1.7 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

File details

Details for the file ftl_extract-0.10.0a2.tar.gz.

File metadata

  • Download URL: ftl_extract-0.10.0a2.tar.gz
  • Upload date:
  • Size: 36.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ftl_extract-0.10.0a2.tar.gz
Algorithm Hash digest
SHA256 e1dae41f767d67c9cfbc57b3acd2ee12ae478242ee429f66f7648bd8e59df02b
MD5 1876043d3db3c8e95e66b86181244cb2
BLAKE2b-256 8dc559367e3fe74ab20b88a4076787afa853a591ebef45b794f79d4e237bfed4

See more details on using hashes here.

Provenance

The following attestation bundles were made for ftl_extract-0.10.0a2.tar.gz:

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.10.0a2-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for ftl_extract-0.10.0a2-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 c0c9bd87a8083040cdd26e7f97308d6a229a720bc243e76bd953d4481a0592ee
MD5 7471b55c03ebb1e153d50bcae0aede21
BLAKE2b-256 44e69694f91814d4c37af7e8432603903cca212908575293e4964e60711815f8

See more details on using hashes here.

Provenance

The following attestation bundles were made for ftl_extract-0.10.0a2-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.10.0a2-py3-none-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for ftl_extract-0.10.0a2-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6be5e530d99cd3c44f93e35e702bc167f38be14c77be20f5d7a86161e71c564c
MD5 9900c09407f66bd632a8fe1c71b04b6c
BLAKE2b-256 52fafbdbaf5a5d5062cbb82316aca61421580e88739486440314cfd8c5c1194e

See more details on using hashes here.

Provenance

The following attestation bundles were made for ftl_extract-0.10.0a2-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.10.0a2-py3-none-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for ftl_extract-0.10.0a2-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 cef939373ba84ddaebd8783c3975cffc21eef4d0e6e2167b44f1b7952ce99d10
MD5 02f0ca3f17253902d7bc06acb8839097
BLAKE2b-256 ca9e435cc70920b6ae52487f370253205624e01d61ce4c5257e0129a5c575ef2

See more details on using hashes here.

Provenance

The following attestation bundles were made for ftl_extract-0.10.0a2-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.10.0a2-py3-none-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ftl_extract-0.10.0a2-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0a3ac1af769a86932e36851a1240752648fd6a6b900f1b736b0ecdd3cc6dca9b
MD5 116e4cc49c38547e563615f0b3e27f54
BLAKE2b-256 73525fe2e03077495d6030a76153be693c023f84b3be1142e83723fe7bb5a64f

See more details on using hashes here.

Provenance

The following attestation bundles were made for ftl_extract-0.10.0a2-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.10.0a2-py3-none-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for ftl_extract-0.10.0a2-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 213ceb364e498849aa13d893e8113dae51dbc59f9211772dbb5ec609a8435a8a
MD5 90706f32220eae8c5a2b4f53335d44b4
BLAKE2b-256 3d0e03c1e8fe9ea17347d9947cd3b2af0b81bf7501f8f851dc5e5b2e710ddbdd

See more details on using hashes here.

Provenance

The following attestation bundles were made for ftl_extract-0.10.0a2-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.10.0a2-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ftl_extract-0.10.0a2-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9988f071692b9b43b6b130a8c7ced4b71f0778a01ba0a194b348bf1fa9ace0e4
MD5 ff0a1dd78dc182ed45e0bef75f4d5f75
BLAKE2b-256 b1291c826ab570675b3e4d696dbff56c05b7fcebb8fb95c7449acb1eac264c4a

See more details on using hashes here.

Provenance

The following attestation bundles were made for ftl_extract-0.10.0a2-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